找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 10795|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

[原創(chuàng)]怎樣通過51單片機(jī)來控制直流電動機(jī)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:6481 發(fā)表于 2009-5-15 01:27 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
 本來準(zhǔn)備回復(fù)帖子的 想想還是開個樓 把圖和程序貼出來 
     原理很簡單了 直接上電路圖和源程序吧
        

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

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

ntw     equ     3Eh     ;PWM中斷計數(shù)器(對T1中斷)
ntwkz   equ     3Dh     ;左電機(jī)PWM脈寬設(shè)置
ntwky   equ     3Ch     ;右電機(jī)PWM脈寬設(shè)置
ntwkzy  equ     31h     ;左右電機(jī)預(yù)置PWM脈寬
zjfx    bit     p2.0    ;左電機(jī)方向控制口,0為正轉(zhuǎn),1為反轉(zhuǎn)
yjfx    bit     p2.1    ;右電機(jī)方向控制口,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    ;左右電機(jī)預(yù)置PWM脈寬
        mov    ntwkz,#03     ;左電機(jī)調(diào)速脈寬,此值為高電平的時間
        mov    ntwky,#03     ;右電機(jī)調(diào)速脈寬
        SETB   ET0           ;開T0中斷
        setb   ET1           ;開T1中斷
        SETB   EA            ;系統(tǒng)開中斷
        SETB   TR0           ;啟動定時器0
        SETB   TR1           ;啟動定時器1
        RET

t0zd:
    


RETI
;---------------------------------
;小車狀態(tài)子程序
;---------------------------------
xcqj:                 ;小車前進(jìn)
        setb   zjfx     ;左機(jī)正轉(zhuǎn)(IN2)
        setb   yjfx     ;右機(jī)正轉(zhuǎn)(IN3)
        RET
xczz:                 ;小車左轉(zhuǎn)
        clr    zjfx     ;左機(jī)反轉(zhuǎn)(IN2)
        setb   yjfx     ;右機(jī)正轉(zhuǎn)(IN3)
        RET
xcyz:                 ;小車右轉(zhuǎn)
        setb   zjfx     ;左機(jī)正轉(zhuǎn)(IN2)
        clr    yjfx     ;右機(jī)反轉(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)了軟件方式的電機(jī)調(diào)速功能  設(shè)置 PWM 高電平的脈沖寬度10個檔位  這里有一點需要注意 NTW開始是設(shè)置的10 自減1然后與
;預(yù)先設(shè)置的左右電機(jī)的預(yù)設(shè)置的檔位比較 這里是3 那么 就是減7次 也就是要等待7個T1中斷之后才會SETB P3.5 也就是說 這里的檔位 值越小 轉(zhuǎn)得越快
        cjne    a,ntwkz,t102    ;  不相等執(zhí)行102  相等則順序執(zhí)行 比較 左電機(jī)預(yù)設(shè)置 的 PWM數(shù)量 
        setb   p3.5
t102:   cjne    a,ntwky,t1fh  ; 比較 右電機(jī)預(yù)設(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
www.torrancerestoration.com 轉(zhuǎn)載請注明出處


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:6481 發(fā)表于 2009-5-15 01:37 | 只看該作者

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


回復(fù)

使用道具 舉報

板凳
ID:13430 發(fā)表于 2009-5-26 11:09 | 只看該作者
拿來試試~~
回復(fù)

使用道具 舉報

地板
ID:13282 發(fā)表于 2009-5-27 23:42 | 只看該作者
恩,有空搗鼓一下~
回復(fù)

使用道具 舉報

5#
ID:12718 發(fā)表于 2009-5-29 18:06 | 只看該作者
樓主的正反轉(zhuǎn)好像反了?
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表