MOTOR-STEPP(步进电机)

工具

1.Proteus 8 仿真器

2.keil 5 编辑器

原理图

讲解

简介

步进电机是一种将电脉冲转换为角位移的开环控制元步进电机。当步进驱动器接收到脉冲信号时,它将根据设定方向(即步进角)驱动步进电机旋转一定角度。 可以通过控制脉冲量来控制角位移量,从而达到精确定位的目的,同时还可以通过控制脉冲频率来控制电机的转速和加速度,从而达到速度控制的目的。

分类

永磁体(PM):一般为两相,扭矩和体积均较低,步进角为 7.5 度或 15 度.
反应式(VR):一般为三相,可实现大扭矩输出,步进角度一般为 1.5 度,但噪音和振动相当大.
混合式(HB) : 它结合了永磁体和反应的优点,分为两相和五相:两相步进角为 1.8 度,五相步进角一般为 0.72 度。 这种步进电机使用更广泛。

静态指标

步距角

在每次控制系统发出一个步进脉冲信号,某个永磁步进电机的固定角度为3.75°/ 7.5°(半步驱动值为 3.75°,整步驱动为 7.5°)。步进角可以称为“步进电机的固定角度”,它不一定是工作电机的实际角度,实际角度与驱动器有关。

相数

它指的是电机内部的线圈组数。 目前,常用的步进电机是两相,三相,四相和五相电机。 电动机的步进角随相数而变化。通常,两相电动机的步进角为 0.9°/ 1.8°,三相为 0.75°/ 1.5°,五相为 0.36°/ 0.72°。 当没有细分驱动器时,用户主要通过选择不同的相数电机来满足步进角的要求。 如果使用细分驱动程序,相位数的“数字”将变得毫无意义,用户只需要更改细分数量的驱动器,然后可以移动步进角度。

拍数

它指的是完成磁场周期性变化所需的脉冲数或导通状态,也可以定义为电机转动一定步进角的脉冲数。让我们以四相电机为例,四相和四拍运行模式,即: AB-BC-CD-DA-AB,四相和八拍运行模式为: A - AB - B - BC - C - CD - D - DA - A

动态指标

步进脚精度

它指的是当电动机转动一定步进角时,实际值与理论值之间的误差。 表示为百分比:角度误差/步进角* 100%。 此值随节拍数量的变化而变化,当电机运行 4 次,应该在 5%以内,8 次在 15%以内

失步

电机运转时运转的步数,不等于理论上的步数。称之为失步。

失调角

转子齿轴线偏移定子齿轴线的角度,电机运转必存在失调角,由失调角产生的误差,采用细分驱动是不能解决的。

驱动方式

步进电机的驱动模式也称为激励模式,分为全步激励半步激励。 前者也可分为全步单相和全步双相激励(全步驱动); 后者也指单相双相激励(半步驱动)

驱动模式步距角功率优点和缺点
全步(单相)5.6251P控制简单,耗电量低,但输出扭矩最小,振动较大,步进时易疏离
全步(双相)5.6252P功耗最大,输出扭矩大,振动小,步进稳定
半步(单双相)2.81251.5P在单驱动和驱动步骤之间采取的性能,只有步进角的一半,运行平稳,应用最为广泛

全步(单相)

全步(双相)

半步(单双相)

注意

具体的驱动模式可能因步进电机的设计、控制器的功能以及应用需求而有所不同。在实际应用中,可能还需要考虑电流控制、速度控制以及可能的定位精度要求。

代码

#include <reg52.h>
#include "Delay.H"
#include "LCD1602.H"

unsigned int type=0;//键值 1=开始 2=停止
unsigned int time = 300;	//PWM高电平持续时间
unsigned int run = 0; //0 正转(顺时针) 1 反转(逆时针)
//半步驱动
unsigned char arr[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};
unsigned int i=7;

void PWM();
void Int0Init()    //中断初始化
{
    //设置 INT0
    IT0=1;//触发方式(下降沿)
    EX0=1;//INT0 的中断允许。 1关闭    
    EA=1;//打开总中断
}
//当触发中断后即会进入中断服务函数,外部中断 0 中断服务函数如下:
void Int0() interrupt 0 //外部中断 0 的中断函数
{
	//中断进入
	switch (P3){
		//开始按下
		case 0xF3:
			if(!i)
			{
				i=0;
			}
			type=1;
		break;
		//停止按下	
		case 0xEB:
			type=2;
		break;
		//反转按下
		case 0xDB:
			run=!run;
		break;
		//加速按下	
		case 0xBB:
			if(time>100)
			{
				time=time-100;
			}
		break;
		//减速按下
		case 0x7B:
			if(time<300)
			{
				time=time+100;
			}
		break;
		default:
		break;
	}
	
	LCD_ShowNum(2,6,time,3);
}
//PWM 调制
void PWM()
{
	switch(type){
		case 0:
		break;
		case 1:
			delay_ms(time);
			P1=arr[i];
			if(!run)
			{
				if(i==0)
				{
					i=7;
				}else{
					i--;
				}
			}else{
				if(i==7)
				{
					i=0;
				}else{
					i++;
				}
			}
		break;
		default:
		break;
	}
}

main(void) 
{ 
	LCD_Init(); //初始化液晶
	Int0Init();
	LCD_ShowString(1,1,"Old_man");
	LCD_ShowString(2,1,"time=");
	LCD_ShowNum(2,6,0,3);
	P1=0;
	while(1)
	{
		if(type)
		{
			PWM();
		}
	}
} 




 

实现

🚀本欧也处于学习阶段,所学所识将以笔记发布。

笔记会根据相关知识的接触而随时更新! 

如果文章对你有帮助,请留下你宝贵的点赞吧👍

V:Werluo  本欧也很喜欢交朋友的哦!  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

欧的曼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值