㈠ 51單片機,步進電機怎麼實現循環正反轉
以下程序是我在實驗中自己編寫的,幾乎全部都有詳細注釋,相信學過單片機的同學完全可以輕易讀懂。
讀者可進行一些修改,比如我使用的都是跳轉指令,在進入加減速循環中讀者完全可以改成調用指令。電機速度也可修改為無上下限。
並且判斷按鍵過程也可有自己的方法,我的判斷按下松開可能會比較麻煩。
數表中我設置的是每個脈沖轉過9°,大家也可按照實際需要修改自己的數表。
這個程序我是參考了《單片機實用系統設計與模擬經典實例》(主編:周景潤 劉曉霞)的P25,讀者有興趣可以去圖書館借閱此書。
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN: MOV 30H,#05H ;加減速速度控制,控制延時循環次數(初值)
MOV DPTR,#TAB1 ;查表法對P2賦值
MOV R0,#03H ;P2初值
MOV R4,#00H ;查表指針值
MOV P2,R0 ;賦值
WAIT: MOV P0,#0FFH ;P0需先輸出一個1才可輸入
JNB P0.0,SONG3 ;檢測按鍵是否按下,SONG的意思是按鍵是否松開,否則程序會混亂
JNB P0.1,SONG4 ;程序中SONG均是上述意思
SJMP WAIT ;如果不按鍵就不啟動
SONG3: JB P0.0,ZHENG ;進入正轉
SJMP SONG3 ;
SONG4: JB P0.1,FAN ;進入反轉
SJMP SONG4 ;
ZHENG: MOV R4,#01H ;開始查表
LOOP1: JB P0.1,YUNXING1 ;檢測是否要反轉,如果未按反轉鍵就正常運行
SONG1: JNB P0.1,FAN ;按下反轉松開後進入反轉
SJMP SONG1 ;
YUNXING1:MOV A,R4 ;查表
MOVC A,@A+DPTR ;
MOV P2,A ;
ACALL DELAY ;進入延時程序控制電機速度
JB P0.3,COOL1 ;檢測是否按下減速按鍵,如果未按下再檢測是否按下加速按鍵
SONG5: JNB P0.3,DOWN1 ;按下後進入延時程序中修改循環次數
SJMP SONG5 ;
COOL1: JB P0.2,NOMAL1 ;檢測是否按下加速按鍵,未按下就正常運行
SONG6: JNB P0.2,UP1 ;按下加速鍵進入延時程序中修改循環次數
SJMP SONG6 ;
NOMAL1: INC R4 ;查下一個數據
CJNE R4,#09H ,LOOP1;表中數據查完一遍後將R4值復位,如未查完就不復位R4
SJMP ZHENG ;使正轉循環
FAN: MOV R4,#07H ;反轉R4初值
LOOP2: JB P0.0,YUNXING2 ;檢測是否按下正轉按鍵,如未按下正常運行反轉程序
SONG2: JNB P0.0,ZHENG ;按下正轉後松開按鍵進入正轉程序
SJMP SONG2 ;
YUNXING2:MOV A,R4 ;開始查表
MOVC A,@A+DPTR ;
MOV P2,A ;
ACALL DELAY ;進入延時程序控制電機速度
JB P0.3,COOL2 ;檢測是否按下減速按鍵如未按下就檢測是否按下加速按鍵
SONG7: JNB P0.3,DOWN2 ;按下後進入延時程序中修改循環次數
SJMP SONG7 ;
COOL2: JB P0.2,NOMAL2 ;檢測是否按下加速按鍵,未按下就正常運行
SONG8: JNB P0.2,UP2 ;按下後進入延時程序中修改循環次數
SJMP SONG8 ;
NOMAL2: DEC R4 ;循環查表
CJNE R4,#00H,LOOP2 ;數據查完一遍後復位重新查
SJMP FAN ;反轉循環
DELAY: MOV R6,#05H ;
DD1: MOV R5,#080H ;
DD2: MOV R7,#05H ;
DD3: DJNZ R7,DD3 ;
DJNZ R5,DD2 ;
DJNZ R6,DD1 ;固定延時
DJNZ R1,DELAY ;通過改變延時程序的循環次數來控制電機速度
SPEED: MOV R1,30H ;每次循環都將速度值放在R1中
SJMP BACK ;
DOWN1: INC 30H ;速度減,因為循環次數+1
CJNE R1,#10H,NOMAL1;速度下限10,如果不到10可繼續減速
MOV 30H,#10H ;如果達到下限,無法減速,始終是10
SJMP NOMAL1 ;返回正轉循環中
UP1: DEC 30H ;速度加,因為循環次數-1
CJNE R1,#01H,NOMAL1;速度上限1,如果不到1可繼續加速
MOV 30H,#01H ;如果速度到達上限,不可再加速,始終是1
SJMP NOMAL1 ;返回正轉循環
DOWN2: INC 30H ;速度減,因為循環次數+1
CJNE R1,#10H,NOMAL2;速度下限10,如果不到10可繼續減速
MOV 30H,#10H ;如果達到下限,無法減速,始終是10
SJMP NOMAL2 ;返回反轉循環中
UP2: DEC 30H ;速度加,因為循環次數-1
CJNE R1,#01H,NOMAL2;速度上限1,如果不到1可繼續加速
MOV 30H,#01H ;如果速度到達上限,不可再加速,始終是1
SJMP NOMAL2 ;返回反轉循環中
BACK: RET ;延時子程序返回
TAB1: DB 00H,02H,06H,04H
DB 0CH,08H,09H,01H,03H ;控制各項通電順序的數值表
END ;結束
㈡ 51單片機控制電機轉速
前天幫別人做了一個,還可以顯示當前速度,和設置的速度, 4X4鍵盤(16個按鍵),設置速度可直接輸入,有正轉,反轉,啟動,停止,和加速,減速功能㈢ 如何實現51單片機控制四個步進電機工作
最好是使用單片機+專用運動控制晶元來做,畢竟單片機程序是按順序的,很難各自獨立,帶上專用晶元就不一樣了,可以獨立控制,互不幹擾,比如hmc8043,用起來很方便
㈣ 如何用51單片機控制4個步進電機同時工作
可以使用51單片機加一片專用運動控制晶元,比如hmc8045,51單片機發送四路同步控制的指令給專用晶元,由專用晶元控制電機同步,單片機只要等運動到位以後再發下一個指令就可以了
㈤ 51單片機步進電機正反轉程序
單片機控制步進電機,我想你說的是兩相步進電機,一般是控制其相序分配的順逆從而控制正反轉,一般而言,步進電機相序分配你可以做成一個數組比如step[]={0x03,0x06,0x0c,0x09},這樣來說可以假設P0口是步進電機控制口,那麼可以按如下方式來控制: while(1) { for(i=0;i<4;i++) { if(fx==1)P0=step[i]; //正向 else P0=step[3-i]; //反向 delay(x); //x大小決定電機速度。
根據電機相數買個驅動器。然後用單片機產生脈沖來控制電機的轉動以及正反轉。單片機產生脈沖的方法和單片機控制流水燈是一樣的。ULN2003D 是驅動步進電機的驅動晶元,主要是匹配電機所需的電流。 由於是四相電機,步進電機之所以可以轉動就需要給相繞組提供連續的脈沖,所以需要4個埠來控制四相繞組的工作狀態(P15應該是不需要的),具體的編碼要看電機的拍數; 一旦明白這些,你就可以很容易編寫代碼來控制電機的轉動了,還有在脈沖間你可以設置不同的延時時間來調節電機的轉速。
㈥ 單片機控制步進電動機的運動的原理及單片機程序
51單片步進電機控制原理與控制設計程序
51單片步進電機是數字控制電機,它將脈沖信號轉變成角位移,即給一個脈沖信號,步進電機就轉動一個角度,因此非常適合於單片機控制。步進電機可分為反應式步進電機(簡稱vr)、永磁式步進電機(簡稱pm)和混合式步進電機(簡稱hb)。
51單片步進電機區別於其他控制電機的最大特點是,它是通過輸入脈沖信號來進行控制的,即電機的總轉動角度由輸入脈沖數決定,而電機的轉速由脈沖信號頻率決定。
51單片步進電機的驅動電路根據控制信號工作,控制信號由單片機產生。其基本原理作用如下:
(1)控制換相順序
通電換相這一過程稱為脈沖分配。例如:三相步進電機的三拍工作方式,其各相通電順序為a-b-c-d,通電控制脈沖必須嚴格按照這一順序分別控制a,b,c,d相的通斷。
(2)控制步51單片進電機的轉向
如果給定工作方式正序換相通電,步進電機正轉,如果按反序通電換相,則電機就反轉。
(3)控制51單片步進電機的速度
如果給步進電機發一個控制脈沖,它就轉一步,再發一個脈沖,它會再轉一步。兩個脈沖的間隔越短,步進電機就轉得越快。調整單片機發出的脈沖頻率,就可以對步進電機進行調速。步進電機是機電控制中一種常用的執行機構,它的用途是將電脈沖轉化為角位移,通俗地說:當步進驅動器接收到一個脈沖信號,它就驅動步進電機按設定的方向轉動一個固定的角度(及步進角)。通過控制脈沖個數即可以控制角位移量,從而達到准確定位的目的;同時通過控制脈沖頻率來控制電機轉動的速度和加速度,從而達到調速的目的。
㈦ 51單片機可以直接驅動步進電機么
51單片機不能直接驅動步進電機,因為單片機的輸出的是數字信號,不是驅動電流,所以需要外加驅動,舵機是可以通過單片機直接控制的PWM控制。
51單片機是對所有兼容Intel 8031指令系統的單片機的統稱。該系列單片機的始祖是Intel的8031單片機,後來隨著Flash rom技術的發展,8031單片機取得了長足的進展,成為應用最廣泛的8位單片機之一,其代表型號是ATMEL公司的AT89系列,它廣泛應用於工業測控系統之中