本文为转载
——sw笨笨 编写
PWM
a) 什么是PWM
PWM ,Pulse Width Modulation的缩写,英文意思是脉宽调制,在航模中主要用于舵机的控制。这是一种古老而通用的工业信号,是一种最常见的控制信号。该信号主要原理是通过周期性跳变的高低电平组成方波,来进行连续数据的输出。如下图所示:
而航模常用的PWM信号,其实只使用了它的一部分功能,就是只用到高电平的宽度来进行信号的通信,而固定了周期,并且忽略了占空比参数。
PWM的优点很明显:
- 由于传输过程全部使用满电压传输,非0即1,很像数字信号, 所以他拥有了数字信号的抗干扰能力。
- 脉宽的调节是连续的,使得它能够传输模拟信号。
- PWM信号的发生和采集都非常简单,现在的数字电路则使用计 数的方法产生和采集PWM信号。
- 信号值与电压无关,这在电压不恒定的条件下非常有用,比如电 池电压会随消耗而降低,DCDC都会存在纹波等等,这些因素不会干扰信号的传输。
b) PWM通信协议
高电平有效。
高电平电压:常见4.8~6V,也有使用3.3V和更高电压的,要看舵机的承受能力。
信号周期:常见50Hz和300Hz两种,前者被称为模拟舵机,后者被称为数字舵机。注意纠正一个概念,舵机的模拟和数字之分其实指的是信号采集器,是使用模拟电路还是使用数字电路,跟信号频率无关,当然数字采集器的采集能力较强,所以频率可以高一些。但是随着技术进步,现在即使买50Hz的舵机也同样使用数字电路进行信号采集,哪里来的模拟舵机呢?建议大家忘记这两个词汇吧。
脉宽宽度:50Hz信号多用于老式舵机,是上个世纪舵机的主要控制信号形式,其脉宽宽度为0.5ms至2.5ms。300Hz信号则是目前使用的最广泛的信号形式,其波形速度快,每秒可以传输300次,所以相应的脉宽也有所减小为0.9ms至2.1ms。两种舵机控制信号如下图所示:
PPM
a) 什么是PPM
PWM信号被广泛用于舵机控制,但是它有一个明显的缺陷,就是有多少个舵机就需要多少个控制线路。而很多时候不希望线路太多,尤其是遥控器的无线信号,只可能有一路通信要传递多路舵机控制信息,于是PPM信号诞生了。
PPM,pulse-positionmodulation的缩写,英文意思是脉冲位置调制。
在上个世纪,航模领域中主要使用这种信号作为遥控器的主要无线通信协议,后来被用于教练线和模拟器。
该信号使用多个脉冲作为一组,并以组为单位周期性发送,通过组内各个脉冲之间的宽度来传输相应通道的舵机控制信息。
b) PPM通信协议
高电平有效。
高电平电压:常见4.8~6V。
信号周期:24ms。
单个脉冲宽度:0.4ms
脉冲间距:0.9ms至2.1ms
S.bus
a) 什么是S.bus ?
S.bus,可能是Smart-BUS的简称,即智能总线。该总线是日本Futaba公司自己使用的专用总线协议。
该协议有两个特点:一个是数字化,一个是总线化。 数字化是指的该协议使用现有数字通信接口作为通信的硬件协议,使用专用的软件协议,这使得该设备非常适合在单片机系统中使用,也就是说适合与飞控连接。这也就是我为什么要将这个协议详细叙述的原因,我认为使用PX4飞控是离不开这种纯数字的通信协议的。另外在其硬件协议中使用了数据校验增加抗干扰能力。 总线化指的是一个数字接口可以连接多个设备,这些设备(主要是舵机和电调)通过Hub与一个S.bus总线连接,并能够得到各自的控制信息。
如下图所示:
b)S.bus 硬件协议
S.bus使用RS232C串口的硬件协议作为自己的硬件运行基础。
使用TTL电平,即3.3V。
使用负逻辑,即低电平为“1”,高电平为“0”。
波特率:100000(100k),注意:不兼容波特率115200。数据位8bit,1个停止位,无校验位,无流控制。
c)S.bus软件协议
每帧数据还有25字节。
每字节含有12个比特,使用1个起始位“0”,8个数据位,1个奇校验位(8个数据位中1的数量为奇数则此位为“1”否则为“0”),两个终止位“1”。
采用LSB first方式发送,即最低有效位(二进制数据右侧)先发。
帧头:1111 0000(二进制),帧尾:0000 0000(二进制)。
数据:从第1数据字节起,到第22字节,一共有数据位176个,它们按照顺序分别是通道1至通道16的舵机控制数据,每个通道占11比特。取值范围是0~2047。
第23字节我管它叫做“功能字节”,第0比特为数字通道1的值,第1比特为数字通道2的值,第2比特为丢帧信息,第3比特为失效保护开关,第4~7比特暂时保留没用。
DSM2(DSMX)
a) 什么是DSM2(DSMX)
DSM是Digital Spread Spectrum Modulation的缩写,一共有三代: DSM、DSM2、DSMX。国内最常见的是DSM2,JR的遥控器和Spectrum 的遥控器都支持。该协议也是一种串行协议,但是比S.BUS更加通用,使用的标准串口定义,所以市面上兼容接收机更加便宜,兼容的设备也更多,比如电直的三轴陀螺VBar就可以直接接受DSM2信号。
但是该协议并不是一种总线化的协议,要靠接收机取把协议变为PWM来驱动舵机,DSM2接口也只能连接接收机和卫星接收机,不过对于飞控来说这个无所谓,反正也是一个接口连接到飞控就可以了。
DSMX是DSM2的升级版,协议基本一样就是速率加快了。DSMX协议可以用于双向传输,即能够将飞机上的信息传回遥控器上在液晶屏显示,不过对于玩儿飞控这个功能不重要,有了电台和PC,这个意义不大。所以我们下面只讨论DSM2协议的接收问题。
b) DSM2硬件协议
DSM2设备使用三线连接,黑色线是地线,红色是电源线,另一条是信号线,这个跟舵机一样,但是注意:电源线是3.3V。
信号线上跑的是标准TTL串口,3.3V电平,串口的电平逻辑跟普通TTL串口一致,可以直接跟现在的大部分单片机兼容,比如STM32。 串口波特率115200,数据位8bit,1个停止位,无校验位,无流控制。
c) DSM2软件协议
软件协议简单得多。
每一帧数据使用两个Byte,16字节。
第1个字节表示此帧状态,为0的时候表示此帧为遥控数据,1的时候表示为其他数据。
后面4个字节为通道ID,对应接收机上面的输出0: Throttle, 1: Aileron, 2: Elevator, 3: Rudder, 4: Gear, 5: Aux1, 6: Aux2, 7: Aux3。
后11个字节是0~2047的通道数据。
1023为中间值对应输出1.5ms的PWM信号,0对应0.75ms,2047对应2.25ms。