论坛风格切换切换到宽版
  • 7516阅读
  • 13回复

315M接收模块接单片机的问题 [复制链接]

上一主题 下一主题
离线电磁波FM
 
发帖
917
只看楼主 倒序阅读 0楼 发表于: 2007-12-19
最近搞了一个无线收发的实验电路,用51单片机控制无线模块的收发.接收和发射模块分别由一块51机控制,用曼码以1000bps的速率进行单向数据传送.
  两51机写入程序后,不加收发模块,直接连机,收发数据一切正常,非常稳定.
  但用于接收的51机加上接收模块后就不能正常工作.
  用于接收的单片机是利用外部中断1工作于边沿触发状态提取曼码的同步信号的,当出现低电平跃变时,外中断1中断去打开定时器t0,t0按照发码的特征定时一定的时间,当t0溢出时,收一个二进码,反复进行,直到收完一帧.
  现在的问题是加上接收模块后,在模块没有收到任何数据时,51机的外中断也不断被打断,更别说后面怎样接收数据了.
  接收模块是一般的315m超再生接收模块,用一块lm358作输出,静态时,输同为0电平,收到信号时,输出为1电平,工作于ook状态.模块输出直接接51机外中断1,51机晶体为12mhz,用电压表测量模块输出稳定于0电平,但单片机仍不断响应外中断.把模块输出脚对地短接,外中断响应立刻停止.在模块输出脚对地并接1个103电容,中断响应也立刻停止,说明模块输出了干扰信号.后来加长了模块与51机之间的连线到2m,避免单片机的干扰,中间加了整形电路,换了另外的超外差接收模块等,折腾了一天,故障仍旧.
  请高手指教,对于这种干扰的问题怎样解决,软件和硬件上怎样处理,提供一个参考方向.
离线BG7TBL
发帖
2965
只看该作者 1楼 发表于: 2007-12-19
模仿红外遥控器编码格式,设置一个开始码,约5-10ms!
接收开始码时,延迟5-10ms,确认后,再接收其他代码!
离线BG4UVR
发帖
11288
只看该作者 2楼 发表于: 2007-12-19
楼主有一个最基本的问题没有考虑到,就是

当当当……

(此处略去回车n×10行)

中断是在1变0的时候响应的,如果中断脚是0,当然会一直不停地中断。您的模块输出状态是未接收时是0,您必须加一级3极管做一个反相放大,就ok了。
离线BA5RW
发帖
48263
只看该作者 3楼 发表于: 2007-12-19
T1脚是要加一个滤波电容吧,我最近也要做这样的实验,用于机器人之间的配合通信,不过我没有按照什么编码协议,完全按照自己的思路:
1、接收端等待低L电平(超再生接收整形输出有信号为低L),得到后开始延时一个脉冲宽度,再次确认为L后再延时半个脉冲宽度开始按位读取输入口线电平,保证读取信号是在每一位脉冲的中部。我以前测试的脉冲串就是8位,智能车由主控机器指挥其他车子能完成预定的统一最大255种动作组合。
2、发射就简单了,只要发射两个脉冲宽度的同步头信号+8个数据位脉冲。并且连续发送同样信号数次,由接收端评估接收相同结果大于某个值即算确认一个动作。循环发送的时候结束延时则要保证十个脉冲的宽度,也就是静默间隔必须大与整个发送十个脉冲的间隔。
3、用于数据传递的时候,我就不知道可靠性和效率如何了。期待楼主的实践反馈!
离线电磁波FM
发帖
917
只看该作者 4楼 发表于: 2007-12-20
'
楼主有一个最基本的问题没有考虑到,就是
当当当……
(此处略去回车n×10行)
中断是在1变0的时候响应的,如果中断脚是0,当然会一直不停地中断。您的模块输出状态是未接收时是0,您必须加一级3极管做一个反相放大,就ok了。
'

我设置为边沿触发的,只有上一个机器周期为1,下一个机器周期为0时才响应中断,一直为0时是不会中断的啊!
离线BG4UVR
发帖
11288
只看该作者 5楼 发表于: 2007-12-20
[quote=电磁波fm]我设置为边沿触发的,只有上一个机器周期为1,下一个机器周期为0时才响应中断,一直为0时是不会中断的啊![/quote]

用示波器看,怀疑信号线上有毛刺干扰
离线电磁波FM
发帖
917
只看该作者 6楼 发表于: 2007-12-20
'
T1脚是要加一个滤波电容吧,我最近也要做这样的实验,用于机器人之间的配合通信,不过我没有按照什么编码协议,完全按照自己的思路:
1、接收端等待低L电平(超再生接收整形输出有信号为低L),得到后开始延时一个脉冲宽度,再次确认为L后再延时半个脉冲宽度开始按位读取输入口线电平,保证读取信号是在每一位脉冲的中部。我以前测试的脉冲串就是8位,智能车由主控机器指挥其他车子能完成预定的统一最大255种动作组合。
2、发射就简单了,只要发射两个脉冲宽度的同步头信号+8个数据位脉冲。并且连续发送同样信号数次,由接收端评估接收相同结果大于某个值即算确认一个动作。循环发送的时候结束延时则要保证十个脉冲的宽度,也就是静默间隔必须大与整个发送十个脉冲的间隔。
3、用于数据传递的时候,我就不知道可靠性和效率如何了。期待楼主的实践反馈!
'
我也是用自己的思路编程的.
一帧数据由:引导码+地址码+数据码+结束码组成
发射时先把码原转换成曼切斯特码,定时器定时每产生中断后发一个编码元,直到发完一帧.修改定时器初值来确定发码速率.
接收时,由引导码使外中断产生中断,同时启动定时器,第一次定时时间为发1个码元时间的1/2,当定时器中断后,再使初值为发1个码元的时间,并读取接收端数据并保存,反复,直到下一次外部中断产生,再反复.保存完数据后,由曼码的特点进行校码,再按数据码中的数据执行相应输出.
我们以后可以慢慢讨论!
离线电磁波FM
发帖
917
只看该作者 7楼 发表于: 2007-12-20
'
用示波器看,怀疑信号线上有毛刺干扰
'
我查了关于超再生模块的资料,在静态无接收时,有噪音输出,应该有毛刺干扰.
那单片机编程就有点麻烦了.
只能让单片机每隔一断时间开一次外中断,在这断时间内如果收到有用的码就继续,反之就退出.
离线BG7TBL
发帖
2965
只看该作者 8楼 发表于: 2007-12-20
我测试的接收模块,放在电脑旁边时,有us级别的脉冲出现,没有规律!
离线bd7bq
发帖
1491
只看该作者 9楼 发表于: 2007-12-20
是的.超再生模块的资料,在静态无接收时,有噪音输出,应该有毛刺干扰.
我也试过.估计只能用编码协议来滤除.类似的红外线遥控也是一样.做过空调来电自启动的空调遥控码学习电路.接收模块的质量很有影响.采购过n多种才选好的.
离线1a2b3c
发帖
204
只看该作者 10楼 发表于: 2007-12-20
基本上没有发射信号时接收输出都是小脉冲,这种方法用中断来做反而不对,直接用延时来判断位置却很好,另外就是上面很多人都有说的前面加一个比较大的同步框,判断的时候将同步框分成几个小框,连续判断几次都是同一电平则说明是真正的同步头,这样才延时接收后面的'数据'位,,详细看一下下面的图就知道,
前面是没有发射时接收的信号,可见没有发射时几乎全是脉冲,真的是多如牛毛,而发射了接收到的就很干净,
离线1a2b3c
发帖
204
只看该作者 11楼 发表于: 2007-12-20
再来一个,看见前面全是噪声,后面是接收到的一帧半数据的显示,每个都使用4ms左右的大框架作为同步脉冲
离线BA5RW
发帖
48263
只看该作者 12楼 发表于: 2007-12-21
'
再来一个,看见前面全是噪声,后面是接收到的一帧半数据的显示,每个都使用4ms左右的大框架作为同步脉冲
'
哈哈,直观!实际上我在维修单位的遥控门的时候也用示波器观测过了,的确是这样的!延时确认同步头的方法其实不可靠,不管用什么办法都不可靠,因为这种毛刺是没有规律的,很可能引起同步错误。
不过实际上可用一个较大的滤波电容让这种超再生特有的毛刺降低电平,或是跟进静噪电路值得一试。
离线1a2b3c
发帖
204
只看该作者 13楼 发表于: 2007-12-21
我现在确定同步头的方法是将同步头分成10份,比如上面的我每份为400us,做一个10次循环判断,延迟400后判断数据线是否为1,是则循环递增,不是马上就退出,其实这样已经可以相当程度的排除了毛刺的干扰,因为虽然毛刺是随机的,但是还从来没有遇到过刚好每次判断同步头时每一个小份的延迟后就遇上毛刺是高电平,当然理论上不是完全可靠的,
曾经为了这个做过实际的测试,就是发射和接收在确保接收范围内,将发射次数和接收正确解码次数进行自动操作的比较,发射了20000次,接收无一次遗漏和多出,可见是比较可靠的了,这个已经用于实际产品n年了,
当然如果要不在主处理器上消耗cpu的精力去做这些低层的工作,可以用另外的一个便宜简单的小mcu作为专用的解码ic来工作,解码正确后输出有效的数据出去,就类似与2262/2272这样的ic了,只是更加灵活的用自己的编解码方法.比如可以用t13,pic508等等少管脚便宜的mcu