本來準(zhǔn)備回復(fù)帖子的 想想還是開個樓 把圖和程序貼出來 原理很簡單了 直接上電路圖和源程序吧
2222.jpg (101.96 KB, 下載次數(shù): 153)
下載附件
2009-5-15 00:44 上傳
看不清楚圖的請點保存 或者點開連接地址看大圖 下面是針對上面電路圖的程序 (直接復(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)載請注明出處
|