stc8a8k64s4单片机控制步进电机(四相八拍)实现顺时针转一圈和逆时针转一圈

0
步进电机28BYJ48型四相八拍电机,电压为DC5V—DC12V。当对步进电机施加一系列连续不断的控制脉冲时,它可以连续不断地转动。每一个脉冲信号对应步进电机的某一相或两相绕组的通电状态改变一次,也就对应转子转过一定的角度(一个步距角)。当通电状态的改变完成一个循环时,转子转过一个齿距。四相步进电机可以在不同的通电方式下运行,常见的通电方式有单(单相绕组通电)四拍(A-B-C-D-A。。。),双(双相绕组通电)四拍(AB-BC-CD-DA-AB-。。。),八拍(A-AB-B-BC-C-CD-D-DA-A。。。)
1
红线接电源5V,橙色电线接P1.6口,黄色电线接P1.5口,粉色电线接P4.4口,蓝色接P1.4口。
2
橙 黄 粉 蓝 十六制(数据)
1 0 0 0 0x08
1 1 0 0 0x0c
0 1 0 0 0x04
0 1 1 0 0x06
0 0 1 0 0x02
0 0 1 1 0x03
0 0 0 1 0x01
1 0 0 1 0x09

所以可以定义旋转相序
uchar code CCW[8]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09}; //逆时钟旋转相序表
uchar code CW[8]={0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08}; //正时钟旋转相序表

3

#include <stc8.h>

#define uchar unsigned char
#define uint unsigned int

// 逆时针旋转相序表
uchar code CCW[8]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09};
// 正时针旋转相序表
uchar code CW[8]={0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08}; 

// 独立按键定义
sbit K1=P0^0;  // 反转按键
sbit K2=P0^1;  // 正转按键
sbit K3=P0^2;  // 停止按键

// 四相的引脚定义
sbit A1 = P1^6;
sbit B1 = P1^5;
sbit C1 = P4^4;
sbit D1 = P1^4;

// 毫秒级延时 (根据自己的单片机修改)
void delaynms(uint aa)
{
	uchar i, j;
	while(aa--)
	{
		i = 12;
		j = 169;
		do
		{
			while (--j);
		} while (--i);
	}

}

// 给每个相赋值
void Give(unsigned char dat)
{
	A1 = dat & 0x08;
	B1 = dat & 0x04;
	C1 = dat & 0x02;
	D1 = dat & 0x01;
}

// 步进电机逆时针转赋值
void motor_ccw(void)
{
	uchar i,j;
	// 电机旋转一周,不是外面所看到的一周,是里面的传动轮转了一周
	for(j=0;j<8;j++)  
	{
		if(K3==0)
		{
			break;        // 如果K3按下,退出此循环
		}
		for(i=0;i<8;i++)  // 旋转45度
		{
			Give(CCW[i]);
			delaynms(2); // 调节转速
		}
	}
}

// 步进电机顺时针转赋值
void motor_cw(void)
{
	uchar i,j;
	for(j=0;j<8;j++)
	{
		if(K3==0)
		{
			break;       // 如果K3按下,退出此循环
		}
		for(i=0;i<8;i++) // 旋转45度
		{
			Give(CW[i]);
			delaynms(2); // 调节转速
		}
	}
}


void main(void)
{
	uchar r;
	uchar N=64; //因为步进电机是减速步进电机,减速比的1/64 ,
	//所以N=64时,步进电机主轴转一圈
	P07 = 0;    // 开独立按键总开关
	while(1)
	{
		if(K1==0)
		{
			for(r=0;r<N;r++)
			{
				motor_ccw();  // 电机逆时针转
				if(K3==0)
				{
					break;
				}
			}
		}
		else if(K2==0)
		{
			for(r=0;r<N;r++)
			{
				motor_cw(); // 电机顺时针转
				if(K3==0)
				{
					break;
				}
			}
		}
		else          
			Give(0x00);    // 电机停止
	}

} 


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值