单片机控制步进电机 - 图文

更新时间:2023-09-12 07:28:01 阅读量: 综合文库 文档下载

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

课题:单片机控制步进电机

目录

一、前言....................................................................................1 1.1 步进电机简介.....................................................................1 1.2 摘要.....................................................................................1 1.3 设计目的.............................................................................2 二、设计任务及要求................................................................3 三、总体方案设计....................................................................4 3.1 方案的选择.........................................................................4 四、硬件电路设计....................................................................6

4.1 单片机及其外围电路介绍...................................................6

4.2控制键电路.........................................................................8 4.3 步进电机驱动电路................................................................9

4.4 步进电机控制系统硬件电路图...............................................10

五、软件设计...........................................................................12

5.1程序设计平台........................................................................12 5.2 程序设计思路.......................................................................13 5.3程序流程图...........................................................................14

六、仿真效果...........................................................................17 七、实物调试...........................................................................18

7.1调试与改进........................................................................18

八、设计总结...........................................................................19 参考文献...................................................................................20

一、前言

1.1步进电机简介

步进电机是一种将数字脉冲信号转化为角位移的执行机构。也就是说,当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(即步进角、步距角)。您可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时您可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。一般步进电机的精度为步进角的3-5%,且不累积。 步进电机最早是在1920年由英国人所开发。以后经过不断改良,使得今日步进电机已广泛运用在需要高定位精度、高分解性能、高响应性、信赖性等灵活控制性高的机械系统中。在生产过程中要求自动化、省人力、效率高的机器中,我们很容易发现步进电机的踪迹,尤其以重视速度、位置控制、需要精确操作各项指令动作的灵活控制性场合步进电机用得最多。步进电机作为执行元件,是机电一体化的关键产品之一, 广泛应用在各种自动化控制系统中。随着微电子和计算机技术的发展,步进电机的需求量与日俱增,在各个国民经济领域都有应用。 步进电机是将电脉冲信号变换成角位移或直线位移的执行部件。步进电机可以直接用数字信号驱动,使用非常方便。一般电动机都是连续转动的,而步进电动机则有定位和运转两种基本状态,当有脉冲输入时步进电动机一步一步地转动,每给它一个脉冲信号,它就转过一定的角度。步进电动机的角位移量和输入脉冲的个数严格成正比,在时间上与输入脉冲同步,因此只要控制输入脉冲的数量、频率及电动机绕组通电的相序,便可获得所需的转角、转速及转动方向。在没有脉冲输入时,在绕组电源的激励下气隙磁场能使转子保持原有位置处于定位状态。因此非常适合于单片机控制。

1.2 摘要

步进电机是一种能将电脉冲信号转换成角位移或线位移的机电元件,步进电机控制系统主要由步进控制器,功率放大器及步进电机等组成。采用单片机控制,

1

用软件代替上述步进控制器,使得线路简单,成本低,可靠性大大增加。软件编程可灵活产生不同类型步进电机励磁序列来控制各种步进电机的运行方式。

系统由硬件设计和软件设计两部分组成。其中,硬件设计包括AT89C51单片机的最小系统、电源模块、键盘控制模块、步进电机驱动(集成达林顿ULN2003)模块、数码显示(SM420361K数码管)模块、测速模块(含霍尔片UGN3020)6个功能模块的设计,以及各模块在电路板上的有机结合而实现。软件设计包括键盘控制、步进电机脉冲、数码管动态显示以及转速信号采集模块的控制程序,最终实现对步进电机转动方向及转动速度的控制,并将步进电机的转动速度动态显示在LED数码管上,对速度进行实时监控显示。

1.3 设计目的

(1)设计并实现给定步进电机的控制; (2)进一步掌握步进电机的控制方法;

二 设计任务及要求

本设计的目的是以单片机为核心设计出一个单片机控制步进电机的控制系统。本系统采用AT89C51作为控制单元,通过键盘实现对步进电机转动方向及转动速度的控制,并且将步进电机的转动速度动态显示在LED数码管上,如图一系统模块图。

2

电源模块 键盘控制模块 数码显示模块 AT89C51 图一 系统模块图

电机驱动模块

设计的步进电机控制系统应具有以下功能: 1. 步进电机的启停控制 2.步进电机的正反转控制 3. 步进电机的加速控制

三 总体方案设计

本步进电机控制系统,按照系统设计功能的要求,确定系统由4个模块组成:主控制器、电机驱动模块、LED指示灯电路、键盘电路。 温度无线采集报警系统结构框图如图2所示

3

LED

图2 系统结构框图

步进电机 指示灯 STC89C52 电机驱动 按键电路 单片机 电源 3.1 方案的选择

3.1.1 主控芯片方案

方案一:

采用传统的STC89C52单片机作为主控芯片。此芯片价格便宜、操作简便,低功耗,比较经济实惠。 方案二:

采用TI公司生产的MSP430F149系列单片机作为主控芯片。此单片机是一款高性能的低功耗的16位单片机,具有非常强大的功能,且内置高速12位ADC。但其价格比较昂贵,而且是TPFQ贴片封装,不利于焊接,需要PCB制板,大大增加了成本和开发周期。 方案三:

采用宏晶科技有限公司的STC12C5A60S2增强型51单片机作为主控芯片。此芯片内置ADC和SPI总线接口,且内部时钟不分频,可达到1MPS。而且价格适中。

考虑到此系统需要不用到ADC,从性能和价格上综合考虑我们选择方案一,即用STC89C52作为本系统的主控芯片。

4

3.1.2 步进电机驱动方案

方案1:

采用继电器对电动机的开或关进行控制,通过开关的切换对小车的速度进行调整.此方案的优点是电路较为简单,缺点是继电器的响应时间慢,易损坏,寿命较短,可靠性不高。 方案2:

采用电阻网络或数字电位器调节电动机的分压,从而达到分压的目的。但电阻网络只能实现有级调速,而数字电阻的元器件价格比较昂贵。更主要的问题在于一般的电动机电阻很小,但电流很大,分压不仅会降低效率,而且实现很困难。 方案3:

采用ULN2003达林顿管电机驱动芯片,ULN2003芯片是高耐压、大电流达林顿阵列,由7组达林顿晶体管阵列和相应的电阻网络以及钳位二极管网络构成,具有同时驱动7组负载的能力,为单片双极型大功率高速集成电路。功率电子电路大多要求具有大电流输出能力,以便于驱动各种类型的负载。功率驱动电路是功率电子设备输出电路的一个重要组成部分。ULN2003芯片高压大电流达林顿晶体管阵列产品属于可控大功率器件。对步进电机控制方便灵活。

因此我们选用了方案3。

3.1.3显示模块方案

方案一:

选择主控为ST7920的带字库的LCD12864来显示信息。12864是一款通用的液晶显示屏,能够显示多数常用的汉字及ASCII码,而且能够绘制图片,描点画线,设计成比较理想的结果。

方案二:

采用四个LED发光二极管显示,其成本低,简单明了,容易显示控制。 综合以上方案,我们选择了经济实惠LED来作为速度级别显示

5

四 硬件电路设计

本文采用目前国内比较常用的单片机用与整个回路的控制,单片机选用51系列的AT89C51芯片,芯片及其外围时钟电路和复位电路组成单片机最小系统,按键SW1-SW4做为输入控制,ULN2003做为步进电机驱动器件。

硬件电路总体框图如图3:

图3 硬件电路总体框图

4.1 单片机及其外围电路介绍

4.1.1CPU芯片

AT89C51是主机板的核心,接收各部分信息并向各部发出命令,控制电机运行的各种工作状态。 AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,在本次设计中不需要外扩存储器。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。目前,可用于MCS-51系列单片机开发的硬件越来越多,与其配套的各类开发系统、各种软件也日趋完善,因此,可以极方便地利用现有资源,开发出用于不同目的的各类应用系统。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,所以ATMEL的AT89C51是一种高效微控制器,因其高性能、高速度、体积

6

小、价格低廉、稳定可靠而得到广泛应用, 成为在工业生产中必不可少的器件,而且在日常生活中发挥的作用也越来越大,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

单片机最小系统电路图如图4所示:

图4 单片机最小系统电路图

管脚说明:

P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。本次设计中,P0口作为键盘输入口。

P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。本次设计中,P1口作为脉冲输出口,与步进电机驱动电路相连接。

RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。

XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2:来自反向振荡器的输出。

7

VCC:供电电压。 GND:接地。

EA/VPP:当EA保持低电平时,选用外部程序存储(0000H-FFFFH),当EA端保持高电平时,用内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。

4.1.2 AT89C51单片机的时钟电路:

AT89C51单片机的时钟信通常用两种电路形式得到:内部振荡方式和外部振荡方式。本设计由内部振荡方式产生。如图2-2中所示,在引脚XTAL1和XTAL2外接晶体振荡器(简称晶振),就构成了内部振荡方式。由于单片机内部有一个高增益反相放大器,当外接晶振后,就构成了自激振荡器并产生振荡时钟脉冲。两个电容器起稳定振荡频率、快速起振的作用,其电容值一般在5-30pF。当晶振频率的值为12MHZ时内部振荡方式所得的时钟信号比较稳定,实用电路中应用较多。

4.1.3单片机复位电路:

当MCS-5l系列单片机的复位引脚RST(全称RESET)出现2个机器周期以上的高电平时,单片机就执行复位操作。根据应用的要求,复位操作通常有两种基本形式:上电复位和上电或开关复位。上电或开关复位要求电源接通后,单片机自动复位,并且在单片机运行期间,用开关操作也能使单片机复位。上电后,由于电容的充电作用,使RST持续一段时间的高电平。当单片机已在运行当中时,按下复位键后松开,也能使RST保持一段时间的高电平,从而实现通电时的自动复位操作,系统运行过程中的开关复位操作。

4.2控制键电路

键盘是由若干按钮组成的开关矩阵,它是单片机系统中最常用的输入设备,用户能通过键盘向计算机输入指令、地址和数据。

按键是一种常开型按钮开关。由于按钮是机械触点,当机械触点断开、闭合时,会有抖动,这种抖动对于人来说是感觉不到的,但对计算机来说,则是完全能感应到的,因为计算机处理的速度是在微秒级,而机械抖动的时间至少是毫秒级,对计算机而言,这已是一个“漫长”的时间了。

8

八 设计总结

在老师耐心细致的指导下,经过近一个星期的努力,本次课程设计课题步进电机控制系统终于完成。步进电机控制系统主要分为硬件设计和软件设计两个部分。

硬件设计主要是把单片机最小系统、键盘控制模块、步进电机驱动模块、数码显示模块、测速模块各个硬件功能模块及其它元件合理搭配并连接起来使其能够为软件运行提供一个硬件平台。

软件设计主要是通过编写程序代码,实现对整个系统的控制。在系统上电复位后程序自动运行,通过接受外部的键盘操作修改系统参数值,控制步进电机的启停,以及转速的增减和转动方向的改变;定时器T0根据系统参数控制步进电机的转动;实现步进电机转动速度的动态显示。

本系统具有相当的实用功能,两片单片机分别实现步进电机控制和测速,能基本符合实际应用需求,本次设计由于设计时间较短,个人能力以及精力等因素的限制,加之设计经验的不足,该系统还有许多不尽如人意的地方。该系统未能完全的实现设计的所有功能。如:利用键盘输入转速值实现转速的控制,动态设置最低转速和最高转速等。

在把理论设计转换成实物的整个过程,如:电路设计、分析计算、画电路图、焊接电路、检查调试、软件流程控制设计分析、编写调试软件、烧写软件到整个软硬件系统的调试,最后直到系统完成。其中整个系统的前期准备是首先必须做到位的,如控制什么、用什么控制、得到什么结果,进而对各部分应选择具体的芯片作进一步的考虑,以使系统得到最优的表现。

通过本次课程设计,一方面我在查阅资料的基础上,了解STC10F04单片机控制的一些基本技术,掌握其控制系统的分析方法与实现方法,能对单片机外围电路设计进行系统学习与掌握;另一方面,在设计步进电机控制系统的硬件电路,控制程序和相应的电路图时,应充分运用所学知识,善于思考,认真分析。理论联系实际是我们学习的必不可少的关键步骤,因此,这次课程设计对我们学习起到很好的促进作用。

19

参考文献

[1] 张俊谟编著.单片机中级教程--原理与应用(第二版).北京航空航天大学出版社,2008 [2] 曹巧媛主编.单片机原理及应用(第二版).电子工业出版社,2001 [3] 高钟编著.机电控制工程 (第二版).清华大学出版社,2002

[4] 高海涛,常吉连,李素萍写.步进电机的升降频设计.机床电器.洛阳轴承集团公司,2000 [5] 伍云辉编著.单片机应用技术.电子科技大学出版社,1999

[6] 陆子明,徐长根编著.单片机设计与应用基础教程.国防工业出版社,1999

[7] 张蔚兮,王颖编著.微型计算机(MCS-51系列)原理、接口及应用. 南京大学出版社,1999 [8] 张凯,马忠梅等.MCS-51单片机综合系统及其设计开发 .科学出版社,2007 [9] 南建辉,王军茹.MCS-51单片机原理及应用实例编著.清华大学出版社.,2004 [10] 王季秩,曲家骐编著.执行电动机 .机械工业出版社,2000

[11] 李勋,李刚明.单片微型计算机大学读本.北京航空航天大学出版社,2009 [12] 吴微,文军.单片机原理及制作 .武汉大学出版社,2010

[13] 苏彦民编.电力拖动系统的微型计算机控制.西安交通大学出版社,2011 [14] 赖福新.电机控制系统.上海交通大学出版社,1995

[15] 陈伯时主编.电力拖动自动控制系统第二版.机械工业出版社,1992 [16] 温希东,路勇. 计算机控制技术.西安电子科技大学出版社,2005 [17] 曹天汉.单片机原理与接口技术.电子工业出版社,2006 [18] 曹承志.电机拖动与控制.机械工业出版社,2000

20

附录

程序源代码

#include

#define uchar unsigned char //无符号字符型 宏定义 变量范围0~255 #define uint unsigned int //无符号整型 宏定义 变量范围0~65535

unsigned char code zheng[4]={0x08,0x04,0x02,0x01};//正转表格 unsigned char code fan[4]={0x01,0x02,0x04,0x08};//反转表格

uchar flag_start ; //启动标志位 1为起动步进电机 否则关闭电机 uchar flag_z_f; //正反标志位 0为顺时钟 1为逆时史上转 uchar flag_shudu; //4种速度 0,1,2,3, uint flag_shudu_value = 400;

void Delay(unsigned int i)//延时 {

while(--i); }

/***********************1ms延时函数*********************/ void delay_1ms(uint z) { uint x,y;

for(x=z;x>0;x--)

for(y=120;y>0;y--); }

uchar key_can;

/********************独立按键程序*****************/ void key() {

static uchar key_new; key_can = 20;

if((P3 & 0xf0) != 0xf0) { Delay(5); if(((P3 & 0xf0) != 0xf0) && (key_new == 1)) { key_new = 0;

21

switch(P3 & 0xf0) { case 0xe0: key_can = 1; break; //左边第1个 case 0xd0: key_can = 2; break; //左边第2个 case 0xb0: key_can = 3; break; //左边第3个 case 0x70: key_can = 4; break; //左边第4个 } } } else key_new = 1; }

void main() {

unsigned char i;

while(1) { key(); if(key_can < 10) { if(key_can == 1) //启动键 { flag_start = 1; switch(flag_shudu) { case 0: flag_shudu_value = 400; P2 = 0xf0; break; 速度1 最快

case 1: flag_shudu_value = 600; P2 = 0xf8; break; case 2: flag_shudu_value = 800; P2 = 0xfc; break; case 3: flag_shudu_value = 1000;P2 = 0xfe; break; 速度4 最慢

} }if(key_can == 2) //正反转键 { flag_z_f = ~flag_z_f; // }if(key_can == 3) //速度调节键 { flag_shudu ++; if(flag_shudu >= 4) {

22

//

//

flag_shudu = 0; } switch(flag_shudu) { case 0: flag_shudu_value = 500; P2 = 0xf0; break; //

速度1 最快

case 1: flag_shudu_value = 650; P2 = 0xf8; break; case 2: flag_shudu_value = 830; P2 = 0xfc; break; case 3: flag_shudu_value = 1000;P2 = 0xfe; break; //

速度4 最慢

} }if(key_can == 4) //停止键 { flag_start = 0; P2 = 0XFF; } } if(flag_start == 1) { for(i=0;i<4;i++) //4相 { if(flag_z_f == 0) P1=zheng[i]; //电机正转 else P1=fan[i]; //电机反转 Delay(flag_shudu_value); //改变这个参数可以调整

电机转速

} } } }

23

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

Top