当前位置:   article > 正文

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

esp32控制舵机

目录

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

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度舵机(经验证)

  1. #include <Arduino.h>
  2. int freq = 50;
  3. int channel = 8;
  4. int resolution = 8;
  5. const int led = 13;
  6. const int botton = 12;
  7. int calculatePWM(int degree) //定义函数用于输出PWM的占空比
  8. { //0-180度
  9. //20ms周期内,高电平持续时长0.5-2.5ms,对应0-180度舵机角度,参考上面的180度对应图。
  10. const float deadZone = 6.4;//对应0.5ms(0.5ms/(20ms/256))
  11. const float max = 32;//对应2.5ms(2.5ms/(20ms/256))
  12. if (degree < 0)
  13. degree = 0;
  14. if (degree > 180)
  15. degree = 180;
  16. return (int)(((max - deadZone) / 180) * degree + deadZone); //返回度数对应的高电平的数值
  17. }
  18. void setup() {
  19. pinMode(botton, INPUT);
  20. Serial.begin(9600);
  21. ledcSetup(channel, freq, resolution);
  22. ledcAttachPin(led, channel);
  23. int bottonstate = 0;
  24. }
  25. void loop() {
  26. int bottonstate = digitalRead(botton);
  27. if (bottonstate == HIGH){
  28. ledcWrite(channel, calculatePWM(90)); // 输出PWM,设置 LEDC 通道的占空比。
  29. }
  30. else{
  31. ledcWrite(channel, calculatePWM(0));
  32. }
  33. }

    2.360度舵机

  1. #include <Arduino.h>
  2. int t = 100;
  3. int channel_PWM = 3; //使用3号通道 定时器1 总共16个通道
  4. // 舵机频率,那么周期也就是1/50,也就是20ms ,PWM⼀共有16个通道,0-7位⾼速通道由80Mhz时钟驱动,后⾯8个为低速通道由1Mhz
  5. int freq_PWM = 50; //50HZ pwm波
  6. // PWM分辨率,取值为 0-20 之间 ,这⾥填写为10,那么后⾯的ledcWrite 这个⾥⾯填写的pwm值就在 0 - 210次⽅ 之间 也就是 0-1024,如果是要求不⾼的东西你可以直接拿1000去算了
  7. int res_PWM = 10; //分辨率 0-10241025
  8. const int PWM_PIN = 4; //使用4号引脚
  9. void setup() {
  10. ledcSetup(channel_PWM,freq_PWM,res_PWM); //设置通道
  11. ledcAttachPin(PWM_PIN,channel_PWM); //将引脚绑定到通道上
  12. }
  13. //正传t秒 停止t秒 反转t秒 停止t秒 循环...
  14. void loop() {
  15. ledcWrite(channel_PWM,52); //20ms⾼电平为1ms左右 ,也就是1/20*1024 = 52,此时360度舵机正传5
  16. delay(t);
  17. ledcWrite(channel_PWM, 77); //20ms⾼电平为1.5ms左右 ,也就是1.5/20*1024 = 77,此时360度舵机⼏乎停转
  18. delay(t);
  19. ledcWrite(channel_PWM, 102); //20ms⾼电平为2ms左右 ,也就是2/20*1024 = 102,此时360度舵机反转
  20. delay(t);
  21. ledcWrite(channel_PWM, 77); //20ms⾼电平为1.5ms左右 ,也就是1.5/20*1024 = 77,此时360度舵机⼏乎停转
  22. delay(t);
  23. //ledcDetachPin(PWM_Pin); //这个是解除IO⼝的pwm输出功能模式
  24. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/天景科技苑/article/detail/961093
推荐阅读
相关标签
  

闽ICP备14008679号