本帖最后由 MianQi 于 2024-5-25 11:47 编辑
整个方案的组成:ATmega328P + L6234 + BLDC + Arduino IDE
1、MCU 选用 Arduino UNO R3
2、电动机驱动芯片选用 ST 的 L6234 双列直插 20 脚
3、电源:12v
这是整套方案的实物照:
这是电动机:
这是驱动芯片 L6234 及其外围电路:
参考的例程在这里-https://simple-circuit.com/arduino-brushless-dc-motor-control-l6234/
但是例程中的示例程序在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(AnalogComparator Control and StatusRegiste)寄存器一个明确的赋值。现在,电动机能连续运转,但是重启和调速仍然有问题,最终发现针对这套实际的硬件,要修改常量“PWM_MIN_DUTY”,从原来的“50”逐步试出来要改为“100”才行。
项目的演示视频在这里- https://www.bilibili.com/video/BV1iz421m7EL/ 分步骤讲解在这里: 1、https://www.bilibili.com/video/BV1rM4m1r7v2/ 2、https://www.bilibili.com/video/BV15y411Y7UC/ 3、https://www.bilibili.com/video/BV1ry411a7BP/ 4、https://www.bilibili.com/video/BV1LE421F7gx/ 5、https://www.bilibili.com/video/BV1rm421K71w/ 6、https://www.bilibili.com/video/BV1dJ4m1A7ef/ 7、https://www.bilibili.com/video/BV1GT421S7uo/ 8、https://www.bilibili.com/video/BV1vM4m1k7vZ/ 9、https://www.bilibili.com/video/BV1P1421q7nn/
|