• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

51:电机(ULN2003D)

武飞扬头像
菜鸟-01
帮助1

目录

1:介绍

2:原理图

编辑 A:大功率直接驱动:  

B:H桥驱动

3:电机调速(pwm)

编辑

 A:实例代码(大功率直接驱动)


1:介绍

        我们51单片机使用的是直流电机

        直流电机是一种将电能转换为机械能的装置。一般的直流电机有两个电极,当电极正接时,电机正转,当电极反接时,电机反转 直流电机主要由永磁体(定子)、线圈(转子)和换向器组成

        除直流电机外,常见的电机还有步进电机、舵机、无刷电机、空心杯电机等

学新通

        ULN2003是一个单片高电压、高电流的达林顿晶体管阵列集成电路。它是由7 NPN 达林顿管组成的,它的高电压输出特性和阴极箝位二极管可以转换感应负载。单个达林顿对的集电极电流是 500mA。达林顿管并联可以承受更大的电流。此电路主要应用于继 电器驱动器,字锤驱动器,灯驱动器,显示驱动器(LED 气体放 电),线路驱动器和逻辑缓冲器。ULN2003的每对达林顿管都有一个 2.7k 串联电阻,可以直接 和TTL 5V CMOS装置        

        

2:原理图

学新通

学新通 
A:大功率直接驱动:  


        在这里ULN2003D芯片相当于一个三极管 , COM脚的作用是当你使用ULN2003来驱动继电器时,可以将COM脚接到继电器的VCC端,利用ULN2003内部的反向二极管作保护继电器,消除继电器闭合时产生的感应电压,从而起到保护继电器。

        只能朝一个方向转,这种电机并不具备调换电机正负方向的功能

电路图:注意里面是有一个非门

学新通

 学新通

B:H桥驱动

         可以转向,这种电机可以换电机正负方向的功能,我们这节并不涉及,在智能小车案例中应用较为多少

学新通

 EN1=1,IN1=0,IN2=1    电机正转        ENX默认为高电频;当ENX为低电频不会响应控制信号

 EN1=1,IN1=1,IN2=0    电机反转        IO口 INX默认为低电频

 EN2=1,IN3=1 ,IN4=0   电机正转        ENX为使能段; EN1为左电机使能段,EN2为右电机使能段,

 EN2=1,IN3=0 ,IN4=1   电机反转

c:H桥驱动实例

左电机正转    (电流从电机正级流向负级表示--正)

学新通

学新通

左电机负转    (电流从电机负级流向正级表示--负)

学新通

 学新通

3:电机调速(pwm)

一般都会和定时器一起使用

学新通

 学新通

 A:实例代码(大功率直接驱动)

  1.  
    #include <REGX52.H>
  2.  
    //一般来说&是清零;|是置1
  3.  
    unsigned int Counter=0,Compare=0;
  4.  
    sbit in1= P1^0;
  5.  
    void Init_time() //1微秒@12.000MHz
  6.  
    {
  7.  
    TMOD &= 0xF0; //设置定时器模式
  8.  
    TMOD |= 0x01; //设置定时器模式
  9.  
    TL0 = 0x9C; //设置定时初值
  10.  
    TH0 = 0xFF; //设置定时初值
  11.  
    TF0 = 0; //清除TF0标志
  12.  
    TR0 = 1; //定时器0开始计时
  13.  
    //中断配置
  14.  
    ET0=1; //打开中断允许位
  15.  
    EA=1; //使能总开关
  16.  
    Compare=20;
  17.  
    }
  18.  
     
  19.  
     
  20.  
     
  21.  
    void Timer0_Routine() interrupt 1
  22.  
    {
  23.  
     
  24.  
    //每隔1微秒启动中断函数
  25.  
    Counter ;
  26.  
    /*因为它是16位,没有自动装载\
  27.  
    每次进去中断函数都会从0开始计数.计数到65536在中断
  28.  
    所以加上 TL0 = 0x18;TH0 = 0xFC;让它从64536计数
  29.  
    这个就是手动装载
  30.  
    */
  31.  
    TL0 = 0x9C; //设置定时初值
  32.  
    TH0 = 0xFF; //设置定时初值
  33.  
     
  34.  
     
  35.  
    if(Counter==100){
  36.  
    Counter=0;
  37.  
    if (Counter<Compare)
  38.  
    {
  39.  
    in1=1;
  40.  
    }
  41.  
    else{
  42.  
    in1=0;
  43.  
    }
  44.  
     
  45.  
    }
  46.  
     
  47.  
     
  48.  
    }
  49.  
    void main(){
  50.  
    Init_time();//初始化定时器
  51.  
    while (1);
  52.  
    }
学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhhachij
系列文章
更多 icon
同类精品
更多 icon
继续加载