打印
[电机控制]

一个可行的 BLDC 原型设计制作和展示方案——ATmega328P + L6234 + BLDC + Arduino IDE

[复制链接]
4394|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
MianQi|  楼主 | 2024-5-11 09:05 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 MianQi 于 2024-5-11 15:43 编辑

整个方案的组成: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;,给ACSRAnalogComparator Control and StatusRegiste)寄存器一个明确的赋值。现在,电动机能连续运转,但是重启和调速仍然有问题,最终发现针对这套实际的硬件,要修改常量“PWM_MIN_DUTY,从原来的“50”逐步试出来要改为“100”才行。

项目的演示视频在这里- https://www.bilibili.com/video/BV1iz421m7EL/





使用特权

评论回复
沙发
呐咯密密| | 2024-5-13 13:32 | 只看该作者
看起来很不错啊

使用特权

评论回复
板凳
xuanhuanzi| | 2024-5-19 15:46 | 只看该作者

这个芯片好用吗

使用特权

评论回复
地板
xuanhuanzi| | 2024-5-19 15:48 | 只看该作者
看到分享的链接了,学习一下,非常赞。

使用特权

评论回复
5
MianQi|  楼主 | 2024-5-20 15:38 | 只看该作者

从数据手册的说明来看,这个芯片是专为 BLDC 设计地。从外围电路的搭建以及管脚接线的实际经验来看,用起来的确很方便。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:所有未经解决的问题都一般大。

25

主题

330

帖子

1

粉丝