導航:首頁 > 編程語言 > 步進電機速度控製程序

步進電機速度控製程序

發布時間:2023-09-15 04:07:06

⑴ 西門子s7-200plc控制步進電機速度與正反轉怎麼編程

1、主程序先正轉,等到正轉完了就中斷,中斷中接通個輔助觸點(M0.X),當M.0X閉合,住程序中的反轉開始運做。這樣子就OK了。

2、用PTO指令讓Q0.0 OR Q0.1高速脈沖,另一個點如Q0.2做方向信號,就可以控制正反轉了,速度快慢就要控制輸出脈沖周期了,周期越短速度越快,如果你速度很快的話請考慮緩慢加速,不然它是啟動不了的,如果方向也變的快的話就要還做一個緩慢減速,不然它振動會蠻厲害,而且也會失步。

⑵ 請大俠們幫忙編一個步進電機控製程序。

#include <REGX52.H>
bit aj = 0;
sbit clk1=P1^0; //定義X脈沖輸出位
sbit dir1=P1^1; //定義X正反轉控制位
sbit ena1=P1^2; //定義Y使能控制位
sbit x1 =P1^6;
unsigned int k=0,x11,y11,cycle=2000,yk,xk,xk1;//定義開始控制位
unsigned char x = 1;
unsigned int kx;

void delay(unsigned int i)
{
unsigned int j,k;
for(j=i;j>0;j--)
for(k=300;k>0;k--);
}

void inistartx(void) //X初始化函數

{
xk=0;
dir1=1;
cycle=9600;
kx=300;
TR0=1;
P2_0=0;
while(xk1<400);
TR0=0;
kx=0;

delay(500);

xk=0;
cycle=9600;
dir1=0;
xk1=0;
kx=700;
TR0=1;
while(x==1&&xk1<801); //
TR0=0;

delay(500);
cycle=9600;
xk1=0;
dir1=1;
kx=300;
TR0=1;
while(xk1<400);
TR0=0;
kx=0;
clk1=0;
xk1=0;

}
void exint0_init( )
{
IT0 =1; //下降沿產生中斷
EX0 =1; //使能外部中斷
EA =1; //使能全局中斷

}
void initime0(void) //初始化定時器0
{
TH0=0xf8;
TL0=0x30;
}
void time0() interrupt 1 //定時器0中斷函數
{
if(xk1<100){cycle=cycle-80;}
if(xk1>=100&&xk1<=kx){cycle=1600;}
if(xk1>kx) {cycle=cycle+80;}
TH0=(65536-cycle)/256; //定時5000次= 5000us = 5 ms 65536-5000=60536=0xec78
TL0=(65536-cycle)%256;
//TH0=0xf8; //定時器1為X或者Y提供脈沖數
//TL0=0x30; //頻率500cycle=2000 ; cycle=2500=》頻率=400
xk1++;
clk1=~clk1;
k++;
}

void exint0() interrupt 0 //接近開關接P3.2,發生中斷停止
{
TR0=0;
x=0;
ena1=0;

}

void main (void)
{
x1=1;
TMOD = 0x01;
IE=0xAF; //EA - ET2 - ES - ET1 - EX1- ET0 - EX0 允許(總中斷EA) ET2 ET1 ET0中斷
initime0();
exint0_init();
inistartx();
TR2=1;
while(aj ==0);
inistartx();
TR1=1;

//IP= 0x00; //- - PT2 PS PT1 PX1 PT0 PX0
////TCON =0x00; //TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
//T2CON =0x00; //TF2 EXF2 RCLK TCLK EXEN2 TR2 C/T CP/RL2
while(1){

}
}

⑶ 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); //減
}
}
}
沒有下上限 要是調的話 需要判斷顯示延時時間

閱讀全文

與步進電機速度控製程序相關的資料

熱點內容
用於keil下的stc器件資料庫 瀏覽:400
新聞網站後台如何操作前台 瀏覽:539
在剪映app中怎麼查看視頻尺寸 瀏覽:9
linux文件成分包括 瀏覽:886
文件轉換免費的軟體 瀏覽:644
linuxwpsxlsx 瀏覽:482
小米手機怎麼上移動網路連接失敗怎麼辦 瀏覽:598
win10系統打開java 瀏覽:479
全日制編程什麼意思 瀏覽:447
筆記本創建區域網怎麼傳文件 瀏覽:871
怎樣查看id密碼 瀏覽:647
贛州極客晨星少兒編程怎麼樣 瀏覽:690
覺醒年代哪個app可以免費觀看 瀏覽:830
如何關閉win10觸摸屏幕 瀏覽:761
蘋果142不能傳文件 瀏覽:128
如何看歷史底部數據 瀏覽:230
怎麼在電腦上下軟體或安裝app 瀏覽:798
qq頭像電影截圖情侶 瀏覽:87
安卓的網路位置設置在哪 瀏覽:973
編程俠官網如何登錄 瀏覽:484

友情鏈接