基于STM8及UHFRF收发器SX1231的无线射频收发系统

发布者:WhisperingGlow最新更新时间:2015-07-03 来源: eepw关键字:STM8  UHFRF收发器  SX1231  无线射频 手机看文章 扫描二维码
随时随地手机看文章
(1)发射功率限值:5mW(e.r.p);

(2)发射信号的占空比限值:1%;

(3)载波频率容限:100×10-6;

并把该类设备归类于“各类民用设备的无线电控制装置中。

从上面的规定中可以看到,该频段可用带宽为600kHz,但并没有明确在该频道使用的带宽,数据速率以及调制方式方面要求,这就给予了应用很大的空间。本文主要是基于868MHz频段的要求,设计了比较简单通用的无线收发系统,该系统可适用于该频段的不同的无线传输应用。

SX1231介绍及性能描述

SX1231芯片是Semtech公司推出的一款高集成度、低功耗、多频段的UHF RF收发器。其工作电压为1.8V~3.6V,24引脚QFN封装,工作频率包括3155MHz、4335MHz、 8685MHz和915MHz无许可证的ISM频段;内部集成SIGMA-DELTA小数分频锁相环、功率放大器、唤醒定时器、数字调制解调器、66字节的发送和接收数据FIFO、数据包处理、数据加密功能AES,以及6个可配置的DIO等,所有主要的RF通信参数是可编程的,大多数可动态设定。采用16节的FIR通路滤波器,因而有好的选择性;发射功率可编程输出,从-18dBm到+17dBm;有多种调制解调方式:FSK、GFSK、MSK、GMSK和OOK等;SX1231在使用时所需的外部元件很少,1个32MHz的晶振、几个电容和电感就可组成一个高可靠性的收发系统,设计简单且成本低。SX1231在1.2kbps时的灵敏度高达-120dBm,主要用在无线抄表(AMR)、无线传感器网络、家庭和建筑物自动化、无线告警和安全系统、工业监视和控制等领域。

无线射频收发系统设计

系统总体方案

无线射频收发系统的结构框图如图1所示,由STM8L151K2单片机控制SX1231实现无线数据的收发。发送模块中的STM8L151K2将数据传送给SX1231,然后SX1231对数据进行包格式处理,包括增加前导码、同步字、CRC校验码,如果需要也可以对数据进行加密处理。最后数据包经天线发送给接收模块。接收模块对接收到的射频信号放大、解调、解包之后,再将数据送给主控制器STM8L151K2进行相应的处理,如送显示屏或PC数据处理中心等。该系统包括按键和液晶显示屏等人机交互界面,以及RS232接口,这实现了与PC的通信功能。

系统方框图

图1 系统方框图

系统硬件设计

主控芯片选用ST公司推出的单片机STM8L151K2。STM8L151K2有1K bytes的RAM和8K bytes的Flash以及256bytes的EEPROM,片上集成了包括串口、SPI、I2C、ADC、触摸屏控制功能等外围模块接口,完全满足本系统对微控制器的要求;有多种电源管理模式(如等待模式、低功耗运行模式、低功耗等待模式等)。

STM8L151K2可以通过SPI接口对SX1231的内部寄存器进行读写操作,灵活配置各项参数。通过4线SPI接口完成对SX1231的初始化配置、读写数据、访问FIFO等操作,使SX1231正常工作在发射、接收模式,完成数据在空中的传播。

SX1231是15脚~18脚的标准的SPI接口,DIO0~DIO5可以通过内部寄存器来配置成不同的中断信号。映射关系如表1所示,这样可以很方便地获取SX1231的工作状态。如果需要了解FIFO满、FIFO不是完全空,工作模式Ready,有效的数据包发送或接收、电池电压低、RSSI、PLL锁定等状态,都可以配置寄存器来把这些信号映射到DIO PIN,然后单片机STM8L151K2通过检测这些DIO PIN的电平来获得或者主动通知MCU某个状态发生。可用19脚(RXTX)控制射频收发开关以进行发射通路和接收通路的切换,高电平时为发射状态。图2中采用UPG2214TB射频开关,V1和V2分别为开关的控制脚。由于SX1231只有一个控制脚,因此增加一个三极管反相器就完成了开关的控制。21脚(RFIO)是发射和接收共用的PIN,但是该PIN的最高输出功率为13dBm。如果需要输出更高的功率(17dBm或20dBm),就必须把发射接至23脚(PABOOST),这时21脚(RFIO)只当作接收PIN。

硬件设计原理图

图2 硬件设计原理图

SX1231接收端的输入阻抗可设置成50Ω和200Ω,通常设成200Ω,此时同一匹配值在全频段仍可获得很好的灵敏度。[page]

SX123节省功耗方面有一些很重要的特性:

(1)工作电压范围宽:从1.8V~3.6V都可以正常工作,且任何特性都保持不变。特别是对于发射,工作电压低至1.8V时仍然保持相同的输出功率,即电压从1.8V~3.6V,输出功率都能到达17dBm或20dBm,不随电压而变。但是其他类似的芯片,输出功率则随着电压的下降而降低。这样一种特性,使得该系统能够使电池的利用最大化,延长电池的使用寿命,这对低功耗的应用来说具有非常重大的意义。

(2)可以在sleep/standby模式下读写寄存器:该特性节约了写FIFO时的功耗。在sleep模式下的电流为0.1μA,而在接收模式下的电流为16mA,节约了160000倍的功耗。

DIO PIN 与信号的映射关系表

表1 DIO PIN 与信号的映射关系表

系统软件设计

系统中各主要功能模块均编成独立的函数由主程序调用。功能模块包括:初始化程序(包括初始化STM8L151K2、SX1231)、无线发送程序、无线接收程序等。无线发送程序负责写入数据载荷到SX1231,并根据通信协议来配置芯片的前导码、同步字及CRC校验码,最后SX1231把其组装成数据包将其发送出去;无线接收程序负责接收并处理数据。首先,SX1231接收到一个完整的数据包,之后逐步的把前导码、同步字以及CRC码去除,最后MCU从其FIFO中取出有效数据。

无线收发模块之间的通信是以数据包的形式发送的,本系统定义的数据包格式如表2所示。

本文系统定义的数据包格式

表2 本文系统定义的数据包格式

其中,Preamble(前导码)是一连串的10101010(0XAA)或01010101(0X55),其数量为0~655635字节,具体几个字节可以根据应用的需要来设定。前导码主要用来进行帧同步,接收机主要依靠前导码来进行有用信号识别,完成频率控制,以及自动增益控制、信号强度判断等动作以确保用最佳的状态接收正确的数据。SyncWord(同步字)在前导码之后,通过设定好的同步字来作为同步模式的标志码,也可以作为一个网络的ID,相同网络的设备用相同的同步码。而接下来的地址码(Address)可以作为网络内每个设备的ID,如果数据包中的地址于本设备的地址相同,则接收数据,否则不予处理。有效载荷(Message)是真正需要传输的数据。最后是CRC校验码,由芯片自动完成。

初始化程序

初始化程序包括STM8L151K2的初始化以及SX1231的收发频率、工作模式、调制方式、数据速率以及数据包处理等寄存器的初始化配置。

系统上电后,STM8L151K2处于默认状态,根据系统功能需求重新进行初始化配置。SX1231也处于默认状态,需要进行配置才能工作。SX1231的初始化是一个重要的部分,正确的配置对系统最终的通信性能有很大的影响。

数据发送程序

无线发送程序流程如图3所示。完成STM8L151K2、SX1231的初始化后,配置寄存器写入相应的初始化RF控制字;然后通过SPI连续写寄存器向TX FIFO内写入需要发送的数据;再切换到发射模式。当数据发送完后,PacketSent寄存器置1,同时映射的DIO PIN会变成高电平通知MCU数据包发送完成。然后写数据到FIFO,发送,如此循环。直到所有数据发送完成,进入Sleep模式。

数据收发流程图

图3 数据收发流程图

数据接收程序

程序完成STM8L151K2、SX1231的初始化后,配置寄存器写入相应的初始化RF控制字,把SX1231配置为接收状态。检测PayloadReady为高电平时,表明已经收到数据,然后MCU从FIFO中读取数据,并进行处理。如此循环直至完成接收。

系统测试结果

系统测试条件及设置

该部分为本系统测试时的设置,根据不同的应用需求,部分设置可用作相应的变动。

电源电压:3.3V

频率:868.3MHz

数据速率:4.8kbps

频偏:5.0kHz

接收机带宽:10kHz

数据类型:PN15

功率设定:4dBm

测试结果

发射功率

从图4中可以看到,发射功率为6.86dBm。低于5mW(7dBm)的规范要求。

发射功率

图4 发射功率

载波频率容限:100x10-6

从图5中可以看出,设置为868.3MHz输出,实际测量的频率为868.2960MHz,则频率偏差为((868.30-868.296)MHz/868MHz)=4.6×10-6,小于规定的载波频率容限100×10-6。[page]

载波频率容限

图5 载波频率容限

发射信号的占空比限值:1%

发射信号的占空比通常指在一定时间内,发射信号的时间与未发射信号的时间比值。这主要取决于应用的要求,但是对类似短距离无线通信,发射器的发射的时间是非常的小,适合于各种控制类应用。如抄表的应用中,每个月抄表一次,而且每次发射的时间都小于1秒,这个占空比远远小于1%。

信道间隔和占用带宽

图6 信道间隔和占用带宽

邻信道功率

图7 邻信道功率

信道间隔和占用带宽

对于25kHz的信道间隔,允许的占用带宽为8.5kHz~16kHz之间。从图6的结果中可以看到,占有99%的能量的占用带宽为14.7247kHz,小于16kHz。

邻信道功率

在载波25kHz频率偏移处的功率须小于载波功率40dB。

接收灵敏度

接收灵敏度是-113.4dBm@0.1%。整个系统的接收链路预算为120.2dB。通信距离可以达到600m左右。

从测试结果可看出该系统具有很好的性能,精准的频率控制,高的接收灵敏度,可以满足于宽带的应用要求,而且结果也表明完全适合于窄带应用。完全满足于中国年微功率(短距离)无线电应用对于868MHz~868.6MHz频段的规范要求。在本系统的基础上,稍作改变就可适用于不同的应用环境。

关键字:STM8  UHFRF收发器  SX1231  无线射频 引用地址:基于STM8及UHFRF收发器SX1231的无线射频收发系统

上一篇:基于MSP430的高速线阵CCD采集系统设计
下一篇:MSP430G2452按键控制P1.0口LED灯亮灭

推荐阅读最新更新时间:2024-03-16 14:23

STM8仿真调试快速入门
● ST Visual Develop的安装   到 ST 官方网站: http://www.st.com/stonline/products/support/micro/files/sttoolset.exe 下载安装。 ● ST Visual Develop之设置软件与建立、打开相关调试文件   ----使用Cosmic C语言,软件仿真   要用STVD的IDE下使用COSMIC C语言开发的话,首先要在STVD中对COSMIC STM8编译器进行设置。 如下图所示,运行ST Visual Develop 集成开发环境,选择菜单 Tools - Options ,在出现的对话框中选择 Toolset 选项卡。在 Tools
[单片机]
<font color='red'>STM8</font>仿真调试快速入门
STM8的GPIO驱动
芯片的外设一般按照这么几个流程来进行,GPIO,外部中断,定时器,串口,ADC,IIC,SPI,下面我就按照各个模式来写 首先是GPIO,STM8的GPIO拥有复用功能,这句话告诉我们必然需要配置IO的复用功能才能使用,看这张表 DDR决定输入输出方向,CR1 CR2决定输入输出模式,上拉,下拉,推挽,开漏等 主要依靠这几个寄存器 还有一个控制寄存器2,懒得传了 按照这张表,输出写输出寄存器,输入读输入寄存器,就能完成GPIO的操作了 以下是操作代码 #include key.h u8 keyValue = 0; #define KEY1_IN (GPIOD- IDR&0X
[单片机]
<font color='red'>STM8</font>的GPIO驱动
stm8 uart2 串口接收中断协议解码+定时器中断
协议解码的时候,如果上位机发送数据不完整或者有错误,通过定时器中断将之接收的不完整数据清楚。定时的时间长短可有定时器觉得,ms为单位。 //初始化位毫秒单位 void Timer_Init() { TIM1_PSCRH = (unsigned char) ( ( (F_CPU / 1000) - 1) 8); /* 16M系统时钟经预分频f=fck/(PSCR+1) */ TIM1_PSCRL = (unsigned char) ( (F_CPU / 1000) - 1); /* PSCR=0x3E7F,f=16M/(0x3E7F+1)=1000Hz,每个计数周期1ms */ TIM1_ARRH = 0;
[单片机]
stm8位带操作
stm8和stm32这里不同,51学来用惯了led=!led;到了stm32有原子哥得位带操作加宏也过得去, 但是到了stm8这玩意儿不支持位带操作,于是乎,百度一番。 大致有两个方法: 一.stvd环境 volatile _Bool PA_ODR_0 @PA_ODR:0; #define LED PA_ODR_0 LED = 1; LED = 0; 这些语句能通过编译少不了stvd环境得原因,我用的iar就过不了编译。 http://bbs.elecfans.com/jishu_453404_1_1.html 二.iar环境 个人觉得iar得库更偏向于使用寄存器,也懒得去啃一
[单片机]
stm8用什么软件编程?stm8开发环境搭建手把手教程!
STM8单片机开发环境的由3部分组成:电脑端开发环境、目标板、烧录仿真器。 我们要具备以上3个条件才能开始STM8单片机的开发,下面我们为大家详细讲解下STM8的开发环境搭建。 STM8目标板: STM8 单片机系统硬件,我们最终要编程的目标。 烧录仿真器:连接电脑和目标的编译连接器,主要作用:仿真、程序烧录、软件调试。 电脑端开发环境: 单片机程序的开发是在电脑上完成的,我们需要在电脑端搭建单片机对应的开发环境。 接下来,我们就详细的给大家介绍一下STM8单片机开发环境搭建。 1.STM8目标板: 目标单片机电路板就是要开发的STM8单片机系统硬件了,如下图: 这个是我们无际单片机编程带学员研发的l
[单片机]
<font color='red'>stm8</font>用什么软件编程?<font color='red'>stm8</font>开发环境搭建手把手教程!
STM8开发记录二:UART RX空闲中断和DMA操作
一、用STM8L的时候,没能在同时读取Rx中断和IDLE中断标志,最后用DMA取数据,见 (三、DMA实现数据拷贝): 1.1 uart配置 void UsartConfig(void) { // USART_DeInit(USART1); /* Enable USART clock */ CLK_PeripheralClockConfig(CLK_Peripheral_USART1, ENABLE); /* USART pin remap */ SYSCFG_REMAPPinConfig(REMAP_Pin_USART1TxRxPortA, ENABLE); /* Configure USART
[单片机]
IAR 1.3 for STM8 ST-Link无法调试 无法仿真
IAR 1.3 for STM8 ST-Link无法调试 the debugging session could not be started CPU型号是:STM8F103F3 首先要用ST Visual Programmer 对stm8下载验证硬件的正确性。 再打开IAR的工程: 发现仿真时无法连接 把CPU型号改了一上,居然可以了,按网上的说法有用F103K3U的,我用时也不行,最终用的型号是:003F3
[单片机]
IAR 1.3 for <font color='red'>STM8</font> ST-Link无法调试 无法仿真
STM8单片机关于rtc部分代码分享
STM8 rtc 时钟可以使用内部低频时钟源,或者外部低速 32768Hz 时钟源,关于 rtc 部分代码如下: #include #include voidinit_rtc(void) { RTC_InitTypeDefRTC_InitStr; RTC_TimeTypeDefRTC_TImeStr; RTC_DateTypeDefRTC_DateStr; #if0 /*LSI*/ CLK_RTCClockConfig(CLK_RTCCLKSource_LSI,CLK_RTCCLKDiv_1); CLK_PeripheralClockConfig(CLK_Peripheral_RTC,ENABLE); RTC_I
[单片机]
<font color='red'>STM8</font>单片机关于rtc部分代码分享
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

更多精选电路图
换一换 更多 相关热搜器件
更多每日新闻
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved