四轴飞行器Arduino控制多电调控制测试

很长时间没折腾了,因为前段时间忙家里的事情、学校的事情,所以就耽搁了。昨天搞了一个通宵,搞定了今天上午的一个报告,下午就继续搞飞机了。
我们原定的目标就是通过arduino来作为四轴飞行器的控制板,那么必然就需要用arduino来控制四个电机的转速,其实就是多pwm输出。在去年我已经实现了单电机的输出,发现了不少问题。
首先,舵机的信号格式和我们用的电调的信号格式是相同的,一般来说,航模上的电调信号线接于接收器的三号通道上,但是,如果接在别的通道上也是能正常工作的,这也证明了他们之间信号是相同的。
但是,上次通过arduino上的servo库来控制电机时,发现servo库输出的pwm宽度会超过电调接收的范围,从而导致电机无法启动。然而,通过遥控器遥控时就不存在这个问题。所以,我今天就首先对遥控器的pwm信号进行测量,然后对arduino输出的pwm信号进行测量。然后计算出控制方式。注意:这里的pwm信号是通过arudino上servo库输出的pwm信号,它是脉冲宽度调制,不是arduino默认的pwm,默认的pwm是通过占空比来模拟一个模拟量。
好了,不多说,上图。
首先,测试电池是否有能力带动两个电机同时稳定地工作,我用遥控器电路对他们进行了测试。先搭建了一个下图所示的电路,进行测试。
然后就需要测量遥控器输出的脉冲宽度和arduino输出的脉冲宽度,搭了下面这个电路。为此我还去买了能测占空比的ut10a,但是那个万用表实在不给力,根本没有办法量到数据。-_-b
这张图当中电调只是起到供电的作用,所以并没有连电机。
无奈,但是发现arduino有pulsein()这个函数,可以计算一个高电平或低电平持续时间,正好,把数据拿下了。
最高位: 1900us
最低位: 1100us
那么就碰到了另外一个问题,既然没有仪器来测量脉冲宽度,那如何去测量arduino输出的pwm脉冲的宽度呢?我在万念俱灰的情况下,把两个arduino上的数字端口连在了一起,就像下面图中的一样,看看是否能自己测量自己。
结果很出乎意料,居然得到数据了,真的很佩服arduino写底层库的人,中断控制得如此完美:-)
可以看到,servo库在输出0时,对应的脉冲宽度为522ms;而输出180时,对应的脉冲宽度为2373ms。远远大于遥控器输出的范围,所以导致一开始电调无法识别arduino的pwm信号。这样经过简单的计算就可得出,电调的最低位应为56度,最高位应为133度。:-d
有了这个重要的数据,下面就可以用它来控制电机了。不过首先还是先让程序控制舵机,保证他能正常运行,呵呵。
测试通过之后,就上电机啦。通过控制板上的两个旋钮,其实就是可变电阻,来控制电机的速度。
控制板特写
右边的电源模块特写,整个系统的动力电源和控制电源分为两路,控制电源由我自己做的手机电池包来提供.
电机特写,呵呵,山寨味道太浓了
最后,我测了下电机的电流,在两个电机空载,半油门的情况下,电流为4a左右。这两个电机都是经过风风雨雨的,什么坠机、落水都经历过,轴已经有点不正常了,所以也只是带大概估计一下。
下面就是测试程序
#include //author: he qichen //date: 2011-5-27 //website: http://gaishi.vicp.net //email: heqichen(a)gaishi.vicp.net #define inputpin1 a8 #define inputpin2 a9 #define motorpin1 5 #define motorpin2 6 servo motor1; servo motor2; void setup() { motor1.attach(motorpin1); motor2.attach(motorpin2); motor1.write(motorspeedtransfer(0)); motor2.write(motorspeedtransfer(0)); serial.begin(9600); } void loop() { int input1, input2; int speed1, speed2; input1 = analogread(inputpin1); input2 = analogread(inputpin2); speed1 = motorspeedtransfer(input1); speed2 = motorspeedtransfer(input2); motor1.write(speed1); motor2.write(speed2); serial.print(#1 value: ); serial.print(speed1, dec); serial.print( #2 value: ); serial.println(speed2, dec); delay(500); } int motorspeedtransfer(int s) { return (s/13 + 56); }
GPC系列线性直流电源的产品特性及应用
TE Connectivity最新产品10GB/S高速电缆
中国铁塔累计承建5G基站超70万个,97%利用已有站址资源改造实现
全球云基础设施服务市场数据公布:阿里排名第二,腾讯首超谷歌位列前四
CANbus专用工具包Simulink仿真
四轴飞行器Arduino控制多电调控制测试
TCL已成为全球化的智能产品制造及互联网应用服务企业集团
冠状病毒对科技行业供应链的影响有多大?
你应该知道的S7-300的编程技巧
如何让MR变得更落地、更易用
荣耀8和p9谁会更值
超级ARM DIY计算机平台MarS Board
一文看懂单相异步电动机的工作原理
魅族pro7最新消息,魅族pro7什么时候上市?魅族pro7配置真机上手图大爆料,副屏还能这么玩?
linux学习笔记
虹科案例 | 虹科eX700G系列工控屏在油田注水站中的应用
多屏显示卡的最大分辨率/分屏数
Pursim宣布发布Librem 5 USA,进一步为消费者提供了安全的智能手机
以最小型设计实现高音质便携性Model XS
机器人如何让电网变聪明