专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

通过51单片机来控制直流电机

作者:佚名   来源:本站原创   点击数:  更新时间:2009年07月22日   【字体:

原理很简单了 直接上电路图和源程序吧 

看不清楚图的请点保存 或者点开连接地址看大图
下面是针对上面电路图的程序
(直接复制粘贴进去运行  还是那句话 程序别光是复制粘贴 要一句句看懂 看出核心的那一段代码是怎么利用单片机加上一个芯片来控制电机的 为以后自己写其他驱动程序打基础 )

;----------------------------------------------
;名称:51单片机来控制直流电机
;主频 6M晶震  51系列单片机
;编译环境:keil c51编译通过
;www.51hei.com单片机教程网原创,可以任意修改和作为学习测试用途
;备注 :程序的关键部分是 T1定时中段程序里面  看PWM 是怎么控制电机转动的
;要改变电机的方向其实很简单
;4个小车状态子程序 你应该能看懂吧
;另外当然就是要去看下 驱动电机的芯片 L293D 了 嘿嘿 就是什么H桥什么的
; 当然电子基本攻扎实的 自己做个电路也是一样的 不过这芯片也就几块钱
;  节约时间的话就买来电路搭起就OK 
;2009-5-15
;---------------------------------------------
;------------------------------------------------
;内存分配定义
 

ntw     equ     3Eh     ;PWM中断计数器(对T1中断)
ntwkz   equ     3Dh     ;左电机PWM脉宽设置
ntwky   equ     3Ch     ;右电机PWM脉宽设置
ntwkzy  equ     31h     ;左右电机预置PWM脉宽
zjfx    bit     p2.0    ;左电机方向控制口,0为正转,1为反转
yjfx    bit     p2.1    ;右电机方向控制口,0为正转,1为反转
;-------------------------------------------------


          ORG    0000H
          aJMP   MAIN
          org    000bh
          lJMP   t0zd
          org    001bh
          ljmp   t1zd
          org    0030h
;----------------------------------------------
   MAIN :                       
          ACALL XCQJ
          ACALL CSH
          ; ;-----
          ; ;其他程序。比如数码管 显示 什么什么的
          ; ;----
          AJMP MAIN
;-------------------------------------             

;系统初始化
;-----------------------------------

CSH:                           
        MOV    TMOD, #11H    ;定时器0/1均设置为方式1,定时方式 计耸器按16位工作
        mov    TH1,#0feh     ;
        mov     TL1,#70h      ;PWM调速,定时0.8ms
        mov    ntw,#10       ;PWM对T1中断计数,即可有10档速度调节
        mov    ntwkzy,#03    ;左右电机预置PWM脉宽
        mov    ntwkz,#03     ;左电机调速脉宽,此值为高电平的时间
        mov    ntwky,#03     ;右电机调速脉宽
        SETB   ET0           ;开T0中断
        setb   ET1           ;开T1中断
        SETB   EA            ;系统开中断
        SETB   TR0           ;启动定时器0
        SETB   TR1           ;启动定时器1
        RET

t0zd:
    

 


RETI
;---------------------------------
;小车状态子程序
;---------------------------------
xcqj:                 ;小车前进
        setb   zjfx     ;左机正转(IN2)
        setb   yjfx     ;右机正转(IN3)
        RET
xczz:                 ;小车左转
        clr    zjfx     ;左机反转(IN2)
        setb   yjfx     ;右机正转(IN3)
        RET
xcyz:                 ;小车右转
        setb   zjfx     ;左机正转(IN2)
        clr    yjfx     ;右机反转(IN3)
        RET
xcht:                 ;小车后退
        clr    zjfx
        clr    yjfx
        ret


;---------------------------------
;T1中断子程序
;---------------------------------

t1zd: 
        mov     th1,#0feh
        mov     tl1,#70h
        push    acc
        push    psw
        djnz    ntw,t101 ; NTW 不等于0 则运行T101  等于0 则 送低电平
        mov     ntw,#10
        clr     p3.5
        clr     p3.7
        ajmp    t1fh
t101:   mov     a,ntw          ;这里实现了软件方式的电机调速功能  设置 PWM 高电平的脉冲宽度10个档位  这里有一点需要注意 NTW开始是设置的10 自减1然后与
;预先设置的左右电机的预设置的档位比较 这里是3 那么 就是减7次 也就是要等待7个T1中断之后才会SETB P3.5 也就是说 这里的档位 值越小 转得越快
        cjne    a,ntwkz,t102    ;  不相等执行102  相等则顺序执行 比较 左电机预设置 的 PWM数量 
        setb   p3.5
t102:   cjne    a,ntwky,t1fh  ; 比较 右电机预设置 的 PWM数量  其实这里我设置的都是一样的档 都是3 实际中可能有些情况需要调节2个轮子的转速度 不过一般情况下
;设置一样的 方便些 不过原理还是要看懂 知道怎么设置
        setb   p3.7    
t1fh:   pop     psw
        pop     acc
        reti


END
 

[ 原 创 ] Suse| haozi
2009.5.15 1:24 ,51单片机教程网51hei.com


突然想到要利用键盘控制电机调速的同志。。T1 的入口参数就是   ntwkz  ntwky
ntwkz   equ     3Dh     ;左电机PWM脉宽设置
ntwky   equ     3Ch     ;右电机PWM脉宽设置
T1每次中断就从10档开始自减 一直减到你设置的档位 然后输出PWM波形
  只需要改变 3DH 3CH 中的值 那么就可以实现调速功能了
另外想说下  平时也有很多事 因此不能尽快回复大家的帖子 请大家原谅下 
一些基础的资料我会整理后发完整的上来给大家
不需要回复和登陆
希望大家理解和支持。

关闭窗口

相关文章