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=0j<12j++) //转1*n圈
{
for (i=0i<8i++) //一个周期转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=0k<100k++)
{ }
}
}
main()
{
while(1)
{
K=1
motor_ffw()
K=2
motor_ffw()
}
}
给你个例子,这是正反转的可以用这个修改出加减速程序
求采纳为满意回答。
内容: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=0i<4i++) //4相
{
P1=F_Rotation[i] //输出对应的相 可以自行换成反转表格
Delay(500) //改变这个参数可以调整电机转速 ,数字越小,转速越大
}
}
while(Flag)
{
P0=0x7C//显示 b 标示反转
for(i=0i<4i++) //4相
{
P1=B_Rotation[i] //输出对应的相
Delay(500) //改变这个参数可以调整电机转速 ,数字越小,转速越大
}
}
}
/******************************************************************/
/* 中断入口函数 */
/******************************************************************/
void ISR_Key(void) interrupt 2 using 1
{
Delay(300)
Flag=!Flag//s3按下触发一次,标志位取反
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)