|
前段时间开始了航模之路。想做个简单的“纸飞机”,也就是三角翼混控的飞机。混控实现的功能为,打副翼摇杆,后面两个翼上下差动,实现转弯。打升降摇杆,后面两个翼同向动作,实现升降。由于遥控器没有混控功能,只能用“混控器”实现。上网搜了下要20多块一个,虽然比起其他航模用的零件来很便宜。不甘心,遂决定自己用AVR做个。
自己从来没有用过混控器,要做个出来也不容易,先网上搜集资料,看淘宝上卖的混控器中有一项指标:混控比固定1:1 。 自己就推测混控器原理,采集2路信号,经过1:1的设定,控制2路舵机。
明白了目标就可以开始干了,单片机选择了M8,有块实验板可以直接拿来做实验,到时后就转到M48上,还有几片贴片没用掉。 首先试验了下PWM功能(自己从来没用过),PWM很简单设置好寄存器硬件就自动生成了。舵机控制频率选择50Hz,因为大家都那么用的。。。为了控制的精度和简易,只能选择16位的定时器1,选择ICR1当TOP,就能实现精确的50HZ了。用OC1A和OC1B引脚输出PWM波。接上示波器看了下波形,没问题。装个舵机试验下,OK
搞定了简单的PWM,接下去就是采集接收机的2路信号了。当时接收机没在身边,就采集下自己产生的PWM波。
本来ICP是不错的选择,但是要采集的信号有2路,而且ICP使用的寄存器被用作PWM的TOP了,只能自己软件实现(外部中断)
刚开始想用T0来计时,因为只有8位,只能在溢出中断中计数,但总是会出现这样的现象
(原文件名:打开中断读取低位接近top,读取高位已加1.JPG)
感叹软件的总没硬件的好用,还好还可以用定时器1的计数器来计数,(想了一夜才想到的)。16位的果然不一样,问题解决。
(原文件名:采集AIL通道.JPG)
同时采集2路的时候又出现了问题。INT0优先级比INT1高。采集到数据就乱七八糟。想想马老师说进中断都要几个周期来响应,还有现场保护什么的要做。 干脆让cpu跑快点。就把时钟换成内部8M,定时器就8分频,采集到的数据就正常了很多。
输入和输出都搞定以后,就是处理部分了。随便举了几个数凑了下 输入和输出的关系为:
servo1 = (ch1_high_time + ch2_high_time)/2;
servo2 = (1500 + ch1_high_time/2 - ch2_high_time/2);
最后就是效果:动升降摇杆,舵机同向动作,动副翼摇杆,舵机反向动作
上个原理图:(有必要么)
(原文件名:sch.JPG)
上个程序:
点击此处下载 ourdev_440509.rar(文件大小:3K) (原文件名:M8_SERVO.rar)
顺便问一下,我花了3天功夫写出来的程序能用么。混控器是这么工作的么。
(要是不能用就直接照着另外贴子,改4VF。。。)
另外问:接收机出来的电源电压一般多少V的?怎样处理才能给M8供电,信号电压是多少V的?要不要加什么保护电路(目前我是直接接上去的) |
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|