打印
[技术问答]

关于模型的PWM

[复制链接]
813|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ccw1986|  楼主 | 2015-12-2 21:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
模型的PWM不是各位电子高手所习惯的几KHZ的PWM信号,模型用的频率要慢很多,但是原理上是一致的。模型的PWM频率很低,几乎都是用软件+定时器做的。在说之前,首先要提到一个东西,模型的标准接收机。这个是用于接收遥控信号,并且 “直接” 给多个通道的舵机/电调输出PWM信号的。它的输出标准,是我们用单片机输出PWM信号控制商品舵机/电调的参考。
我来说说它每个通道的输出标准
输出频率 50Hz
高电平时间 0.5~1.5ms (或0.5~2.5ms 取决于操控者手上的发射机)
高电平电压 5V
先说输出频率,这个频率50HZ最为标准,但是也有些商品接收机超过50HZ的,有的可以达到70HZ,所以说这个多一点,少一点,对于标准的舵机/标准电调没有影响。
再说高电平时间,电调/舵机都是以高电平时间长度判断量的大小的。高电平0.5ms在电调上,代表油门为0%,相应的1.5ms或者2.5ms对应油门为100%。但是要注意,这个也不是绝对的,电调为了保证PWM的值在油门行程以内,可能大约小于20%的都认为是油门0,从20%开始, 大于80%的时候认为是达到100%了。实际给操作者的感觉就是,操作杆上的20~80%的行程就对应油门0~100%了。其实这个没什么影响,对于电调,就按0.5~1.5ms做就好,对于舵机就按0.5~1.5ms(对应0~90度)或者0.5~2.5ms(对应0~180度)做就好。
然后说说高电平的电压,这个我没有实际测量过,5V肯定可以,3.3V就不行了,至少我手上的XXD电调就不认了。商品电调很多都是用AVR M8做控制的,我虽然不懂AVR,但是混了那么久,也知道AVR M8是5V的单片机了。至于得不得,那你可以自己去试了,我建议,务必要用各种方法把它弄到标准的5V。方法很多,上拉电阻可以,三极管可以,电平转换芯片可以,百度一下“单向电平转换”很多方法,怎么做由你的。不做的话,假设你碰运气驱动了这个牌子的舵机,插上另一个牌子的就没反应..这也是有可能的。
说完标准,再说不标准,现在的商品电调,大多可以用超过50HZ的PWM去输出,比如300HZ,400HZ,如果初始化的时候行程设置在0.5~2.5ms 400HZ理论上到顶了...至于为什么,你算算2.5ms * 400 等于多少就懂了。再往上就要各位自己测试过了。好赢可以,中威特可以,XXD也可以。
还有一个不标准,大约5、6年前出的一种舵机,叫“数字舵机”或者“数位舵机”或者“数码舵机”都是一个意思,它的特性同上,也可以工作在几百HZ的PWM,买的时候要注意,不是数字舵机的话,你接上超过100HZ的PWM,肯定乱串(100HZ只是个大概值,普通舵机的还是以50HZ为准)。数字舵机精度相对较高,因为它的工作周期快,精度设置得比较高也不容易产生抖舵的情况。弄电子的DX都懂...这个不会增加什么成本,所以数字舵机也不贵。刚出来的时候,它是给模型直升机的高端陀螺仪(都是用ADI的芯片啊>_<!!)用的,可以更好地“锁尾”,这种舵机因为没什么技术含量,现在都白菜价了。
推荐买“数字”+“金属齿”+“空心杯”的舵机,这个就比较贵了,如果减去空心杯,就便宜很多。
关于商品电调的初始化和启动
要注意,电调的调试需要遥控器,或者自制一个已经能输出0.5~1.5msPWM的“东西”
这个初始化过程,xxd好像没要我初始化,但是好赢和中威特好像是要的,至于怎么初始化,注意看说明书,或者卖家宝贝下面的几行字.很容易的.看过就懂了。
初始化,要设置的好像是行程,电池保护,刹车之类的,需要的话,我再讲。但是手上只有XXD的电调,所以要讲也只能结合网上的说明书讲了。
商品电调为了安全,上电的时候必须保证油门为最小值 0%,等到电机唱完歌后才能开始控制PWM输出油门。另外,如果在上电的时候,油门推到最大值,将进入设置状态。这点是编程的时候需要注意的
商品电调都带有5V的输出,一般都是两个叠在一起的小7805降压降出来的,这个是给舵机和接收机供电用的,大概可以提供1A左右的电流。我们用单片机控制的话,不需要供电的时候,一定要记得把电调输出的电源正极咔嚓掉,不然你的电路可能会有危险!这个必须记得!
题外话,对于四轴类飞行器,我推荐的设置:锂电保护 刹车开 直升机启动模式关,对于固定翼类的,刹车可以关掉,直升机关掉(其实拿来就用就好,不用设置)
相比之下,舵机就不需要注意那么多,随心所欲用就好
说了那么多废话,总结一下,要注意的就是:
1.高电平电压 5V
2.数字舵机+普通电调 PWM频率400以下都OK
3.高电平时间 0.5~1.5ms 或0.5~2.5ms (模型里一般都用前者,后者机器人用得比较多)
4.电调启动要注意等那么几秒
5.电调有供电的功能,要小心
反正保持标准,就能通吃所有的商品电调/舵机
如果按这样一小段程序的样子写,应该可以实现对单通道电调/舵机的控制了。我大概按思路现场写的,只说明原理,因为delay_us这样的函数,在标准51上,应该做不到,速度太慢。
沙发
ccw1986|  楼主 | 2015-12-2 21:04 | 只看该作者
void main()
{
int i = 1000;
while(1)
{
P1_0 = 1;
delay_us(500); //即最前面的0.5ms高电平,这段是固定的
delay_us(i); //通过调节i的范围 0~1000可以对应0.5~1.5ms的PWM,
P1_0 = 0;
delay_us(20000 - 500 - i); //这是低电平时间,要把整个周期控制在50HZ
}
}

按以上程序的样子写,虽然可以做到调节PWM控制舵机/电调了,但是现实中明显不可能这样做,因为单片机还要做别的事,而且只输出一个通道PWM根本做不出四轴。

我就把我做过或者思考过的两种做多通道商品舵机/电调用的PWM的方法给大家说说,然后对比一下各自的优缺点,我也很期待各位能分享一下其他的方法~

第一种,是我正在用的,用单片机的定时器,输入每个高电平的时间然后拉高引脚开始计时,到时间后拉低引脚,然后在中断里切换到下一个通道,继续拉高引脚重复上一步,纯中断操作。
第二种,是我打算要做的,用单片机定时器做大概10us的中断,一开始直接拉高每个通道的电平,然后每10us把所有通道的值减一,然后判断哪一个通道的值为0了,就拉低电平。

两种方法都能实现多通道PWM信号输出,但是各自的优点缺点都很明显。

第一种
优点:精度高,因为是用定时器计时可以做到远高于8位的精度(我这里10~12位)。每个通道逐个扫描(这也算优点?)。耗费单片机时间少,对系统负荷很轻,在我的飞控里,这片单片机同时负责姿态计算,浮点和三角函数都用了..

缺点:输出的通道少,50HZ的频率时只能输出 13个(0.5~1.5ms)或者8个(0.5~2.5ms)通道,具体为什么,你算算13*1.5 还有8*2.5等于多少就知道了。50HZ,就是要在20ms内把所有通道都扫描一次。同时,也使得PWM频率提不上去,反应迟钝对于飞控来说,的确很棘手。

第二种
优点:支持通道可以达到数十个(假如每2.5ms输出8个通道,20ms内就可以扫描8组通道,一共就可以输出64个通道!!)。输出PWM的频率可以很高(可以做到理论最大值)。

缺点:占用单片机时间很集中(集中在输出高电平的时候)。10us(按0.5~1.5ms对应只能做到7位不到的精度)的定时器中断,不是一般的51能办到的,我用的C8051F 50MIPS都很吃力。

总结以上,第一种方式,适合给同时做连续采集传感器信息,需要连续计算的单片机用,而第二种因为占用时间太集中,更适合单独做成舵机驱动模块,机器人方面应用应该会多一些...

新手习惯用while循环来定时,这样非常容易抖舵,只要有中断,就会开始抖,不用说也知道原因了吧?要解决其实很简单的,只要用硬件定时器就可以了。

另外,控制商品电调/舵机,八位精度足以。我试过一个“标准舵机”,我的八位精度PWM从100慢慢跳到107之后,他才给我羞涩地动了一格...

使用特权

评论回复
板凳
Messi1999| | 2015-12-5 20:14 | 只看该作者
PWM用好了确实很妙的,比如呼吸灯

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

84

主题

925

帖子

6

粉丝