本文目錄一覽:
51單片機步進電機加減速的c語言 。求答案
#include “reg52.h”
void delay(unsigned int t);
//Motor
sbit F1 = P1^0;
sbit F2 = P1^1;
sbit F3 = P1^2;
sbit F4 = P1^3;
unsigned char code FFW[8]={0xfe,0xfc,0xfd,0xf9,0xfb,0xf3,0xf7,0xf6}; //反轉
unsigned char code FFZ[8]={0xf6,0xf7,0xf3,0xfb,0xf9,0xfd,0xfc,0xfe}; //正轉
unsigned int K;
/**********************************************************************
* *
* 步進電機驅動 *
* *
***********************************************************************/
void motor_ffw()
{
unsigned char i;
unsigned int j;
for (j=0; j12; j++) //轉1*n圈
{
for (i=0; i8; i++) //一個周期轉30度
{
if(K==1) P1 = FFW[i]0x1f; //取數據
if(K==2) P1 = FFZ[i]0x1f;
delay(15); //調節轉速
}
}
}
/******************************************************
*
* 延時程序
*
********************************************************/
void delay(unsigned int t)
{
unsigned int k;
while(t–)
{
for(k=0; k100; k++)
{ }
}
}
main()
{
while(1)
{
K=1;
motor_ffw();
K=2;
motor_ffw();
}
}
給你個例子,這是正反轉的可以用這個修改出加減速程序
求採納為滿意回答。
C51 C語言怎麼實現42步進電機加速、減速控制?
42步進電機是一個兩相電機,一般控制可以分為全步或半步控制,全步控制,每一切換相序,步進電機走1.8度,半步控制則走0.9度。
全步控制相序分配為:A,/A,B,/B
半步控制相序分配為:A,AB,B,B/A,/A,/A/B,/B,/BA
加速的話,就使相序切換快一點就可以;當然減速就是相序切換慢點就行。舉例如下:
#includereg51.h
#define uchar unsigned char
uchar stepd[]={0x01,0x03,0x02,0x06,0x04,0xc0,0x08,0x09};
uchar num=0,fx=0;
sbit keyup=P3^0;
sbit keydn=P3^1;
sbit keyfx=P3^2;
int speed=10000;
void t0isr() interrupt 1
{
TH0=(65536-speed)/256;
TL0=(65536-speed)%256;
P2=stepd[num];
if(fx==0){num++;num%=8;}
if(fx==1)
{
if(num==0)num=7;
else num–;
}
}
main()
{
TMOD=0x01;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
TR0=1;
ET0=1;
EA=1;
while(1)
{
if(keyup==0)
{
while(key1==0);
speed-=10;
}
if(keydn==0)
{
while(keydn==0);
speed+=10;
}
if(key3==0)
{
while(key3==0);
fx=~fx;
}
}
}
用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;i4;i++) //4相
{
P1=F_Rotation[i]; //輸出對應的相 可以自行換成反轉表格
Delay(500); //改變這個參數可以調整電機轉速 ,數字越小,轉速越大
}
}
while(Flag)
{
P0=0x7C;//顯示 b 標示反轉
for(i=0;i4;i++) //4相
{
P1=B_Rotation[i]; //輸出對應的相
Delay(500); //改變這個參數可以調整電機轉速 ,數字越小,轉速越大
}
}
}
/******************************************************************/
/* 中斷入口函數 */
/******************************************************************/
void ISR_Key(void) interrupt 2 using 1
{
Delay(300);
Flag=!Flag; //s3按下觸發一次,標誌位取反
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/233610.html