查看: 500|回复: 1

[资料] 项目分享:H桥PWM直流电动机驱动器(原理图、代码)

[复制链接]
  • TA的每日心情
    开心
    2019-11-4 13:48
  • 签到天数: 14 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    发表于 2020-9-15 15:34:07 | 显示全部楼层 |阅读模式
    分享到:
    H桥(全桥)驱动器在驱动有刷直流电机等负载方面非常流行,并且已广泛用于机器人技术和工业中。使用H桥驱动器的主要优点是:高效率,旋转方向变化和制动电动机。在本文/视频中,我介绍了使用四个IR3205功率MOSFET和两个IR2104 MOSFET驱动器的完整的H桥DC电动机驱动器。从理论上讲,上述MOSFET可以处理高达80A的电流,但是,实际上,如果使用大型散热片或风扇将MOSFET的温度保持在尽可能低的水平,我们可以期望获得高达40A的电流。
    电路分析
    图1显示了H桥直流电动机驱动器的示意图。显而易见,电路的核心是两个IR2104 MOSFET驱动器芯片

    图1 H桥直流电机驱动器示意图
    我选择了4个IR3205 [1]进行切换。该MOSFET具有良好的特性,这是该应用必不可少的,RDSon电阻非常低,并且具有高电流处理能力。根据IRF3205数据表:“高级HEXFET?International RectIFier的功率MOSFET利用先进的处理技术来实现每硅面积的极低导通电阻。这项优势与HEXFET功率MOSFET众所周知的快速开关速度和坚固耐用的器件设计相结合,为设计人员提供了一种非常有效和可靠的器件,可广泛用于各种应用中。TO-220封装普遍适用于所有功耗约为50瓦的商业工业应用。
    我选择了两个IR2104 [2]驱动MOSFET。根据IR2104的数据表:“ IR2104(S)是高压,高速功率MOSFET和igbt驱动器,具有相关的高端和低端参考输出通道。专有的HVIC和锁存免疫CMOS技术可实现坚固的单片结构。逻辑输入与低至3.3V逻辑的标准CMOS或LSTTL输出兼容。输出驱动器具有高脉冲电流缓冲级,旨在最小化驱动器交叉导通。浮动通道可用于驱动工作在10至600伏特高压侧的N通道功率MOSFET或IGBT。”
    关于IR2104的好消息是该芯片既兼容3.3V逻辑电平又兼容5V逻辑电平。图2显示了该芯片的基本接线图。显然,芯片和负载(电动机)的电源不必相同,但是,两个电源共用一个公共地。


    图2 IR2104 MOSFET驱动器芯片的接线图


    C1,C3,C4,C5,C6,C7和C9已用于降低噪声。R1和D2,R2和D3,R3和D8,R4和D9已被用于抑制在MOSFET的ON / OFF时电感器和电容器可能引入的振铃和寄生效应。别忘了MOSFET在其栅极引脚上引入了电容。1N4148二极管使栅极电容器放电。
    D4,D5,D6和D7 [3]用于抑制直流电动机的反向电流尖峰。内部反向Shotkey二极管已嵌入MOSFET中,但是,使用这些外部Shotkey二极管也可以减小内部二极管上的应力。根据数据表和应用要求选择C2,C8,D1和D10。
    P1是5针XH连接器,用于将芯片的电源和控制信号施加到板上。K1是KF45电源连接器,用于将电动机和电动机的电源线连接到板上。

    [B] PCB布局
    图3显示了H桥直流电动机驱动器的PCB布局。它是2层PCB板,所有组件封装均为通孔。


    图3 H桥直流电机驱动器的PCB布局


    图4从顶部和底部显示了PCB板的3D视图。

    图4电路板顶部和底部的3D视图

    我没有IR2104 [4]和IRF3205 [5](组件库)的原理图符号和PCB示意图。因此,我使用了SamacSys组件库,并使用SamacSys altium Designer插件安装了缺少的库(图5)。SamacSys为几乎所有著名的电子设计软件提供了插件(图6)。有趣的是,所有服务都是免费的,图书馆遵循IPC标准。只是您需要下载并使用自己喜欢的CAD插件[6]。另一个选择是从componentsearchengine.com下载库并导入它们。


    图5 SamacSys Altium插件中的选定组件



    图6 SamacSys插件支持的电子设计CAD软件

    阻焊剂并未完全覆盖高电流的走线。这使您可以通过焊接或使用一些粗铜线来加强轨道。图7显示了这些部分暴露的轨道。


    图7部分暴露的高电流PCB走线

    [C]组装与测试
    图8显示了组装好的单元,图9显示了测试环境。我已将Arduino Uno编程为控制电机驱动器板。另外,我在原型板上构建了一个简单的键盘,以便能够更改速度(使用PWM)和电动机的旋转方向。

    图8组装好的H桥直流电动机驱动器



    图9直流电动机驱动器板,Arduino Uno和测试台!

    所有按钮均为低电平有效,并使用Arduino的内部上拉电阻。您可以考虑以下Arduino代码:
    • #include <JC_Button.h>
    • int PWM_Value;
    • byte Enable_Pin = 13;
    • byte PWM1_Pin = 11;
    • byte PWM2_Pin = 10;
    • byte PWM_Pin = 11;
    • Button UP(9, 25, true, true);
    • Button Down(8, 25, true, true);
    • Button Left(7, 25, true, true);
    • Button Right(6, 25, true, true);
    • void setup() {
    • pinMode(Enable_Pin, OUTPUT);
    • pinMode(PWM1_Pin, OUTPUT);
    • pinMode(PWM2_Pin, OUTPUT);
    • UP.begin();
    • Down.begin();
    • Left.begin();
    • Right.begin();
    • digitalWrite(Enable_Pin, LOW);
    • PWM_Value = 0;
    • analogWrite(PWM1_Pin, PWM_Value);
    • analogWrite(PWM2_Pin, PWM_Value);
    • }
    • void loop()
    • {
    • digitalWrite(Enable_Pin, HIGH);
    • UP.read();
    • Down.read();
    • Left.read();
    • Right.read();
    • if (UP.wasReleased() && PWM_Value < 250)
    • {
    • PWM_Value +=5;
    • }
    • if (Down.wasReleased() && PWM_Value > 5)
    • {
    • PWM_Value -=5;
    • }
    • if (Left.wasReleased())
    • {
    • PWM_Pin = PWM1_Pin;
    • analogWrite(PWM2_Pin, 0);
    • }
    • if (Right.wasReleased())
    • {
    • PWM_Pin = PWM2_Pin;
    • analogWrite(PWM1_Pin, 0);
    • }
    • analogWrite(PWM_Pin, PWM_Value);
    • }

    [color=rgb(51, 102, 153) !important]复制代码

    原理图
    代码



    • #include <JC_Button.h>
    • int PWM_Value;
    • byte Enable_Pin = 13;
    • byte PWM1_Pin = 11;
    • byte PWM2_Pin = 10;
    • byte PWM_Pin = 11;
    • Button UP(9, 25, true, true);
    • Button Down(8, 25, true, true);
    • Button Left(7, 25, true, true);
    • Button Right(6, 25, true, true);
    • void setup() {
    • pinMode(Enable_Pin, OUTPUT);
    • pinMode(PWM1_Pin, OUTPUT);
    • pinMode(PWM2_Pin, OUTPUT);
    • UP.begin();
    • Down.begin();
    • Left.begin();
    • Right.begin();
    • digitalWrite(Enable_Pin, LOW);
    • PWM_Value = 0;
    • analogWrite(PWM1_Pin, PWM_Value);
    • analogWrite(PWM2_Pin, PWM_Value);
    • }
    • void loop()
    • {
    • digitalWrite(Enable_Pin, HIGH);
    • UP.read();
    • Down.read();
    • Left.read();
    • Right.read();
    • if (UP.wasReleased() && PWM_Value < 250)
    • {
    • PWM_Value +=5;
    • }
    • if (Down.wasReleased() && PWM_Value > 5)
    • {
    • PWM_Value -=5;
    • }
    • if (Left.wasReleased())
    • {
    • PWM_Pin = PWM1_Pin;
    • analogWrite(PWM2_Pin, 0);
    • }
    • if (Right.wasReleased())
    • {
    • PWM_Pin = PWM2_Pin;
    • analogWrite(PWM1_Pin, 0);
    • }
    • analogWrite(PWM_Pin, PWM_Value);
    • }

    [color=rgb(51, 102, 153) !important]复制代码





    回复

    使用道具 举报

  • TA的每日心情
    开心
    7 小时前
  • 签到天数: 54 天

    连续签到: 17 天

    [LV.5]常住居民I

    发表于 2020-9-16 12:53:12 | 显示全部楼层
    顶起来,多谢分享
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    手机版|小黑屋|电路城

    GMT+8, 2020-11-27 16:54 , Processed in 0.066529 second(s), 12 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.