基于单片机的步进电机控制器设计(八按键) 下载本文

内容发布更新时间 : 2024/5/9 3:29:20星期一 下面是文章的全部内容请认真阅读。

4系统软件设计

4.1软件设计分析

本次采用的步进电机是五相四线的,根据所查该电机的工作参数我们可以看出它的工作电压时+5V,因此我们可以直接把他正极与单片机正极相连,供5v的电压。由总体的电路图我们可以看出步进电机的四个接口与ULN2003相接。ULN2003与单片机P1口相连。单片机P0口接一个四位共阳极数码管。

通过上述的分析我们发现要实现系统的功能,我们要设计一下几个模块程序:主程序,延时程序,按键子程序,数码管显示程序。当通电后,单片机首先检测控制方式选择按键,然后检测正反转键是否按下,并在数码管上有所显示,并以设定的速度运行着电动机,然后检测加减速按键是否也按下,数码管实时跟随显示速度。按下停止键电机立马停止转动。

4.2主程序设计

当我们给系统供入5V电压时,由复位电路给系统进行初始化。然后便开始执行按键查询等待相应的操作,当有按键按下的时,程序便调用并执行相应的子程序,下图为主流程图:

按键子程序:

1、延时子程序:在本延时子程序当中每调用一次延时子程序延时时间是1毫秒。

2、按键响应子函数:在本设计当中按键的一端接地,另一端接单片机的对应端口,所以当按键按下,既是将单片机对应端口电平拉低。所以在编程的时候判断按键按下是低电平有效。如下图为电机增速和减速的子程序框图。

5仿真与调试

5.1 仿真调试的操作步骤

本次采用的仿真软件是proteus,采用的编程工具是keil。具体操作如下: 1)在Protues中画出系统电路图 2)编写程序并在keil中编译并生成hex文件。

3)把在keil中编译生成的HEX文件载入AT89C52芯片中;

4)运行仿真。

5.2 仿真结果 仿真结果如下图所示:

当点下proteus的play键时候,此时数码管显示速度为零,电机不转。

当按下启动按键时,接着进入控制方式选择阶段,选择完成后,接着判断正反转控制按键,如图显示为反转,初始速度设置为10,第一位的1表示电机反转,若电机正转则显示为0.

接下来如果再控制加减按键,可以实现对电机速度的调节,并在数码管有个直观的转速显示。本程序设计对速度有所限制,最大为20,最小为0,当减速到0时电机停止转动并复位,结果如图所 示。

总结

经过学习和努力,本次设计终于完成了,从当中我学到了很多东西。

1、我进一步了解了单片机的工作原理,掌握了步进电机控制系统的组成原理。通过本次的设计和调试,我补充和巩固了自己已学的电子理论知识,同时也提高了动手和排除故障能力。

2、我了解了步进电机的发展,工作原理和控制方式。步进电机应用于生活和工业中的各个方向,使我对步进电机的兴趣越来越大。

3、本次课程设计我查阅大量书籍、专业网站、论坛等,通过反复对比,采用了功能相对强大,设计相对简单的设计方法。通过与其他人设计的对比,我学到了很多东西,找到了自己设计方案的优缺点。

应该说本次设计还是基本达到了设计的要求,通过独立按键我们可以很方便的控制电机的正反转加速和减速。通过一个两位数码管我们可以清楚的看到步进电机转动的速度。该系统的优点就是

设计简单,操作方便,并在模拟仿真中直观显示电机的正反转。

在这次课程设计中,发现了自己知识面的欠缺,深刻的体会到学习永无止境,在以后的学习和工作中要时刻鞭策自己,不要懈怠,永远走在学习的路上。

C语言编程源码:

#include #define uchar unsigned char

#define uint unsigned int

unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; uchar code motorCode[]={0x02,0x04,0x08,0x01};//单拍 uchar code unmotorCode[]={0x08,0x04,0x02,0x01}; uchar code motorCode1[]={0x03,0x06,0x0c,0x09};//双拍 uchar code unmotorCode1[]={0x09,0x0c,0x06,0x03};

uchar code motorCode2[]={0x02,0x06,0x04,0x0c,0x08,0x09,0x01,0x03};//单双 uchar code unmotorCode2[]={0x03,0x01,0x09,0x08,0x0c,0x04,0x06,0x02}; uint maichong; uchar speed; uchar flag; uchar style; sbit key_reset=P3^0; sbit key_z=P3^1; sbit key_f=P3^2; sbit key_jia=P3^3; sbit key_jian=P3^4; sbit key_dan=P3^5; sbit key_shuang=P3^6; sbit key_hun=P3^7; void delay(uchar x)//延时 { uchar i,j; for(i=0;i

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

void reset(void) {flag=2; speed=0; style=0;} void display()

{

uchar A1,A2,A3,A4; if(flag==0) A1=0xc0; //显示0

//0~9代码