步进电机控制设计(C程序设计语言)

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

接口课程设计任务书
学生姓名专业班级
指导老师工作单位计算机学院
题目:步进电机控制设计(C程序设计语言)
一、内容:
在MIFID微机实验台上以双八拍的方式控制步进电机运行,用按钮控制启动和停止。

接口硬件电路图见说明书。

二、要求:
1、控制步进电机运行的相序表存储在文件中。

2、按下SW1按钮,从文件中取出一个相序数据,从并行接口8255A的PA
口输出,使步进电机运行。

相序数据在CRT上显示。

按下SW2按钮,步进电机运行停止。

3、SW1按钮的数字量由PC1输入,SW2按钮的数字量由PC0输入,
4、设计程序运行时的界面友好。

三、进度安排:
指导教师签名:年月日
系主任(责任教师)签名:年月日
一.设计目的和内容
目的:通过步进电机控制实验,学习并行接口电路及其控制程序的设计原理与方法。

内容:
在MIFID微机实验台上以双八拍的方式控制步进电机运行,用按钮控制启动和停止。

接口硬件电路图见说明书。

要求:
1、控制步进电机运行的相序表存储在文件中。

2、按下SW1按钮,从文件中取出一个相序数据,从并行接口8255A的PA口输出,
使步进电机运行。

相序数据在CRT上显示。

按下SW2按钮,步进电机运行停止。

3、SW1按钮的数字量由PC1输入,SW2按钮的数字量由PC0输入,
4、设计程序运行时的界面友好。

二、实验预备知识
可编程并行接口8255是一个具有两个8位(A端口和B端口)和两个4位(C端口)并行I/O端口的芯片。

在与外设进行数据传输时,把A、B、C3个端口分为两组。

A组由A端口和C端口的高4位组成。

B组由B端口和C端口的低4位组成。

为了满足多种数据传输的要求,可以通过对8255的编程用方式控制字设置3种工作方式来实现。

这3种工作方式为:方式0(基本I/O工作方式);方式1(选通I/O工作方式);方式2(双向传送方式)。

8255的控制字有工作方式控制字和C端口的位置位/复位控制字。

工作方式控制字是必须要预先设定的,C端口的位置位/复位控制字可视需要而定。

一般来说,在方式0中,C端口除在特殊场合用作联络信号外,如:双机通信,基本上都作为数据端口参与I/O操作。

但在方式1或方式2下,C端口的相应位可用来作为I/O操作的控制和同步信号,也可用作对CPU的中断请求信号。

为了更好地完成本次实验,要求实验者掌握8255控制寄存器,8255方式0、方式1的工作原理及工作过程;熟悉方式1(输入和输出)下A端口的方式字、C端口的位置位/复位控制字以及状态字的设置方法。

三.实验原理
1.步进电机驱动模块板电路原理如图1.1.2所示。

模块板上包括接口的对象永磁式四相步进电机和驱动电路达林顿管TIP,保护电路74LS373,相序指示灯以及开关SW1和SW2等。

2.步进电机接口设计原理与方法的详细阐述。

步进电机是一种将电脉冲转化为角位移的执行机构。

通俗一点讲:当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(及步进角)。

您可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时您可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。

步进电机控制原理:步进电机是数字控制电机,它将脉冲信号转变成角位移,即给一个脉冲信号,步进电机就转动一个角度,因此非常适合于单片机控制。

步进电机可分为反应式步进电机(简称VR)、永磁式步进电机(简称PM)和混合式步进电机(简称HB)。

步进电机区别于其他控制电机的最大特点是,它是通过输入脉冲信号来进行控制的,即电机的总转动角度由输入脉冲数决定,而电机的转速由脉冲信号频率决定。

步进电机的驱动电路根据控制信号工作,控制信号由单片机产生。

其基本原理作用如下:
(1)控制换相顺序
通电换相这一过程称为脉冲分配。

例如:三相步进电机的三拍工作方式,其各相通电顺序为A-B-C-D,通电控制脉冲必须严格按照这一顺序分别控制A,B,C,D相的通断。

(2)控制步进电机的转向
如果给定工作方式正序换相通电,步进电机正转,如果按反序通电换相,则电机就反转。

(3)控制步进电机的速度
如果给步进电机发一个控制脉冲,它就转一步,再发一个脉冲,它会再转一步。

两个脉冲的间隔越短,步进电机就转得越快。

调整单片机发出的脉冲频率,就可以对步进电机进行调速。

图1.1.2 步进电机驱动模块电路原理框图
四、实验配置
1.电源:机内供电,将平台的电源开关拔到“内”的位置上,并将模块电源JP2接通2.电缆线:采用单线/20芯扁平线,将J3与J4连接
3.开关:O区的SW1、SW2和SW3可以配置为用来控制步进电机的运行方向、速度和启动/停止
4.本实验所涉及的模块:I(8255模块),P(步进电机),O(按键开关),模块电源四个模块
5.I/O端口地址:8255的4个端口地址为300H~303H。

其中A口=300H,B口=301H,C口=302H,命令口=303H
6.软件资源:MF2KI集成开发环境软件提供了丰富的汇编语言和C/C++语言程序开发工具
五、实验调试与运行
硬件连接
跳线设置:模块电源L区 JP8跳接。

单线连法如右图
排线接法如右图:
①流程图如图所示。

图1.1.3 步进电机程序流程图
程序
#include <conio.h>
#include <stdio.h>
#include <dos.h> //delay,outportb,inportb
#include <stdlib.h>
void main()
{
int xu[8]={0x05,0x15,0x14,0x54,0x50,0x51,0x41,0x45}; //相序表unsigned int i=0;
unsigned char recv;
printf("\nPress sw2 to start!\n");
printf("If you want to quit,press sw1!\n");
outportb(0x303,0x81); //初始化
outportb(0x303,0x09); //置PC4=1关闭74LS373
do
{
recv = inportb(0x302);
}while((0x02&recv)!=0); //查SW2按下
outportb(0x303,0x08); //置PC4=0,打开74LS373
do
{
outportb(0x300,xu[i]); //送相序代码到PA口
i++;
if(i==8) i=0;
delay(100); //延时
}while((0x01&inportb(0x302))!=0); //查SW1按下
outportb(0x303,0x09); //置PC4=1,关闭74LS373
}
实验现象:启动程序后在DOS对话框中提示按下SW2启动电机,按下SW1关闭电机。

按下SW2后电机会按顺时针方向转动,电极左上方的四个LED会体现电机转动的相序以及快慢。

调试记录和现象分析
1> 运行程序后,点击发出嗡嗡声,且不停的振动,但却始终不能匀速顺利的转动,只会时儿抖动。

最终发现是延迟的问题,重新设定后问题解决;
分析:不仅电机是在一定顺序的电脉冲控制下转动的,当送入第一个脉冲时,电机会转动一个相应的角度,此时若适时的送入第二个脉冲,电机会继续按原方向转动一个相应的角度,如此般不停地打入合适的脉冲,电机就会运转,但由于电机的一些物理特性,在送入的两个脉冲之间若时间过短,电机在第一个脉冲的驱动下的运转还没有结束,第二个脉冲已到达,此时电机的运转就会别破坏,只是不停的抖动,而不会转动,设置延迟是一个必要条件。

2> 在设计电机调速部分时,点击并未按设想中的情况变速,即增大脉冲打入的延迟时间,电机加速,而事实情况却恰恰相反。

分析:发现这种现象大家都是被疑团包围着,在检查了程序有接线没错的基础下,我们找到了问题所在,延迟时间的设定应取在一个适当的范围内(和每台实验仪器相关),过小的话,电机会出现小小的抖动,使电机不能顺利运转,再者是转盘松动了。

六.课程设计心得
通过本次接口课程设计,使我掌握了许多软硬结合的编程方法,深化了对接口技术的学习,使自己的实践能力有了很大提高。

次课程设计还是基本达到了设计的要求,在设计实验时,采取的是通过8255项不仅电机送入脉冲,然后由延迟程序来实现延迟,但这样就无法确定脉冲打入的准确频率,即无法得出相应的电机的转速,直到实验结束,问题也未得到解决。

虽然如此实验还是比较成功的,让我学到了接口方面的很多东西,在对芯片编程上加深了理解和认识,实现了理论和实践的结合。

相关文档
最新文档