⑴ 奼傚ぇ紲炲府蹇欑紪鍐欏崟鐗囨満鎺у埗姝ヨ繘鐢墊満C璇璦緙栫▼錛屽浘鐗囧備笅錛孉T89C51鍗曠墖鏈哄洓鐩稿叓鎷嶏紝ULN2004椹卞姩鑺鐗
#include "reg52.h"
//Motor
sbit A = P2^0; //瀹氫箟綆¤剼
sbit b = P2^1;
sbit C = P2^2;
sbit D = P2^3;
///////////////////////////////////////
//姝ヨ繘鐢墊満椹卞姩
unsigned char MotorStep=0;
unsigned int MotorTimer = 0;
unsigned int MotorDelay,Speed=1,TIM,CT;
#define speed 8 // 璋冩暣閫熷害 鏁板間笉瑕佽劇殑澶浣 浣庝簡浼氬紩璧烽渿鍔ㄣ
/*****************************************************
* 鍒濆嬪寲椹杈 *
******************************************************/
void InitMotor()
{
A = 1;
b = 1;
C = 1;
D = 1;
}
void SetMotor()
{
// if(Speed == 0) return;
MotorDelay=Speed; //璋冩暣閫熷害
switch(MotorStep)
{
case 0:
if(TIM) // A
{
A = 0; //0xf1
b = 1;
C = 1;
D = 1;
MotorStep = 1;
TIM=0;
}
break;
case 1: // AB
if(TIM)
{
A = 0; //0xf3
b = 0;
C = 1;
D = 1;
MotorStep = 2;
TIM=0;
}
break;
case 2: //B
if(TIM)
{
A = 1;
b = 0; //0xf2
C = 1;
D = 1;
MotorStep = 3;
TIM=0;
}
break;
case 3: //BC
if(TIM)
{
A = 1;
b = 0; //0xf6
C = 0;
D = 1;
MotorStep = 4;
TIM=0;
}
break;
case 4: //C
if(TIM)
{
A = 1;
b = 1; //0xf4
C = 0;
D = 1;
MotorStep = 5;
TIM=0;
}
break;
case 5: //CD
if(TIM)
{
A = 1;
b = 1; //0xfc
C = 0;
D = 0;
MotorStep = 6;
TIM=0;
}
break;
case 6: //D
if(TIM)
{
A = 1;
b = 1; //0xf8
C = 1;
D = 0;
MotorStep = 7;
TIM=0;
}
break;
case 7: //DA
if(TIM)
{
A = 0;
b = 1; //0xf9
C = 1;
D = 0;
MotorStep = 0;
TIM=0;
}
break;
}
}
void system_Ini()
{
TMOD|= 0x11;
TH0=0xDC; //11.0592M
TL0=0x00;
IE = 0x8A;
TR0 = 1;
}
main()
{ system_Ini();
InitMotor();
while(1)
{
SetMotor();
}
}
/************************************************
* *
* 瀹氭椂涓鏂寤舵椂 *
************************************************/
void Tzd(void) interrupt 1
{
TH0 = 0xfe; //11.0592
TL0 = 0x33;
if( CT++==speed)
{TIM=1;
CT=0;
}
}
⑵ 步進電機怎麼編寫控制程序
步進電機編程一般有幾點。細分數,結構比例,加速度,減速度。最大頻率限值,最小起跳頻率。
1:原點。
2:速度,距離(相對位置,絕對位置)。速度模式
3:停止。等待
如果多軸的或開關,感測器比較多的位置控制就比較復雜了。有很多變數和跳轉。這取決於控制器功能和底層程序開發和運用。
根據你問的情況,應該是寫上層程序。中層都已經做好了,寫程序需要對使用的晶元和代碼非常熟悉,邏輯關系比較了解,運動結構也有一定的認知。
⑶ 關於51單片機控制步進電機編程(c語言),求助
#include<reg52.h>
#defineucharunsignedchar
#defineuintunsignedint
ucharkey_l,key,i;
ucharcodetemp1[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};
ucharcodetemp2[]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01};
ucharcodeaa[16]=":";
ucharcodesmg[]="";
sbite=P2^6;
sbitrs=P2^4;
sbitrw=P2^5;
voiddelay(inttt)
{
while(tt--);
}
voidw_cmd(uchardd)
{
rs=0;
rw=0;
e=0;
delay(50);
P0=dd;
e=1;
delay(50);
e=0;
delay(50);
}
voidw_dat(uchardd)
{
rs=1;
rw=0;
e=0;
delay(50);
P0=dd;
e=1;
delay(50);
e=0;
}
voidinit(ucharsmg4[],uchartime[])
{
w_cmd(0x38);
delay(2000);
w_cmd(0x38);
delay(500);
w_cmd(0x38);//注意順序,設置工作方式,顯示模式設置
delay(500);
w_cmd(0x08);//注意順序,關閉顯示
w_cmd(0x01);//清屏
w_cmd(0x07);//游標·畫面滾動模式設置
w_cmd(0x0c);//顯示及游標模式設置
w_cmd(0x80);//
for(i=0;i<16;i++)
w_dat(time[i]);
w_cmd(0x80+0X40);
for(i=0;i<16;i++)
w_dat(smg4[i]);
}
voidTb(ucharsmg[],ucharn,uchars,ucharl,uchard)
{
unsignedcharm;
w_cmd(0x82);
for(m=n;m<s;m++)
w_dat(smg[m]);
w_cmd(0x80+0X42);
for(m=l;m<d;m++)
w_dat(smg[m]);
}
voidmain()
{
init(aa,aa);
while(1)
{
P1=0xf0;
key_l=P1;
if(key_l!=0xf0)
{
delay(100);
if(key_l!=0xf0)
{
P1=key_l|0x0f;
key=P1;
}
}
switch(key)
{
case0xee:Tb(smg,0,10,11,21);
for(i=0;i<8;i++)
{
P2=temp1[i];
delay(500);
}
break;
case0xde:Tb(smg,0,10,19,29);
for(i=0;i<8;i++)
{
P2=temp1[i];
delay(300);
}
break;
case0xbe:Tb(smg,0,10,30,40);
for(i=0;i<8;i++)
{
P2=temp1[i];
delay(100);
}
break;
case0x7e:P2=0xff;Tb(smg,0,10,39,49);break;
case0xed:Tb(smg,50,60,11,21);
for(i=0;i<8;i++)
{
P2=temp2[i];
delay(200);
}
break;
case0xdd:Tb(smg,50,60,19,29);
for(i=0;i<8;i++)
{
P2=temp2[i];
delay(120);
}
break;
case0xbd:P2=0xff;Tb(smg,50,60,40,50);break;
}
}
}
⑷ 三菱PLC控制步進電機的最簡單的程序
M206:正轉
M207:反轉
Y0:脈沖輸出
Y1:反轉信號
D4200:頻率(用於控制速度,數據來源於觸摸屏)
K99999999:脈沖數量
K100:加速時間
向左轉|向右轉
如圖,這個就是一個步進電機的正反轉的運行,Y0接步進驅動器的脈沖,Y1接步進驅動器的方向,M0為ON時正轉,M1為ON時反轉,D0是脈沖的頻率,D1是脈沖的個數。
移動速度和脈沖頻率有關,在細分數一定的條件下,頻率越高速度越快,行走的距離和脈沖個數有關,脈沖個數越多,行走距離越長,(在三菱這個指令中,脈沖個數為0時,是一直運行,相當於無限個數),具體的移動速度和行走距離得根據你的設置(頻率,細分數,脈沖個數等)和硬體(包括步進電機的步距角,絲桿的絲距,齒輪組的齒輪比,齒輪帶的傳送比等)來調節。
⑸ 用c語言程序實現步進電機的正反轉加減速的編程
內容:1、本程序用於測試4相步進電機常規驅動
2、需要用跳帽或者杜邦線把信號輸出端和對應的步進電機信號輸入端連接起來
3、速度不可以調節的過快,不然就沒有力矩轉動了
4、按s4(設置成獨立按鍵模式)可以控制正反轉
------------------------------------------------*/
#include <reg52.h>
bit Flag;//定義正反轉標志位
unsigned char code F_Rotation[4]={0xf1,0xf2,0xf4,0xf8}; //正轉表格
unsigned char code B_Rotation[4]={0xf8,0xf4,0xf2,0xf1}; //反轉表格
/******************************************************************/
/* 延時函數 */
/******************************************************************/
void Delay(unsigned int i)//延時
{
while(--i);
}
/******************************************************************/
/* 主函數 */
/******************************************************************/
main()
{
unsigned char i;
EX1=1; //外部中斷0開
IT1=1; //邊沿觸發
EA=1; //全局中斷開
while(!Flag)
{
P0=0x71;//顯示 F 標示正轉
for(i=0;i<4;i++) //4相
{
P1=F_Rotation[i]; //輸出對應的相 可以自行換成反轉表格
Delay(500); //改變這個參數可以調整電機轉速 ,數字越小,轉速越大
}
}
while(Flag)
{
P0=0x7C;//顯示 b 標示反轉
for(i=0;i<4;i++) //4相
{
P1=B_Rotation[i]; //輸出對應的相
Delay(500); //改變這個參數可以調整電機轉速 ,數字越小,轉速越大
}
}
}
/******************************************************************/
/* 中斷入口函數 */
/******************************************************************/
void ISR_Key(void) interrupt 2 using 1
{
Delay(300);
Flag=!Flag; //s3按下觸發一次,標志位取反
}
⑹ 三菱 步進電機 PLC編程
PLC控制步進電機的實例(圖與程序)
⑺ 給位大神,控制步進電機自動工作,不用plc和單片機。最好用電腦控制或者控制器。該如何控制,如何編程
這個問題好解決,可以使用表控TPC8-8TD的控制器來控制步進電機,特點就是簡單、易行。使用表格設置方式,用滑鼠在表格上設置,無需專業技術。這個型號的表控是8路輸入8路輸出的,具有4路脈沖輸出端,最多可以同時控制4個步進電機。還有個特點是:不僅可以控制步進電機,還可以同時控制氣缸、交流電機等更多的負載同時工作。
下圖是功能設置表的圖片:
上圖是控制單台步進電機的接線示意圖,表控由Y1輸出脈沖信號,由Y輸出方向信號到步進電機驅動器。還有2軸和4軸的接線圖這里從略,需要的可以到網上下載。