跳到主要内容

docs 04 无编码器电机控制例程

无编码器电机

无编码器电机无法获得速度反馈,只能进行开环控制,也就是说,当电机和驱动板连接上并接通电源后,使电机进入转动状态后,驱动板会将程序的指令一次性输向电机。之后,无法对电机的变化作进一步的控制。以下提供无编码器电机转动控制程序。

上传程序

点击 例程下载,解压并打开 nospeedget.ino。用 USB 线将多功能驱动板和计算机连接起来(此处插入的是多功能驱动板 USB 的 Type-C 接口),点击“工具”→“端口”,再点击新出现的 COM(这里新出现的 COM 为 COM26)。

Arduino IDE 端口选择

在 Arduino IDE 中,点击“工具”→“开发板”→“ESP32”→“ESP32 Dev Module”。开发板以及端口都选择好后上传程序。上传程序后,将无编码器电机和驱动板上的电机接口 PH2.0 2P 连接上,将 XH2.54 供电接口接上电源后运行程序,可以看见电机开始转动。

程序解析

//以下定义了用于控制 TB6612 的 ESP32 引脚
//A 路电机
const uint16_t PWMA = 25;
const uint16_t AIN2 = 17;
const uint16_t AIN1 = 21;

//B 路电机
const uint16_t BIN1 = 22;
const uint16_t BIN2 = 23;
const uint16_t PWMB = 26;

//定义 PWM 的精度,精度为 8 时,PWM 数值在 0-255(2^8-1)
const uint16_t ANALOG_WRITE_BITS = 8;

//用于 PWM 输出的引脚的 PWM 频率
int freq = 100000;

//定义 PWM 通道
int channel_A = 0;
int channel_B = 1;
int resolution = ANALOG_WRITE_BITS;

void initMotors(){
//设置用于控制 TB6612FNG 的 ESP32 引脚的工作模式
pinMode(AIN1, OUTPUT);
pinMode(AIN2, OUTPUT);
pinMode(PWMA, OUTPUT);
pinMode(BIN1, OUTPUT);
pinMode(BIN2, OUTPUT);
pinMode(PWMB, OUTPUT);

//设置用于控制 PWM 输出的 ESP32 引脚的通道、频率和精度
ledcSetup(channel_A, freq, resolution);
//将 PWMA 引脚绑定到 A 通道
ledcAttachPin(PWMA, channel_A);

ledcSetup(channel_B, freq, resolution);
ledcAttachPin(PWMB, channel_B);

}

void forwardA(uint16_t pwm){
//设置 A 路电机转动方向
digitalWrite(AIN1, LOW);
digitalWrite(AIN2, HIGH);
//设置 A 通道的 PWM 输出占空比
ledcWrite(channel_A, pwm);
}

void forwardB(uint16_t pwm){
digitalWrite(BIN1, LOW);
digitalWrite(BIN2, HIGH);
ledcWrite(channel_B, pwm);
}

void setup() {
//初始化电机引脚和 PWM 设置
initMotors();
}

void loop() {
//调用 forward 函数
forwardA(400);
forwardB(400);
}