单片机课程设计报告完美版

更新时间:2023-05-21 19:32:02 阅读量: 实用文档 文档下载

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

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

江南大学

课程名称:设计题目:班 级:姓 名:指导教师:

物联网工程学院

课程设计报告

单片机原理及应用 基于单片机的步进电机控制器设计 号:

评 分: 2013年 6 月 30 日

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

目录

设计报告要求

1、设计目的 2、设计要求 3、仪器设备

4、硬件线路图及主要芯片说明 5、系统工作原理 6、程序框图 7、程序清单 8、设计体会 9、参考文献

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

设计目的

通过具体小型测试系统设计,实践单片机系统设计及调试的全过程,以加深对单片机内部结构、功能和指令系统的理解,并进一步学习单片机开发系统的应用及一些外围芯片的接口和编程方法,初步掌握单片机系统的硬、软件设计技术及调试技巧。

设计要求

1) 电机转速可以平稳控制

2)通过键盘和显示器可以设置电机的转速 3)显示电机的速度趋势

仪器设备

1、STC89C51单片机芯片 一片 2、ULN2003驱动芯片 一片 3、MT03641BR八位共阳数码管芯片 一片 4、8550PNP 四个 5、不同阻值电阻 若干 6、30pF电容 两个 7、12M晶振 一个 8、按键 四个 9、28BYJ-48电机 一个 10、+5V电源 一个

硬件线路图及主要芯片说明 28BYJ-48四相八拍步进电机

步进电机是一种将电脉冲转化为角位移的执行机构。通俗一点讲:当步进驱动器接收到 一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(及步进角)。您可以通过控制脉冲个来控制角位移量,从而达到准确定位的

主要技术参数

相数:四相 电压:5VDC 电流:92mA 电阻:130Ω 步距角:5.625°

空载牵出频率:800pps

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

空载牵入频率:500pps 减速比:1/64

牵入转矩:≥78.4mN.m

ULN2003

ULN2003是大电流驱动阵列,多用于单片机、智能仪表、PLC、数字量输出卡等控制电路中。可直接驱动继电器等负载。输入5VTTL电平,输出可达500mA/50V。ULN2003是高耐压、大电流达林顿陈列,由七个硅NPN达林顿管组成。 该电路的特点如下: ULN2003的每一对达林顿都串联一个2.7K的基极电阻,在5V的工作电压下它能与TTL和CMOS电路 直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据。ULN2003 是高压大电流达林顿晶体管阵列系列产品,具有电流增益高、工作电压高、温度范围宽、带负载能力强等特点,适应于各类要求高速大功率驱动的系统。

ULN2003芯片引脚图

引脚1:CPU脉冲输入端,端口对应一个信号输出端。 引脚2:CPU脉冲输入端。 引脚3:CPU脉冲输入端。 引脚4:CPU脉冲输入端。 引脚5:CPU脉冲输入端。 引脚6:CPU脉冲输入端。 引脚7:CPU脉冲输入端。 引脚8:接地。

引脚9:该脚是内部7个续流二极管负极的公共端,各二极管的正极分别接各达林顿管的集电极。用于感性负载时,该脚接负载电源正极,实现续流作用。如果该脚接地,实际上就是达林顿管的集电极对地接通。 引脚10:脉冲信号输出端,对应7脚信号输入端。 引脚11:脉冲信号输出端,对应6脚信号输入端。 引脚12:脉冲信号输出端,对应5脚信号输入端。 引脚13:脉冲信号输出端,对应4脚信号输入端。 引脚14:脉冲信号输出端,对应3脚信号输入端。

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

引脚15:脉冲信号输出端,对应2脚信号输入端。

引脚16:脉冲信号输出端,对应1脚信号输入端。

ULN2003的输出端可达500mA/50V. 输出端的二极管学名续流二极管,英文freewheel diode。如果ULN2003的达林顿管输入端输入低电平使其截止,其驱动的元件是感性元件,则电流不能突变,此时会产生一个高压;如果没有二极管,达林顿管会被击穿,所以这个二极管主要起保护作用。 由于ULN2003是集电极开路输出,为了让这个二极管起到续流作用,必须将COM引脚(pin9)接在负载的供电电源上,只有这样才能够形成续流回路。 ULN2003是一个非门电路,包含7个单元,单独每个单元驱动电流最大可达350mA,9脚可以悬空。

STC89C51

89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压、高性能CMOS8位微处理器,俗称单片机。单片机的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU

和闪烁存储器组合在单个芯片中,ATMEL的89C51是一种高效微控制器。89C单片机为很主要特性如下:

(1)增强型1T 流水线/精简指令集结构8051 CPU

(2)工作电压:3.4V-5.5V (5V单片机)/ 2.0V-3.8V (3V 单片机 (3)工作频率范围:0 -35 MHz,相当于普通8051 的0~420MHz.实际工作频率可达48MHz.

(4)用户应用程序空间12K / 10K / 8K / 6K / 4K / 2K字节 (5)片上集成512 字节RAM

(6)通用I/O 口(27/23个),复位后为:准双向口/ 弱上拉(普通8051 传统I/O 口)

可设置成四种模式:准双向口/ 弱上拉,推挽/ 强上拉,仅为输入/高阻,开漏

每个I/O 口驱动能力均可达到20mA,但整个芯片最大不得超过

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

55mA

(7)ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器 可通过串口(P3.0/P3.1)直接下载用户程序,数秒即可完成一片 (8)EEPROM 功能 (9)看门狗

(10)内部集成MAX810 专用复位电路(外部晶体20M 以下时,可省外部复位电路)

(11)时钟源:外部高精度晶体/ 时钟,内部R/C 振荡器。用户在下载用户程序时,可选择是使用内部R/C 振荡器还是外部晶体/ 时钟。常温下内部R/C 振荡器频率为:5.2MHz ~6.8MHz。精度要求不高时,可选择使用内部时钟,因为有温漂,请选4MHz ~8MHz

(12)有2个16 位定时器/ 计数器

(13)外部中断2 路,下降沿中断或低电平触发中断,Power Down 模式可由外部中断低电平触发中断方式唤醒

(14)PWM( 4 路)/ P C A(可编程计数器阵列),也可用来再实现4

个定时器或4个外部中断(上升沿中断/ 下降沿中断均可支持)

(15)STC89Cc516AD具有ADC功能。10 位精度ADC,共8 路 (16)通用异步串行口(UART)

(17)SPI同步通信口,主模式/ 从模式 (18)工作温度范围:0 -75℃/ -40 -+85℃ (19)封装:PDIP-28

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

STC89C51芯片引脚图

MT03641BR八位共阳数码管

主要参数

工作电压:2V

工作电流:5—10mA 数码管显示原理

数码管动态显示介面是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp "的同名端连在一起,另外

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

为每个数码管的公共极COM增加位元选通控制电路,位元选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位元选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位元就显示出字形,没有选通的数码管就不会亮。透过分时轮流控制各个LED数码管的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位元数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极体的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示资料,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O口,而且功耗更低。

硬件线路图

本程序包括按键处理程序、显示处理程序、中断处理程序、数据处理程序四个主要部分

根据表中所给的段码,只需要送入相应的数码管即可。

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

按键处理程序

按键处理安排在主程序当中,使其处于不断检测状态,当有按键按下能够及时对其进行相应的处理。同时,对于按键还应该进行消抖处理,避免系统误动作。

中断处理程序

中断程序中安排对P1口赋值及对定时器重新装入初值,每次进入中断程序时,先判断是否执行反转,如是,则送反转编码,否则,送正转编码。 显示处理程序

显示程序则通过对相应数码管的通断,然后送段码。以这种方式来控制其动态显示,同时需要主要每个数码管都应该延时亮一段时间。并且要对其消隐。以获得较好的显示效果。 数据处理程序

通过对数据进行处理来获得电机的转速,可以先计算出1ms时电机的

系统基本框架

根据以上四个主要部分来把整个系统划分成相应模块,有利于提高系统的抗干扰能力。能较好的保证系统运行的可靠。

程序框图

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

程序清单

/* 本程序采用STC89C51单片机,以3641八位共阳数码管显示步进

电机的转速

趋势,步进电机采用28BYJ-48DC5V型号(采用四相八拍方式),采用ULN2003驱

动,数码管则直接采用PNP三极管驱动,电机的调节则通过按键控制 */ #include<reg52.h> //头文件 #define uint unsigned int //宏定义

#define uchar unsigned char //宏定义

uchar code ZF[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09}; //正转编码表

uchar code FF[8]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01}; //反转编码表

uchar code SM[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //数码表

sbit k1=P3^2; //定义K1为启动/停止按键 sbit k2=P3^3; //定义K2为加速按键

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

sbit k3=P3^4; //定义K3为减速按键 sbit k4=P3^5; //定义K4为正/反转按键 uchar j=0;

uint time=12000; //time为每两拍之间的间隔时间 uint temp2;

uchar temp1,h,w,p,q,f;

/*1ms延时函数(12M晶振下)*/ void delay(uchar z) {

uchar s,v;

for(s=0;s<z;s++) for(v=0;v<125;v++) ; //一个for循环8个机器周期(125*8*1us=1ms) }

/*显示函数*/

void display(uchar a,uchar b,uchar c,uchar d) { if(f%2) {P2=0xfe; P0=0xbf; //f为奇数时代表反转,则第一个数码管显示“-”,否则不显示 delay(1); P0=0xff;} //消隐 P2=0xfd; P0=SM[a]; //显示十位 delay(1); P0=0xff; //消隐 P2=0xfb; P0=SM[b]&0x7f; //显示个位(带小数点) delay(1); P0=0xff; //消隐 P2=0xf7; P0=SM[c]; //显示小数点后第一位小数 delay(1); P0=0xff; //消隐 P2=0xef; P0=SM[d]; //显示小数点后第二位小数 delay(1); P0=0xff; //消隐

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

}

/*数值处理函数*/ void dispose() {

temp1=14648/time; h=temp1/10; //十位 w=temp1%10; //个位 temp2=14648%time; p=temp2/1000; // 小数点后第一位小数 q=temp2%1000*10/1000; // 小数点后第二位小数 }

/*主函数*/ void main() {

uchar k;

TMOD=0x01;//定义定时器0工作方式1 EA=1; // 开总中断

ET0=1; // 开定时器0中断 TH0=(65536-time)/256;

TL0=(65536-time)%256; //装定时器初值 TR0=1; //开定时器0 while(1) {

if(k1==0){delay(5); //延时消抖 if(k1==0){TR0=~TR0;k++;} //启动/停止 }while(!k1); // 等待按键释放 if(k2==0){delay(5); //延时消抖 if(k2==0)time=time-150;} // 加速 while(!k2); // 等待按键释放 if(k3==0){delay(5); //延时消抖 if(k3==0)time=time+150;} //减速 while(!k3);// 等待按键释放 if(k4==0){delay(5); //延时消抖 if(k4==0)f++;} // 正/反转 while(!k4);// 等待按键释放 dispose(); if(k%2) display(0,0,0,0); //停止时显示00.00

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

else display(h,w,p,q);//正常运转时调用显示函数 } }

/*定时器0中断处理函数*/ void timer0()interrupt 1 { if(f%2){P1=FF[j++];if(j==8)j=0;} // f为奇数时代表反转,则送反转编码到P1口 else {P1=ZF[j++];if(j==8)j=0;} // 否则送正转编码到P1口 TH0=(65536-time)/256; TL0=(65536-time)%256; //重新装初值 }

设计体会

这次课程设计让我受益匪浅,无论从知识上还是其他的各个方面。上课的时候的学习从来没有见过真正的单片机,只是从理论的角度去理解枯燥乏味。但在实习中见过甚至使用了单片机及其系统,能够理论联系实际的学习,开阔了眼界,提高了单片机知识的理解和水平。在这次课程设计中又让我体会到了合作与团结的力量,当遇到不会或是设计不出来的地方,我们就会在QQ群里讨论或者是同学之间相互帮助。团结就是力量,无论在现在的学习中还是在以后的工作中,团结都是至关重要的,有了团结会有更多的理念、更多的思维、更多的情感。

通过这次课程设计使我对单片机的c语言编程能力有了进一步的提高,同时也对硬件电路的设计有了更好的掌握,对keil软件运用也更加熟练.。在设计过程中遇到了各种的困难都通过了和同学讨论和查阅书本都得到了解决。通过这次课程设计我对单片机有个更深的了解,同时也增加了我的学习热情,我对未来充满希望。最后感谢老师对我们的精心指导和帮助,感谢同学们对我的帮助。

参考文献

【1】张家生. 电机原理与拖动基础【M】. 北京:北京邮电大学出版社,2006. 【2】马淑华,王凤文,张美金. 单片机原理与接口技术【M】.北京:北京

邮电大学出版社,2007.

【3】顾德英,张健,马淑华.计算机控制技术【M】. 北京:北京邮电大学

出版社,2006.

【4】华成英,童诗白. 模拟电子技术基础【M】. 北京:高等教育出版社,

2008

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

Top