如何控制步進電機的旋轉方向,如何控制步進電機旋轉規定角度 51微控制器

時間 2021-10-14 21:08:55

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 所以廣泛應用於各種開環控制。步進電機的執行要有一電子裝置進行驅動,這種裝置就是步進電機驅動器,它是把控制系統...