无感BLDC简易实验
不信幼儿 2021-04-28 05:29:14 平时能看到的BLDC驱动在硬件及软件上较复杂,不利于小白们的动手实验。为了简化无感BLDC的驱动试验,也为了降低成本,做了一个无感BLDC实验。欢迎指教或拍砖!
硬件有:
ESP32-DEV-MODULE(CPU应该能用STM32F103C8T6,成本更低)
MX1508
相机平台用无刷电机(无感)
电源
软件程序如下:
//testBldcEsp32.ino
//ESP32 GPIO2脚连接GPIO13脚
#include <ESP32Servo.h>
ESP32PWM pwm;
byte ledPin = 2, sequence = 0, plusPin = 13, tri1 = 17, tri2 = 18, tri3 = 19;
int pwmFreq = 120; //起动脉冲频率,按需调整
float dutyRatio = 0.5; //脉冲占空比
void bldcRun(){
sequence++; // 三相线圈通电顺序
pwmFreq++; // 运行脉冲变频
if (pwmFreq > 165) pwmFreq--;//运行脉冲频率,按需调整
}
void switchRun(byte i){
if (sequence > 6) sequence = 1;
switch(i){ //1H,2L,3H,1L,2H,3L
case 1: digitalWrite(tri1, HIGH); break;
case 2: digitalWrite(tri2, LOW); break;
case 3: digitalWrite(tri3, HIGH); break;
case 4: digitalWrite(tri1, LOW); break;
case 5: digitalWrite(tri2, HIGH); break;
case 6: digitalWrite(tri3, LOW); break;
}
pwm.adjustFrequency(pwmFreq);
}
void setup() {
pinMode(tri1, OUTPUT); // MX1508-A1
pinMode(tri2, OUTPUT); // MX1508-A2
pinMode(tri3, OUTPUT); // MX1508-B1
pwm.attachPin(ledPin, pwmFreq, 10); //PWM发生器
pwm.writeScaled(dutyRatio);
attachInterrupt(plusPin, bldcRun, CHANGE); //由PWM脉冲导致的外部中断
}
void loop(){ switchRun(sequence); }
// pwmFreq(max) = 25KHZ时 8.333KHZ/trix