1. 單片機控制步進電機調速
定時時間調大,速度當然會慢。
步進電機不同於其他種類電機,驅動相位的變化速度有范圍的,或者說驅動速度過高過低都不會轉。如果驅動速度太慢,轉到下一極的時間太長,轉不過去;如果驅動速度太快,電機響應速度跟不上。。。
你在使用步進電機時,要知道這種電機的參數。。。
2. 具體怎麼樣用單片機控制步進電機的轉速
也許不是程序的問題,而是電機轉動慣量大,當驅動時間小於某一數值,則不能完成一個步進。表現為卡住。
能把電機轉的更快的出路:
1.從程序上:起動時轉速是逐步加速,停止時轉速是逐步減速,即不要從靜止一下子加到2.2ms。
2.從機械上,電機與被驅動物之間加彈性聯接,得以緩沖。
3.從電氣驅動上,採用雙電壓驅動,以加快驅動(激磁)電流的建立。
3. 51單片機C語言程序按鍵控制步進電機轉速
sbit K1=P1^0;
sbit K2=P1^1;
char y=0;
while(1)
{
pangan();
for(i=0;i<4;i++) //4相
{
/*P1=F_Rotation[i]; //輸出對應的相 可以自行換成反轉表格
Delay(500); //改變這個參數可以調整電機轉速
Delay(5000);*/
P1=B_Rotation[i];
Delay(265+y);
P1=F_Rotation[i];
Delay(265+y);
}
}
void pangan()
{
if(K1==0)
{ y++; //加
while(~k1)
}
if(K2==0)
{ y--;
while(~k2); //減
}
}
}
沒有下上限 要是調的話 需要判斷顯示延時時間
4. 求單片機c語言控制步進電機調速程序
幾相的步進電機啊?用不用驅動晶元?用的話選什麼型號的驅動晶元?你要說具體點啊!
先給你三相的,個不用驅動晶元的步進電機程序。(驅動電路自己做)
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uint time
void timer1(void) interrupt 1 using 1{ //定時器0中斷,定時1ms//
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
time++;
}
void delay(uint n){ //一般延時
while(--n);
}
void delay(uint dtime){ //延時
TR0=1;
while(time<=dtime);
time=0;
TR0=0;
}
void moto(bit cf,uchar n,uint dtime){ //電機驅動子程序,
uchar idata zhpai[4]={0x78,0xb8,0xd8,0xe8};
uchar idata fpai[4]={0xe8,0xd8,0xb8,0x78};
uchar i,l=0;
if(cf==0) //正轉,A-B-C-A
for(i=0;i<n;i++){
P1=zhpai[l];//P1.7~1.4為輸出口,分別為A、B、C、D
l++;
delay(dtime);
if(l==4)l=0;
}
else{ //反轉,C-B-A-C
for(i=0;i<n;i++){
P1=fpai[l];
l++;
delay(dtime);
if(l==4)l=0;
}
}
}
void main(){
TMOD=0x01;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
EA=1;
ET0=1;
while(1){
moto(0,4,70);//正轉,轉四相,每相間隔70ms
delay(10000);
moto(1,4,70);//反轉,轉四相,每相間隔70ms
delay(10000);
}
}
5. 怎樣用單片機控制步進電機轉速
那我們讓電機正轉一圈,反轉半圈,在正傳1/4圈,反轉一圈,試試。
#include <reg51.h>
typedef unsigned char uint8;
typedef unsigned int uint16;
typedef unsigned long uint32;
#define P_DIR 0
#define N_DIR 1
code uint8 FFW[8]={0xF1,0xF3,0xF2,0xF6,0xF4,0xFc,0xF8,0xF9};
void delay(uint16 i)
{
while (i--);
}
void motor_turn(uint16 angle, uint8 dir)
{
uint32 n=4096;
uint8 i;
n /= 360; //1度所需指令數
n *= angle; //angle度所需指令數
if (dir == P_DIR) //正轉
{
i = 7;
while (n--) //循環n次指令數
{
P1 = FFW[i];
if (i == 0)
i = 7;
else
i--;
delay(200);
}
}
else if (dir == N_DIR) //反轉
{
i = 0;
while (n--)
{
P1 = FFW[i];
if (i == 7)
i = 0;
else
i++;
delay(200);///調節轉速快慢
}
}
}
main()
{
while (1)
{
motor_turn(360, P_DIR);
motor_turn(180, N_DIR);
motor_turn(90, P_DIR);
motor_turn(360, N_DIR);
}
}
這個程序主要講一下motor_turn裡面的數據處理部分,不曉得大家是否看懂了。由於電機的旋轉一周需要的指令個數是8*8*64=4096,所以旋轉一度需要的指令數為4096/360,那麼我要旋轉N度,要發送的指令數為N*4096/360,看看是不是和程序里寫的一樣呢。當然,如果你約分的話,N將會容納更多角度而不溢出。
6. 單片機怎麼控制步進電機
ULN2003D 是驅動步進電機的驅動晶元,主要是匹配電機所需的電流。
由於是四相電機,步進電機之所以可以轉動就需要給相繞組提供連續的脈沖,所以需要4個埠來控制四相繞組的工作狀態(P15應該是不需要的),具體的編碼要看電機的拍數;
一旦明白這些,你就可以很容易編寫代碼來控制電機的轉動了,還有在脈沖間你可以設置不同的延時時間來調節電機的轉速。
7. 步進電機怎樣用51單片機調速(pwm方法)
如果你用的是步進電機驅動器驅動步進電機,每來一個驅動脈沖,步進電機就走一步,所以改變驅動脈沖的頻率即方波的頻率就可以調速。
8. 51單片機控制的步進電機,步進電機轉速計算
你要知道步進電機的步距角是多少才行。一個脈沖一步,步距角有1.5度3度 6度7.5度 12度15等許多種,你可以讓其轉慢一點,在轉軸上作個標記,看多少個脈沖轉一圈。
9. 如何通過單片機控制步進電機線性加減速
關於程序,固定一個適當的頻率,按鍵觸發啟動定時器,然後在定時中斷里取反一個IO埠做脈沖輸出,再放入一個累加變數做計算,算脈沖數量,是取反兩次輸出一個完整的脈沖,在主程序中設定一個需要的脈沖數量來作為條件控制定時器的開啟和關閉,然後循環等待條件滿足需求。