ESP32控制MG996R舵机

2021-11-10  本文已影响0人  DA3D

#include <Arduino.h>

// 舵机通道

int channel_PWM = 3; 

// 舵机频率,那么周期也就是1/50,也就是20ms ,PWM一共有16个通道,0-7位高速通道由80Mhz时钟驱动,后面8个为低速通道由1Mhz时钟驱动

int freq_PWM = 50; 

// PWM分辨率,取值为 0-20 之间  ,这里填写为10,那么后面的ledcWrite 这个里面填写的pwm值就在 0 - 2的10次方 之间 也就是 0-1024 ,如果是要求不高的东西你可以直接拿1000去算了

int resolution_PWM = 10; 

// 绑定的IO,在下面的绑定函数里面会用到,绑定之后这个IO就会变成我们PWM的输出口

const int PWM_Pin = 4;  //指定pwm绑定到这个io上输出

void setup() {

  Serial.begin(115200);

  ledcSetup(channel_PWM, freq_PWM, resolution_PWM); // 设置舵机通道

  ledcAttachPin(PWM_Pin, channel_PWM);  //将 LEDC 通道绑定到指定 IO 口上以实现输出

}

void get_pwm_info()

{

  Serial.println("*******************************************************************");

  Serial.print("读取指定通道占空比的值为:");

  Serial.println(ledcRead(channel_PWM));  //读取指定通道占空比的值

  Serial.print("读取指定通道频率的值为:");

  Serial.println(ledcReadFreq(channel_PWM));  //返回指定通道当前频率(如果当前占空比为0 则该方法返回0)

}

void loop() {

  ledcWrite(channel_PWM, 52);  //20ms高电平为1ms左右 ,也就是1/20*1024,此时360度舵机正传最快

  get_pwm_info();  //打印信息,点击IDE右上角的串口查看器就可以看到打印的内容了

  delay(5000);

  ledcWrite(channel_PWM, 77);  //20ms高电平为1.5ms左右 ,也就是1.5/20*1024,此时360度舵机几乎停转

  get_pwm_info();

  delay(5000);

  ledcWrite(channel_PWM, 102);  //20ms高电平为2ms左右 ,也就是2/20*1024,此时360度舵机反转最快

  get_pwm_info();

  delay(5000);

  //ledcDetachPin(PWM_Pin);  //这个是解除IO口的pwm输出功能模式

}

————————————————

版权声明:本文为CSDN博主「bird1999625」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/ailta/article/details/106537037

上一篇 下一篇

猜你喜欢

热点阅读