[RISC-V MCU 应用开发] 在Arduino上给ESP32写一个驱动舵机MG90S的函数

[复制链接]
 楼主| gaoyang9992006 发表于 2023-10-11 16:33 | 显示全部楼层 |阅读模式
本帖最后由 gaoyang9992006 于 2023-10-11 16:44 编辑

发现Arduino上的舵机驱动函数没有适配ESP32,于是我着手写一个。发现ESP32的Arduino标准库提供了LED控制函数ledc xxx,可以生成PWM信号。那么就在这个基础上实现

一个初始化:用于指定ledc通道和映射的引脚

一个设置舵机旋转角度的函数:用于指定对应通道上的旋转角度

舵机控制方式,通过一个50Hz信号来控制,对应脉宽如下

这个PWM的周期为20ms,高电平的时间在0.5ms~2.5ms之间可以控制舵机桨角度的停留位置。
O.5ms---------0度
1.0ms---------45度
1.5ms---------90度
2.0ms---------135度
2.5ms---------180度

游客,如果您要查看本帖隐藏内容请回复


  1. #include "MG90S.h"
  2. // use first channel of 16 channels (started from zero)
  3. #define MG90S_CHANNEL_0     0

  4. // 指定映射引脚
  5. #define MG90S_01_PIN            9

  6. void setup()
  7. {
  8.   MG90S_init(MG90S_CHANNEL_0,MG90S_01_PIN);
  9. }

  10. void loop()
  11. {
  12.   for(uint8_t i=0;i<=180;i++)
  13.   {
  14.     MG90S_servo(MG90S_CHANNEL_0,i);
  15.     delay(100);
  16.   }
  17. }



经过测试效果贼拉好。


补充,以上是只负载一个舵机的测试,修改程序,再增加一路测试
  1. #include "MG90S.h"
  2. // use first channel of 16 channels (started from zero)
  3. #define MG90S_CHANNEL_0     0

  4. // 指定映射引脚
  5. #define MG90S_01_PIN        9

  6. void setup()
  7. {
  8.   MG90S_init(MG90S_CHANNEL_0,MG90S_01_PIN);
  9.   MG90S_init(1,2);
  10. }

  11. void loop()
  12. {
  13.   for(uint8_t i=0;i<180;i++)
  14.   {
  15.     MG90S_servo(MG90S_CHANNEL_0,i);    MG90S_servo(1,i);
  16.     delay(50);
  17.   }
  18.   for(uint8_t i=180;i>0;i--)
  19.   {
  20.     MG90S_servo(MG90S_CHANNEL_0,i);    MG90S_servo(1,i);
  21.     delay(50);
  22.   }
  23. }

效果同样是惊人的好用,以后用Arduino开发ESP32的舵机驱动就用这个了,太好用了。最多可以驱动16个舵机运动。
zwsam 发表于 2023-10-12 09:06 | 显示全部楼层
cmxgx 发表于 2023-12-29 10:21 | 显示全部楼层
Servo.h
Zhz1015 发表于 2024-9-4 20:35 | 显示全部楼层
赞一个
Superkt 发表于 2024-12-22 19:57 | 显示全部楼层
11111
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:如果你觉得我的分享或者答复还可以,请给我点赞,谢谢。

2046

主题

16351

帖子

222

粉丝
快速回复 在线客服 返回列表 返回顶部