您好,欢迎来到爱go旅游网。
搜索
您的当前位置:首页基于51单片机的步进电机系统设计

基于51单片机的步进电机系统设计

来源:爱go旅游网
学校代码 ***** 学号 ********

题 目

本科学年论文

基于微型计算机的步进电机系统设计

院 系 内蒙古大学鄂尔多斯学院 专业名称 自动化 年 级 2008 级 学生姓名 薛金朋 指导教师 王 鑫

2011年06月20日

学年论文指导教师评阅意见

学 生 姓 名 (论文)题目 指导教师 王鑫 薛金朋 专 业 班 级 自动化 08级 学 号 00861005 基于微型计算机的步进电机系统设计 教师职称 助教 学年 论 文 评语 评定成绩: 指导教师签名: 年 月 日

原 创 性 声 明

本人声明:所呈交的学位论文是本人在导师的指导下进行的研究工作及取得的研究成果。论文中包含其他人已经发表或撰写过的研究成果已添加相应注释,而且不包含为获得内蒙古大学及其他教育机构的学位或证书而使用过的材料。与我一同工作的同学对本系统所做的任何贡献均已在论文中作了明确的说明并表示谢意。如有雷同,纯属巧合。

学位论文作者签名: 指导教师签名:

日 期: 日 期:

内蒙古大学鄂尔多斯学院2008级自动化专业学年论文

基于微型计算机的步进电机系统设计

姓名 薛金朋 专业 自动化 年级 2008级

摘要

如今单片机由于其体积小,性能完善,所以广泛应用于各个行业中。本文设计了基于STCC52单片机的步进电机驱动系统。本系统中,主要完成了按键控制步进电机起停、正反转、加减速再输出显示等功能。我们试着用所学的知识,通过实践来掌握应用设备的工作原理。

关键词:单片机,步进电机,串口通信,供电,LCD1602

I

内蒙古大学鄂尔多斯学院2008级自动化专业学年论文

STEPPER MOTOR MICRO-COMPUTER BASED SYSTEM DESIGN

ABSTRACT

Now because of its small size, microcontroller is perfect in performance, so widely used in various industries. In this paper, based on the single chip STCC52 stepping motor driven system. The system, and the main completed the button control step motor, and the stop and turn, and slow down and the output shown etc. Function. We try to use of knowledge, through the practice to master the application equipment principle of work.

KEYWORDS:singlechip,step motor,serial,communication,power supply,LCD1602

II

内蒙古大学鄂尔多斯学院2008级自动化专业学年论文

目 录

引言................................................................ 1 1 设计任务及思路................................................... 2 1.1 供电模块 ..................................................... 2 1.2 串行通信模块 ................................................. 3 1.3 按键模块 ..................................................... 4 1.4 指示灯模块 ................................................... 5 1.5 显示模块 ..................................................... 5 1.6 电机模块 ..................................................... 6 2 软件编程思路及流程............................................... 8 2.1 主程序 ....................................................... 8 2.2 键盘扫描程序 ................................................. 9 2.3 LCD显示程序 ................................................ 10 2.4 步进电机驱动程序 ............................................ 11 3 系统评价及改进.................................................. 12 3.1 系统优点 .................................................... 12 3.2 系统缺点 .................................................... 12 3.3 系统改进 .................................................... 12 4 结论............................................................ 12 5 学习心得........................................................ 12

III

内蒙古大学鄂尔多斯学院2008级自动化专业学年论文

引言

在经济与科技共同发展的今天,为了满足人们的需要,汽车、电梯等工具已经是人们居家旅游必不可少的元素。而在汽车雨刷器、电梯的控制等方面,由单片机控制的步进电机便起到了至关重要的作用。

步进电机是一种把电脉冲信号变成直线位移的控制电机,其位移速度与脉冲频率成正比,位移量与脉冲数成正比。步进电机在结构上也是由定子与转子组成,可以对旋转角度和转动速度进行高精度控制。当定子上绕组通电时,可产生激励磁场,并与转子形成回路。如果转子和定子之间的磁场没有对齐,由于磁力线力会走磁阻最小的路线,从而带动转子旋转一个角度,使转子的一堆磁极旋转方向与定子的磁场方向一致。让定子绕组旋转实际上就是以一定的规律控制定子绕组的电流来产生旋转的磁场。每来一个脉冲电压,转子就会旋转一个步进角。称为一步。步进电机必须使用专用的步进电机驱动设备才能够正常工作。步进电机系统的运行性能,除与电机自身性能有关外,在很大程度上还取决于驱动设备性能的优劣[1]。

本设计中只是单纯完成了使用单片机控制步进电机完成加速、减速、正传、反转等功能,并使用液晶显示屏显示,并没有针对某种特定的应用设计相应的功能。当然,这也会使得本系统的应用变得更加广泛。

第1页 共22页

内蒙古大学鄂尔多斯学院2008级自动化专业学年论文

1 设计任务及思路

本系统需要完成键盘控制步进电机加减速正反转等功能并同步显示,所以,要完成系统功能需要几部分模块共同构成。

根据需要,本系统设计的这几部分模块分别有:为整个系统供电的供电模块、从计算机到单片机写入程序的串行通信模块、控制电机工作的按键模块、指示电机工作状态指示灯模块、显示电机工作的显示模块、系统的核心也就是完成拖动的电机模块。

系统原理图如下:

图1 系统原理图 Figure 1 system diagram

1.1 供电模块

本系统使用的供电模块为DC供电与USB供电5V双供电系统。其中DC供电为正常工作供电,USB供电作为备用供电电源使用。两电源之间使用单刀双掷开关切换。

需要注意的是,两电源在使用开关切换供电时系统会断电重新启动,所以电机工作中轻易不要切换供电。实在需要切换电源的话需要先插好供电电源线再按开关切换供电一面电压不稳烧毁原器件。

第2页 共22页

内蒙古大学鄂尔多斯学院2008级自动化专业学年论文

供电模块原理图如下:

图2 供电模块原理图

Figure 2 power supply module principle diagram

1.2 串行通信模块

本系统使用串行通信模块来向单片机输入程序使单片机工作。模块使用的原件为DB-9串口。目前RS-232是PC机与通信工业中应用最广泛的一种串行接口。RS-232被定义为一种在低速率串行通讯中增加通讯距离的单端标准。RS-232采取不平衡传输方式,即所谓单端通讯[2]。

完成串行口与计算机的链接的是USB-串口数据线,需要在计算机中安装驱动才能正常使用。然而从串口中传来的数据不能直接应用在单片机中,所以还需要在系统中添加用于串口和单片机通讯的驱动芯片。我们使用在串口与单片机之间完成通讯的是MAX232驱动芯片。该产品是由德州仪器公司(TI)推出的一款兼容RS232标准的芯片。由于电脑串口RS232电平是-10V~+10V,而一般的单片机应用系统的信号电压是TTL电平0~+5V,MAX232就是用来进行电平转换的。该器件包含两个驱动器、两个接收器和一个电压发生器电路提供TIA/EIA-232-F电平。该器件符合TIA/EIA-232-F标准,每一个接收器将TIA/EIA-232-F电平转换成5V TTL/CMOS电平。每一个发送器将TTL/CMOS电平转换成TIA/EIA-232-F电平[3]。

第3页 共22页

内蒙古大学鄂尔多斯学院2008级自动化专业学年论文

串行通信模块原理图如下:

图3 串行通信模块原理图

Figure 3 serial communication module principle diagram

1.3 按键模块

本系统中使用的控制按键为触点开关,分表控制转向、停止、加速、减速功能。按键连接在单片机P2口上。

当单片机的I/O口识别到低电平时,说明对应的按键被按下了,程序里编写相应的语句来控制电机与显示屏完成相应的动作与显示。

按键模块原理图如下:

图4 按键模块原理图

Figure 4 buttons module principle diagram

第4页 共22页

内蒙古大学鄂尔多斯学院2008级自动化专业学年论文

1.4 指示灯模块

指示灯模块使用的是三只发光二极管,单片机识别电机是否停止和正传反转后,在相应的引脚输出低电平使发光二极管导通发光。

发光二极管需要串联一只电阻限流以免电流过大损坏发光二极管。经过计算限流电阻应控制在220Ω-470Ω。

指示灯模块原理图如下:

图5 指示灯模块原理图

Figure 5 indicator light module principle diagram

1.5 显示模块

本系统中使用的显示模块为LCD1602液晶显示屏。1602液晶模块的读写操作,屏幕和光标的操作都是通过指令编程来实现的。液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符[4]。

需要注意的是,我们本次设计使用的是单片机的P0口为LCD1602提供数据。AT公司生产的51系列单片机的P0口没有内置上拉电阻,输出电流仅有0.1mA[5],虽然我们使用的是STC公司的产片,但是为保证单片机I/O口的驱动能力,需要添加10KΩ的上拉电阻拉高总线中的电流。

第5页 共22页

内蒙古大学鄂尔多斯学院2008级自动化专业学年论文

显示模块原理图:

图6 显示模块原理图

Figure 6 shows module principle diagram

1.6 电机模块

本系统中驱动的电机为四相五线步进电机。该四相步进电机,采用单极性直流电源供电。只要对步进电机的各相绕组按合适的时序通电,就能使步进电机步进转动[6]。

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

工作方式如图所示:

图7 四相步进电机八拍工作脉冲波形

Figure 7 four phase step motor take eight work pulse

第6页 共22页

内蒙古大学鄂尔多斯学院2008级自动化专业学年论文

电机模块原理图:

图8 电机模块原理图

Figure 8 motor module principle diagram

第7页 共22页

内蒙古大学鄂尔多斯学院2008级自动化专业学年论文

2 软件编程思路及流程

本系统软件部分使用单片机C语言编程。并通过Keil C和Proteus联合仿真调试。在本系统中,使用主函数调用各个模块子函数实现系统的正常运行[7]。

本系统中软件需要完成的功能为:当系统供电,显示屏亮起显示欢迎界面,同时显示停止,电机停止,指示灯全部熄灭。当加速或者减速键按下后电机起步运转完成拖动,并选择一档速度,再读取当前正反转状态使工作灯发光和对应的正反转指示灯选择发光,同时液晶显示屏显示电机运转方向和运转速度。当加速减速键再次按下时速度和显示对应变化,极速时加速或者最小速度时减速系统不作任何处理。当停止键按下后,显示屏回到欢迎和停止界面,指示灯全部熄灭。

2.1 主程序

本系统中,主程序很短,只是调用了几个子函数。子函数分别是键盘扫描程序、LCD显示程序和步进电机驱动程序。

在主函数运行之前需要初始化,定义几个标志位来控制步进电机的速度和正反转。标志位分别为:a=0,电机停止;a=1电机工作;b=0,电机反转;b=1电机正传;c=10,速度为一档;c=15速度为二档;c=20速度为三档。

初始化定义好标志位之后就开始调用子函数,然后无条件持续循环。 主程序流程图如下:

图9 主程序流程图

Figure 9 main program flow chart

第8页 共22页 调用电机驱动程序 调用显示程序 调用键盘扫描程序 开始 初始化 内蒙古大学鄂尔多斯学院2008级自动化专业学年论文

2.2 键盘扫描程序

键盘扫描程序中通过扫描单片机P2.4~P2.6引脚是否识别到低电平来确认是否有按键按下,进而修改标志位使电机改变运转方式以及更改显示。

键盘扫描程序流程图如下: 开始

N 停止键是否按下 Y Y

标志位a置0 标志位a置1

N 方向键是否按下

Y

b取反

N 减速是否按下

Y Y 是否为最小速度

N

减速

N 加速是否按下

Y Y 是否为最大速度

N

加速

结束

图10 键盘扫描程序流程图

Figure 10 keypad scanning program flow chart

第9页 共22页

内蒙古大学鄂尔多斯学院2008级自动化专业学年论文

2.3 LCD显示程序

本系统使用的显示芯片为16引脚的LCD1602芯片。在使用LCD1602时要对芯片进行初始化。

需要知道RS为寄存器选择端,识别到高电平时选通数据寄存器,低电平选通指令寄存器。RW为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和RW同时为低电平时可以写入指令或者显示地址。当RS为低电平、RW为高电平时为忙信号,当RS为高电平、RW为低电平时写入数据。E为使能端,当E端识别到下降沿信号时,液晶模块执行命令。D0—D7为双向数据线。[8]

LCD显示程序流程图如下: 开始 初始化

a=0 Y 显示欢迎和停止 N

结束

b=0 0 1

显示反转 显示正传

Y Y c=10 c=10

N 显示一档 N Y Y c=15 c=15

N 显示二档 N Y Y c=20 c=20 显示三档

结束

图11 显示子程序流程图

Figure 11 shows the son program flow chart

第10页 共22页

内蒙古大学鄂尔多斯学院2008级自动化专业学年论文

2.4 步进电机驱动程序

步进电机驱动程序与显示子程序十分相像,因为步进电机的运转方式与液晶显示内容是完全同步的。本次系统设计使用的是八拍工作方式。在这种工作方式下,步进电机使用的正反转代码分别为:“ 0xef,0xcf,0xdf,0x9f,0xbf,0x3f,0x7f,0x6f”和“0x6f,0x7f,0x3f,0xbf,0x9f,0xdf,0xcf,0xef”。将这两组代码从单片机P2口输出,就能驱动步进电机完成正反转。

步进电机驱动程序流程图如下:

开始 初始化

a=0 Y 停止 N

结束

b=0 0 1

反 转 正 传

Y Y c=10 c=10

一档 N N Y Y c=15 c=15

N 二档 N Y Y c=20 c=20 三档

结束

图12 电机驱动程序流程图

Figure 12 motor driver program flow chart

第11页 共22页

内蒙古大学鄂尔多斯学院2008级自动化专业学年论文

3 系统评价及改进

3.1 系统优点

本系统简单可行,所用原件均为市场主流原件,造价低廉并能准确完成我们需要的正反转、加减速等功能。并且通过LCD液晶显示明确直观地将电机运转信息显示出来,便于我们观察和记录。

指示灯系统采用红色高亮发光二极管,引人注意,当电机停止转动或者突然断电时可以第一时间将效果反馈出来。

本系统采用DC供电和USB供电双供电系统。这样可以使我们的单片机最小系统脱离计算机单独使用,这使得本系统的机动性和实用性大大提高。

3.2 系统缺点

本系统按键控制反应并非实时反应。每次扫描键盘需要完成电机八步运转之后,如果我们需要电机的速度特别慢的话,按键将会给人“不灵敏”的错觉。

3.3 系统改进

如果我们将硬件设计中添加中断源或者在软件编程中增加键盘扫描频率,按键“不灵敏”的问题将会得到进一步的解决。

4 结论

经过硬件设计和软件编程,该系统完全能够实现预期的功能。通过按键控制步进电机转动并将转动情况通过显示屏和指示灯显示出来。

5 学习心得

本次系统设计介绍了使用STCC52单片机最小系统驱动步进电机完成正反转、加减速并显示的办法。通过这次设计,我更加深刻的了解了STCC52单片机的内部结构、LCD1602等原件的使用方法和工作原理,熟悉了一些常用的指令使用,增强了处理混乱逻辑关系的能力。

第12页 共22页

内蒙古大学鄂尔多斯学院2008级自动化专业学年论文

参考文献

[1]《电机及拖动基础》詹跃东 重庆大学出版社

[2]《DB9和DB25的常用信号脚说明;RS232接口针脚定义》 [3]《MAX232中文资料》 [4]《LCD1602中文资料》

[5]《单片机原理及接口技术》余锡存 曹国华 西安电子科技大学出版社 [6]《四相步进电机原理》抱米花网

[7]《C++面向对象程序设计》 谭浩强 清华大学出版社 [8]《机电技术》于志赣 刘国平 张旭斌 2009 第3期

第13页 共22页

内蒙古大学鄂尔多斯学院2008级自动化专业学年论文

附录:源程序

/******************************************************* 初始化

********************************************************/

#include \"reg52.h\" #include

typedef unsigned char BYTE; typedef unsigned int WORD; typedef bit BOOL ; sbit stop_key = P2^1;

sbit fangxiang_key = P2^0; sbit jia_key = P2^2; sbit jian_key = P2^3; bit a=0; bit b=0; int c=25;

sbit rs = P1^0; sbit rw = P1^1; sbit ep = P1^2; unsigned char code FFW[8]={0xef,0xcf,0xdf,0x9f,0xbf,0x3f,0x7f,0x6f}; //反转

unsigned char code FFZ[8]={0x6f,0x7f,0x3f,0xbf,0x9f,0xdf,0xcf,0xef}; //正转

unsigned int K, rate;

void delay();

/********************************************************** 步进电机驱动

***********************************************************/

void delay_dianji(unsigned int t) { unsigned int k; while(t--) {

for(k=0; k<150; k++) { } } }

void dianji()

第14页 共22页

内蒙古大学鄂尔多斯学院2008级自动化专业学年论文

{

unsigned char i; if(a==0) {

P2=0xff; goto pp;}

for (i=0; i<8; i++) //一个周期转30度 {

if(K==0) P1 = FFW[i]&0xff;

if(K==0)P2=0x4f; //取数据 if(K==1) P1 = FFZ[i]&0xff; if(K==1) P2=0x2f;

delay_dianji(c); //调节转速 } pp:; }

/******************************************************** 延时程序

*********************************************************/

void delay()

{ unsigned int k,t; t=rate; while(t--) {

for(k=0; k<150; k++) { } } }

/******************************************************* LCD显示

********************************************************/

BYTE code dis1[] = {\"welcome\BYTE code dis2[] = {\"now is stop\

BYTE code dis3[] = {\"turning Forward\BYTE code dis4[] = {\"turning Reverse\BYTE code dis5[] = {\" with speed one\BYTE code dis6[] = {\" with speed two\BYTE code dis7[] = {\"with speed three\delay1(BYTE ms)

第15页 共22页

内蒙古大学鄂尔多斯学院2008级自动化专业学年论文

{ // 延时子程序 BYTE i; while(ms--) {

for(i = 0; i< 250; i++) _nop_(); _nop_(); _nop_(); _nop_(); } }

BOOL lcd_bz()

{ // 测试LCD忙碌状态 BOOL result; rs = 0; rw = 1; ep = 1;

_nop_(); _nop_(); _nop_(); _nop_();

result = (BOOL)(P0 & 0x80); ep = 0;

return result; }

lcd_wcmd(BYTE cmd)

{ // 写入指令数据到LCD while(lcd_bz()); rs = 0; rw = 0; ep = 0; _nop_(); _nop_(); _nop_(); _nop_();

P0 = cmd; _nop_(); ep = 1; _nop_();

ep = 0; }

第16页 共22页

内蒙古大学鄂尔多斯学院2008级自动化专业学年论文

lcd_pos(BYTE pos)

{ //设定显示位置 lcd_wcmd(pos | 0x80); }

lcd_wdat(BYTE dat)

{ //写入字符显示数据到LCD while(lcd_bz()); rs = 1; rw = 0; ep = 0; P0 = dat; _nop_(); ep = 1;

_nop_(); ep = 0; }

lcd_init()

{ //LCD初始化设定 lcd_wcmd(0x38); // delay1(1);

lcd_wcmd(0x0c); // delay1(1);

lcd_wcmd(0x06); // delay1(1);

lcd_wcmd(0x01); //清除LCD的显示内容 delay1(1); }

void lcd() {

BYTE i;

lcd_init(); // 初始化LCD delay1(1);

if(a==0) {

lcd_pos(4); // 设置显示位置为第一行的第5个字符 i = 0;

while(dis1[i] != '\\0')

{ // 显示字符\"welcome!\" lcd_wdat(dis1[i]); i++; }

第17页 共22页

内蒙古大学鄂尔多斯学院2008级自动化专业学年论文

lcd_pos(0x41); // 设置显示位置为第二行第二个字符 i = 0;

while(dis2[i] != '\\0') {

lcd_wdat(dis2[i]); // 显示停止 i++; } }

if(a==1&b==0) // 反转 {

lcd_pos(1); // 设置显示位置为第一行的第一个字符 i = 0;

while(dis4[i] != '\\0')

{ // 显示反转 lcd_wdat(dis4[i]); i++; }

lcd_pos(0x40); // 设置显示位置为第二行第一个字符 i = 0;

if(c==10) //一档 {

while(dis7[i] != '\\0') {

lcd_wdat(dis7[i]); // 显示一档 i++; } }

if(c==15) //二档 {

while(dis6[i] != '\\0') {

lcd_wdat(dis6[i]); // 显示二档 i++; } }

if(c==20) // 三档 {

while(dis5[i] != '\\0') {

lcd_wdat(dis5[i]); // 显示三档 i++; } } }

第18页 共22页

内蒙古大学鄂尔多斯学院2008级自动化专业学年论文

if(a==1&b==1) //正转 {

lcd_pos(1); // 设置显示位置为第一行的第一个字符 i = 0;

while(dis3[i] != '\\0')

{ // 显示正转 lcd_wdat(dis3[i]); i++; }

lcd_pos(0x40); // 设置显示位置为第二行第一个字符 i = 0;

if(c==10) //一档 {

while(dis7[i] != '\\0') {

lcd_wdat(dis7[i]); // 显示一档 i++; } }

if(c==15) //二档 {

while(dis6[i] != '\\0') {

lcd_wdat(dis6[i]); // 显示二档 i++; } }

if(c==20) // 三档 {

while(dis5[i] != '\\0') {

lcd_wdat(dis5[i]); // 显示三档 i++; } } } }

/******************************************************* 键盘扫描

********************************************************/

void jianpan() {

第19页 共22页

内蒙古大学鄂尔多斯学院2008级自动化专业学年论文

if(stop_key==0) {

delay_dianji(5); if(stop_key==0) {

a=0;

while(stop_key==0); } }

if(fangxiang_key==0) {

delay_dianji(5); if(fangxiang_key==0) {

b=~b;

while(fangxiang_key==0); } }

if(jian_key==0) {

delay_dianji(5); if(jian_key==0) {

c+=5; a=1; if(c>20) { c=20; }

while(jian_key==0); } }

if(jia_key==0) {

delay_dianji(5); if(jia_key==0) {

c-=5; if(c==5) c=10; a=1;

while(jia_key==0);

第20页 共22页

内蒙古大学鄂尔多斯学院2008级自动化专业学年论文

} }

K=b; }

/******************************************************* 主程序

********************************************************/

main() {

while(1) {

jianpan(); lcd(); dianji(); } }

第21页 共22页

内蒙古大学鄂尔多斯学院2008级自动化专业学年论文

致谢

本研究及论文是在我的导师王鑫老师的亲切关怀和悉心指导下完成的。她严肃的科学态度,严谨的治学精神,精益求精的工作作风,深深地感染和激励着我。从课题的选择到项目的最终完成,王老师都始终给予我细心的指导和不懈的支持。王老师不仅在学业上给我以精心指导,同时还在思想、生活上给我以无微不至的关怀,在此谨向王老师致以诚挚的谢意和崇高的敬意。

在此,我还要感谢在一起对本系统进行设计的各位同学们,正是由于他们的帮助和支持,我才能克服一个一个的困难和疑惑,直至本文的顺利完成。

在论文即将完成之际,我的心情无法平静,从开始进入课题到论文的顺利完成,有多少可敬的师长、同学、朋友给了我无言的帮助,在这里请接受我诚挚的谢意!最后我还要感谢培养我长大含辛茹苦的父母,谢谢你们!

第22页 共22页

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- igat.cn 版权所有 赣ICP备2024042791号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务