单片机型号: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();
}
上一篇:STM32开发笔记89: SX1268驱动程序设计(电源控制)
下一篇:STM32开发笔记87: SX1268驱动程序设计(设置为STDBY模式)
推荐阅读最新更新时间:2024-11-17 17:10
设计资源 培训 开发板 精华推荐
- 使用 Analog Devices 的 LT3066EMSE-3.3 的参考设计
- MIC3205 的典型应用:具有固定频率滞后控制的高亮度 LED 驱动器控制器
- 可调输出电压 TS1084 5A 低压降正压稳压器典型应用
- STM32F103RCT6
- LTC1655LIS8、16 位轨至轨微功率 DAC 的典型应用,用于隔离式 4mA 至 20mA 过程控制器
- 自平衡的莱洛三角形(基于Simple FOC电机算法)
- NCV33074DR2G桥式电流放大器的典型应用
- 使用 ROHM Semiconductor 的 BD49K47G-TL 的参考设计
- OP284ESZ-REEL 单电源、3V 低噪声仪表放大器的典型应用
- Downloader