1. 單片機如何控制步進電機靜力矩的產生
對其中的一相通電的確是可以產生靜力矩,但電流太大,用1ms的周期,占空比為2/5,會出現響聲,而且電流也挺大,是否有別的方法保持力矩?
2. 如何用單片機控制步進電機步數
如何用單片機控制步進電機
步進電機是機電控制中一種常用的執行機構,它的用途是將電脈沖轉化為角位移,通俗地說:當步進驅動器接收到一個脈沖信號,它就驅動步進電機按設定的方向轉動一個固定的角度(及步進角)。通過控制脈沖個數即可以控制角位移量,從而達到准確定位的目的;同時通過控制脈沖頻率來控制電機轉動的速度和加速度,從而達到調速的目的。
一、步進電機常識
常見的步進電機分三種:永磁式(PM),反應式(VR)和混合式(HB),永磁式步進一般為兩相,轉矩和體積較小,步進角一般為7.5度或15度;反應式步進一般為三相,可實現大轉矩輸出,步進角一般為1.5度,但雜訊和振動都很大。在歐美等發達國家80年代已被淘汰;混合式步進是指混合了永磁式和反應式的優點。它又分為兩相和五相:兩相步進角一般為1.8度而五相步進角一般為0.72度。這種步進電機的應用最為廣泛。
二、永磁式步進電機的控制
下面以電子愛好者業余製作中常用的永磁式步進電機為例,來介紹如何用單片機控制步進電機。圖1是35BY型永磁步進電機的外形圖,圖2是該電機的接線圖,從圖中可以看出,電機共有四組線圈,四組線圈的一個端點連在一起引出,這樣一共有5根引出線。要使用步進電機轉動,只要輪流給各引出端通電即可。將COM端標識為C,只要AC、C、BC、C,輪流加電就能驅動步進電機運轉,加電的方式可以有多種,如果將COM端接正電源,那麼只要用開關元件(如三極體),將A、B、輪流接地。列出了該電機的一些典型參數:表135BY48S03型步機電機參數型號步距角相數電壓電流電阻最大靜轉距定位轉距轉動慣量35BY48S03 7.5 4 12 0.26 47 180 65 2.5 有了這些參數,不難設計出控制電路,因其工作電壓為12V,最大電流為0.26A,因此用一塊開路輸出達林頓驅動器(ULN2003)來作為驅動,通過P1.4~P1.7來控制各線圈的接通與切斷。開機時,P1.4~P1.7均為高電平,依次將P1.4~P1.7切換為低電平即可驅動步進電機運行,注意在切換之前將前一個輸出引腳變為高電平。如果要改變電機的轉動速度只要改變兩次接通之間的時間,而要改變電機的轉動方向,只要改變各線圈接通的順序。
3. 單片機如何控制電機轉速
利用單片機的定時器TIMER_A(TA)中斷產生脈沖信號,通過在響應的中斷程序中實現步進電機步數和圈數的准確計數,通過PWM實現轉速控制。
可以利用P10埠的中斷關閉TA中斷程序,並推入堆棧,停止電機;P11中斷則開啟TA中斷,堆棧推入程序計器(PC),開啟電機。
P31埠輸出高電平由PMM8713的U/D埠控制電機的轉向;P3.0~P37埠接8279的8個數據介面。
單片機掃描到矩陣鍵盤有鍵按下時,利用P2埠的中斷設置TA,控制啟停、調速和轉向等,同時單片機反饋給8279控制LED管顯示轉速和轉向。
(3)單片機如何控制步進電機擴展閱讀
1、單片機所接收到控制命令暫存在RXBUFFER中,與存儲在片內Flash的中斷程序的入口地址相比較,相同就進入中斷,實現步進電機的控制。
2、當P1.0中為高電平時,其內部三極體導通,使電機轉動。當P1.0為低電平時,內部三極體截止,電路斷開,電機停止轉動。所以在程序中可以利用P1.0口輸出PWM波來控制電機的轉速。
4. 步進電機基本控制方法
進電機的基本控制方法有幾下幾種情況:1、採用專用晶元,這樣控制簡單,成本就低,但一般工作電流不大約2A左右,工作電壓不高,36VDC左右;2、採用MCU+功率器件的方式,電流通過模擬電路來控制,MCU提供細分環形分配器,這種方式,控制相對簡單,工作電流和電壓都可以做大,但控制參數一般比較固定,應用不靈活;3、採用DSP實現全數字式控制,控制比較復雜,但控制演算法靈活,可以自動整定不同電機的控制參數。
5. 單片機控制步進電機程序
假設P0口低4位接步進電機4個繞組,高電平繞組通電,程序如下:
whille(1)
{P0=1;delayms(5);
P0=2;delayms(5);
P0=4;delayms(5);
P0=8;delayms(5);}
反轉 的話, 就按 8 4 2 1 順序輸出。
6. 單片機控制步進電機的原理
步進電機控制原理
步進電機是數字控制電機,它將脈沖信號轉變成角位移,即給一個脈沖信號,步進電機就轉動一個角度,因此非常適合於單片機控制。步進電機可分為反應式步進電機(簡稱VR)、永磁式步進電機(簡稱PM)和混合式步進電機(簡稱HB)。
步進電機區別於其他控制電機的最大特點是,它是通過輸入脈沖信號來進行控制的,即電機的總轉動角度由輸入脈沖數決定,而電機的轉速由脈沖信號頻率決定。
步進電機的驅動電路根據控制信號工作,控制信號由單片機產生。其基本原理作用如下:
(1)控制換相順序
通電換相這一過程稱為脈沖分配。例如:三相步進電機的三拍工作方式,其各相通電順序為A-B-C-D,通電控制脈沖必須嚴格按照這一順序分別控制A,B,C,D相的通斷。
(2)控制步進電機的轉向
如果給定工作方式正序換相通電,步進電機正轉,如果按反序通電換相,則電機就反轉。
(3)控制步進電機的速度
如果給步進電機發一個控制脈沖,它就轉一步,再發一個脈沖,它會再轉一步。兩個脈沖的間隔越短,步進電機就轉得越快。調整單片機發出的脈沖頻率,就可以對步進電機進行調速。
步進電機是一種可以把脈沖激勵的變化轉換成精確轉子位置增量運動的執行機構,它可將脈沖信號變成電機相應角位移的機械量,從而通過控制脈沖的個數來控制電機轉動的時間,並通過改變脈沖的頻率控制電機運轉的速度。
7. 單片機控制步進電機
這是我自己做過的。源碼都給你了
#include<reg52.h>
#include<intrins.h>
#include<absacc.h>
#include<string.h>
#define uchar unsigned char
#define uint unsigned int
uint count; //當前計數值
uint distance;
bit intt=1;
unsigned char cont=0;
unsigned char co=0;
uchar buf;
//uchar m,lm,cm;
/**************針腳定義************/
sbit rect_wave=P2^0; //晶振控制信號
sbit RS=P1^0;
sbit RW=P1^1;
sbit EN=P1^2;
sbit CLR=P1^3;
sbit DATA=P1^4;
sbit CLK=P1^5;
sbit d=P2^1;
sbit cp=P2^2;
sbit dir=P2^3;
/***********************************/
/**************函數聲明************/
void time0over(void); //定時器計時程序
void clrlcd(void); //clr LCD
void c_send(unsigned char y); //發命令
void reset(void); // reset LCD
void d_send(unsigned char x); //發數據
void pos(unsigned char pos); //設定顯示位置
void l_delay(unsigned int t); //長延時
void trans(j);
void ret(void); //初始化系統
void retcont(void); //定時器復位
void math(void); //計算測量距離
/***************************/
void init(void)
{ TH1=0xf3;
TL1=0xf3;
PCON=0x80;
TR1=1;
SCON=0x50; /*串口初始化設置,波特率4800BPS*/
}
//*******************************//
void send(uchar dat) /*發送子程序*/
{ //uchar i;
/*發送一個數據*/
SBUF=dat;
while(TI==0);
TI=0;
}
/***********************************/
void turn (void) //電機轉動控制
{
unsigned char x;
cont++;
cp=~cp;
l_delay(50);
cp=~cp;
co++;
if(co == 3)
{d=~d;
}
if(co == 4)
{d=~d;
co=0;
}
if (cont == 200) //判斷是否進行反轉復位
{dir=~dir;
cont=0;
for(x=0;x < 200;x++)
{cp=~cp;
l_delay(5);
cp=~cp;
co++;
if(co == 3)
{d=~d;
}
if(co == 4)
{d=~d;
co=0;
}
}
dir=~dir;
cont=0;
}
}
/**************子程序**********************/
void int0 () interrupt 0 //中斷0服務程序
{
EX0=0; //關閉中斷
TR0=0; //關閉定時器
TF0=0; //標志位清零
rect_wave=0; //停止發送超聲波
intt=0;
}
void work(void)
{
if(!intt)
{
intt=1;
if (distance < 400)
{
buf=distance;
send(buf);
turn();
math();} //計算所測得的距離
l_delay(5); //延時
retcont(); //定時器復位
rect_wave=1;
count=0;
}
}
void math(void) //計算所測得的距離
{ uchar m,lm,cm;
cm=distance%10; //取距離的最低位
distance=distance/10; //取距離的次高位
lm=distance%10;
distance=distance/10; //取距離的最高位
m=distance%10;
clrlcd(); //輸出計算結果
pos(0);
d_send('d');
d_send('i');
d_send('s');
d_send('=');
//pos(4);
d_send(m+0x30);
d_send(lm+0x30);
d_send(cm+0x30);
d_send('c');
d_send('m');
l_delay(500);
}
void time0over(void) //定時器計時程序
{ TF0=0;
count++;
distance=count;
}
/*
void trans(j)
{
switch(j)
{
case 0: d_send('0');break;
case 1: d_send('1');break;
case 2: d_send('2');break;
case 3: d_send('3');break;
case 4: d_send('4');break;
case 5: d_send('5');break;
case 6: d_send('6');break;
case 7: d_send('7');break;
case 8: d_send('8');break;
case 9: d_send('9');break;
}
}
*/
delay() //延時
{
int i;
for(i=0;i<1000;i++);
}
void l_delay(unsigned int t) //延時
{
unsigned int p;
unsigned int j;
for(j=0;j<t;j++)
{
for(p=0;p<1000;p++);
}
}
void reset(void) // reset LCD
{
delay();
c_send(0x38);
c_send(0x01);
c_send(0x06);
c_send(0x0c);
c_send(0x80);
}
void clrlcd(void) // clr LCD
{
delay();
c_send(0x01);
}
void pos(unsigned char pos) //設定顯示位置
{
c_send(pos | 0x80);
}
void c_send(unsigned char y) //發命令
{
unsigned char i;
EN=1;
RS=0;
RW=0;
for(i=0;i<8;i++)
{
if(_crol_(y,i)&0x80)
DATA=1;
else
DATA=0;
CLK=0;
CLK=1;
}
EN=0;
delay();
}
void d_send(unsigned char x) //發數據
{
unsigned char i;
EN=1;
RS=1;
RW=0;
for(i=0;i<8;i++)
{
if(_crol_(x,i)&0x80)
DATA=1;
else
DATA=0;
CLK=0;
CLK=1;
}
EN=0;
delay();
}
void ret(void) //初始化計數器
{ TMOD=0x22; //設置定時器計數器1為工作方式2
TH0=0xc6; //設置計數初值高位元組
TL0=0xc6; //設置計數初值低位元組
count=0;
IE=0x00; //禁止中斷
TF0=0; //溢出標志位清零
TR0=1; //打開定時器1
rect_wave=1;
EA=1; //打開中斷
IP=0x01; //外部中斷0為高中斷優先順序
IT0=0; //外部中斷低電平觸發シ?
EX0=1;
}
void retcont(void)
{ TF0=0; //溢出標志位清零
TR0=1; //打開定時器1
EA=1; //打開中斷
IP=0x01; //外部中斷0為高中斷優先順序
IT0=0; //外部中斷下降沿觸發
EX0=1;
rect_wave=1;
}
/**************主程序************/
void main(void)
{ rect_wave=0;
reset();
l_delay(10);
ret();
init();
math();
for(;;)
{
if(TF0)
{
time0over();
}
work();
}
}
8. 如何使用單片機精確控制步進電機
如何用單片機控制步進電機
步進電機是機電控制中一種常用的執行機構,它的用途是將電脈沖轉化為角位移,通俗地說:當步進驅動器接收到一個脈沖信號,它就驅動步進電機按設定的方向轉動一個固定的角度(及步進角)。通過控制脈沖個數即可以控制角位移量,從而達到准確定位的目的;同時通過控制脈沖頻率來控制電機轉動的速度和加速度,從而達到調速的目的。
一、步進電機常識
常見的步進電機分三種:永磁式(PM),反應式(VR)和混合式(HB),永磁式步進一般為兩相,轉矩和體積較小,步進角一般為7.5度或15度;反應式步進一般為三相,可實現大轉矩輸出,步進角一般為1.5度,但雜訊和振動都很大。在歐美等發達國家80年代已被淘汰;混合式步進是指混合了永磁式和反應式的優點。它又分為兩相和五相:兩相步進角一般為1.8度而五相步進角一般為0.72度。這種步進電機的應用最為廣泛。
二、永磁式步進電機的控制
下面以電子愛好者業余製作中常用的永磁式步進電機為例,來介紹如何用單片機控制步進電機。圖1是35BY型永磁步進電機的外形圖,圖2是該電機的接線圖,從圖中可以看出,電機共有四組線圈,四組線圈的一個端點連在一起引出,這樣一共有5根引出線。要使用步進電機轉動,只要輪流給各引出端通電即可。將COM端標識為C,只要AC、C、BC、C,輪流加電就能驅動步進電機運轉,加電的方式可以有多種,如果將COM端接正電源,那麼只要用開關元件(如三極體),將A、B、輪流接地。列出了該電機的一些典型參數:表135BY48S03型步機電機參數型號步距角相數電壓電流電阻最大靜轉距定位轉距轉動慣量35BY48S03 7.5 4 12 0.26 47 180 65 2.5 有了這些參數,不難設計出控制電路,因其工作電壓為12V,最大電流為0.26A,因此用一塊開路輸出達林頓驅動器(ULN2003)來作為驅動,通過P1.4~P1.7來控制各線圈的接通與切斷。開機時,P1.4~P1.7均為高電平,依次將P1.4~P1.7切換為低電平即可驅動步進電機運行,注意在切換之前將前一個輸出引腳變為高電平。如果要改變電機的轉動速度只要改變兩次接通之間的時間,而要改變電機的轉動方向,只要改變各線圈接通的順序。
9. 單片機怎麼用一個按鈕控制步進電機啟動和停止
單片機用一個按鈕控制步進電機啟動和停止,這很容易的,識別按鍵按下的程序會寫吧,那定義一個位變數,即標志位,如flag,上電後flag=0,為電機停止狀態。每按一次按鍵,flag=!flag,即取反一次,然後再判斷標志位,flag=1,則啟動電機。flag=0,則停止電機。