首页 > 其他 > 详细

步进电机

时间:2021-01-31 14:27:22      阅读:333      评论:0      收藏:0      [点我收藏+]

28BYJ-48步进电机

将脉冲信号转变为角度信号

? 1. 反应式步进电机:结构简单成本低,发热大可靠性低。

? 2. 永磁式步进电机:动态性能好、力矩较大,误差相对大一些,价格低,广泛用在消费性产品。

? 3. 混合式步进电机:力矩大、动态性能好、步距角小、精度高,但是结构复杂价格高,广泛用在工业。

? 28——步进电机的有效最大外径是28毫米

? B——表示是步进电机

? Y——表示是永磁式

? J——表示是减速型

? 48——表示四相八拍

技术分享图片

? A、B、C、D 为四相,八个定子
? 内部转子上含有永磁铁(0-5)

? 8个节拍转一个定子角度,则转一圈需要64个节拍

? 步进角度为:360 / 32 = 11.25度

? 每次开关只合上一个,即为单四拍模式

技术分享图片

?

技术分享图片

由启动频率知道,我们相邻两个低电平的导通时间要小于启动频率,即 1/550=1.8ms,即导通时间间隔大于1。8ms即可。

? 代码中: 参数(angle)中总共需要转动的角度,beats 为总共转动的节拍数,因为减速比是1:64,所以转一圈节拍数为 64*64=4096个节拍,那么总共的节拍数为:(angle / 360) * 4096

void TrunMotor(unsigned long angle)
{
	unsigned char tmp;
	unsigned char index = 0;
	unsigned long beats = 0;
	unsigned char code BeatCode[8] = {
	0x0E, 0x0C, 0x0D, 0x09, 0x0B, 0x03, 0x07, 0x06};

	beats = (angle*4076)/360;
	while(beats--)
	{
		tmp = P1;
		tmp = tmp & 0xF0;
		tmp = tmp | BeatCode[index];			 
		P1 = tmp;
		index++;
		index = index & 0x07;
		delay();
	}
}

使用定时器中断的控制函数:

void main()
{
	EA = 1;
	TMOD = 0x01;
	TH0 = 0xF8;//定时2ms
	TL0 = 0xCD;
	ET0 = 1;
	TR0 =1;

	StartMotor(360*2 + 180);
	while(1);
}

void StartMotor(unsigned long angle)
{
    /*
    	处理long型的数据,为消除中断对程序的影响,在处理之前 应该先关掉中断
    */
	EA = 0;
	beats = (angle*4076)/360;
	EA = 1;
}

void InterruptTimer0() interrupt 1
{
	unsigned char tmp;
	static unsigned char index = 0;//次变量需要进出中断处理,应定义成静态的
	unsigned char code BeatCode[8] = {
	0x0E, 0x0C, 0x0D, 0x09, 0x0B, 0x03, 0x07, 0x06};

	TH0 = 0xF8;//重新赋值
	TL0 = 0xCD;

	if(beats != 0)
	{
		tmp = P1;
		tmp = tmp & 0xF0;
		tmp = tmp | BeatCode[index];			 
		P1 = tmp;
		index++;
		index = index & 0x07;
		beats--;
	}
	else
	{
		P1 = P1 | 0x0F;//当节拍数没了之后,对P1口进行赋值以使电机停止转动
	}

}

步进电机

原文:https://www.cnblogs.com/isStudent/p/14352102.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!