新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 通過51單片機(jī)來控制直流電機(jī)

通過51單片機(jī)來控制直流電機(jī)

作者: 時間:2012-12-01 來源:網(wǎng)絡(luò) 收藏

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

;----------------------------------------------
;名稱:來控制
;主頻 6M晶震 51系列單片機(jī)
;編譯環(huán)境:keil c51編譯通過
;www.51hei.com單片機(jī)教程網(wǎng)原創(chuàng),可以任意修改和作為學(xué)習(xí)測試用途
;備注 :程序的關(guān)鍵部分是 T1定時中段程序里面 看PWM 是怎么控制電機(jī)轉(zhuǎn)動的
;要改變電機(jī)的方向其實(shí)很簡單
;4個小車狀態(tài)子程序 你應(yīng)該能看懂吧
;另外當(dāng)然就是要去看下 驅(qū)動電機(jī)的芯片 L293D 了 嘿嘿 就是什么H橋什么的
; 當(dāng)然電子基本攻扎實(shí)的 自己做個電路也是一樣的 不過這芯片也就幾塊錢
; 節(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 則運(yùn)行T101 等于0 則 送低電平
mov ntw,#10
clr p3.5
clr p3.7
ajmp t1fh
t101: mov a,ntw;這里實(shí)現(xiàn)了軟件方式的電機(jī)調(diào)速功能 設(shè)置 PWM 高電平的脈沖寬度10個檔位這里有一點(diǎn)需要注意 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í)這里我設(shè)置的都是一樣的檔 都是3 實(shí)際中可能有些情況需要調(diào)節(jié)2個輪子的轉(zhuǎn)速度 不過一般情況下
;設(shè)置一樣的 方便些 不過原理還是要看懂 知道怎么設(shè)置
setb p3.7
t1fh: pop psw
pop acc
reti


END

突然想到要利用鍵盤控制電機(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 中的值 那么就可以實(shí)現(xiàn)調(diào)速功能了
另外想說下 平時也有很多事 因此不能盡快回復(fù)大家的帖子 請大家原諒下
一些基礎(chǔ)的資料我會整理后發(fā)完整的上來給大家
不需要回復(fù)和登陸
希望大家理解和支持。

電路圖符號相關(guān)文章:電路圖符號大全


塵埃粒子計數(shù)器相關(guān)文章:塵埃粒子計數(shù)器原理


關(guān)鍵詞: 51單片機(jī) 直流電機(jī)

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉