发现一篇非常不错的文章分享给各位小伙伴:
模块采用了Silicon Labs的Si4432作为无线收发芯片,是一块完整的、体积小巧的、低功耗无线收发模块。SI4432由Silicon公司09年推出的Silicon Labs EZRadioPRO系列ISM频段无线芯片之一,可工作在240-960 MHZ频段范围内,且最大输出功率可以达到+20DBm,这一定程度上满足了射频信号放大的开发难的问题。再最大功率设置条件下,开阔通信距离可达上千米。模块集成了所有射频相关功能和器件,用户不需要了解无线电的相关知识,就可以使用本模块轻易的开发出性能稳定可靠的无线相关产品。 SI4432本身通信距离在20dBm条件下,不超过1000米,在某些特殊应用中,需要更远距离,RFCSI4432A模块就是在原有SI4432模块外围电路的基础上设计入功率放大电路,以提高发射功率(发射功率高达33dBm(约2W),从而直接提升模块的通信距离(3000米以上),满足各种应用问题,让无线应用,距离不再是问题。 基本特点频率范围: 240—960MHZ
接收灵敏度:-115 dBm(波特率9.6Kbps) 通讯波特率:1—128kbps 最大发射功率:33dBm 在关断模式下电流为:10nA 在休眠模式下电流为: 300nA
FSK频偏可编程(15~240KHz) 接收带宽可编程(67~400KHz) 具有自动斜率控制功率放大器和频谱整形 33dBm,发射能量强劲,空旷通讯距离3000米以上 SPI兼容的控制接口,低功耗任务周期模式,自带唤醒定时器 片内集成电池低电量检测、温度传感器、电压调节器 典型主要应用车辆监控、遥控、遥测、水文气象监控 无线标签、身份识别、非接触RF智能卡 小型无线网络、无线抄表、门禁系统、小区传呼 工业数据采集系统、无线232数据通信、无线485/422数据通信 小型无线数据终端、安全防火系统、遥控系统、生物信号采集 备注
VCC5引脚接电压范围为 4V到5V之间,推荐电压4.5V,不能在这个电压区间之 外。如果用普通干电池,推荐供电电压5.5V; 如果是锂电池供电,则供电电 压4.5V即可。注意:镍氢电池和干电池的特性不同,如果用镍氢电池的大于5V供电,会永久烧坏无线模块!而主要原因在于普通干电池内阻大,在模块工作在发射状态发射电磁波瞬间有150mA电流存在(实际由于我们内部电路放置有钽电容起到蓄水池的效果,所以瞬间电流变小),而干电池内阻分压高达到1V到2V不等,所以为保持正常工作,干电池需要供电电压5.5V,所以不推荐用干电池供电。推荐锂电池供电。一般说来,功率越大,对电源要求越高,如果是200W的大功率发射机,则对电源的要求更加严格,甚至对电源开关顺序都有严格要求,如果本身功率小,电流也比较小(<100mA)这个问题就表现得不明显。注意在布电源线的时候,要注意加钽电容,一般要>100uA,最好加470uF钽电容,以滤波和当存储电荷使用,尤其在使用了升压电路后,有些升压电路输出电流小于400mA,这个时候可以当着电量池使用,但也需要防止发射频率过高,池的电量入不敷出,可以通过适当延时(20ms)来避免。就可避免发生电量池透支现象。
2.VCC3.3 引脚的电压范围为1.9-3.6V 之间,不能在这个区间之外,如超过 3.6V 将会烧毁模块。推荐电压 3.3V 左右;
3.硬件没有集成SPI功能的单片机也可以控制本模块,用普通单片IO口模拟 SPI 时序进行读写操作即可;
4.模块接口采用标准2.54mmDIP插针,所有GND需要和系统电路的逻辑地连接起来;
5.与 51 系列单片机 P0 口连接时候,需要加 10K 的上拉电阻,与其余口连接不需要。其他系列的5V单片机,如AVR、PIC,请参考该系列单片机 IO 口输出电流大小,如果超过 10mA,需要串联2-5K电阻分压,否则容易烧毁模块! 如果是 3.3V 的MCU,可以直接和IO口连接。
模块电气参数SI4432射频芯片初始化函数void RF4432_Init(void) { RF4432_SDN=0; //允许RF4432工作 delay_ms(20); RF4432_WriteReg(OPERAtiNG_FUNCTION_CONTROL_1, 0x80); //软件复位,详细请见P101页 delay_ms(10); RF4432_ReadReg(INTERRUPT_STATUS_1); RF4432_ReadReg(INTERRUPT_STATUS_2); RF4432_WriteReg(INTERRUPT_ENABLE_1, 0x00); RF4432_WriteReg(INTERRUPT_ENABLE_2, 0x00); RF4432_WriteReg(IF_FILTER_BANDWIDTH, 0x8b); RF4432_WriteReg( clock_RECOVERY_OVERSAMPLING_RATIO, 0x2c); RF4432_WriteReg( CLOCK_RECOVERY_OFFSET_2, 0x20); RF4432_WriteReg( CLOCK_RECOVERY_OFFSET_1, 0x6d); RF4432_WriteReg( CLOCK_RECOVERY_OFFSET_0, 0x3a); RF4432_WriteReg( CLOCK_RECOVERY_TIMING_LOOP_GAIN_1, 0x00); RF4432_WriteReg( CLOCK_RECOVERY_TIMING_LOOP_GAIN_0, 0x18); RF4432_WriteReg(RSSI_THRESHOLD_FOR_CLEAR_CHANNEL_INDICATOR, 0xf0); RF4432_WriteReg( DATA_ACCESS_CONTROL, 0x88); RF4432_WriteReg( HEADER_CONTROL_1, 0x8c); RF4432_WriteReg( HEADER_CONTROL_2, 0x0a); RF4432_WriteReg( PREAMBLE_LENGTH, 0x08); RF4432_WriteReg( TRANSMIT_PACKET_LENGTH, RF4432_TxRxBuf_Len ); //发送数据包长度设置 RF4432_WriteReg( RECEIVED_PACKET_LENGTH, RF4432_TxRxBuf_Len ); //接收数据包长度设置 RF4432_WriteReg( HEADER_ENABLE_3, 0x00); RF4432_WriteReg (HEADER_ENABLE_2, 0x00); RF4432_WriteReg( HEADER_ENABLE_1, 0x00); RF4432_WriteReg( HEADER_ENABLE_0 ,0x00); RF4432_WriteReg(AGC_OVERRIDE_2, 0x0b); RF4432_WriteReg(TX_POWER,0x03); RF4432_WriteReg(TX_DATA_RATE_1, 0x0A); //通信速率40kbps RF4432_WriteReg(TX_DATA_RATE_0, 0x3D); RF4432_WriteReg(MODULATION_MODE_CONTROL_1, 0x02); RF4432_WriteReg(MODULATION_MODE_CONTROL_2, 0x26); //设置为FIFO模式 FSK reg71H RF4432_WriteReg(FREQUENCY_DEVIATION, 0x40); // RF4432_WriteReg(FREQUENCY_BAND_SELECT, 0x53); //设置频率 reg75H RF4432_WriteReg(NOMINAL_CARRIER_FREQUENCY_1, 0x4b); //通信频率433mhz reg76H RF4432_WriteReg(NOMINAL_CARRIER_FREQUENCY_0, 0x00);//reg77H RF4432_WriteReg(TX_FIFO_CONTROL_1,0x3F); RF4432_WriteReg(TX_FIFO_CONTROL_2,0x00); RF4432_WriteReg(RX_FIFO_CONTROL,0x3F); RF4432_WriteReg(OPERATING_FUNCTION_CONTROL_2,RF4432_ReadReg(OPERATING_FUNCTION_CONTROL_2)|0x01); RF4432_WriteReg(OPERATING_FUNCTION_CONTROL_2,RF4432_ReadReg(OPERATING_FUNCTION_CONTROL_2)&0xFE); RF4432_WriteReg(OPERATING_FUNCTION_CONTROL_2,RF4432_ReadReg(OPERATING_FUNCTION_CONTROL_2)|0x02); RF4432_WriteReg(OPERATING_FUNCTION_CONTROL_2,RF4432_ReadReg(OPERATING_FUNCTION_CONTROL_2)&0xFD); } SI4432设置接收模式函数void RF4432_SetRxMode(void) { RF4432_PAC=0; RF4432_WriteReg(OPERATING_FUNCTION_CONTROL_2,RF4432_ReadReg(OPERATING_FUNCTION_CONTROL_2)|0x02); RF4432_WriteReg(OPERATING_FUNCTION_CONTROL_2,RF4432_ReadReg(OPERATING_FUNCTION_CONTROL_2)&0xFD); RF4432_ReadReg(INTERRUPT_STATUS_1); RF4432_ReadReg(INTERRUPT_STATUS_2); RF4432_WriteReg(INTERRUPT_ENABLE_1, 0x02); RF4432_WriteReg(OPERATING_FUNCTION_CONTROL_1,0x05);//接收 } SI4432数据包接收函数unsigned char RF4432_RxPacket(void) { RF4432_IRQ=1; if(!RF4432_IRQ) { if(RF4432_ReadReg(INTERRUPT_STATUS_1)&0x02) { return 1; } } return 0; } SI4432数据包发送函数void RF4432_TxPacket(void) { RF4432_PAC=1; RF4432_WriteReg(OPERATING_FUNCTION_CONTROL_2,RF4432_ReadReg(OPERATING_FUNCTION_CONTROL_2)|0x01); RF4432_WriteReg(OPERATING_FUNCTION_CONTROL_2,RF4432_ReadReg(OPERATING_FUNCTION_CONTROL_2)&0xFE); RF4432_WriteBurestReg(FIFO_ACCESS,RF4432_TxRxBuf,RF4432_TxRxBuf_Len); RF4432_ReadReg(INTERRUPT_STATUS_1); RF4432_ReadReg(INTERRUPT_STATUS_2); RF4432_WriteReg(INTERRUPT_ENABLE_1, 0x04); RF4432_WriteReg(OPERATING_FUNCTION_CONTROL_1,0x09);//发射 while(1) { RF4432_IRQ=1; if(!RF4432_IRQ) { if(RF4432_ReadReg(INTERRUPT_STATUS_1)&0x04) //详细请看P95页 { break; } } } } 无线应用注意事项(1) 无线模块的VCC电压范围为 1.8V-3.6V之间,不能在这个区间之外,超过3.6V将会烧毁模块。推荐电压3.3V左右。 (2) 除电源VCC和接地端,其余脚都可以直接和普通的51单片机IO口直接相连,无需电平转换。当然对3V左右的单片机更加适用了。 (3) 硬件上面没有SPI的单片机也可以控制本模块,用普通单片机IO口模拟SPI不需要单片机真正的串口介入,只需要普通的单片机IO口就可以了,当然用串口也可以了。模块按照接口提示和母板的逻辑地连接起来 (4) 标准DIP插针,如需要其他封装接口,或其他形式的接口,可联系我们定做。 (5) 任何单片机都可实现对无线模块的数据收发控制,并可根据我们提供的程序,然后结合自己擅长的单片机型号进行移植; (6) 频道的间隔的说明:实际要想2个模块同时发射不相互干扰,两者频道间隔应该至少相差1MHZ,这在组网时必须注意,否则同频比干扰。 (7) 实际用户可能会应用其他自己熟悉的单片机做为主控芯片,所以,建议大家在移植时注意以下4点: A:确保IO是输入输出方式,且必须设置成数字IO; B:注意与使用的IO相关的寄存器设置,尤其是带外部中断、带AD功能的IO,相关寄存器一定要设置好; C:调试时先写配置字,然后控制数据收发 D:注意工作模式切换时间
|