步进电机控制.docx
《步进电机控制.docx》由会员分享,可在线阅读,更多相关《步进电机控制.docx(9页珍藏版)》请在冰豆网上搜索。
步进电机控制
文件排版存档编号:
[UYTR-OUPT28-KBNTL98-UYNN208]
步进电机控制
杭州电子科技大学
电子系统设计综合实验
设计报告
实验名称:
步进电机控制
实验序号:
4
小组号:
4A
姓名学号:
指导教师:
黄继业
2015年1月4日
1.引言:
步进电机是机电控制中一种常用的执行机构,它的用途是将电脉冲转化为角位移,通俗地说:
当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(即步进角)。
通过控制脉冲个数即可以控制角位移量,从而达到准确定位的目的;同时通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。
常见的步进电机分三种:
永磁式(PM),反应式(VR)和混合式(HB)。
实验中使用的是永磁式步进电机24BY型,下图是该电机的接线图,从图中可以看出,电机共有四组线圈,四组线圈的一个端点连在一起引出,这样一共有5根引出线。
要使用步进电机转动,只要轮流给各引出端通电即可。
将COM端标识为C,只要AC、AC、BC、BC,轮流加电就能驱动步进电机运转,加电的方式可以有多种,如果将COM端接正电源,那么只要用开关元件(如三极管),将A、A、B、B轮流接地。
2.实验要求:
1.(基本):
控制四相六线式步进电机的转动(四相八拍方式)
2.(基本):
显示步进电机的转动圈数、角度和方向
3.(扩展):
用非接触的方式实时监测步进电机的工作状态
4.实验器材清单:
名称
型号
数量
驱动芯片
L298
1片
霍尔元件
cs3144
1个
二极管
8050
8个
电容
100uf、
各2个
电阻
2K
1个
四:
实验电路原理图
1:
驱动电路原理图:
2:
驱动电路工作原理:
L298N是SGS公司的产品,内部包含4通道逻辑驱动电路。
是一种二相和四相电机的专用驱动器,即内含二个H桥的高电压大电流双全桥式驱动器,接收标准TTL逻辑电平信号,可驱动46V、2A以下的电机。
OUT1、OUT2和OUT3、OUT4之间分别接两电机。
IN1、IN2、IN3、IN4引脚从单片机接输入控制电平,控制电机正反转。
3:
L298控制单双八拍的逻辑表:
A电机
B电机
IN1
IN2
IN3
IN4
0
1
0
0
0
1
1
0
0
0
1
0
1
0
1
0
1
0
0
0
1
0
0
1
0
0
0
1
0
1
0
1
4.霍尔模块电路图
4:
霍尔模块工作原理:
霍尔传感器是对磁敏感的传感元件,这种传感器是一个3端器件,外形与三极管相似,只要接上电源、地,即可工作,输出通常是集电极开路(OC)门输出,工作电压范围宽,使用非常方便。
将有字面对准自己,三根引脚从左向右分别是Vcc,地,输出。
使用霍尔传感器获得脉冲信号,其机械结构也可以做得较为简单,只要在转轴的圆周上粘上一粒磁钢,让霍尔开关靠近磁钢,就有信号输出,转轴旋转时,就会不断地产生脉冲信号输出。
如果在圆周上粘上多粒磁钢,可以实现旋转一周,获得多个脉冲输出。
根据这些输出的脉冲可以实现实时监测电机的工作状态。
5.实验所用的程序代码:
源码目录:
USER:
STM32:
(库文件)
Driver:
/*
要求:
控制步进电机转动,8拍
显示步进电机转动圈数,角度,方向。
非接触方式实时监测
*/
#include""
#include""
#include""
#include""
#include""
u8i,j,keynum,direction=0;
u16Speedtime,loop_num1=0,loop_num2=0,interrupt_num=0,interrupt_speed=0;
doubleangle=0;
EXTI_InitTypeDefEXTI_InitStructure;
GPIO_InitTypeDefGPIO_InitStructure;
NVIC_InitTypeDefNVIC_InitStructure;
voidEXTIX_Init(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);
=GPIO_Pin_15;
=GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOD,&GPIO_InitStructure);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOD,GPIO_PinSource15);
=EXTI_Line15;
=EXTI_Mode_Interrupt;
=EXTI_Trigger_Rising;
=ENABLE;
EXTI_Init(&EXTI_InitStructure);
=EXTI15_10_IRQn;
=0x0F;
=0x0F;
=ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
voidEXTI15_10_IRQHandler(void)
{
interrupt_num++;.");
lcd_6x8(0,3,"LoopNum1:
");
lcd_6x8(0,4,"LoopNum2:
");
lcd_6x8(0,5,"Angle:
");
lcd_6x8(0,7,"Speed:
");
lcd_6x8(60,7,"N/s");
while
(1)
{
keynum=New_KEY_Scan();
switch(keynum)
{
case1:
direction++;if(direction==4)direction=0;break;
case2:
Speedtime-=100;if(Speedtime==600)Speedtime=900;break;
default:
break;
}
lcd_6x8_num(45,7,interrupt_speed);//每秒转速
lcd_6x8_num(100,7,interrupt_num);
if(direction==0)
{
lcd_6x8_double(45,5,angle);
lcd_6x8_num(70,3,loop_num1);
lcd_6x8_num(70,4,loop_num2);
}
elseif(direction==1)
{
Motor_8(Speedtime);
i++;
angle=*i;
if(i==50)//达到一圈
{
i=0;
loop_num1++;
}
lcd_6x8_double(45,5,angle);
lcd_6x8_num(70,3,loop_num1);
lcd_6x8(0,2,"Forwarddirection!
");
}
elseif(direction==2)
{
lcd_6x8_double(45,5,angle);
lcd_6x8_num(70,3,loop_num1);
lcd_6x8_num(70,4,loop_num2);
}
elseif(direction==3)
{
Motor_8_back(Speedtime);
j++;
angle=*j;
if(j==50)
{
j=0;
loop_num2++;
}
lcd_6x8_double(45,5,angle);
lcd_6x8_num(70,4,loop_num2);
lcd_6x8(0,2,"Backwarddirection!
");
}
}
}
voidTIM3_IRQHandler(void)
{
//staticu16a=0;
if(TIM_GetITStatus(TIM3,TIM_IT_Update)!
=RESET)//检查指定的TIM中断发生与否:
TIM中断源
{
TIM_ClearITPendingBit(TIM3,TIM_IT_Update);//清除TIMx的中断待处理位:
TIM中断源
interrupt_speed=interrupt_num;//N/s
interrupt_num=0;
}
}
五:
实验测试结果
本次实验最后验收的效果是比较好的,基本上没有出错,完成了所有要求的内容,测量的结果也比较精确。
六:
设计总结
本次实验的设计主要体现在驱动电路上,本来准备是采用ULN2003来作为驱动芯片,后来查了一下资料发现ULN2003,只能向它灌入电流,输出为高阻态,基本没输出电流。
它一般用来吸收电流的。
比如数码管驱动,或者两相五线、两相六线的步进电机,这种步进电机有一个或两个公共端可以接电源正极,驱动电机,电流从其他各引线经过ULN2003流到地线上。
通过控制ULN2003的输出状态来控制电机的节拍。
但是对于本次实验用的两相四线的电机不太合适,所以最后采用L298来驱动,最后驱动的效果也是比较好的。
拓展模块则采用cs3144霍尔元件来实现。
(本次实验黄涛同学负责编写程序部分,郑康佳、张永杰同学负责做驱动电路等硬件部分,黄涛负责最后测量与修改,实验报告最终由郑康佳同学完成)