舵机的使用方法(ESP32--Arduino)

目录

       舵机的原理图如下所示:​编辑一、不同舵机的差异 

1. 扭矩:

2. 工作角度:

3. 速度:

4. 通讯协议:

5. 工作电压:

6. 外壳及齿轮材质:

7. 尺寸:

8. 马达类型:

9. 配件:

10. 可靠性指标:

二、如何控制舵机工作

  1.控制原理

  2.引脚

  3.代码   

    1.180度舵机(经验证)

    ​编辑2.360度舵机


       舵机是一种精密控制类电动机,也是电动机的一种,它的主要作用是旋转到某一指定位置,在机器人领域使用得相当的广泛,用来实现各种机械臂和机器人关节的运动。

       舵机的原理图如下所示:一、不同舵机的差异 

1. 扭矩:

       舵机的扭矩决定了它能驱动的负载大小,是选型时的重要指标。扭矩越大,能承受的外部负载就越强。

2. 工作角度:

       舵机的控制角度范围影响其在机械系统中的适用性。有些舵机能提供180度的角度控制,而有些则能提供360度或更多,这需要根据应用需求来选择。

3. 速度:

       转速由舵机无负载情况下转过一定角度所需时间来衡量,与马达类型、电压、齿轮箱减速比等因素有关。快速响应的应用场合需要选择转速快的舵机。

4. 通讯协议:

       不同的舵机可能支持不同的通讯协议,如PWM或总线控制信号。PWM舵机需要持续输入信号,而总线舵机具有保持功能,可以按需求选择适合的通讯方式。

5. 工作电压:

       舵机的工作电压直接关系到其动力输出和能耗,需要根据系统供电情况和能耗要求进行选择。

6. 外壳及齿轮材质:

       外壳和齿轮的材质会影响舵机的耐用性和重量。金属齿轮通常更耐用但会增加重量,塑料齿轮则相反。

7. 尺寸:

       根据安装空间和机械设计的需求,选择合适尺寸的舵机至关重要。

8. 马达类型:

       不同类型的马达(如直流电机、步进电机等)有不同的特性,例如步进电机可以提供精确的位置控制。

9. 配件:

       舵机的配件,如线缆长度、连接器类型也需要考虑,以便与现有系统兼容。

10. 可靠性指标:

       对于设备中使用的舵机,除了基本的动力性能外,还要关注寿命、稳定性、一致性、噪音和耐高低温等可靠性要求。

二、如何控制舵机工作

  1.控制原理

     当舵机收到某个范围内的脉冲信号后,会依据该脉冲的宽度,转到相应的位置。直到下一个控制脉冲来临之前,该舵机的位置均不会发生改变。输入的控制脉宽与舵机的角度之间的关系如下图所示:

        360度舵机通常无限位器,所以可以连续旋转。360度舵机的控制通过20ms的脉冲来进行控制(高电平宽度不大于2.5ms)当脉冲高电平宽度在1.5ms附近时,360度舵机停止运动,当脉冲高电平宽度大于1.5ms时,舵机为正转状态,高电平时长越长,电机转速越快。当脉冲高电平时长小于1.5ms时,舵机为反向转动状态,高电平时间越短,电机转速越快。

  2.引脚

      舵机的三个引脚:电源+、电源GND和信号线。

  3.代码   

    1.180度舵机(经验证)

#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));
  }
}

    2.360度舵机

#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输出功能模式
}

  • 29
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值