原理很簡單了 直接上電路圖和源程序吧
看不清楚圖的請點保存 或者點開連接地址看大圖
下面是針對上面電路圖的程序
(直接複製粘貼進去運行 還是那句話 程序別光是複製粘貼 要一句句看懂 看出核心的那一段代碼是怎麼利用單片機加上一個晶片來控制電機的為以後自己寫其他驅動程序打基礎 )
;----------------------------------------------
;名稱: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
突然想到要利用鍵盤控制電機調速的同志。。T1 的入口參數就是 ntwkz ntwky
ntwkz equ 3Dh ;左電機PWM脈寬設置
ntwky equ 3Ch ;右電機PWM脈寬設置
T1每次中斷就從10檔開始自減 一直減到你設置的檔位 然後輸出PWM波形
只需要改變 3DH 3CH 中的值 那麼就可以實現調速功能了
另外想說下 平時也有很多事 因此不能儘快回復大家的帖子 請大家原諒下
一些基礎的資料我會整理後發完整的上來給大家
不需要回復和登陸
希望大家理解和支持。