教程二 无编码器电机控制例程
来自Waveshare Wiki
各模块使用教程
- 序章 安装Arduino IDE
- 教程一 带编码器电机控制例程
- 教程二 无编码器电机控制例程
- 教程三 ST3215总线舵机控制例程
- 教程四 PWM舵机控制例程
- 教程五 IMU数据读取例程
- 教程六 SD卡读取例程
- 教程七 INA219电压电流监测例程
- 教程八 OLED屏幕控制例程
- 教程九 激光雷达和在ROS2中发布雷达话题
- General Driver for Robots 主页
无编码器电机
无编码器电机无法获得速度反馈,只能进行开环控制,也就是说,当你将电机和驱动板连接上并接通电源后,使电机进入转动状态后,驱动板会将程序的指令一次性输向电机。之后,无法对电机的变化作进一步的控制。以下提供无编码器电机转动控制程序。
例程
上传程序
下载压缩包后双击打开nospeedget.ino,用USB线将多功能驱动板和计算机连接起来(此处插入的是多功能驱动板USB的Type-C接口),点击“工具”→“端口”,再点击新出现的COM(我这里新出现的COM为COM26)。

在Arduino IDE中,点击“工具”→“开发板”→“ESP32”→“ESP32 Dev Module”。开发板以及端口都选择好后上传程序。上传程序后,将无编码器电机和驱动板上的电机接口PH2.0 2P连接上,将XH2.54供电接口接上电源后运行程序,可以看见电机开始转动。
程序解析
const uint16_t PWMA = 25;
const uint16_t AIN2 = 17;
const uint16_t AIN1 = 21;
const uint16_t BIN1 = 22;
const uint16_t BIN2 = 23;
const uint16_t PWMB = 26;
const uint16_t ANALOG_WRITE_BITS = 8;
int freq = 100000;
int channel_A = 0;
int channel_B = 1;
int resolution = ANALOG_WRITE_BITS;
void initMotors(){
pinMode(AIN1, OUTPUT);
pinMode(AIN2, OUTPUT);
pinMode(PWMA, OUTPUT);
pinMode(BIN1, OUTPUT);
pinMode(BIN2, OUTPUT);
pinMode(PWMB, OUTPUT);
ledcSetup(channel_A, freq, resolution);
ledcAttachPin(PWMA, channel_A);
ledcSetup(channel_B, freq, resolution);
ledcAttachPin(PWMB, channel_B);
}
void forwardA(uint16_t pwm){
digitalWrite(AIN1, LOW);
digitalWrite(AIN2, HIGH);
ledcWrite(channel_A, pwm);
}
void forwardB(uint16_t pwm){
digitalWrite(BIN1, LOW);
digitalWrite(BIN2, HIGH);
ledcWrite(channel_B, pwm);
}
void setup() {
initMotors();
}
void loop() {
forwardA(400);
forwardB(400);
}
