单片机控制步进电机停转时电流大(单片机是如何控制步进电机扎旋转的)
步进电机是将电脉冲信号转变为角位移或者线位移的开源控制元件。
所以我们用的时候不要担心他的复杂,可以理解为一个元器件。静态指标术语
1、相数:产生不同对极N、S磁场的激磁线圈对数。常用m表示。
2、拍数:完成一个磁场周期性变化所需脉冲数或
导电状态用n表示,或指电机转过一个齿距角所需脉冲数,以四相电机为例,有四相四拍运行方式即AB-BC-CD-DA-AB,四相八拍运行方式即 A-AB-B-BC-C-CD-D-DA-A
3、步距角:对应一个脉冲信号,电机转子转过的角位移用θ表示。θ=360度/(转子齿数*运行拍数),以常规二、四相,转子齿为50齿电机为例。四拍运行时步距角为θ=360度/(50*4)=1.8度(俗称整步),八拍运行时步距角为θ=360度/(50*8)=0.9度(俗称半步)。
4、定位转矩:电机在不通电状态下,电机转子自身的锁定力矩(由磁场齿形的谐波以及机械误差造成的)。
5、静转矩:电机在额定静态电压作用下,电机不作旋转运动时,电机转轴的锁定力矩。此力矩是衡量电机体积的标准,与驱动电压及驱动电源等无关。 虽然静转矩与电磁激磁安匝数成正比,与定齿转子间的气隙有关,但过分采用减小气隙,增加激磁安匝来提高静力矩是不可取的,这样会造成电机的发热及机械噪音。
如何接线
7447芯片:是数码管驱动,与以往不同的是仅仅用4位就可以控制显示,里面有编好的,通过高低电平组合来显示数字。
L298就是起到放大电流的作用。单片机的电流太小,驱动不了电机。
效果展示:(更多效果可以去看本人拍的视频和小视频)
程序详细讲解:
#include "reg52.h"//头文件
unsigned char index =0; //宏定义一个步进索引,就是引导步进如何旋转
int n=0,n0=0;//定义周期,一个是档位
unsigned char flag=0,step=1; //方向,开关
main() //主函数
{
P3=0xff; //由于P3是数据输出端,所以最好就是高电平,这一句写不写影响大不大。
EA=1; //开总中断
EX0=1;EX1=1;ET0=1; //打开外部中断 和定时中断
IT0=1;IT1=1;//开外部中断
TMOD=0x01;//定时器为定时工作方式1
TH0=(65536-1000)/256; //每一毫秒 中断一次
TL0=(65536-1000)%6;//每一毫秒 中断一次
TR0=1; //开定时中断
while(1) //为真进行不停的循环,然后等待中断发生
{
if(P0==0xfe) { n0=70; P2= 1; } //按键 显示1挡
if(P0==0xfd) { n0=90; P2= 2; }//按键 显示2挡
if(P0==0xfb) { n0=110; P2= 3; } //按键 显示3挡
if(P0==0xf7) { n0=150; P2= 4; }//按键 显示4挡
}
}
void int0() interrupt 0 停止键中断子程序,只会在0/1之间变化。
{
step ;
if(step>=2)
step=0;
}
void int1() interrupt 2 正反转中断子程序 只会在正转和反转之间0-1变化
{
flag ;
if(flag>=2)
flag=0;
}
void time() interrupt 1 定时器中断子程序
{
TH0=(65536-1000)/256; //初值重装
TL0=(65536-1000)%6;//为了每次都是延时一毫秒,
if(step==1) //如何step等于1则,开始转,如果不等于,n就会加一。
{
if(n >= n0 )//输出脉冲周期N0*1毫秒,
{
if(flag==1)//问正转嘛?
{
switch(index) 如果是 就会执行这一句
{
case 0: P1=0X03;break;//因为INDEX不断地加一,就会从上到下不断的选择。
case 1: P1=0X06;break;//P1口两两组合,进行高低电平变化。
case 2: P1=0X0c;break;
case 3: P1=0X09;break;
}
index ; 不断地加一
if(index>=4) 如何等于4了,就再从0 开始
index=0; //从新赋值
n=0; //从新赋值
}
if(flag==0)如果是反转
{
switch(index)//和上面的讲解会一样的
{
case 0: P1=0X09;break;
case 1: P1=0X0c;break;
case 2: P1=0X06;break;
case 3: P1=0X03;break;
}
index ;
if(index>=4)
index=0;
n=0;
}
else
n=0;//既不是正转 也不是反转,就停止吧
}
n ;//如果是开启了,就会判断脉冲是否大于周期
}
else
n=0;如果没有开,或者启动。好比电视插上电,但是没有按下电视开关。则也不转动
}
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com