|
原帖由 Lee_bbs 于 2011-5-14 22:53 发表
:em00: :em00:
你做的发射和接收用的哪个方案啊?成功了吗? 我有富裕的发射,需要联系。:em00:
楼主好
首先回答你的问题:
由于没有发射器,加上学习他的代码。我发射使用的PS摇杆的模块,是NO30.
接收器使用模块 是NO16 (irxa301 12F5O9) 和 NO.34 irxa261 10F200
注意我使用的芯片都是都是F的,不是C,比如12F509非12C509,带F的是反复编程的。
你有发射啊,太好啦。我想要一个。
附上图片:
附上 初版的日志:
焊接完一个通道的电位器后,通过示波器观察PPM信号,对应的通道的信号长度随电位器的摇杆而变化,高兴!!
但是接收器死活不响应,但是发现接收机上电的时候,电机有转动一会儿,连续试了几次,找不到规律。最后发现不关闭发射器电源,接收器上电的时候,电机还是转动一会儿,崩溃。。。
开来接收机有问题。。。
首先想到的是 红外接收头的问题,由于我使用的接收头无信号输出高电平,便开始查找NO16使用的接收头的datasheet,从他的原理图发现也是Vout的是上拉的,也就是说无信号的时也是高电平。
那么红外接收头OK.
(注意:很久之前做过实验红外接收头不能连续接受一段数据,但是通过之前的几次实验,对PPM的信号,接受的很完整,不知道为什么?)
先从软件查,由于我使用的是NO16 FUTABA的程序,其他程序有什么差别呢?
将NO16的三个程序(FUTABA,SANWA,JR)反汇编,发现只是一些参数数值的变化。
这么说基本都是一样。
于是便傻傻地怀疑程序有问题,
将程序反汇编,一行一行的进行阅读和注释,最后发现和Andy Birkett的程序rxdecode.C几乎一致。
因为这种程序比较难懂,还好可以和rxdecode.C的程序进行对照,很快就搞定了。
最后的结果证明是程序没有问题,哈哈,好傻。不过对PIC汇编又熟悉了。
反正程序都是把低电平当PULSE,高电平当GAP来处理的,和红外接收头的输出信号一致。
反汇编的过程中,我也了解接收机不工作的原因了:
因为我直接一个通道的电位器,那么其他通道的放电时间过长,发射器判断认为超时,所以对应通道的时间都超过3ms了(通过发射器的反汇编后得知其获得每个通道时间的原理的,其实就是RC充放电,没有用到ADC),而接收器判断每个通道的时间长度超过一定数值,就认为出错,直接关闭输出。电机当然不动了。
以上是清明前做的事情
过了清明
我焊接其他的3个电位器,输出的PPM信号终于在正常的范围之类的,但是接收器工作不稳定啊,
电机转一会儿,停一会儿。
想不通,刚开始认为是MCU在不停的RESET的,是不是电压不够?不是。
发现IO输出直接接三极管的基极,这样会不会烧掉IO?或者是程序错误修改IO(注意MCU修改IO是读IO状态 修改状态,再将该状态写会IO口)有问题?(想想不是这个问题,程序内IO口操作都是bit位操作,不会出现读-修改-写的问题)
在IO口和基极加一个5k的电阻,果然不行。
无意中想到断开和基极的链接,用示波器查看IO口的波形,我靠,很正常,但是一接上电阻,在量该IO口,PWM的信号断断续续,我靠怎么回事??
突然想到是不是由于电机的高频干扰,于是随便找了个103的陶瓷电容焊接了一下,搞定。
果然是由于电机的高频干扰将MCU不停的RESET |
|