步进电机控制实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
DSP 实验报告
实验名称:步进电机控制实验__________
系部:物理与机电工程学院
专业班级:_
学号:____________________
学生姓名:___________________
指导教师:___________________
完成时间:_______ 2014-5-7 ___________
扌报告成绩:____________________________
评阅意见:
评阅步进电机控制实验期 __________
一、实验目的
1.掌握2812通用10 口的使用方法;
2.掌握2812对步进电机的控制。
二、实验设备
1.一台装有CCS软件的计算机;
2.DSP试验箱的TMS320F281主控板;
3.DSP硬件仿真器。
三、实验原理
步进电机工作原理,给步进脉冲电机就转,不给脉冲电机就不转,
步进脉冲的频率越高,步进控制电机就转的越快;改变各相的通电方式可以改变电机的运行方式;改变通电顺序可以控制步进电机的运行方式;改变通电顺
序可以控制步进电机的正反转。
步进电机的控制问题可以总结为两点:
(1)产生工作方式需要的时序脉冲;
(2)控制步进电机的速度使它始终遵循加速-匀速- 减速的规律工作。
对于I/O 口有二类寄存器:
1.控制寄存器和数据方向寄存器,使用方法如下:首先确定引脚的功能,即IO 控制器寄存器,为 1 表示引脚功能是原模块的功能,否则为IO 功能。
2.如果引脚被配置为IO 功能,就需要确定它的方向:输入还是输出。为 1 表示是输出引脚,否则是输入引脚。对于IO 功能的输入或输出是通过读写相应的数据方向寄存器来实现。输入引脚对应读操作;输出引脚对应写操作。
3.步进电机的使用至少需要三个方面的配合,一是电脉冲信号发生器,它按照给定的设置重复为步进电机输送电脉冲信号,目前这种信号大多数由可编程控制器或单片机来完成;二是驱动器(信号放大器),它除了对电脉冲信号进行放大、驱动步进电机转动以外,还可以通过它改善步进电机的使用性能,事实上它在步进电机系统中起着重要的作用,一般一种步进电机可以根据不同的工况具有多种驱动器;三是步进电机,它有多种控制原理和型号,现
在常用的有反应式、感应子式、混合式等。
步进电机的速度控制是通过输入的脉冲频率快慢实现的。当
发生脉冲的频率减小时,步进电机的速度就下降;当频率增加时,速度就加快。还可以通过频率的改变而提高步进电机的速度或位置精度。?????
步进电机的位置控制是靠给定的脉冲数量控制的。给定一个脉冲,转
过一个步距角,当停止的位置确定以后,也就决定了步进电机需要给定的脉冲数。在包装机控制中,给定脉冲数的多少,还与机构的参数有关,例如螺杆的直径等。?
4. 实验电路
5.试验框图
四、实验步骤
1.连接好仿真器、DS实验箱,计算机;
2.本实验工程文件( Example_stepmotor.pjt ),编译,下载程
序到DSP
3.全速运行,观察步进电机的运转。
五、实验结果及分析
步进电机正反转动:
六、实验心得
本次步进电机控制实验使我对步进电机控制工作原理的有所了解,对实验进行分析和修改使它与我们的理论相符合,在给步进脉冲时电机就转,不给脉冲时电机就不转,步进脉冲的频率越
高,步进控制电机就转的越快。并改变各相的通电方式可以改变电机的运行方式;在改变通电顺序可以控制步进电机的运行方式;改变通电顺序可以控制步进电机的正反转。通过本次实验中加深对DSP系统的理解、步进电机的控制方式及工作运行方式。进一步掌握用C语言编写DSP g序的方法,及编译、除错能力。
附页:实验原程序代码
#include "include/DSP281x_Device.h" // DSP281x Headerfile Include
File
#include "include/DSP281x_Examples.h" // DSP281x Examples Include
File
void delay_loop(void);
void Gpio_select(void);
short codetab[17]=
{0x0001,0x0002,0x0004,0x0008,0x0008,0x0004,0x0002,0x0001,
0x0001,0x0002,0x0004,0x0008,0x0001,0x0002,0x0004,0x0008,0x0000}; main() {
short i,j;
InitSysCtrl();
EALLOW;
EDIS;
Gpio_select();
DINT;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
InitXintf(); // For this example, init the Xintf
Reg06=0x00;
while(1)
{
for(j=0;j<400;j++)
{
for(i=0;i<4;i++)
{
Reg06=0x00;
delay_loop();
}
for(j=0;j<400;j++)
{ for(i=4;i<8;i++) {
Reg06=0x00;
delay_loop();
}}
}
}
}
void delay_loop()
{
short i,j;
for (i = 0; i < 1000; i++)
{for (j = 0; j < 10; j++);} } void Gpio_select(void) { Uint16 var1, var2, var3;
// sets GPIO Muxs as I/Os // sets GPIO DIR as outputs // sets the Input qualifier values var1= 0x0000;
var2= 0xFFFF;
var3= 0x0000;
EALLOW;
EDIS;