【MPS电机研究院】:一个可行的基于 Arduino 的无刷直流电动机原型设计、制作和展示方案

这是整套方案的实物照:

参考的例程在这里 - https://simple-circuit.com/arduino-brushless-dc-motor-control-l6234/

涉及硬件的改动有两处:
1、电动机驱动芯片的 “Sensor” 电阻器,由于找不到 1Ω 的,于是选用了 4 个 10Ω 的。
2、模拟比较器反馈网络中的 6 个 33KΩ 电阻器出于同样的原因用 6 个 200KΩ 电阻器取代。

涉及软件的改动过程:

例程中的示例程序在 Arduino IDE 中能编译通过,电动机却不能正常运行。
于是开始查找原因。

很快发现,设置部分没有开启全局中断,加上这一句
“sei(); //Enable global interrupt” 之后,电动机能转,但是不能连续转。

继续查找原因,从能正常运行的(在初始设置部分)这段程序中受到启发:
“ i = 50000; // Motor start
while(i > 100) {
delayMicroseconds(i);
bldc_move();
bldc_step++;
bldc_step %= 6;
i = i - 20;
}
”,在主循环中加入两句“delayMicroseconds(500);”和一句“delayMicroseconds(3500);”,电动机依然不能连续运转,于是开始查 MCU – ATmega328P 的数据手册,最终发现,要在检测反向电动势的 6 个函数中的三个下降沿触发中加入:
“ACSR = 0x02;”,
给ACSR(Analog Comparator Control and Status Registe)寄存器一个明确的赋值。

现在,电动机能连续运转,但是重启和调速仍然有问题,最终发现针对这套实际的硬件,要修改常量“PWM_MIN_DUTY”,从原来的“50”逐步试出来要改为“100”才行。