单片机课程设计步进电机.docx

上传人:b****2 文档编号:1970413 上传时间:2022-10-25 格式:DOCX 页数:14 大小:239.66KB
下载 相关 举报
单片机课程设计步进电机.docx_第1页
第1页 / 共14页
单片机课程设计步进电机.docx_第2页
第2页 / 共14页
单片机课程设计步进电机.docx_第3页
第3页 / 共14页
单片机课程设计步进电机.docx_第4页
第4页 / 共14页
单片机课程设计步进电机.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

单片机课程设计步进电机.docx

《单片机课程设计步进电机.docx》由会员分享,可在线阅读,更多相关《单片机课程设计步进电机.docx(14页珍藏版)》请在冰豆网上搜索。

单片机课程设计步进电机.docx

单片机课程设计步进电机

江南大学

物联网工程学院

课程设计报告

 

课程名称:

单片机原理及应用

设计题目:

基于单片机的步进电机控制器设计

班级:

姓名:

学号:

指导教师:

评分:

 

年月日

 

基于单片机的步进电机控制器设计

摘要:

本设计是用80C52单片机作为核心部件进行逻辑控制及信号产生,用单片机技术和C语言编程设计来进行步进电机的控制。

通过人手动按开关实现步进电机的启动与停止、步进电机的正转反转,加速及减速等功能,此外还有LCD数码管进行实时显示功能。

同时本文也通过了proteus软件的仿真,在仿真结果中能看出近似真实的效果。

经过proteus仿真,结果表明,系统实现了要求。

该系统电路简单,可靠性强,运行稳定。

关键词:

步进电机单片机LCDproteus仿真

1课题主要研究内容和要求

本设计采用单片机80C52来作为整个步进电机控制系统的运动控制核心部件。

所选的步进电机是四相五线的,由于步进电机需要高功率驱动,单片机不能与步进电机直接相连,因此我们需要采用了电机驱动芯片ULN2003连接步进电机和单片机。

为了显示步进电机转速,我用数码管来显示速率。

再加上一些独立按键来实现步进电机调速、改变转向的功能。

这样就构成了一个基本的步进电机控制系统。

系统的具体功能和要求如下:

1、电机转速可以平稳控制;

2、通过键盘和显示器可以设置电机的转速;

3、能显示电机的运动趋势;

2所需仪器设备

所需器件

备注

所需器件

备注

STC89C52单片机

一片

12M晶振

一个

ULN2003驱动芯片

一片

按键

五个

八位共阳数码管芯片

一片

异步电机

一个

不同阻值电阻

若干

+5V电源

一个

30pF电容

两个

3系统总体设计

本设计的硬件电路包括独立按键控制模块、步进电机驱动模块、数码管显示模块和单片机最小系统四部分。

单片机最小系统由时钟电路和复位电路组成,保证单片机正常运行;独立按键控制模块由开关和按键组成,当按下按键时,该系统就按照该按键控制的功能运作;显示模块主要是为了显示电机的工作状态和转速;驱动电路主要是对单片机输出的脉冲进行功率放大,从而驱动电机转动。

由于步进电机受电脉冲控制,因此要求电脉冲信号的产生,放大全部依靠电子元件来实现。

而步进电机需要较大的功率,而电子电路产生的功率较弱,所以必须设计功率放大电路。

此方法步进电机的控制系统包含以下三个部分:

信号产生电路,信号分配电路,功率放大电路。

在单片机的引脚配置中,我选用的是用P0口和P2口控制数码管的显示,其中P0口控制数码管的段,P2口控制数码管的位。

P1.0-P1.3控制电机的驱动,P3.2-P3.5为按键输入。

图1系统设计示意图

4硬件设计

4.1步进电机介绍

步进电机是将电脉冲信号转变为角位移或线位移的开环控制元步进电机件。

在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度,称为“步距角”,它的旋转是以固定的角度一步一步运行的。

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

图2异步电机连线示意图

通常电机的转子为永磁体,当电流流过定子绕组时,定子绕组产生一矢量磁场。

该磁场会带动转子旋转一角度,使得转子的一对磁场方向与定子的磁场方向一致。

当定子的矢量磁场旋转一个角度。

转子也随着该磁场转一个角度。

每输入一个电脉冲,电动机转动一个角度前进一步。

它输出的角位移与输入的脉冲数成正比、转速与脉冲频率成正比。

改变绕组通电的顺序,电机就会反转。

所以可用控制脉冲数量、频率及电动机各相绕组的通电顺序来控制步进电机的转动。

异步电机的控制接线图为图2所示。

步进电机有以下特点:

(1)步进电机的角位移与输入脉冲成正比,没有累计误差。

(2)步进电机与驱动电路组成的系统,简单而又廉价。

(3)易于控制,能快速启动和停止,方便控制方向和转速。

(4)步进电机不能直接使用交流直流电源。

4.2单片机介绍

采用的STC89C52单片机是新一代高速/低功耗/超强抗干扰的单片机,指令代码完全兼容传统8051单片机,12时钟/机器周期和6时钟/机器周期可以任意选择。

其主要特性如下:

(1)增强型8051单片机,6时钟/机器周期和12时钟/机器周期可以任意选择,指令代码完全兼容传统8051.

(2)工作电压:

5.5V~3.3V(5V单片机)/3.8V~2.0V(3V单片机)

(3)工作频率范围:

0~40MHz,相当于普通8051的0~80MHz,实际工作频率可达48MHz

(4)用户应用程序空间为8K字节

(5)片上集成512字节RAM

(6)P1/P2/P3/P4是准双向口/弱上拉,P0口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为I/O口用时,需加上拉电阻。

(7)ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器,可通过串口(RxD/P3.0,TxD/P3.1)直接下载用户程序,数秒即可完成一片

(8)具有EEPROM功能

(9)具有看门狗功能

(10)共3个16位定时器/计数器。

即定时器T0、T1、T2

(11)外部中断4路,下降沿中断或低电平触发电路,PowerDown模式可由外部中断低电平触发中断方式唤醒

(12)通用异步串行口(UART),还可用定时器软件实现多个UART

图3STC89C52芯片引脚图

4.3单片机最小系统

单片机的最小系统一般由时钟电路和复位电路构成。

通过时钟电路提供单片机各种微操作基准,通过复位电路使单片机片内存储器初始化。

由图4可以看出,时钟电路是在引脚XTAL1和XTAL2外部接一个十二兆的晶振,同时在晶振的两脚分别接了30pF的电容。

晶振的作用是产生震荡时钟脉冲。

电容起稳定震荡频率,快速起震的作用。

复位电路使由独立按键,10k欧电阻和一个10Uf的电容构成。

复位电路使单片机从一种确定的状态开始运行。

图4单片机最小系统示意图

4.4电机驱动设计

本次设计用ULN2003来驱动步进电机,电路图如图2所示。

通过单片机的P1.0~P1.3输出脉冲到ULN2003的1B~4B口,信号放大后从1C~4C出口分别输出到电机的ABCD四相。

ULN2003输入只需要5V的电平,但是输出可以高达50V,因此它具有工作电压高,电路增益高,可以提供大功率负载的特点,适应于各种功率驱动电路。

图5所示为ULN2003的引脚示意图。

图5ULN2003引脚图

4.5显示电路设计

为了能看出步进电机的转速,我们用显示电路的数码管显示电机的速度,主要是利用了单片机的P0口接一个两位的共阳极数码管。

数码管a、b、c、d、e、f、g、dp分别接P0.0~P0.7口.数码管的公共角3,4分别接p2.2,p2.3。

同时为了看出显示出电机的正反转,利用数码管来显示出电机的转动,同电机转速一样,利用单片机的P0口接一个共阳极数码管。

数码管a、b、c、d、e、f、g、dp分别接P0.0~P0.7口。

数码管的公共角1分别接p2.0。

数码管部分的连接电路图如图6所示。

图6数码管连接图

4.6总体设计电路

把各个部分的电路图组合成总电路图,如下图所示:

图7总体设计电路图

5软件部分

5.1主程序

通过上述的分析我们发现要实现系统的功能,我们要设计一下几个模块程序:

主程序,延时程序,按键子程序,数码管显示程序。

为了实现操作灵活性,随时可以加速减速,我们采用定时器中断。

当通电后,单片机首先检测正反转键是否按下,然后检测加减速按键是否也按下,同时数码管显示速度等级。

当按一下正转或者反转按键时候,电机开始转动。

按下停止键电机立马停止转动。

进入主程序显示初始化状态,主程序由键盘程序、显示程序、步进电机驱动程序三部分组成,主程序首先初始化各变量,步进电机驱动的各引脚均输出高电平,然后调用键盘程序,并作判断,有键按下,则调用键盘程序,并显示出状态。

当我们给系统供入5V电压时,由复位电路给系统进行初始化。

然后便开始执行按键查询等待相应的操作,当有按键按下的时,程序便调用并执行相应的子程序,下图为主流程图:

图8主程序框图

5.2显示子程序

转速的显示是给用户最直观的概念,知道电机的转的快慢,知道电机当前的转速,而需要怎样的速度,再对它进行加减速。

而这个显示是调用显示子程序。

显示程序则通过对相应数码管的通断,然后送段码。

以这种方式来控制其动态显示,同时需要主要每个数码管都应该延时亮一段时间。

并且要对其消隐。

以获得较好的显示效果。

具体流程图如图9

图9显示子程序框图

5.3详细程序

#include

#defineucharunsignedchar

#defineuintunsignedint

unsignedcharcodetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//0~9代码

unsignedcharcodetable1[]={0x03,0x06,0x0c,0x09};//正转

unsignedcharcodetable2[]={0x09,0x0c,0x06,0x03};//反转

uintmaichong;

ucharspeed;

ucharflag;

sbitkey_reset=P3^0;

sbitkey_z=P3^1;

sbitkey_f=P3^2;

sbitkey_jia=P3^3;

sbitkey_jian=P3^4;

voiddelay(ucharx)//延时

{uchari,j;

for(i=0;i

for(j=100;j>0;j--);}

voidreset(void)

{flag=2;

speed=0;}

voiddisplay()

{

ucharA1,A2,A3,A4;

if(flag==0)

A1=0xc0;//显示0

elseif(flag==1)

A1=0xf9;//显示1

else

A1=0x3f;//显示—

A2=0x3f;

A3=speed/10;

A4=speed%10;

P0=A1;//第一个数码管显示正反转

P2=0x01;

delay

(1);

P2=0x00;

P0=A2;//第二个自定义显示—

P2=0x02;

delay

(1);

P2=0x00;

P0=table[A3];//第三个显示转速等级十位

P2=0x04;

delay

(1);

P2=0x00;

P0=table[A4];//第四个显示转速等级个位

P2=0x08;

delay

(1);

P2=0x00;

}

voidkey()//按键判断

{

if(key_reset==0)

{

delay(5);

if(key_reset==0)

reset();}

if(key_z==0)

{

delay(5);

if(key_z==0)

{flag=0;speed=10;

while(key_z==0);}}

if(key_f==0)

{

delay(5);

if(key_f==0)

{

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1