单片机
返回首页

STM32开发笔记88: SX1268驱动程序设计(天线控制)

2020-03-06 来源:eefocus

单片机型号:STM32L053R8T6


本系列开发日志,将详述SX1268驱动程序的整个设计过程,本篇介绍天线控制的相关驱动程序。


上篇日志,提到在SX126xCheckDeviceReady函数中,如果芯片处于启动、硬复位、SLEEP模式、RX_DC模式,转换到STDBY模式时,需唤醒芯片,并将天线打开,程序如下:


void CSX1268::SX126xCheckDeviceReady(void)

{

if((this->OperatingMode == MODE_SLEEP) || (this->OperatingMode == MODE_RX_DC))

{

SX126xWakeup();

SX126xAntSwOn();

}

SX126xWaitOnBusy();

}

如何实现天线的打开呢?这将是本篇日志需要介绍的内容。


一、官方数据手册有关天线开关设置的内容

上图是SX1268官方数据手册提供的参考电路图,其内部采用DC-DC供电方式,采用32MHz无源晶振,由于其为半双工工作方式,所以采用PE4259进行射频电路的切换,也就是将外部射频天线电路切换给芯片的收或者发。


PE4259的逻辑真值表,如下图,2种工作方式。第1种是单引脚控制,其实现方法是第6脚接VDD,第4脚给高电平,则将RFC切换给RF1;第4脚给低电平,则将RFC切换给RF2。第2种工作方式是第6脚给低电平,第4脚给高电平,则将RFC切换给RF1;第6脚给高电平,第4脚给低电平,则将RFC切换给RF2。

从以上分析,可以判断模块的RXEN接PE4259的6脚,TXEN接PE4259的4脚。当RXEN接高电平,TXEN接低电平,则RFC连接到RF2,所以为接收使能;RXEN接接低电平,TXEN接高电平,则RFC连接到RF1,所以发射使能。


按照上述分析,也可以这样给电平,就是RXEN始终给高电平,由TXEN控制芯片的收发转换,这样就可以将TXEN连接到DIO2进行自动收发控制。


还有另外1种状态,就是RXEN悬空,此时PE4259不工作,达到省电的目的,这也就是PE4259第6脚网络标号为ANT_SW的原因,其意义为天线开关。当ATN_SW给高电平时,打开天线,通过4脚控制收发。当ANT_SW悬空时,天线关闭。


二、E22-400M22S有关天线设置的内容

E22-400M22S使用2个引脚,控制天线的收发转换。


RXEN:射频开关接收控制脚,连接外部单片机IO ,高电平有效

TXEN:射频开关发射控制脚,连接外部单片机IO 或 DIO2 ,高电平有效

按照数据手册的内容分析,我们可以确认,RXEN接PE4259的第6脚,TXEN接PE4259的第4脚。


三、两种程序控制方式

单片机可以采取2种方式,对天线进行控制。


1、单片机引脚接RXEN,将DIO2与TXEN相连接


这种方式,将RXEN当作天线的开关,使用天线时给RXEN高电平,收发控制需要对DIO2进行设置,由SX1268完成。


2、单片机引脚分别接RXEN和TXEN


切换到接收电路:RXEN给高电平,TXEN给低电平


切换到发射电路:RXEN给低电平,TXEN给高电平


切断天线:采用省电方法,RXEN和TXEN均切换为Analog模式。


四、单片机引脚分别接RXEN和TXEN的程序实现

1、在config文件中,进行引脚设置


#define SX1268_RXEN_PORT PORTB

#define SX1268_RXEN_PIN PIN2

#define SX1268_TXEN_PORT PORTB

#define SX1268_TXEN_PIN PIN1

2、定义相应的引脚类


class CSX1268_RXEN:public CIO_Analog

{

public:

CSX1268_RXEN(void);

};

 

class CSX1268_TXEN:public CIO_Analog

{

public:

CSX1268_TXEN(void);

};

3、定义引脚的构造函数


CSX1268_RXEN::CSX1268_RXEN(void):CIO_Analog(SX1268_RXEN_PORT, SX1268_RXEN_PIN) {}

CSX1268_TXEN::CSX1268_TXEN(void):CIO_Analog(SX1268_TXEN_PORT, SX1268_TXEN_PIN) {}

4、逻辑功能的实现


void CSX1268::SX126xEnableAntRx(void)

{

this->Rxen.SetOutputDirection();

this->Txen.SetOutputDirection();

this->Rxen.Set_1();

this->Txen.Set_0();

}

 

void CSX1268::SX126xEnableAntTx(void)

{

this->Rxen.SetOutputDirection();

this->Txen.SetOutputDirection();

this->Rxen.Set_0();

this->Txen.Set_1();

}

 

void CSX1268::SX126xDisableAnt(void)

{

this->Rxen.SetAnalogDiretion();

this->Txen.SetAnalogDiretion();

}

五、修正的SX126xCheckDeviceReady函数

按照单片机引脚分别接RXEN和TXEN,修正后的SX126xCheckDeviceReady函数如下:


void CSX1268::SX126xCheckDeviceReady(void)

{

if((this->OperatingMode == MODE_SLEEP) || (this->OperatingMode == MODE_RX_DC))

{

SX126xWakeup();

SX126xEnableAntRx();

}

SX126xWaitOnBusy();

}

进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • CCD图像传感器在微光电视系统中的应用

  • 非常简单的150W功放电路图

  • 一个简单的警笛电路图

  • 优化电路板布局的简单方法

  • 使用NE555和磁簧开关的橱柜照明电路

  • 一种构建12V和230V双直流电源的简单方法

    相关电子头条文章