打印
[RISC-V MCU 应用开发]

在Arduino上给ESP32写一个驱动舵机MG90S的函数

[复制链接]
2983|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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度

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


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

// 指定映射引脚
#define MG90S_01_PIN            9

void setup()
{
  MG90S_init(MG90S_CHANNEL_0,MG90S_01_PIN);
}

void loop()
{
  for(uint8_t i=0;i<=180;i++)
  {
    MG90S_servo(MG90S_CHANNEL_0,i);
    delay(100);
  }
}



经过测试效果贼拉好。


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

// 指定映射引脚
#define MG90S_01_PIN        9

void setup()
{
  MG90S_init(MG90S_CHANNEL_0,MG90S_01_PIN);
  MG90S_init(1,2);
}

void loop()
{
  for(uint8_t i=0;i<180;i++)
  {
    MG90S_servo(MG90S_CHANNEL_0,i);    MG90S_servo(1,i);
    delay(50);
  }
  for(uint8_t i=180;i>0;i--)
  {
    MG90S_servo(MG90S_CHANNEL_0,i);    MG90S_servo(1,i);
    delay(50);
  }
}

效果同样是惊人的好用,以后用Arduino开发ESP32的舵机驱动就用这个了,太好用了。最多可以驱动16个舵机运动。

使用特权

评论回复

相关帖子

沙发
zwsam| | 2023-10-12 09:06 | 只看该作者
ok

使用特权

评论回复
板凳
cmxgx| | 2023-12-29 10:21 | 只看该作者
Servo.h

使用特权

评论回复
地板
Zhz1015| | 2024-9-4 20:35 | 只看该作者
赞一个

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:西安公路研究院南京院
简介:主要工作从事监控网络与通信网络设计,以及从事基于嵌入式的通信与控制设备研发。擅长单片机嵌入式系统物联网设备开发,音频功放电路开发。

1943

主题

15851

帖子

205

粉丝