• ULN2003步进电机驱动电路详解


    一.ULN2003芯片介绍

            ULN2003 是高耐压、大电流达林顿陈列,由七个硅 NPN 达林顿管组成。该电路的特点如下:

    1. ULN2003 的每一对达林顿都串联一个 2.7K 的基极电阻,在 5V 的工作电压下它能与 TTL 和 CMOS 电路直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据。

    2. ULN2003 工作电压高,工作电流大,灌电流可达 500mA,并且能够在关态时承受 50V 的电压,输出还可以在高负载电流并行运行。

    3. ULN2003 采用 DIP-16 或 SOP-16 塑料封装。

    ULN2003内部电路框图及封装图

            主要作用:ULN2003的主要作用就是为单片机提供大电流的驱动能力,以此达到驱动步进电机所需的电流。

    二.28BYJ-48五线四相电机介绍

    28BYJ-48步进电机为五线四相永磁式步进电机,其名称含义为:“28”为电机直径28mm,B为步进电机,Y表示电机为永磁式,J表示内部自带减速箱,48表示驱动方式为四相八拍;

    (1)28BYJ-48步进电机参数

            对于初学者,对于以上参数,可以先注意以上几个主要参数:工作电压为DC5-12V;步距角为5.625°,即电机转一圈需要的步数=360/5.625*64=4096步,驱动方式为四相四拍或四相八拍。

    (2)28BYJ-48步进电机电路图

            从电路图可以看出,五线四相表示电机有4个线圈,5根接线端子,其中引脚5为公共端。

    三.ULN2003步进电机驱动模块

    (1)驱动模块电路图如下:

            其中IN1-4引脚为ULN2003的控制端,主要连接单片机引脚,高电平导通,低电平截止;OUT1-4为ULN2003的驱动端,主要连接步进电机4个相线。LED1-4为指示作用,ULN2003通道导通时亮,截止时灭。

            VCC主要为ULN2003内部续流二极管的公共端,VM为步进电机的驱动电压;VCC与VM的工作电压需保持一直。

    ULN2003模块与电机实物图

    (2)单片机与驱动模块连接图

      

            ULN2003与单片机、步进电机电路连接图,步进电机以5V为工作电压。

    四.驱动程序

    步进电机的驱动方式主要为四相四拍或四相八拍;

    四相四拍为步进电机的导通顺序为:

    (1)正转:A-B-C-D;

    (2)反转:D-C-B-A;

    四相八拍为步进电机的导通顺序为:

    (3)正转:AD-A-AB-B-CB-C-DC-D;

    (4)反转:D-DC-C-CB-B-BA-A-AD;

    程序以四相四拍为例:

    1. *******************************************************
    2. 接线方式:
    3. IN1 ---- P00
    4. IN2 ---- P01
    5. IN3 ---- P02
    6. IN4 ---- P03
    7. *********************/
    8. #include
    9. #define uchar unsigned char
    10. #define uint unsigned int
    11. #define MotorData P0 //步进电机控制接口定义
    12. uchar phasecw[4] ={0x08,0x04,0x02,0x01};//正转 电机导通相序 D-C-B-A
    13. uchar phaseccw[4]={0x01,0x02,0x04,0x08};//反转 电机导通相序 A-B-C-D
    14. //ms延时函数
    15. void Delay_xms(uint x)
    16. {
    17. uint i,j;
    18. for(i=0;i
    19. for(j=0;j<112;j++);
    20. }
    21. //顺时针转动
    22. void MotorCW(void)
    23. {
    24. uchar i;
    25. for(i=0;i<4;i++)
    26. {
    27. MotorData=phasecw[i];
    28. Delay_xms(4);//转速调节
    29. }
    30. }
    31. //逆时针转动
    32. void MotorCCW(void)
    33. {
    34. uchar i;
    35. for(i=0;i<4;i++)
    36. {
    37. MotorData=phaseccw[i];
    38. Delay_xms(4);//转速调节
    39. }
    40. }
    41. //停止转动
    42. void MotorStop(void)
    43. {
    44. MotorData=0x00;
    45. }
    46. //主函数
    47. void main(void)
    48. {
    49. uint i;
    50. Delay_xms(50);//等待系统稳定
    51. while(1)
    52. {
    53. for(i=0;i<500;i++)
    54. {
    55. MotorCW(); //顺时针转动
    56. }
    57. MotorStop(); //停止转动
    58. Delay_xms(500);
    59. for(i=0;i<500;i++)
    60. {
    61. MotorCCW(); //逆时针转动
    62. }
    63. MotorStop(); //停止转动
    64. Delay_xms(500);
    65. }
    66. }

  • 相关阅读:
    【无人机】四轴无人机的轨迹进行可视化和动画处理(Matlab代码实现)
    无线设备天线的选型及其安装注意事项
    数据库脏读、不可重复读、幻读以及对应的隔离级别
    pix2pix学习系列(1):预训练模型测试pix2pix
    系统架构师2022年案例分析考前
    物业服务神秘顾客监测的难点及对策
    LeetCode_递归_中等_397.整数替换
    xtrabackup 2.4 的介绍与使用
    AUTODL云服务器使用大致步骤(适合本人版)
    log4j2.xml 获取当前系统属性
  • 原文地址:https://blog.csdn.net/m0_60790717/article/details/127858170