教程四 无编码器电机控制例程

来自Waveshare Wiki
跳转至: 导航搜索

各模块使用教程

无编码器电机

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

例程

上传程序

下载压缩包后双击打开nospeedget.ino,用USB线将多功能驱动板和计算机连接起来(此处插入的是多功能驱动板USB的Type-C接口),点击“工具”→“端口”,再点击新出现的COM(我这里新出现的COM为COM26)。
二端口.png
在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);
}

资料