步进电机调速程序.docx
《步进电机调速程序.docx》由会员分享,可在线阅读,更多相关《步进电机调速程序.docx(16页珍藏版)》请在冰豆网上搜索。
![步进电机调速程序.docx](https://file1.bdocx.com/fileroot1/2023-1/28/97182cda-dc28-4571-a49b-a1eb159aa95e/97182cda-dc28-4571-a49b-a1eb159aa95e1.gif)
步进电机调速程序
/*************************************************************************************
*标题:
步进电机试验一*
**
*通过本例程了解步进马达使用及驱动程序编写*
*;单双八拍工作方式:
*
*;A-AB-B-BC-C-CD-D-DA(即一个脉冲,转3.75度)*
*J14短路冒需断开*
*请学员一定要消化掉本例程*
*
**************************************************************************************/
#include"reg52.h"
//Motor
sbitF1=P1^0;
sbitF2=P1^1;
sbitF3=P1^2;
sbitF4=P1^3;
///////////////////////////////////////
//步进电机驱动
unsignedcharMotorStep=0;
unsignedintMotorTimer=0;
unsignedintMotorDelay,Speed=1,TIM,CT;
/*****************************************************
*初始化马达*
******************************************************/
voidInitMotor()
{
F1=1;
F2=1;
F3=1;
F4=1;
}
voidSetMotor()
{
//if(Speed==0)return;
MotorDelay=Speed;
switch(MotorStep)
{
case0:
if(TIM)//A
{
F1=0;//0xf1
F2=1;
F3=1;
F4=1;
MotorStep=1;
TIM=0;
}
break;
case1:
//AB
if(TIM)
{
F1=0;//0xf3
F2=0;
F3=1;
F4=1;
MotorStep=2;
TIM=0;
}
break;
case2:
//B
if(TIM)
{
F1=1;
F2=0;//0xf2
F3=1;
F4=1;
MotorStep=3;
TIM=0;
}
break;
case3:
//BC
if(TIM)
{
F1=1;
F2=0;//0xf6
F3=0;
F4=1;
MotorStep=4;
TIM=0;
}
break;
case4:
//C
if(TIM)
{
F1=1;
F2=1;//0xf4
F3=0;
F4=1;
MotorStep=5;
TIM=0;
}
break;
case5:
//CD
if(TIM)
{
F1=1;
F2=1;//0xfc
F3=0;
F4=0;
MotorStep=6;
TIM=0;
}
break;
case6:
//D
if(TIM)
{
F1=1;
F2=1;//0xf8
F3=1;
F4=0;
MotorStep=7;
TIM=0;
}
break;
case7:
//DA
if(TIM)
{
F1=0;
F2=1;//0xf9
F3=1;
F4=0;
MotorStep=0;
TIM=0;
}
break;
}
}
voidsystem_Ini()
{
TMOD|=0x11;
TH0=0xDC;//11.0592M
TL0=0x00;
IE=0x8A;
TR0=1;
}
main()
{system_Ini();
InitMotor();
while
(1)
{
SetMotor();
}
}
/************************************************
**
*定时中断延时*
************************************************/
voidTzd(void)interrupt1
{
TH0=0xfe;//11.0592
TL0=0x33;
if(CT++==10)
{TIM=1;
CT=0;
}
}
/*************************************************************************************
*标题:
步进电机试验二*
**
*通过本例程了解步进马达使用及驱动程序编写*
*;单双八拍工作方式:
*
*;A-AB-B-BC-C-CD-D-DA(即一个脉冲,转3.75度)*
*J14短路冒需断开*
*请学员一定要消化掉本例程*
**
**************************************************************************************/
#include"reg52.h"
unsignedcharcodeFFW[8]={0xfe,0xfc,0xfd,0xf9,0xfb,0xf3,0xf7,0xf6};
voiddelay(unsignedintt);
//Motor
sbitF1=P1^0;
sbitF2=P1^1;
sbitF3=P1^2;
sbitF4=P1^3;
///////////////////////////////////////
//步进电机驱动
voidmotor_ffw()
{
unsignedchari;
for(i=0;i<8;i++)//一个周期转30度
{
P1=FFW[i]&0x1f;//取数据
delay(5);//调节转速
}
}
voiddelay(unsignedintt)
{
unsignedintk;
while(t--)
{
for(k=0;k<60;k++)
{}
}
}
main()
{
while
(1)
{
motor_ffw();
}
}
/*************************************************************************************
*标题:
步进电机试验三(加减速运行)*
**
*通过本例程了解步进马达使用及驱动程序编写*
*;单双八拍工作方式:
*
*;A-AB-B-BC-C-CD-D-DA(即一个脉冲,转3.75度)*
**
*请学员一定要消化掉本例程*
**************************************************************************************/
#include"reg52.h"
voiddelay();
//Motor
sbitF1=P1^0;
sbitF2=P1^1;
sbitF3=P1^2;
sbitF4=P1^3;
unsignedcharcodeFFW[8]={0xfe,0xfc,0xfd,0xf9,0xfb,0xf3,0xf7,0xf6};//反转
unsignedcharcodeFFZ[8]={0xf6,0xf7,0xf3,0xfb,0xf9,0xfd,0xfc,0xfe};//正转
unsignedintK,rate;
/**********************************************************
**
*步进电机驱动*
***********************************************************/
voidmotor_ffw()
{
unsignedchari;
for(i=0;i<8;i++)//一个周期转30度
{
P1=FFW[i]&0x1f;//取数据
delay();//调节转速
}
}
/********************************************
延时程序
*********************************************/
voiddelay()
{
unsignedintk,t;
t=rate;
while(t--)
{
for(k=0;k<150;k++)
{}
}
}
/********************************************************
*
*步进电机运行
*
*********************************************************/
voidmotor_turn()
{
unsignedcharx;
rate=0x0a;
x=0x40;
do
{
motor_ffw();//加速
rate--;
}while(rate!
=0x01);
do
{
motor_ffw();//匀速
x--;
}while(x!
=0x01);
do
{
motor_ffw();//减速
rate++;
}while(rate!
=0x0a);
}
main()
{
while
(1)
{
motor_turn();
}
}
/**************************************************************************************
*标题:
步进电机试验四*
**
*通过本例程了解步进马达使用及驱动程序编写*
*双四拍工作方式:
*
*AB-BC-CD-DA(即一个脉冲,转7.5度)*
**
*请学员一定要消化掉本例程,*
*
**************************************************************************************/
#include"reg52.h"
//Motor
sbitF1=P1^0;
sbitF2=P1^1;
sbitF3=P1^2;
sbitF4=P1^3;
///////////////////////////////////////
//步进电机驱动
unsignedcharMotorStep=0;
unsignedintMotorTimer=0;
unsignedintTIM,CT;
voidInitMotor()
{
F1=1;
F2=1;
F3=1;
F4=1;
}
voidSetMotor()
{
//if(Speed==0)return;
switch(MotorStep)
{
case0:
if(TIM)
{
F1=0;
F2=0;
F3=1;
F4=1;
MotorStep=1;
TIM=0;
}
break;
case1:
if(TIM)
{
F1=1;
F2=0;
F3=0;
F4=1;
MotorStep=2;
TIM=0;
}
break;
case2:
if(TIM)
{
F1=1;
F2=1;
F3=0;
F4=0;
MotorStep=3;
TIM=0;
}
break;
case3:
if(TIM)
{
F1=0;
F2=1;
F3=1;
F4=0;
MotorStep=0;
TIM=0;
}
break;
}
}
voidsystem_Ini()
{
TMOD|=0x11;
TH0=0xDC;//11.0592M
TL0=0x00;
IE=0x8A;
TR0=1;
}
main()
{system_Ini();
InitMotor();
while
(1)
{
SetMotor();
}
}
/*************************************
[t1(0.5ms)中断]中断中做PWM输出
------------1000/(0.02ms*250)=200Hz
*************************************/
voidTzd(void)interrupt1
{
TH0=0xfe;//11.0592
TL0=0x33;
if(CT++==20)
{TIM=1;
CT=0;
}
}
/***********************************************************************************
*标题:
步进电机试验五(正转一圈反转一圈)*
**
*通过本例程了解步进马达使用及驱动程序编写*
*;单双八拍工作方式:
*
*;A-AB-B-BC-C-CD-D-DA(即一个脉冲,转3.75度)*
**
*请学员一定要消化掉本例程*
*
**************************************************************************************/
#include"reg52.h"
voiddelay(unsignedintt);
//Motor
sbitF1=P1^0;
sbitF2=P1^1;
sbitF3=P1^2;
sbitF4=P1^3;
unsignedcharcodeFFW[8]={0xfe,0xfc,0xfd,0xf9,0xfb,0xf3,0xf7,0xf6};//反转
unsignedcharcodeFFZ[8]={0xf6,0xf7,0xf3,0xfb,0xf9,0xfd,0xfc,0xfe};//正转
unsignedintK;
/**********************************************************************
**
*步进电机驱动*
**
***********************************************************************/
voidmotor_ffw()
{
unsignedchari;
unsignedintj;
for(j=0;j<12;j++)//转1*n圈
{
for(i=0;i<8;i++)//一个周期转30度
{
if(K==1)P1=FFW[i]&0x1f;//取数据
if(K==2)P1=FFZ[i]&0x1f;
delay(5);//调节转速
}
}
}
/******************************************************
*
*延时程序
*
********************************************************/
voiddelay(unsignedintt)
{
unsignedintk;
while(t--)
{
for(k=0;k<80;k++)
{}
}
}
main()
{
while
(1)
{
K=1;
motor_ffw();
K=2;
motor_ffw();
}
}