步进电机控制

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

步进电机控制

文件编码(008-TTIG-UTITD-GKBTT-PUUTI-WYTUI-8256)

杭州电子科技大学

电子系统设计综合实验

设计报告

实验名称: 步进电机控制

实验序号: 4

小组号: 4A

姓名学号:

指导教师: 黄继业

2015年1月4日

一.引言:

步进电机是机电控制中一种常用的执行机构,它的用途是将电脉冲转化为角位移,通俗地说:当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(即步进角)。通过控制脉冲个数即可以控制角位移量,从而达到准确定位的目的;同时通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。常见的步进电机分三种:永磁式(PM),反应式(VR)和混合式(HB)。实验中使用的是永磁式步进电机24BY 型,下图是该电机的接线图,从图中可以看出,电机共有四组线圈,四组线圈的一个端点连在一起引出,这样一共有5 根引出线。要使用步进电机转动,只要轮流给各引出端通电即可。将COM 端标识为C,只要AC、A C、BC、B C,轮流加电就能驱动步进电机运转,加电的方式可以有多种,如果将COM 端接正电源,那么只要用开关元件

(如三极管),将A、A 、B、B 轮流接地。

二.实验要求:

1.(基本):控制四相六线式步进电机的转动(四相八拍方式)

2.(基本):显示步进电机的转动圈数、角度和方向

三.(扩展):用非接触的方式实时监测步进电机的工作状态

四.实验器材清单:

名称型号数量

驱动芯片L2981片

霍尔元件cs31441个

二极管80508个

电容100uf、各2个

电阻2K1个

四:实验电路原理图

1:驱动电路原理图:

2:驱动电路工作原理:

L298N是SGS公司的产品,内部包含4通道逻辑驱动电路。是一种二相和四相电机的专用驱动器,即内含二个H桥的高电压大电流双全桥式驱动器,接收标准

TTL逻辑电平信号,可驱动46V、2A以下的电机。OUT1、OUT2和OUT3、OUT4之间分别接两电机。IN1、IN2、IN3、IN4引脚从单片机接输入控制电平,控制电机正反转。

3:L298控制单双八拍的逻辑表:

4.霍尔模块电路图

4:霍尔模块工作原理:

霍尔传感器是对磁敏感的传感元件,这种传感器是一个3端器件,外形与三极管相似,只要接上电源、地,即可工作,输出通常是集电极开路(OC)门输出,工作电压范围宽,使用非常方便。将有字面对准自己,三根引脚从左向右分别是Vcc,地,输出。使用霍尔传感器获得脉冲信号,其机械结构也可以做得较为简单,只要在转轴的圆周上粘上一粒磁钢,让霍尔开关靠近磁钢,就有信号输出,转轴旋转时,就会不断地产生脉冲信号输出。如果在圆周上粘上多粒磁钢,可以实现旋转一周,获得多个脉冲输出。根据这些输出的脉冲可以实现实时监测电机的工作状态。

5.实验所用的程序代码:

源码目录:

USER:

STM32: (库文件)

Driver:

/*

要求:

控制步进电机转动,8拍

显示步进电机转动圈数,角度,方向。

非接触方式实时监测

*/

#include ""

#include ""

#include ""

#include ""

#include ""

u8 i,j,keynum,direction=0;

u16

Speedtime,loop_num1=0,loop_num2=0,interrupt_num=0,interrupt_speed=0; double angle=0;

EXTI_InitTypeDef EXTI_InitStructure;

GPIO_InitTypeDef GPIO_InitStructure;

NVIC_InitTypeDef NVIC_InitStructure;

void EXTIX_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);

}

void EXTI15_10_IRQHandler(void)

{

interrupt_num ++; .");

lcd_6x8(0,3,"Loop Num1:");

lcd_6x8(0,4,"Loop Num2:");

lcd_6x8(0,5,"Angle:");

lcd_6x8(0,7,"Speed:");

lcd_6x8(60,7,"N/s");

while(1)

{

keynum=New_KEY_Scan();

switch(keynum)

{

case 1:direction++;if(direction==4)direction=0;break;

case 2: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)

{

相关文档
最新文档