(ESP32学习9)PWM的输出

这一篇给大家讲讲ESP32输出PWM 的操作,我手里有一款360度的舵机 (MG 996R),来作为实验测试的模块,驱动他运动

先给大家讲讲舵机的驱动吧 , 虽然之前在STM32的博文里面的其中一篇讲PWM的博文已经讲过了,但在这里再讲一遍,我们手里的舵机模块基本都是靠时基脉冲中的占空比调节来控制的,那再具体再说的通俗一点呢?就是比如我的时基为20ms , 要求舵机转到0度的所要求的的占空比为0.5ms , 那么我们就需要以20ms为一个周期 ,每个周期内的高电平时间为0.5ms(这就是占空比),然后其余时间为低电平即可,而具体到我手上的这个360度舵机呢,说实话不建议大家使用360度舵机,因为360度舵机失去了舵机最大的优势就是角度调节,我可以控制比如180度的舵机能够精确转动到哪一个位置,但是360度舵机不行,我们只能控制他正反转以及正反转速度,但是控制方法十一摸一样的,话不多说,开干

老规矩先上代码,大伙儿品品

#include 

 // 舵机通道 
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输出功能模式
}

一些需要注意的地方

1.注意PWM的最重要双要素

也就是频率与占空比,这上面我设置的频率为50,那么一个周期就是1/50那就是20ms,刚好就是我们的时基的长度,而占空比呢,上面有一个选项是设置这个PWM通道的分辨率,我这里设置10,那么占空比取值就是 0-2的10次方 , 也就是 0-1024 ,也就是在20ms这个时长内被分成1024份,我们需要20ms中1.5ms为高电平,那么就需要这1024份的前1.5/20这个比例的部分为高电平。

2.注意PWM的通道以及绑定的IO

我们要先制定好我们使用的是哪个通道,一共有16个通道,然后我们还要指定IO去绑定上我们就可以使用这个io输出我们的PWM 了

最后

没有最后

你可能感兴趣的:(esp32相关操作)