一、在PWM示例程序的基础上,编写moto_control.h moto_control.cpp。
pwm.h、pwm.cpp 包含两个函数,一个是初始化,一个是设置占空比。这可以直接拿来控制电机用。
#ifndef _pwm_H
#define _pwm_H
#include "public.h"
//函数声明
void pwm_init(u8 pin,u8 chanel,u8 freq,u8 resolution);
void pwm_set_duty(u8 chanel,u16 duty);
#endif
#include "pwm.h"
//PWM初始化
//pin:引脚号
//chanel:PWM输出通道0-15
//freq:PWM输出频率,单位HZ
//resolution:PWM占空比的分辨率1-16,比如设置8,分辨率范围0-255
void pwm_init(u8 pin,u8 chanel,u8 freq,u8 resolution)
{
ledcSetup(chanel, freq, resolution);// PWM初始化
ledcAttachPin(pin, chanel);// 绑定PWM通道到GPIO上
}
//PWM占空比设置
void pwm_set_duty(u8 chanel,u16 duty)
{
ledcWrite(chanel,duty);// 改变PWM的占空比
}
moto_control.h moto_control.cpp 代码如下:
#ifndef _MOTO_CONTROL_H
#define _MOTO_CONTROL_H
#include "public.h"
#include "pwm.h"
//控制管脚定义
#define MOTO_A1 15
#define MOTO_A2 4
#define MOTO_B1 16
#define MOTO_B2 17
//PWM通道定义
#define PWM0 0
#define PWM1 1
#define PWM2 2
#define PWM3 3
//函数声明
void moto_init(void);
void turn_left(void);
void turn_right(void);
void stop_A(void);
void stop_B(void);
void stop_all(void);
void Forward(void);
void Backward(void);
#endif
#include "moto_control.h"
//led初始化
void moto_init(void)
{
pinMode(MOTO_A1, OUTPUT);//设置引脚为输出模式
pinMode(MOTO_A2, OUTPUT);//设置引脚为输出模式
pinMode(MOTO_B1, OUTPUT);//设置引脚为输出模式
pinMode(MOTO_B2, OUTPUT);//设置引脚为输出模式
}
void turn_left(void){ //左轮反转、右轮正转
pwm_set_duty(PWM0,1000);
pwm_set_duty(PWM1,0); //MOTO_A2设为低电平
pwm_set_duty(PWM2,0); //MOTO_B1设为低电平
pwm_set_duty(PWM3,0); //MOTO_B1设为低电平
// for(int i=0;i<1000;i+=10){ //调节MOTO_A1占空比 MOTO_A1 MOTO_A2 = 10 电机反转 可变速
// pwm_set_duty(PWM0,i);
// pwm_set_duty(PWM3,i);
// delay(10);
// }
delay(100);//调节延时,可控制转弯角度
stop_all();
}
void turn_right(void){ //左轮正转、右轮反转
pwm_set_duty(PWM0,0);
pwm_set_duty(PWM1,0); //MOTO_A2设为低电平
pwm_set_duty(PWM2,1000); //MOTO_B1设为低电平
pwm_set_duty(PWM3,0); //MOTO_B1设为低电平
// for(int i=