教程四 无编码器电机控制例程
来自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供电接口接上电源后运行程序,可以看见电机开始转动。
程序解析
//以下定义了用于控制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); }