赞
踩
目录
舵机是一种精密控制类电动机,也是电动机的一种,它的主要作用是旋转到某一指定位置,在机器人领域使用得相当的广泛,用来实现各种机械臂和机器人关节的运动。
舵机的扭矩决定了它能驱动的负载大小,是选型时的重要指标。扭矩越大,能承受的外部负载就越强。
舵机的控制角度范围影响其在机械系统中的适用性。有些舵机能提供180度的角度控制,而有些则能提供360度或更多,这需要根据应用需求来选择。
转速由舵机无负载情况下转过一定角度所需时间来衡量,与马达类型、电压、齿轮箱减速比等因素有关。快速响应的应用场合需要选择转速快的舵机。
不同的舵机可能支持不同的通讯协议,如PWM或总线控制信号。PWM舵机需要持续输入信号,而总线舵机具有保持功能,可以按需求选择适合的通讯方式。
舵机的工作电压直接关系到其动力输出和能耗,需要根据系统供电情况和能耗要求进行选择。
外壳和齿轮的材质会影响舵机的耐用性和重量。金属齿轮通常更耐用但会增加重量,塑料齿轮则相反。
根据安装空间和机械设计的需求,选择合适尺寸的舵机至关重要。
不同类型的马达(如直流电机、步进电机等)有不同的特性,例如步进电机可以提供精确的位置控制。
舵机的配件,如线缆长度、连接器类型也需要考虑,以便与现有系统兼容。
对于设备中使用的舵机,除了基本的动力性能外,还要关注寿命、稳定性、一致性、噪音和耐高低温等可靠性要求。
当舵机收到某个范围内的脉冲信号后,会依据该脉冲的宽度,转到相应的位置。直到下一个控制脉冲来临之前,该舵机的位置均不会发生改变。输入的控制脉宽与舵机的角度之间的关系如下图所示:
360度舵机通常无限位器,所以可以连续旋转。360度舵机的控制通过20ms的脉冲来进行控制(高电平宽度不大于2.5ms)当脉冲高电平宽度在1.5ms附近时,360度舵机停止运动,当脉冲高电平宽度大于1.5ms时,舵机为正转状态,高电平时长越长,电机转速越快。当脉冲高电平时长小于1.5ms时,舵机为反向转动状态,高电平时间越短,电机转速越快。
舵机的三个引脚:电源+、电源GND和信号线。
- #include <Arduino.h>
-
- int freq = 50;
- int channel = 8;
- int resolution = 8;
- const int led = 13;
- const int botton = 12;
- int calculatePWM(int degree) //定义函数用于输出PWM的占空比
- { //0-180度
- //20ms周期内,高电平持续时长0.5-2.5ms,对应0-180度舵机角度,参考上面的180度对应图。
- const float deadZone = 6.4;//对应0.5ms(0.5ms/(20ms/256))
- const float max = 32;//对应2.5ms(2.5ms/(20ms/256))
- if (degree < 0)
- degree = 0;
- if (degree > 180)
- degree = 180;
- return (int)(((max - deadZone) / 180) * degree + deadZone); //返回度数对应的高电平的数值
- }
-
-
- void setup() {
- pinMode(botton, INPUT);
- Serial.begin(9600);
- ledcSetup(channel, freq, resolution);
- ledcAttachPin(led, channel);
- int bottonstate = 0;
- }
-
- void loop() {
-
- int bottonstate = digitalRead(botton);
- if (bottonstate == HIGH){
- ledcWrite(channel, calculatePWM(90)); // 输出PWM,设置 LEDC 通道的占空比。
- }
- else{
- ledcWrite(channel, calculatePWM(0));
- }
- }
- #include <Arduino.h>
- int t = 100;
- int channel_PWM = 3; //使用3号通道 定时器1 总共16个通道
- // 舵机频率,那么周期也就是1/50,也就是20ms ,PWM⼀共有16个通道,0-7位⾼速通道由80Mhz时钟驱动,后⾯8个为低速通道由1Mhz
- int freq_PWM = 50; //50HZ pwm波
- // PWM分辨率,取值为 0-20 之间 ,这⾥填写为10,那么后⾯的ledcWrite 这个⾥⾯填写的pwm值就在 0 - 2的10次⽅ 之间 也就是 0-1024,如果是要求不⾼的东西你可以直接拿1000去算了
- int res_PWM = 10; //分辨率 0-1024 共1025
- const int PWM_PIN = 4; //使用4号引脚
- void setup() {
- ledcSetup(channel_PWM,freq_PWM,res_PWM); //设置通道
- ledcAttachPin(PWM_PIN,channel_PWM); //将引脚绑定到通道上
- }
- //正传t秒 停止t秒 反转t秒 停止t秒 循环...
- void loop() {
- ledcWrite(channel_PWM,52); //20ms⾼电平为1ms左右 ,也就是1/20*1024 = 52,此时360度舵机正传5秒
- delay(t);
- ledcWrite(channel_PWM, 77); //20ms⾼电平为1.5ms左右 ,也就是1.5/20*1024 = 77,此时360度舵机⼏乎停转
- delay(t);
- ledcWrite(channel_PWM, 102); //20ms⾼电平为2ms左右 ,也就是2/20*1024 = 102,此时360度舵机反转
- delay(t);
- ledcWrite(channel_PWM, 77); //20ms⾼电平为1.5ms左右 ,也就是1.5/20*1024 = 77,此时360度舵机⼏乎停转
- delay(t);
- //ledcDetachPin(PWM_Pin); //这个是解除IO⼝的pwm输出功能模式
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。