当前位置:文档之家› 无线信号传输系统设计

无线信号传输系统设计

课题5:无线信号传输系统设计一、任务设计制作一套混合信号无线传输装置。

该装置由发射机与接收机组成,其方框图参见图1。

接收机可以收到发射机送来的信号,并具有显示功能。

图1 无线信号传输系统方框图装置中调制方式自由选定。

可使用专用数据收发芯片,但不得使用现成的收发模块。

二、要求1.基本要求(1)点对点(发射机与接收机)无线传输方式。

(2)载波频率范围在40—50MHz 之间。

(3)传输距离达5米。

(4)发射功率小于20mW 。

(5)传输模拟信号:单一正弦电压信号1—4kHz 送达接收端,并能监听到相应声调。

(6)传输数字信号:采集30—60℃水温数据,误差±2℃,送达接收端,并显示水温数据。

2.发挥部分(1)能识别所接收的正弦信号频率并正确显示频率值。

(2)输入连续可调电压Vpp=1—3V 的正弦信号,接收端的信号波形不失真且幅度基本恒定。

(3)接收机与发射机距离15米以上。

(4)改变输入信号频率1—4kHz时,接收到的正弦信号波形无明显失真。

(5)其他。

三、说明1、允许手动切换模拟信号输入或数字信号输入模式。

2、接收及发射电路不能采用现成的专用无线模块。

3、设计报告正文中应包括系统总体框图、核心电路原理图、主要流程图、主要的测试结果。

完整的电路原理图、重要的源程序用附件给出。

基于PTR7660的无线信号传输系统设计[摘要] 采用ATmega16单片机作为主控制器,测量部分由数字传感器DS18B20实现温度采集,数据处理后通过PTR7660无线传输到到另一个接受模块上通过LCD1602进行显示。

[关键词] PTR7660 DS18B20 无线温度采集一:系统设计1.PTR7660简介PTR7660是以nRF905为核心的一款无线收发芯片,工作电压为1.9~3.6V,工作在433/868/915MHz的ISM(工业、科学、医疗)频段,由一个完全集成的频率调制器、一个带解调器的接收器、一个功率放大器、一个晶体振荡器和一个调节器组成。

最大传输速率可达到100Kbit/s,可以很容易通过SPI接口进行编程配置。

PTR7660采用Nordic公司的ShockBurst技术收发数据。

ShockBurst将与RF 协议有关的高速信号处理放到芯片内,使收发芯片能够提供高速的数据传输,收发芯片由微控制器通过一个SPI接口控制,通信速率由微控制器通过程序设定。

在发送模式中,PTR7660自动产生前导码和CRC校验码,数据准备就绪DR信号通知AT89LV52数据传输已经完成。

在接收模式中,地址匹配AM和数据准备就绪DR信号通知AT89LV52一个有效的地址和数据包已经各自接收完成。

由PWR、TRX_CE、TXEN三个引脚完成PTR7660四种工作模式的设定:掉电各SPI编程模式、待机和SPI编程模式、发射模式、接收模式,如表所示。

信号调理电路2.PTR7660硬件电路PTR7660内置有完整的通信协议和CRC,单片机通过SPI接口便可完成无线数据收发,但PTR7660工作电压为3V,如果PTR7660与5 V单片机连接,则必须进行电平转换。

这里选用低电压通用单片机AT89LV52,其供电和逻辑电平均为3 V,因此不存在电平转换的问题。

ATmega16是ATMEL公司推出的低电压,高性能CMOS 8位单片机,工作电压范围可达2.7V-6.0V,芯片内置通用8位中央处理器和Flash存储单元,可用于低功耗场合。

PTR7660与AT89LV52的硬件连接如图1所示。

3.温度检测数字温度传感器大大简化了温度检测装置的设计方案,工作稳定性高,并且能够直接将温度转换为数字值,便于单片机进行综理。

本系统采用DS18B20单总线数字传感器实现温度检测。

DS18B20是美国DALLAS公司生产的单总线温度传感器,它能够直接读出被测温度的数字量,其测温范围为-55~+125℃,在-10~+85℃时精度为±0.5℃。

DS18B20采用单总线技术(1-WIRES),即单片机只用一根输入输出接口线,就可以实现单片机与传感器的数据传送,为此DS18B20数据线与单片机P2.4相连。

DS18B20读写数据仅需要一根口线,温度变换功率来源于数据总线,总线本身也可以向所挂接的DS18B20供电,而无需额外电源。

为增强系统稳定性,在此选用外加电源方式,外加电源正负极分别接DS18B20引脚VDD及GND,如图2所示。

二、系统软件设计1.无线通信软件设计由于RF协议相关的高速信号处理部分已经嵌入在模块内部,PTR7660可与各种低成本单片机匹配使用,。

(1)配置编程。

上电以后AT89LV52首先配置PTR7660模块。

先将PWR_UP、TXEN、TRX_CE设为配置模式,AT89LV52通过SPI将配置数据移入PTR7660模块;在掉电和待机模式工作后,配置内容仍然有效。

(2)发射模式。

当AT89LV52有数据需要发往规定节点时,首先设置TRX_CE、TXEN来启动传输,无线系统自动上电,将数据加前导码和CRC校验码并打包发送,如果AUTO_RETRAN被设置为高,PTR7660将连续地发送数据包,直到TRX_CE被置为低。

当TRX_CE被设置为低时,PTR7660结束数据传输并将自己设置成待机模式。

(3)接收模式。

设置TRX_CE为1,TXEN为0选择接收模式,PTR7660开始监测信息,当PTR7660发现和接收频率相同的载波时,载波检测(CD)被置高,当PTR7660接收到有效的地址时,地址匹配(AM)被置高。

PTR7660接收到有效的数据校验正确时,PTR7660去掉前导码,数据准备就绪(DR)被置高。

AT89LV52通过SPI接口读出有效数据,当所有的有效数据被读出后,PTR7660将AM和DR置低。

2.温度测量软件设计温度测量部分主要是利用程序控制DS18B20完成温度读取,DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性,AT89LV52控制DS18B20必须经过三个步骤:(1)每一次读写之前都要对DS18B20进行复位。

(2)复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。

(3)复位要求ATmga将数据线下拉500微秒,然后释放,DS18B20收到信号后等待16~60微秒左右,后发出60~240微秒的存在低脉冲,AT89LV52收到此信号表示复位成功。

设置分辨率为12位,DS1820测量得到的温度数据存储在的两个字节的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,数值需要取反加1再乘于0.0625即可得到实际温度。

三:电路原理图3.1发射电路原理图3.2接受机电路图四:软件流程图及程序设计4.1发射机基于以上所述,整个无线温度采集系统都在单片机的控制下运行,这就需要编制程序来实现各部分的功能和工作过程。

发射部分的工作过程为:标准热电偶在单片机的控制下采集温度数据信息,经热电偶数字转换器处理后发送给单片机进行A/D转换,同时,被测热电偶的输出数据也经放大器输入到单片机中,单片机对这些数据进行分组打包,发送给无线收发芯片PTR7660,通过PTR7660中的内置环形天线发送到上位机模块中。

下位机软件实现流程图如图3-13所示。

4.2接受机接收部分的工作过程为:在单片机的控制下接收来发射部分的数据信号,经PTR7660解调后经单片机处理在LCD1602上进行显示,或者可以经过MAX232进行电平转换,然后送入PC机串口。

上位机的软件实现流程图如图程序:1发射机程序:PTR7660.H#include <avr/io.h>#include<avr/interrupt.h>#include <util/delay.h>#include "nRF2401.h"const uint8_t InitData[15] = // nRF2401 控制字15 Byte{NRF2401_CH2_WID TH,(NRF2401_REC_ADDR_WIDTH|NRF2401_CRC_LENGTH_16|NRF2401_CRC_ENABLE),//b23~b18:接收地址宽度(32位)// b17~b16:CRC模式选择(11-16bit)(NRF2401_RX_CH1|NRF2401_SHOCKBURST_MODE|NRF2401_RF_RA TE_250|NRF2401_CRYSTAL_16M|NRF2401_RF_POWER_0dB),(NRF2401_FRE_CH_ SEL|NRF2401_TRANSMIT_MODE)// b7~b1: 收发频率(0110010,2.45GHz)// b0: 收发控制(1-接收)};voidnRF2401_Initial(void){#if NRF2401_GPIO// 初始化端口P_NRF2401_DDR |= _BV(CS) | _BV(DA TA) | _BV(PWR) | _BV(CLK1) | _BV(CE);P_NRF2401_DDR&= ~_BV(DR1);P_NRF2401_PORT&= ~(_BV(CS) | _BV(DA TA) | _BV(CLK1) | _BV(CE));#endif#if NRF2401_SPIP_NRF2401_DDR |= _BV(CS) | _BV(MOSI) | _BV(PWR) | _BV(CLK1) | _BV(CE);P_NRF2401_DDR&= ~_BV(MISO);P_NRF2401_PORT&= ~(_BV(CS) | _BV(DA TA) | _BV(CLK1) | _BV(CE));// SPI允许、数据传送为MSB、主机模式、极性与相位00、速率focs/2SPCR = _BV(SPE) |_BV(MSTR) | _BV(SPR0) |_BV(SPR1);// SPSR |= _BV(SPI2X);#endif#if NRF2401_INTDDRB &=~_BV(DR1);// 设置PB2口为输入口MCUCSR |=_BV(ISC2);// 上升沿触发GIFR |= _BV(INTF2);// 清中断GICR |= _BV(INT2);// 允许外部中断INT2sei();#endifnRF2401_ON();// nRF2401上电_delay_ms(1);nRF2401_WriteCommand();// 向nRF2401写命令字_delay_ms(1);}void nRF2401_ON(void){P_NRF2401_PORT |=_BV(PWR);}{P_NRF2401_PORT&= ~_BV(PWR);uint8_t i;P_NRF2401_PORT&= ~_BV(CE);P_NRF2401_PORT |=_BV(CS);_delay_us(50);for(i=0;i<15;i++){nRF2401_WriteByte(InitData[i]);}P_NRF2401_PORT&= ~_BV(CS);P_NRF2401_PORT |=_BV(CE);P_NRF2401_PORT&= ~_BV(CS);P_NRF2401_PORT |=_BV(CE);voidnRF2401_WriteByte(uint8_tuiData){#if NRF2401_GPIOuint8_t i;for(i=0;i<8;i++){P_NRF2401_PORT &=~_BV(CLK1);if(uiData &0x80){P_NRF2401_PORT |=_BV(DA TA);}else{P_NRF2401_PORT &= ~_BV(DA TA);}_delay_us(30);P_NRF2401_PORT |= _BV(CLK1);_delay_us(30);P_NRF2401_PORT &= ~_BV(CLK1);uiData = uiData << 1;}#elseSPDR = uiData;while( !(SPSR & (1<<SPIF)));#endif}a){uint8_t i;P_NRF2401_PORT |= _BV(CE);_delay_us(50);for(i=0;i<AddrByteCn t;i++){nRF2401_WriteByte(AddrB uffer[i]);}nRF2401_WriteByte( TxData);P_NRF2401_PORT &= ~_BV(CE);P_NRF2401_PORT &= ~_BV(DA TA);_delay_us(2000);}uint8_t i;for(i=0;i<16;i++){P_NRF2401_PO&=~_BV(CLK1);if(uiData &0x8000){P_NRF2401_PORT |=_BV(DA TA);}else{P_NRF2401_PORT &=~_BV(DA TA);}_delay_us(30);P_NRF2401_PORT |=_BV(CLK1);_delay_us(30);P_NRF2401_PORT &=~_BV(CLK1);uiData = uiData<< 1;}}//===============================uint8_t i;P_NRF2401_PORT |=_BV(CE);_delay_us(10);for(i=0;i<AddrByteCnt;i++){nRF2401_WriteByte(AddrBuffer[i]);}nRF2401_WriteWord(TxData);P_NRF2401_PORT&= ~_BV(CE);P_NRF2401_PORT&= ~_BV(DA TA);_delay_us(2000);{nRF2401_WriteByte(TxData[i]);}P_NRF2401_PORT&= ~_BV(CE);P_NRF2401_PORT&= ~_BV(DA TA);_delay_us(200);}voidnRF2401_SendBuffer_Word(uint16_t *TxData, uint8_t DataWord){uint8_t i;P_NRF2401_PORT |=_BV(CE);_delay_us(10);for(i=0;i<AddrByteCnt;i++){nRF2401_WriteByte(AddrBuffer[i]);}for(i=0;i<DataWord;i++){nRF2401_WriteWord(TxData[i]);}P_NRF2401_PORT &= ~_BV(CE);P_NRF2401_PORT &= ~_BV(DA TA);if((P_NRF2401_PIN & _BV(DR1)) == 0){return 0;}else{#if NRF2401_SPIuint8_t j;P_NRF2401_DDR&= ~_BV(MOSI);while(P_NRF2401_PI N & _BV(DR1)){SPDR = 0x00;while( !(SPSR & (1<<SPIF)));RxData[j] = SPDR;}P_NRF2401_DDR |= _BV(MOSI);#endif#if NRF2401_GPIOuint8_t i = 0, j = 0;uint8_t dat = 0;P_NRF2401_DDR&= ~_BV(DA TA);while(P_NRF2401_PI N & _BV(DR1)){dat <<= 1;P_NRF2401_PORT&=~_BV(CLK1);|= _BV(MOSI);j++;}P_NRF2401_PORT&=~_BV(CLK1);}P_NRF2401_DDR |=_BV(DA TA);#endif}uint8_t Address[4] ={0x00, 0x00, 0x01, 0xFF};int main(void){uint8_t key;Key_Init();nRF2401_Initial();// 初始化nRF2401AnRF2401_Mode(NRF2401_TRANSMIT_MODE);// 切换nRF2401A收/发模式nRF2401_SetAddress(Address, 4); // 设置接收端地址00 00 01 FFwhile(1){key = Key_Get();// 取键值switch(key){caseKEY_1:nRF2401_SendByte(KEY_1);break;caseKEY_2:nRF2401_SendByte(KEY_2);break;caseKEY_3:nRF2401_SendByte(KEY_3);break;caseKEY_4:nRF2401_SendByte(KEY_4);break;default:程序2:接收机#include <avr/io.h>#include<avr/interrupt.h>#include<util/delay.h>#include "nRF2401.h"const uint8_tInitData[15] =// nRF2401 控制字 15 Byte{NRF2401_CH2_WIDTH,// 通道二接收数据宽度NRF2401_CH1_WIDTH,//b14: 收发模式(1-ShockBurst模式)// b13: 波特率选择(0-250Kbps)// b12~b10: 晶振选择(011-16M)(NRF2401_FRE_CH_SEL|NRF2401_TRANSMIT_MODE)// b7~b1: 收发频率(0110010,2.45GHz)// b0: 收发控制(1-接收)};uint8_t AddrBuffer[5];// 保存地址uint8_t AddrByteCnt;//地址Byte数voidnRF2401_Initial(void){#if NRF2401_GPIO// 初始化端口P_NRF2401_DDR |= _BV(CS) | _BV(DATA) | _BV(PWR) | _BV(CLK1) | _BV(CE);P_NRF2401_DDR &= ~_BV(DR1);P_NRF2401_PORT &= ~(_BV(CS) | _BV(DATA) | _BV(CLK1) | _BV(CE));#endif#if NRF2401_SPIP_NRF2401_DDR |=_BV(CS) | _BV(MOSI) | _BV(PWR)| _BV(CLK1) | _BV(CE);P_NRF2401_DDR &=~_BV(MISO);P_NRF2401_PORT &=~(_BV(CS) | _BV(DATA) |_BV(CLK1) | _BV(CE));// SPI允许、数据传送为MSB、主机模式、极性与相位00、速率focs/2SPCR = _BV(SPE) |_BV(MSTR) | _BV(SPR0) |_BV(SPR1);// SPSR |= _BV(SPI2X);#endif#if NRF2401_INTDDRB &= ~_BV(DR1);//设置PB2口为输入口MCUCSR |= _BV(ISC2);//上升沿触发GIFR |= _BV(INTF2);// 清中断GICR |= _BV(INT2);//允许外部中断INT2sei();#endifnRF2401_ON();// nRF2401上电_delay_ms(1);nRF2401_WriteCommand();// 向nRF2401写命令字_delay_ms(1);}{P_NRF2401_PORT |=_BV(PWR);}{P_NRF2401_PORT &=~_BV(PWR);}{uint8_t i;P_NRF2401_PORT &=~_BV(CE);P_NRF2401_PORT |=_BV(CS);_delay_us(50);for(i=0;i<15;i++){nRF2401_WriteByte(InitData[i]);}P_NRF2401_PORT &=~_BV(CS);P_NRF2401_PORT |=_BV(CE);}的工作方式// 参数:uiMode:1--接收;0--{P_NRF2401_PORT &=~_BV(CE);P_NRF2401_PORT |=_BV(CS);if(uiMode ==NRF2401_RECEIVE_MDOE){nRF2401_WriteByte(InitData[14] | 0x01);}else{nRF2401_WriteByte(Init Data[14] & 0xfe);}nRF2401_SetAddress(u int8_t *Address, uint8_t AddrByte)nRF2401_SetAddress(u int8_t *Address, uint8_t AddrByte){uint8_t i;for(i=0;i<AddrByte ;i++){AddrBuffer[i] = Address[i];}iData)// 实现功能:向nRF2401A写入一个字节数据// 参数:uint8_t uiData: 待写入数据WriteByte(uint8_t uiData){#if NRF2401_GPIOuint8_t i;for(i=0;i<8;i++){P_NRF2401_PORT &= ~_BV(CLK1);if(uiData & 0x80){P_NRF2401_PORT |= _BV(DATA);} else{P_NRF2401_PORT &=~_BV(DATA);}_delay_us(30);P_NRF2401_PORT |=_BV(CLK1);_delay_us(30);P_NRF2401_PORT &=~_BV(CLK1);uiData =uiData << 1;}#elseSPDR = uiData;while( !(SPSR &(1<<SPIF)));#endif}{uint8_t i;int main(void){uint8_t key;Key_Init();nRF2401_Initial();//初始化nRF2401AnRF2401_Mode(NRF2401_TRANSMIT_MODE); // 切换nRF2401A收/发模式nRF2401_SetAddress(Address, 4); //设置接收端地址 00 00 01 FFwhile(1){key =Key_Get();// 取键值switch(key){caseKEY_1:nRF2401_SendByte(KEY_1);break;caseKEY_2:nRF2401_SendByte(KEY_2);break;caseKEY_3:nRF2401_SendByte(KEY_3);break;caseKEY_4:nRF2401_SendByte(KEY_4);break;default:break;}Key_Scan(); } // the end~~。

相关主题