Arduino UNO驱动数字舵机
2021/5/18 18:28:57
本文主要是介绍Arduino UNO驱动数字舵机,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Arduino UNO驱动数字舵机
- 舵机
- 数字舵机工作原理
- 数字舵机与模拟舵机区别
- EMAX ES08MD II 金属数字舵机
- Arduino UNO与数字舵机接线
- 测试代码
- 总结
舵机
舵机是一种特殊的电动机,或者更具体来说它是一个闭环控制系统(伺服系统)。舵机包括一个小型直流电机,加上传感器、控制芯片、减速齿轮组,装进一体化外壳,能够通过输入信号(一般是PWM信号,也有的是数字信号)控制旋转角度。标准的舵机有3根导线:电源线,地线,控制线。
数字舵机工作原理
数字舵机内部有一个基准电路,产生周期为20ms,宽度为1.5ms的基准信号。当外部控制信号进入控制芯片,获得直流偏置电压。将获得的直流偏置电压与电位器的电压比较,获得电压差输出。最后,电压差的正负输出到电机驱动芯片决定电机的正反转。当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为0, 电机停止转动。
数字舵机与模拟舵机区别
数字舵机和模拟舵机在基本的机械结构方面是完全一样的,主要由马达、减速齿轮、控制电路等组成。
最大区别则体现在控制电路上,数字舵机的控制电路比模拟舵机的多了微处理器和晶振。数字舵机一般均采用PID优化算法,所以,线性要好过模拟舵机。模拟舵机由于控制芯片是模拟电路,所以即便是相同型号的舵机会存在小小的性能差异,而数码舵机在一致性方面就非常好。
模拟舵机需要给它不停的发送PWM信号,才能让它保持在规定的位置或者让它按照某个速度转动,数字舵机则只需要发送一次PWM信号就能保持在规定的某个位置。
数字舵机以高得多的频率向马达发送控制脉冲信号。就是说,相对于传统的50脉冲/秒,现在是300脉冲/秒。每个动力脉冲的宽度被减小了,但马达在同一时间里收到更多的激励信号,并转动得更快。这也意味着不仅仅舵机马达以更高的频率响应控制脉冲信号,而且“无反应区”变小;反应变得更快;加速和减速时也更迅速、更柔和;数字舵机提供更高的精度和更好的固定力量。
不管是模拟还是数码舵机,在负载转矩不变时,电机转速取决于控制脉冲信号占空比大小而与频率无关。数码舵机可接收更高频率的 PWM 外部控制信号,可在更短的周期时间后获得位置信息,对舵机摇臂位置做最新调整。所以说数字舵机的反应速度比模拟舵机快,而不是驱动电机转速比模拟舵机快。
对于高灵敏度的控制,建议选择数字舵机,如直升机的控制,高速固定翼飞机,高速滑翔机,比赛用车膜型,云台的控制等。对于不是特别需要灵敏度的场合,如低速固定翼(二战飞机,练习机,低速滑翔机等),船模,娱乐用车模等。可以考虑模拟舵机。
数字舵机以更高频率去修正马达,这一定会增加总体的动力消耗。马达总在转来转去做修正,这一定会增加马达等转动部位的消耗,相对较短的寿命。
EMAX ES08MD II 金属数字舵机
Arduino UNO与数字舵机接线
测试代码
/* Controlling a servo position using a potentiometer (variable resistor) modified on 8 Nov 2013 by Scott Fitzgerald http://www.arduino.cc/en/Tutorial/Knob */ #include <Servo.h> Servo myservo; // create servo object to control a servo int potpin = A0; // analog pin used to connect the potentiometer int val; // variable to read the value from the analog pin void setup() { myservo.attach(9); // attaches the servo on pin 9 to the servo object } void loop() { val = analogRead(potpin); // reads the value of the potentiometer (value between 0 and 1023) val = map(val, 0, 1023, 0, 180); // scale it for use with the servo (value between 0 and 180) myservo.write(val); // sets the servo position according to the scaled value delay(15); // waits for the servo to get there }
Arduino的ADC采集电位器的电压值(0-5V)转换成对应舵机旋转角度(0-180度),手动调节电位器时,舵机跟着旋转一定的角度,电位器停止调节时,舵机停留在固定的角度停止转动。
总结
大致了解下模拟与数字舵机的区别和原理,根据自己的应用情况选取合适的舵机,从模拟或数字,塑料或金属、转速、转矩、最大旋转角度等考虑。由于电机类产品驱动电流较大,舵机最好用舵机驱动板连接。重点专注于使舵机旋转的输入信号的控制。
这篇关于Arduino UNO驱动数字舵机的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-10SpringBoot 内部方法调用,事务不起作用的原因及解决办法
- 2024-11-10独立开发者 5 个月,月收入赶超北京工资,我的一点心得
- 2024-11-09程序员 SEO 系列:如何找到更多搜索关键词?
- 2024-11-09为何选择Spring AI Alibaba开发智能客服平台?
- 2024-11-09Sentinel不同的流控效果资料详解
- 2024-11-09Sentinel配置限流资料:新手入门教程
- 2024-11-09Sentinel配置限流资料详解
- 2024-11-09Sentinel熔断规则配置资料详解
- 2024-11-08Sentinel熔断规则配置资料详解
- 2024-11-08Sentinel限流资料入门教程