1樓:
如a相通電,b,c相不通電時,由於磁場作用,齒1與a對齊,**子不受任何力以下均同)。如b相通電,a,c相不通電時,齒2應與b對齊,此時轉子向右移過1/3て,此時齒3與c偏移為1/3て,齒4與a偏移(て-1/3て)=2/3て。
如c相通電,a,b相不通電,齒3應與c對齊,此時轉子又向右移過1/3て,此時齒4與a偏移為1/3て對齊。如a相通電,b,c相不通電,齒4與a對齊,轉子又向右移過1/3て。
這樣經過a、b、c、a分別通電狀態,齒4(即齒1前一齒)移到a相,電機轉子向右轉過乙個齒距,如果不斷地按a,b,c,a通電,電機就每步(每脈衝)1/3て,向右旋轉。如按a,c,b,a通電,電機就反轉。
擴充套件資料
步進電機利用電磁學原理,將電能轉換為機械能,人們早在20世紀20年代就開始使用這種電機。隨著嵌入式系統(例如印表機、磁碟驅動器、玩具、雨刷、震動尋呼機、機械手臂和錄影機等)的日益流行,步進電機的使用也開始暴增。
只要需要把某件物體從乙個位置移動到另乙個位置,步進電機就一定能派上用場。步進電機有許多種形狀和尺寸,但不論形狀和尺寸如何,它們都可以歸為兩類:可變磁阻步進電機和永磁步進電機。
步進電機由一組纏繞在電機固定部件定子齒槽上的線圈驅動的。通常情況下,一根繞成圈狀的金屬絲叫做螺線管,而在電機中,繞在齒上的金屬絲則叫做繞組、線圈、或相。
通常電機的轉子為永磁體,當電流流過定子繞組時,定子繞組產生一向量磁場。該磁場會帶動轉子旋轉一角度,使得轉子的一對磁場方向與定子的磁場方向一致。當定子的向量磁場旋轉乙個角度。
轉子也隨著該磁場轉乙個角度。
每輸入乙個電脈衝,電動機轉動乙個角度前進一步。它輸出的角位移與輸入的脈衝數成正比、轉速與脈衝頻率成正比。改變繞組通電的順序,電機就會反轉。
所以可用控制脈衝數量、頻率及電動機各相繞組的通電順序來控制步進電機的轉動。
2樓:狸愛婭汐
b.可以調整電機的接線來改變方向,具體做法如下:
對於兩相電機,只需將其中一相的電機線交換接入 步進電機驅動器即可,如a+和a-交換。
對於三相電機,不能將其中一相的電機線交換,而應順序交換其中的兩相,如把a+和b+交換,
a-和b-交換。標籤: 控制步進電機
如何控制步進電機旋轉規定角度 51微控制器
3樓:
這個你要看你具體使用的微控制器資料.
不過通用性一點的講,所有的步進電機控制角度,都是取決於驅動步進電機的pwm的占空比,
不同的占空比,轉角不同
而步進電機的角速度,則是由pwm的頻率控制.
但是具體的資料,與具體的步進電機有關.
4樓:匿名使用者
如果知道步進角,電機旋轉規定角度/步進角=步數
步數就是需要轉動的步數
步進電機如何控制正反轉 5
5樓:tina淺絮
/*這是乙個控制步進電機正反轉的實際應用程式*/
/*選用的是三相步進電機驅動器,p14口線用做步進電機的脈衝控制*/
/*p13口線用做步進電機的方向控制。p15,p16,p17是光耦開關量輸入*/
/*訊號端,p20,p21,p22,p23與x25045.html">x25045看門狗儲存器相連*/
/*k7,k8鍵是設定步進電機轉動速度引數的加減鍵*/
/*k9是啟動執行鍵,按一下k9,步進電機開始執行,直到p17口線有訊號輸入才停止*/
/*k10是停止鍵,任何時候按下k10都將停止步進電機當前的執行*/
/*k11是步進執行鍵,按一下,步進電機動一下*/
/*k12鍵是反向執行鍵,按一下,步進電機開始反向執行,知道p15口線有訊號才停止*/
/*如果p16口線有訊號輸入,則只有k12鍵才起作用,其它鍵都沒反應。*/
start:do;
$include(reg51.dcl)
declare (addrl,n,i,j,ok,ds) byte; /*定義變數*/
declare l(5) byte;
declare (dat,data) byte at (30h);
declare delay word;
declare aco(11) byte constant (05h,9fh,23h,0bh,99h,49h,/*定義led段碼表*/
41h,1fh,01h,09h,00h);
declare si literally ''p21'',sck literally ''p20''; /*x25045囗線定義*/
declare so literally ''p22'',cs literally ''p23'';
dog:procedure; /* 初始化看門狗x25045.html">x25045 */
cs=1;
call time(1);
cs=0;
call time(1);
cs=1;
end dog;
run:procedure; /*步進電機執行脈衝輸出程式*/
if ok=1 then
call dog;
do;p14=0;
call time(1);
p14=1;
call time(1);
end;
end run;
display:procedure(l0,l10); /*顯示子程式*/
declare (l0,l10) byte; /*定義顯示二位*/
n=l10;
n=aco(n); /*十位數bcd碼譯成段碼*/
sbuf=n; /*十位數送164顯示*/
do while ti=0; /*等待傳送結束*/
call dog; /*看門狗定時器復位*/
end;
n=l0;
n=aco(n);
sbuf=n; /*個位數送164顯示*/
do while ti=0;
call dog;
end;
end display;
outbyt: procedure(da); /*向看門狗儲存器寫入一位元組*/
declare (i,da) byte;
j=da; /*將要寫入的位元組賦給臨時變數j */
do i=0 to 7; /*左移8位,送到口線si */
sck=0;
j=scl(j,1);
si=cy;
sck=1; /*每移一位資料,跟乙個時鐘訊號*/
end;
end outbyt;
inbyt: procedure; /* 從看門狗儲存器讀出一位元組 */
declare (i,di) byte;
j=0;
do i=0 to 7;
sck=1;
sck=0;
cy=so;
j=scl(j,1); /*從看門狗儲存器讀出一位元組送入臨時變數j*/
end;
dat=j;
end inbyt;
wrenable: procedure; /* 置看門狗寫使能*/
sck=0;
cs=0;
; /* write enable command */
>x25045 寫使能指令06h */
cs=1;
sck=0;
end wrenable;
wrdisable: procedure; /* 置看門狗寫禁止 */
sck=0;
cs=0;
; /* write disable command */
call outbyt(04h);
sck=0;
cs=1;
end wrdisable;
wrregister: procedure; /* 寫狀態暫存器 */
sck=0;
cs=0;
dat=01h; /* write register command */
call outbyt(dat);
; /* 00h——1.4s, 20h——200ms, 10h——600ms, 30h——disable wdog */
call outbyt(00h); /* 設定看門狗定時時間 */
;sck=0;
cs=1;
call time(200); /* wait to complete writting cycle */
end wrregister;
rdregister:procedure; /* 讀看門狗狀態暫存器 */
sck=0;
cs=0;
; /* register read command */
call outbyt(05h);
call inbyt; /* status register read in */
sck=0;
cs=1;
end rdregister;
wbyte:procedure; /* 看門狗儲存器位元組寫入子程式 */
declare comm byte;
sck=0;
cs=0;
comm=02h; /* 寫指令 02h */
call outbyt(comm);
call outbyt(addrl);
call outbyt(dat); /* send one byte data to x25043 */
cs=1;
sck=0;
call time(150);
end wbyte;
rbyte:procedure; /*看門狗儲存器位元組讀出子程式 */
declare comm byte;
sck=0;
cs=0;
comm=03h; /* read command */
call outbyt(comm);
call outbyt(addrl);
call inbyt; /* read one byte to */
sck=0;
cs=1;
end rbyte;
incdata: procedure; /* 引數修改——"加"鍵處理子程式 */
if p10=0 then /* 如果k7鍵按下*/
do;do while p10=0; /* 等待鍵鬆開有效 */
call dog; /* 此處必需呼叫看門狗復位子程式("餵狗"),否則程式將被看門狗復位*/
end;
data=data 1; /* 設定值 1 */
if data>99 then data=1; /* 規定設定值的上限*/
l(1)=data mod 10; /*將設定值的十位數拆出來送給十位數顯示變數l(1) */
l(2)=data/10; /*將設定值的個位數拆出來送給個位數顯示變數l(2) */
call display(l(1),l(2)); /* 將改變後的設定值送164顯示出來*/
call time(200); /* 延時 */
call dog;
call time(200);
call dog;
call wrenable; /* 置儲存器寫使能 */
addrl=00h; /* 置儲存器位址 */
dat=l(1);
call wbyte; /* 將變數l(1)的值寫入儲存器00h位置 */
call wrenable;
addrl=01h;
dat=l(2);
call wbyte; /* 將變數l(2)的值寫入儲存器01h位置 */
end;
end incdata;
decdata: procedure; /* 引數修改——-"減"鍵處理子程式- */
if p11=0 then /* k8 鍵處理子程式 */
do;do while p11=0;
call dog;
end;
data=data-1; /* 設定值-1 */
if data=0 then data=99;
l(1)=data mod 10;
l(2)=data/10;
call display(l(1),l(2));
call dog;
call time(200);
call dog;
call time(200);
call dog;
call wrenable;
addrl=00h;
dat=l(1);
call wbyte;
call wrenable;
addrl=01h;
dat=l(2);
call wbyte;
end;
end decdata;
starton: procedure; /* start */
declare sd byte;
if p12=0 then /* k9鍵處理子程式 */
do;do while p12=0;
call dog;
end;
if p17=0 then ok=0; /* 如果p17 口線上有訊號輸入,則執行標誌置0 (停止執行)*/
p13=1; /* 置步進電機正向運轉 */
call time(200);
call dog;
do while ok=1; /* 當執行標誌為1時,執行速度延時操作 */
do sd= 0 to data; /* 根據設定值 data的數值延時來確定步進電機執行時的脈衝給定速度*/
call dog;
end;
end;
end starton;
step: procedure; /* step */
declare sd byte;
p13=1; /* 置步進電機正向運轉 */
call time(200);
call dog;
if p33=0 then /* k11鍵處理子程式 */
do;if p17=0 then ok=0; /* 如果p17上有訊號輸入,則停止執行*/
do while p33=0;
do sd= 0 to data; /* 呼叫延時,調整步進電機的執行速度 */
call dog;
call time(2);
end;
call run;
call dog;
end;
end;
ok=0;
end step;
back: procedure; /* 反向執行處理子程式 */
declare sd byte;
if p34=0 then
do;do while p34=0;
call dog;
end;
if p15=0 then ok=0; /* 反向執行時,如果遇到p15上有訊號輸入,則停止步進電機執行 */
p13=0; /* 置步進電機反向執行 */
call time(200);
call dog;
do while ok=1;
do sd=0 to data; /*根據設定值調節步進電機的執行速度 */
call dog;
call time(2);
end;
call run;
if (p15=0 or p32=0 ) then ok=0; /* p15 或 p32 口線任意乙個有訊號輸入,停止執行 */
end;
end;
end back;
main$program: /* 初始化主程式 */
ea=0; /* 關中斷 */
scon=00h; /*置串列埠方式0 ,序列資料輸出模式*/
pcon=00h;
tmod=11h;
et0=1;
enable; /* 開中斷 (ea=1) */
sck=0;cs=1; /* 定義儲存器口線初始狀態 */
call wrenable;
call wrregister; /* 看門狗儲存器 初始化 */
call wrenable;
call dog;
p2=0ffh; /* 初始化各個口線的狀態 */
p1=0ffh;ok=0;
p14=1;p32=1;p33=1;p34=1;
p13=1;
addrl=00h; /* 上電復位後從儲存器中讀出設定的速度值 */
call rbyte;
l(1)=dat;
addrl=01h;
call rbyte;
l(2)=dat;
data=l(1) l(2)*10; /*將讀出的值合併成十進位制,存入變數data中 */
/* 以下是主迴圈程式 */
loop:
if p10=0 then call incdata; /* 檢測各個按鍵是否有按下 */
if p11=0 then call decdata;
if p12=0 then
do;ok=1;
call starton;
end;
if p34=0 then
do;ok=1;
call back;
end;
if p33=0 then
do;ok=1;
call step;
end;
call dog;
call display(l(1),l(2)); /* 將設定值送164顯示 */
call dog;
call time(100);
call dog;
goto loop;
end start;
步進電機驅動器的脈衝訊號和方向控制訊號可以由微控制器的I O埠通過迴圈,延時程式設計直接產生嗎
hi漫海 步進電機驅動器的脈衝訊號和方向控制訊號可以由微控制器的i o埠通過迴圈 延時程式設計直接產生 微控制器一般有兩種方式使得步進電機轉動,第一種是軟體延時,就是延時程式設計直接產生第二種就是中斷開,用計時器中斷作為脈衝訊號控制步進電機。步進電機是將電脈衝訊號轉變為角位移或線位移的開環控制元步進...
請問微控制器控制步進電機脈衝頻率如何思路。C
需要照顧兩個因素 一是不要高於該型步進電機允許的最高頻率 二是加速過程 即頻率由小到大的變化過程 和減速過程 即頻率由大到小的變化過程 中加速度不可過大以致於扭矩超過了該型步進電機允許的扭矩。否則都有可能發生失步。第一條比較簡單,第二條牽涉到機械負載的轉動慣量,計算比較複雜。但是大多數應用中,技術上...
微控制器如何控制步進電機 越詳細越好本人菜鳥不懂
南子欣 首先你需要解決的是一個步進電機的控制 查閱步進電機的資料 步進電機是一種作為控制用的特種電機,它的旋轉是以固定的角度 稱為 步距角 一步一步執行的,其特點是沒有積累誤差 精度為100 所以廣泛應用於各種開環控制。步進電機的執行要有一電子裝置進行驅動,這種裝置就是步進電機驅動器,它是把控制系統...