四相步进电机控制系统设计
更新时间: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
#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;
【附录二】电路图
东 北 大 学 秦 皇 岛 分 校 报 告 用 纸
第 页
正在阅读:
四相步进电机控制系统设计12-30
如何做好中考数学复习02-28
2017年10月思想汇报02-24
安装SQL Server 2008 注意及问题解决10-24
简短创意自我介绍02-24
计算机专业本科生毕业论文撰写范例03-08
2015年电大中国现代文学专题期末考试摸拟试题及答案05-27
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 步进电机
- 控制系统
- 设计
- 小半径曲线盾构施工技术 - 图文
- 危急值管理与处理流程
- 金蝶K3WISE V13产品性能稳定性优化指导手册(常见问题) - 图文
- 第三届电子商务三创大赛湖南省特等奖作品《聚众网商业策划书》 - 图文
- 安徽省宿州市电子政务研究
- 矿车运送炸药安全技术措施
- 中信银行资产托管估值产品会计核算业务管理办法(1.0版,2015年)
- 电焊工培训应知应会
- 县域中小企业融资市场失灵与政府干预
- 初2016级知恩于心 感恩于行主题班会
- 重庆市江北区行政审批项目详细情况
- 钢筋编号HPB、HRB、RRB的区别
- 少代会小主持人新手稿
- 奥数天天练(一年级)2011年1月03日-07日(高难度)
- 全国自然灾害卫生应急工作指南
- Access上机操作题 - 报表操作
- 办公室吃零食可缓解紧张情绪
- 怡亚通:中国供应链整合图谱
- 化学反应及其能量变化--高一化学教案
- 机械原理总复习