四相步进电机控制系统设计

更新时间:2023-12-30 14:32:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

《单片机课程设计》设计报告

设计题目: 四相步进电机控制系统设计 系 别: 自动化工程系 专 业: 测控技术与仪器 班级学号: 姓 名: 李建华

指导教师: 吕江涛 张宝健 设计时间: 2011/12/29

目录

1 概述……………………………………………………………………………………..1 2 四项步进电机………………………………………………………………………2 2.1步进电机………………………………………………………………………..2 2.2步进电机的控制……………………………………………………..……..2 2.3步进电机的工作过程…………………………………………………….2 3 电路图设计…………………………………………………………………….……4 3.1 AT89S52概述………………………………………………………………4 3.2 最小系统…………………………………………………………………..…4 3.3 复位电路………………………………………………………………..……5 3.4 拨码电路……………………………………………………………………..5 3.5 电机驱动电路………………………………………………………………6 4 程序设计……………………………………………………………………………...7 4.1 主程序框图…………………………………………………………………7 4.2 步进电机速度控制程序框图………………………………………8 4.3 拨码开关输入程序框图……………………………………………...10 5 总结……………………………………………………………………………………..11 5.1心得……………………………………………………………………………….11 5.2 收获……………………………………………………………………….……..11 附录一 源程序……………………………………………………………….……….12 附录二 电路原理图………………………………………………………….…….15

1 概述

东 北 大 学 秦 皇 岛 分 校 报 告 用 纸

本实验旨在通过控制AT89S52芯片,实现对四相步进电机的转动控制。具体功能主要是控制电机正转、反转、加速与减速。

具体工作过程是:给试验箱上电后,拨动启动开关,步进电机按照预先设置的转速和转动方式转动。调整正反转按钮,步进电机实现正反转切换;拨动加速开关,步进电机转速加快,速度达到最大值,不再加速;拨动减速开关时,电机减速转动,速度减到最小速度,停止减速。

独立按键

实验具体用到的仪器:AT89S52(试验箱上为89C58)芯片、拨码开关单元、四项步进电机等硬件设备。

实验具体电路单元有:单片机最小系统、步进电机连接电路、拨码开关连接电路。

系统控制框图 键盘 AT89S52 单片机 步进电机 (驱动)

2 四项步进电机

第 页

2.1步进电机

步进电机是一种将电脉冲转化为角位移的执行机构。电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个步距角。 2.2 步进电机的共组原理

2.2步进电机的控制

1.换相顺序控制: 通电换相这一过程称为脉冲分配。例如:混合式步进电机的工作方式,其各相通电顺序为A-B-C-D,通电控制脉冲必须严格按照这一顺序分别控制A,B,C,D相的通断。

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

3.控制步进电机的速度控制:如果给步进电机发一个控制脉冲,它就转一步,再发一个脉冲,它会再转一步。两个脉冲的间隔越短,步进电机就转得越快。

2.3步进电机的工作过程

开关SB接通电源,SA、SC、SD断开,B相磁极和转子0、3号齿对齐,同时,转子的1、4号齿就和C、D相绕组磁极产生错齿,2、5号齿就和D、A相绕组磁极产生错齿。 当开关SC接通电源,SB、SA、SD断开时,由于C相绕组的磁力线和1、4号齿之间磁力线的作用,使转子转动,1、4号齿和C相绕组的磁极对齐。而0、3号齿和A、B相绕组产生错齿,2、5号齿

东 北 大 学 秦 皇 岛 分 校 报 告 用 纸

就和A、D相绕组磁极产生错齿。依次类推,A、B、C、D四相绕组轮流供电,则转子会沿着A、B、C、D方向转动。

四相步进电机按照通电顺序的不同,可分为单四拍、双四拍、八拍三种工作方式。单四拍与双四拍的步距角相等,但单四拍的转动力矩小。八拍工作方式的步距角是单四拍与双四拍的一半,因此,八拍工作方式既可以保持较高的转动力矩又可以提高控制精度。

单四拍、双四拍与八拍工作方式的电源通电时序与波形分别如图3.a、b、c所示:

a. 单四拍 b. 双四拍 c八拍

步进电机工作时序波形图

对步进电机四个绕组依次实现如下方式的循环通电控制: 单四拍运行:正转A-B-C-D; 反转D-C-B-A 双四拍运行:正转AB-BC-CD-DA;反转DC-CB-BA-AD 八拍运行: 正转A-AB-B-BC-C-CD-D-DA

本实验使用的是单双八拍循环控制

3 电路图设计

第 页

3.1 AT89S52概述

AT89S52单片机是ATMEL公司推出的高档型AT89S系列单片机中的增

强型产品。关于其功能原理及其应用不再赘述。这里只介绍本实验用到的端口和功能。

P1口:用户使用的通用I/O口,8位准双向,编程和校验时,可做为高8位地址线;P1.0和P1.1引脚另有第二功能(此实验没用到,不再介绍)

P3口:8位准双向I/O口 RST:复位信号输入端,高电平有效

EA:访问芯片内部和芯片外部程序存储器的选择信号 XTAL1,XTAL2:芯片内振荡器反相放大器的输出端和输入端

3.2 最小系统

单片机最小系统或者称为最小应用系统,就是用最少的元件组成的单片机可以工作的系统,对 52系列单片机来说,最小系统一般应该包括:单片机、复位电路、晶振电路。

3.3 复位电路

复位电路采用手动复位和上电自动复位。

上电自动复位:在单片机上电的瞬间,RC电路充电,由于电容上电电压

东 北 大 学 秦 皇 岛 分 校 报 告 用 纸

不能突变,所以RST引脚出现高电平,RST引脚出现的高电平将会随着对电容C的充电过程而逐渐回落。

手动复位:当按下复位按钮时,RST出现高电平,实现复位。

3.4 拨码电路

拨码开关和P3口相连,拨动开关sw1、sw2、sw3、sw4来控制电机

的启停、正反转、速度的加减。

3.5 电机驱动电路

将步进电机的A、B、C、D分别接到P1.0、P1.1、P1.2、P1.3管脚上

第 页

实物连接

4 程序设计

4.1 主程序框图

东 北 大 学 秦 皇 岛 分 校 报 告 用 纸

系统分为电机转动、电机正转、电机反转、电机加速、电机减速

和电机停止这几个部分组成,其主程序框图如图下所示

初始化定义引脚数据等 开始

4.2 步进电机速度控制程序框图

第 页

声明定义延时函数 声明定义定时器初始化函数 声明定义按键处理函数 调用定时器函数程序 调用按键子程序 电机运转与停止 电机加速 电机减速 电机正转与反转 响应中断 等待 正转部分: 送P1口不同的值,从而改变电机电源的相序,是电机正转,数值分别为0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1,0xf9。流程图如下

开始 延时 有外部中断? 使用up_date 等待 反转部分:送P1口不同的值,从而改变电机电源的相序,是电机反转,数值分别为0xf9,0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8。流程图如下

加速部分: 当电机处于正转或反转的时候,按下K2,调用加速程序,是电机每转动一部的延时时间变短,从而实现电机的加速。

等待 延时 开始 有外部中断? down_date

开始 延时

东 北 大 学 秦 皇 岛 分 校 报 告 用 纸

减速部分: 当电机处于正转或反转的时候,按下K3,调用加速程序,是电机每转动一部的延时时间变长,从而实现电机的减速。

开始 延时

运行与停止: 按下K1键,系统默认是停止,拨动一次是运行,在拨动一次是停止,即是基数次运行,偶数次停止(一般不会拨动N次,为了看到现象,就拨动少数几次)

有外部中断? 速度减小 等待

4.3 拨码开关输入程序框图

开始 延时 有外部中断? 奇数次运行偶数次停止 等待 第 页

用于判断P3.1、P3.2、P3.3、P3.4,

P3.1 ? P3.1 ? 电机减速 P3.1 ? 电机加速 P3.1 ? 运行或停止 调用按键子程序 电机正转或反转 5 总结

5.1心得

这次课程设计,历时多天,失败多次,不断总结失败的经验,从中取得

东 北 大 学 秦 皇 岛 分 校 报 告 用 纸

进步。经过这次课程设计,我明白了具体怎么来实现一个单片机的项目,熟悉了流程,获取信息的途径。彻底的了解了单片机的用途。

5.2 收获

1、能够将理论知识与实践相结合,对理论的理解更透彻。

2、对单片机C语言编程,有了初步的了解,为以后的进一步学习打下了基础。

3、增强了自己的团队意识,在以后的学习和工作中能够更好的与他人合作。

【附录一】 源程序

/*****************************************************************************************************/ //名 称:四项步进电机的控制

//功 能:实现电机的正反转,以及电机的转速

第 页

//指导老师:吕江涛 张宝健

/****************************************************************************************************/ #include #include

#define uchar unsigned char #define uint unsigned int

sbit K1= P3^0; sbit K2= P3^1; sbit K3= P3^2; sbit K4= P3^3;

uchar speed=0; //定义转速变量,初始值为25 uchar k=0; //用来记录驱动数组的位数 bit flagcon= 0; //定义正反转

uchar code up_data[8] = { 0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1,0xf9};//正向驱动数组 uchar code down_data[8]= { 0xf9,0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8};//反向驱动数组

uchar code motor_h[]={ 0x9e,0xae,0xba,0xc3,0xc9,0xcf,0xd3,0xd7,0xda,0xdd, 0xdf,0xe1,0xe3,0xe4,0xe6,0xe7}; //步进电机计数值TH1高位表 uchar code motor_l[]={0x58,0xa2,0x3c,0x1a,0xbe,0x2c,0xad,0x4c,0x6c,0x1e,

0x76,0x7e,0x4a,0xe4,0xc1,0x96}; //步进电机计数值TL1低位表

/*********************************************************************************************/ //名称:延时函数

//功能:定量延时,延时时间=x*1ms

/*******************************************************************************************/ void Delay_ms(uint x) { uint i,j; for(i=x;i>0;i--) for(j=112;j>0;j--); //延时约1ms毫秒 }

/*****************************************************************************************/ //名称:定时器T1初始化函数

/***************************************************************************************/ void timer() {

TMOD = 0x10;

TH1 = 0xff;

// 定时器T1均为工作模式1, 16位定时方式

TL1 = 0xff; //装定时器T1计数初值 EA=1; //开总中断 ET1=1; //开定时器T1中断 TR1 = 0; //暂时不启动定时器T1

东 北 大 学 秦 皇 岛 分 校 报 告 用 纸

}

/********************************************************************************************/ //按键处理

/*********************************************************************************************/ void KeyProcess() { if(K1== 0) { Delay_ms(10); if(K1== 0) {

TR1=~TR1; //K1键按下后,启动定时器T1 } //再次按下关闭T1,控制步进电机启停 }

if(K2== 0) { Delay_ms(10); if((K2== 0)&&(speed!=15)) { speed++; //转速加1 } }

if(K3== 0) { Delay_ms(10); if((K3== 0)&&(speed!=0)) { } {

}

speed--;

//转速减1

if(K4== 0) Delay_ms(10); if(K4== 0) {

flagcon= ~flagcon;//正反转 } } }

/***************************************************************************************/ //主函数

/*************************************************************************************/ main()

第 页

{

timer(); //定时器T0和T1初始化 while(1) {

KeyProcess(); //按键处理函数 } }

/*****************************************************************************************/ //名称:定时器T1中断函数

//功能:用于步进电机转速控制,定时时间由查表可知

/****************************************************************************************/ void timer1() interrupt 3 { }

TH1=motor_h[speed]; //查计数值高位值表 TL1=motor_l[speed]; //查计数值低位值表 if(flagcon== 0) //判断正反转 P1= up_data[k]; //将驱动值送P1,驱动步进电机运转 else

P1= down_data[k]; k++;

if(k==8)k=0;

【附录二】电路图

东 北 大 学 秦 皇 岛 分 校 报 告 用 纸

第 页

本文来源:https://www.bwwdw.com/article/w11x.html

Top