电路功能
无线收发组件中,315MHz收发组件是常用的一种,若要自制则相对要困难些。本文所介绍的无线收发电路采用ATMEL公司的AT89C2051单片机作为编码和解码电路的核心器件,接收端采用1602字符液晶显示器显示所接收到的数据。
工作原理
首先介绍编码电路。在使用过程中,笔者直接将发送模块的三个端子与自制的一块学习板相连,没有添加其他电子元件,属单片机最小系统,S1和S2为两个按键,本文程序未用。图1所示为发送端电路图,图2为接收端电路图。
图1 发送端电路图
图2 接收端电路图
接收端将接收到的数据送入单片机的同时,还会驱动发光二极管以便对硬件和软件纠错,若数据接收成功还将显示在1602液晶显示器上,因本文主要是介绍无线遥控,关于1602字符液晶显示器的原理与应用不做介绍,读者可以参考《无线电》以往的相关文章,如果出于成本和程序难易程度的考虑,也可改用7段数码管甚至用发光二极管来作数据的显示。另外要注意一点,发送端和接收端的时钟晶振的频率必须要相同,否则编程会很麻烦甚至数据无法正常接收,这一点在介绍程序时还会提到。
软件方面,借鉴了红外遥控的编码思路,首先发送引导脉冲,紧接下来是数据码和数据反码,这一过程是在定时中断里面完成的,定时时间一到就调用一加法程序,然后将结果作为数据发送出去,计数器溢出后就清零进入下一循环。
引导脉冲由一个低电平和高电平组成,每个高低电平延时大约11ms,这个靠11ms的延时程序来实现,数据码和反码每个位也是使用这个延时,可以说这11ms的延时就相当于比较简单的通信协议,也是发送和接收程序的核心部分,只要两边的延时相同,00H到0FFH内的数据都能被正确接收,接收端检测到1 lms的高低电平变化后,就调用11ms的延时来判断数据"0"和"1",并将正确接收到的数据显示在液晶显示器上。前面已讲过若时钟晶振的频率不同那么发送端和接收端的延时子程序就要计算得相一致,这样程序编制就很麻烦甚至不能正常接收数据,这一点和单片机的串口通信是同样的道理。加入数据反码为的是提高抗干扰的效果,接收端的程序中就可以设置两个数据存储器,一个放原码一个放反码,接收完毕再将两个存储器的内容作比较即可判断是否接收正确,若正确再执行应执行的程序。
本刊今年第1期有一篇介绍同样内容的文章使用的是串口通信的方法,而本文是采用延时,虽方法有点不一样,但关键的一点是数据传送速度都不能超过发送和接收模块的最快速度,本文使用11ms的延时,那每秒就大概是100个位的数据传送速度,读者可以将延时程序增大和减小,以此就可以测试出315MHz发送和接收模块的最高和最低数据传送速度。
发射端和接收端的程序见本期配刊光盘,都已尽量地模块化,能共享的就共享,所以整个程序都比较简单,且收发程序都使用的是8051最基本最常用的指令,没有用复杂的数学运算和逻辑运算指令,初学者很容易理解。因为主要是面向单片机初学者,所以本文介绍的编码格式是比较简单的,抗干扰效果较差,而无线数据通信的编码方法有很多种,有行业内的标准化编码方法,也有厂家独立研发的,而315MH2收发模块的工作原理和工作速度就基本决定了它不能用于高速通信,且也没有硬件抗干扰的能力,要排除干扰只能完全依靠软件来实现,本文的程序中,当315MHz接收模块接通电源后就一直处于工作状态,在有效接收范围内只要有315MHz发射模块发射信号,则接收端就会有输出,程序经笔者实际试验除配对的发射和接收两个系统外,再外加了一个机动车防盗遥控手柄,当然也是315MHz的,当发射和接收系统之间正在传送遥控数据时将遥控手柄的任意键按下,发现这样会打断系统间的数据传送导致接收端接收不到任何数据,这是最大的缺点,但是对要求较低的应用场合应该可以满足,因为程序至少不会对其他的315MHz发射模块有响应,意即不会有误动作,比如家里用来遥控电灯,不会随时都有人拿着个汽车防盗遥控器在附近按来按去。
业余条件下的电路调试
笔者是单片机爱好者,个人水平和试验器材有限,是典型的"一台万用表打天下",手中既没有示波器来查看波形,也没有仿真器,对于软硬件只能靠收发两个板子上的发光二极管和接收端的1602液晶显示器的实际运行来排错,如果数据发出来,则与发射模块相连的发光二极管点亮,表明有信号发出,同样接收端的发光二极管如果与发射端的变化同步,表明接收到了信号,从而完成硬件排错,最后将接收到的数据显示在显示器上。
程序上的排错主要集中在数据延时上,刚开始笔者将要发送的每个数据位的延时选得很短,不知不觉中已远远超出315MHz发送和接收模块的数据收发速度,也就是相当于在串行通信中将波特率设置过高,导致收发失败,这是笔者遇到的最大障碍,因为笔者开始把问题归结为硬件故障,在这个不大不小的问题上白白花了很多时间,后来在一次上网查找资料的时候读到与315MHz模块相关的一篇文章,里面提到收发速度问题,说它的传输速度是很低的,不然将工作不正常甚至无法传输数据,笔者这才恍然大悟,回家后立刻对延时进行修改,改一次源码就重烧录一次芯片,直到最后将延时锁定在11ms,至此排错告一段落,收发双方能进行正确的数据传输了,发送端发送的数据也基本都能在1602显示器上显示出来,但仍有个别的数据不稳定,笔者分析这主要是硬件本身固有的缺陷和程序的合理性造成的,感兴趣的读者朋友可以在本文的软硬件基础上,发挥自己的能力对电路和软件再作进一步的修改,以求达到更好的效果。希望大家到《无线电》杂志的BBS论坛里进行讨论,将自己对程序的改进方法提出来。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)