基于Arduino平台的pulseIn()函数研究

2019-12-25 01:14景蕾
无线互联科技 2019年20期

景蕾

摘   要:随着无线电遥控技术的迅猛发展,日常生活已经越来越离不开无线电遥控,如遥控监视、报警、航模等。在实际应用时,航模遥控器将操作者的指令以脉位调制信号的形式发出,而后解析成对应通道的脉宽调制信号来实现舵机的控制,从而完成航模基本功能控制。因此,脉宽调制信号中高电平的幅度和占空比的测量精度直接影响了航模的控制精度。文章通过研究给出了Arduino内置pulseIn()函数的测试方法,并借助示波器得到了各通道脈宽调制信号实测结果,通过算法测量与实测结果对比,验证了pulseIn()函数测试算法,对后续应用有一定的指导意义。

关键词:Arduino;占空比;pulseIn函数

1    Adruino开发平台

1.1  Arduino开发板和Arduino  IDE

Arduino[1-2]是一款便捷、灵活、入门简单的开源电子开发平台。它包含硬件(各种型号的微处理器、Arduino控制板)和软件(编程接口、Arduino IDE)两部分。通过搭载各种类型传感器,例如温湿度传感器、超声波传感器、霍尔传感器等,Arduino可以方便地获取各类环境信息,并通过使用各类开源库函数,轻松实现数据的读取、融合、处理和输出,最终满足设计者的需要。Arduino安装目录下自带了很多标准库,通过使用这些标准库,函数经过系统科学的封装,使得用户只要通过操作顶层简单的函数,就可以直接实现某种功能。

1.2  Arduino  UNO

Arduino UNO是Arduino系列开发平台中的一个重要版本,也是从事Arduino开发的一个标准参考模板。UNO使用ATmega328单片机作为主控芯片,具有20路输入/输出端口,端口最大驱动能力40 mA,包含14路(0~13引脚)数字输入/输出端口,6路(3,5,6,9,10,11引脚)可直接作为脉宽调制(Pulse-Width modulationtion,PWM)输出,6路(A0~A5)10位模拟输入/输出端口,同时还包含一个ICSP header、一个复位按钮、一个SPI接口、一个兼容串口和IIC接口。

2    航模遥控器信号

操作者通过遥控器发射控制信号,经过接收机接受处理后,送给Arduino控制板进行处理,可以完成电机控制、灯光控制、液晶显示等诸多功能。因此,掌握Arduino对遥控接收机信号的捕获和处理显得尤为重要。

部分航模遥控器是通过将遥控的控制杆信号或拨动开关信号,经过处理后形成周期为20 ms的脉位调制(Pulse Position Modulation,PPM)[3]信号,并使用2.4 GHz频率的载波调制后发送给接收机,接收机将接收到的信号进行滤波、解调,形成占空比可变的、周期为20 ms的各控制通道的脉冲宽度调制(Pulse Width Modulation,PWM)[4]信号。PWM信号的高电平时间(以ms为单位)对应着遥控器控制杆的行程,其值范围1 000~2 000不等,实际操作时,当遥控器控制杆在最低端,接收机输出值为1 000/20 000左右,即占空比为5%左右的PWM信号;当控制杆在最高端,其输出值为2 000/20 000,即占空比为10%左右的PWM信号,控制杆中间的值对应的PWM信号占空比在最低和最高占空比之间。

接收机将遥控的各通道控制信号解析后,送到Arduino开发板的模拟信号接收引脚进行后续的处理。

本文以Arduino UNO控制板为例,对遥控器接收机信号进行实际解析。

遥控器接收机各通道连接在UNO的模拟端口上。软件设计时,通过Arduino的pinMode()内置函数实现对某个模拟引脚的输入设置。void pinMode(uint8 pin, WiringPinMode mode)函数有两个参数:pin为引脚编号。mode为引脚的输入输出模式,即INPUT和OUTPUT。

遥控器各通道的控制信号,最终以PWM信号的形式被UNO的主控芯片读取,其控制量的大小取决于PWM信号中高电平的幅度和占空比。因此,在对模拟的模式进行设置后,需要进一步获取PWM信号的高电平持续时间,以便计算出输出端的控制信号大小。假设一个标准的PWM信号幅值为A,其信号周期为T,高电平时间为t。将其转化为模拟×信号的有效值AV=A×,AV值的大小将直接决定输入端口的驱动能力大小。

Arduino内置函数pulseIn(pin, value, timeout),pin为想要读取的引脚的标号,value为想要读取的是高电平时间还是低电平时间,timeout表示一次脉冲所持续的微秒数,如果在timeout时间内脉冲没有结束,则函数返回0,正常情况返回高低电平持续时间,单位为ms(10 ms~3 min)。因此,利用pulseIn()函数,用户可以很轻松地获取到某个引脚的高低电平时间。

3    pulseIn()函数测试

本文对该函数的输出结果进行了实际测试,测试平台的搭建包括:某型遥控(含接收机)一部,500 MHz示波器一台。

将接收机和Arduino UNO连接好后,用pulseIn()函数测试遥控器3通道摇杆最低点、中点、最高点的输出值,通过IDE自带的串口监视器观察其输出值。

将3通道摇杆拉至最低,使用pulseIn()函数得到高电平时间为992 μs;使3通道摇杆自回中,pulseIn()函数得到高电平时间为1 505 μs;将3通道摇杆拉至最高,pulseIn()函数的到高电平时间为2 008 μs。使用pulseIn()函数测量的同时,将3通道的输出信号连接到示波器,得到上述3种情况的波形图。从图1可以看到,摇杆最低时,值为1.00 ms;从图2可以看到,自回中时,值为1.51 ms;从图3可以看到,摇杆最高时,值为2.02 ms。由3次结果可以看出,PWM波形存在27 μs的上升时间和30 μs的下降时间,其误差范围在10-3 ms级上。

通过上述测试结果可知,如果用pulseIn()函数进行较高频率周期信号测量,在进行信号上升沿和下降沿的处理时,会存在一定误差。

4    结语

本文对基于Arduino平台的常见遥控器信号进行了解析,给出了函数pulseIn()的测量方法,并对Arduino内置函数pulseIn()进行了实际测量,结合500 MHz示波器数值得到了测量值,对后续Arduino平台的pulseIn()函数应用有一定的指导意义。

[参考文献]

[1]蔡睿妍.Arduino的原理及应用[J].电子设计工程,2012(16):155-157.

[2]杨继志,郭敬.Arduino的互动产品平台创新设计[J].单片机与嵌入式系统应用,2012(4):39-41.

[3]向劲松,肖刚.PPM与LDPC光通信系统中脉冲展宽效应补偿办法[J].光通信研究,2016(4):60-62,71.

[4]李彩侠,李屹坤.一种无刷直流电机四象限PWM调制方式的分析和设计[J].集成电路应用,2019(6):122-124.