專注電子技術(shù)學習與研究
當前位置:單片機教程網(wǎng) >> MCU設(shè)計實例 >> 瀏覽文章

通過51單片機來控制直流電機

作者:佚名   來源:本站原創(chuàng)   點擊數(shù):  更新時間:2009年07月22日   【字體:

原理很簡單了 直接上電路圖和源程序吧 

看不清楚圖的請點保存 或者點開連接地址看大圖
下面是針對上面電路圖的程序
(直接復制粘貼進去運行  還是那句話 程序別光是復制粘貼 要一句句看懂 看出核心的那一段代碼是怎么利用單片機加上一個芯片來控制電機的 為以后自己寫其他驅(qū)動程序打基礎(chǔ) )

;----------------------------------------------
;名稱:51單片機來控制直流電機
;主頻 6M晶震  51系列單片機
;編譯環(huán)境:keil c51編譯通過
;www.torrancerestoration.com單片機教程網(wǎng)原創(chuàng),可以任意修改和作為學習測試用途
;備注 :程序的關(guān)鍵部分是 T1定時中段程序里面  看PWM 是怎么控制電機轉(zhuǎn)動的
;要改變電機的方向其實很簡單
;4個小車狀態(tài)子程序 你應(yīng)該能看懂吧
;另外當然就是要去看下 驅(qū)動電機的芯片 L293D 了 嘿嘿 就是什么H橋什么的
; 當然電子基本攻扎實的 自己做個電路也是一樣的 不過這芯片也就幾塊錢
;  節(jié)約時間的話就買來電路搭起就OK 
;2009-5-15
;---------------------------------------------
;------------------------------------------------
;內(nèi)存分配定義
 

ntw     equ     3Eh     ;PWM中斷計數(shù)器(對T1中斷)
ntwkz   equ     3Dh     ;左電機PWM脈寬設(shè)置
ntwky   equ     3Ch     ;右電機PWM脈寬設(shè)置
ntwkzy  equ     31h     ;左右電機預置PWM脈寬
zjfx    bit     p2.0    ;左電機方向控制口,0為正轉(zhuǎn),1為反轉(zhuǎn)
yjfx    bit     p2.1    ;右電機方向控制口,0為正轉(zhuǎn),1為反轉(zhuǎn)
;-------------------------------------------------


          ORG    0000H
          aJMP   MAIN
          org    000bh
          lJMP   t0zd
          org    001bh
          ljmp   t1zd
          org    0030h
;----------------------------------------------
   MAIN :                       
          ACALL XCQJ
          ACALL CSH
          ; ;-----
          ; ;其他程序。比如數(shù)碼管 顯示 什么什么的
          ; ;----
          AJMP MAIN
;-------------------------------------             

;系統(tǒng)初始化
;-----------------------------------

CSH:                           
        MOV    TMOD, #11H    ;定時器0/1均設(shè)置為方式1,定時方式 計聳器按16位工作
        mov    TH1,#0feh     ;
        mov     TL1,#70h      ;PWM調(diào)速,定時0.8ms
        mov    ntw,#10       ;PWM對T1中斷計數(shù),即可有10檔速度調(diào)節(jié)
        mov    ntwkzy,#03    ;左右電機預置PWM脈寬
        mov    ntwkz,#03     ;左電機調(diào)速脈寬,此值為高電平的時間
        mov    ntwky,#03     ;右電機調(diào)速脈寬
        SETB   ET0           ;開T0中斷
        setb   ET1           ;開T1中斷
        SETB   EA            ;系統(tǒng)開中斷
        SETB   TR0           ;啟動定時器0
        SETB   TR1           ;啟動定時器1
        RET

t0zd:
    

 


RETI
;---------------------------------
;小車狀態(tài)子程序
;---------------------------------
xcqj:                 ;小車前進
        setb   zjfx     ;左機正轉(zhuǎn)(IN2)
        setb   yjfx     ;右機正轉(zhuǎn)(IN3)
        RET
xczz:                 ;小車左轉(zhuǎn)
        clr    zjfx     ;左機反轉(zhuǎn)(IN2)
        setb   yjfx     ;右機正轉(zhuǎn)(IN3)
        RET
xcyz:                 ;小車右轉(zhuǎn)
        setb   zjfx     ;左機正轉(zhuǎn)(IN2)
        clr    yjfx     ;右機反轉(zhuǎn)(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          ;這里實現(xiàn)了軟件方式的電機調(diào)速功能  設(shè)置 PWM 高電平的脈沖寬度10個檔位  這里有一點需要注意 NTW開始是設(shè)置的10 自減1然后與
;預先設(shè)置的左右電機的預設(shè)置的檔位比較 這里是3 那么 就是減7次 也就是要等待7個T1中斷之后才會SETB P3.5 也就是說 這里的檔位 值越小 轉(zhuǎn)得越快
        cjne    a,ntwkz,t102    ;  不相等執(zhí)行102  相等則順序執(zhí)行 比較 左電機預設(shè)置 的 PWM數(shù)量 
        setb   p3.5
t102:   cjne    a,ntwky,t1fh  ; 比較 右電機預設(shè)置 的 PWM數(shù)量  其實這里我設(shè)置的都是一樣的檔 都是3 實際中可能有些情況需要調(diào)節(jié)2個輪子的轉(zhuǎn)速度 不過一般情況下
;設(shè)置一樣的 方便些 不過原理還是要看懂 知道怎么設(shè)置
        setb   p3.7    
t1fh:   pop     psw
        pop     acc
        reti


END
 

[ 原 創(chuàng) ] Suse| haozi
2009.5.15 1:24 ,51單片機教程網(wǎng)51hei.com


突然想到要利用鍵盤控制電機調(diào)速的同志。。T1 的入口參數(shù)就是   ntwkz  ntwky
ntwkz   equ     3Dh     ;左電機PWM脈寬設(shè)置
ntwky   equ     3Ch     ;右電機PWM脈寬設(shè)置
T1每次中斷就從10檔開始自減 一直減到你設(shè)置的檔位 然后輸出PWM波形
  只需要改變 3DH 3CH 中的值 那么就可以實現(xiàn)調(diào)速功能了
另外想說下  平時也有很多事 因此不能盡快回復大家的帖子 請大家原諒下 
一些基礎(chǔ)的資料我會整理后發(fā)完整的上來給大家
不需要回復和登陸
希望大家理解和支持。

關(guān)閉窗口

相關(guān)文章