当前位置:文档之家› 单片机课程设计 电风扇模拟控制

单片机课程设计 电风扇模拟控制

信息工程学院课程设计报告设计题目: 电风扇模拟控制系统名称: 电子信息专业基础课程设计班级: 电子1101班姓名: 王强刘绘明学号: ********** **********设计时间: 2013.12.23 至2014.01.05****: ***评语:评阅成绩: 评阅教师:目录一、课程设计的性质和目的 (3)二、课程设计的要求 (3)三、主要仪器设备及软件 (3)1、Keil软件简介 (3)2、Proteus绘图软件简介 (3)四、课程设计题目及要求 (3)五、课题分析及设计思路 (4)1、设计主要内容 (4)2、AT89C51单片机简介 (4)3、ULN2003简介 (5)4、直流电机简介 (6)5、数码管简介 (6)6、硬件设计框图 (7)7、硬件设计电路图 (7)8、单片机控制直流电机流程图 (8)9、软件仿真 (8)六、程序主要代码与分析 (9)七、实验结果截图 (12)八、心得体会 (13)一、课程设计的性质和目的通过课程设计,进行硬件设计和程序设计的方法和技能训练,巩固在课堂上学到的有关软件程序设计和硬件电路设计的基本知识和基本方法,通过具体课题的训练,进一步熟悉汇编语言的结构和使用方法,掌握软硬结合的控制程序设计,达到能独立阅读、查阅资料、编制和调试完善特定功能的目的。

二、课程设计的要求1、遵循硬件设计模块化。

2、要求程序设计结构化。

3、程序简明易懂,多运用输入输出提示,有出错信息及必要的注释。

4、要求程序结构合理,语句使用得当。

5、适当追求编程技巧和程序运行效率。

三、主要仪器设备及软件PC机、Keil软件、Proteus绘图软件及仿真等。

1、Keil软件简介Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。

Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。

Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑理解。

在开发大型软件时更能体现高级语言的优势。

与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优学易用。

用过汇编语言后再使用C来开发,体会更加深刻。

2、Proteus绘图软件简介Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。

是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年又增加了Cortex和DSP系列处理器,并持续增加其他系列处理器模型。

在编译方面,它也支持IAR、Keil和MPLAB等多种编译器。

四、课程设计题目及要求课程设计题目是电风扇模拟控制系统,设计要求是:1、设计3个按键分别控制“自然风”“常风”,“睡眠风”(用直流电机的不同转速进行模拟);2、在数码管上显示按键的区别;3、设计风扇的过热保护,即风扇运行一段时间后,暂停5s。

五、课题分析及设计思路1、设计主要内容本设计以AT89C51单片机为核心,从而建立一个控制系统,实现通过3个按键控制直流电机的不同转速,以达到模拟风扇的“自然风”、“常风”和“睡眠风”三种状态,并在数码管上显示三个数字表示三种状态,同时设计风扇过热保护,运行一段时间后,暂停5S。

2、AT89C51单片机简介AT89C51是一个低功耗,高性能CMOS8位单片机,片内含4kBytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及89C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89C51可为许多嵌入式控制应用系统提供高性价比的解决方案.AT89C51具有如下特点:40个引脚,4k Bytes Flash片内程序存储器,128 bytes的随机存取数据存储器,32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,片内时钟振荡器。

此外,AT89C51设计和配置了振荡频率可为0Hz并可通过软件设置省电模式。

空闲模式下,CPU暂停工作,而RAM定时计数器,串行口,外中断系统可继续工作,掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。

同时该芯片还具有PDIP、TQFP和PLCC等三种封装形式,以适应不同产品的需求。

AT89C51单片机的基本结构和外部引脚如下图所示。

图2.13、ULN2003简介在自动化密集的的场合会有很多被控元件如继电器,微型电机,风机,电磁阀,空调,水处理等元件及设备,这些设备通常由CPU所集中控制,由于控制系统不能直接驱动被控元件,这需要由功率电路来扩展输出电流以满足被控元件的电流,电压。

ULN2XXXX高压大电流达林顿晶体管阵列系列产品就属于这类可控大功率器件,由于这类器件功能强、应用范围语广。

因此,许多公司都生产高压大电流达林顿晶体管阵列产品,从而形成了各种系列产品。

原理:ULN2003也是一个7路反向器电路,即当输入端为高电平时ULN2003输出端为低电平,当输入端为低电平时ULN2003输出端为高电平,继电器得电吸合。

如下图所示图3.1ULN2003A在各种控制电路中常用它作为驱动继电器的芯片,其芯片内部做了一个消线圈反电动势的二极管。

ULN2003的输出端允许通过IC 电流200mA,饱和压降VCE 约1V左右,耐压BVCEO 约为36V。

输出电流大,故可以直接驱动继电器或固体继电器(SSR)等外接控制器件,也可直接驱动低压灯泡。

本实验中,ULN2003A用于驱动直流电机。

4、直流电机简介直流马达指能将直流电能和机械能相互转换的电机。

应用:电动自行车,电脑风扇、抽水机、吹风机、甩干机和压缩机、跑步机、电动车、汽车方向盘驱动、电梯、DVD的驱动、大型轧钢设备、大型精密机床、矿井卷扬机、市内电车、电缆设备、测速电机等。

直流马达可分为机壳、定子和转子组成。

直流电机运行时静止不动的部分称为定子,定子的主要作用是产生磁场,运行时转动的部分称为转子,其主要作用是产生电磁转矩和感应电动势,是直流电机进行能量转换的枢纽(电枢)。

5、数码管显示数码管内部由七个条形发光二极管和一个小圆点发光二极管组成,根据各管的亮暗组合成字符。

常见数码管有10根管脚。

管脚排列如下图所示。

其中COM 为公共端,根据内部发光二极管的接线形式可分为共阴极和共阳极两种。

使用时,共阴极数码管公共端接地,共阳极数码管公共端接电源。

每段发光二极管需5~10mA的驱动电流才能正常发光,一般需加限流电阻控制电流的大小。

LED数码管的a~g七个发光二极管。

加正电压的发光,加零电光,不同亮暗组合就能形成不同的字形,这种组合称为字形码。

图5.16、硬件设计框图图6.17、硬件设计电路图本电路由AT89C51和ULN2003A为核心。

图7.18、单片机控制直流电机流程图主程序定位图8.19、软件仿真(1)、把程序在Keil uVision3中调试,成功无错误后生成Hex文件。

(2)、根据电路图在proteus软件中回去电路图,检查无错误。

(3)、双击89C51导入生成Hex文件。

(4)、点击proteus软件左下方的开始键,进行仿真,观察高低电平情况。

六、程序主要代码与分析#include<reg51.h> //包含reg51.h的头文件#define OUTPUT P1 //定义输出端口P1#define SEG P0 //定义SEG位置sbit BUTTON1=P2^0; //声明开关1sbit BUTTON2=P2^1; //声明开关2sbit BUTTON3=P2^2; // 声明开关3unsigned char steps=20; //定义20步unsigned int times1=50; //声明开关1的延时时间(×5ms)unsigned int times2=100;unsigned int times3=150;/*1相激励信号数组*/char code excite[]={0x01,0x02,0x04,0x08};char code TAB[3]={0xf9, 0xa4, 0xb0}; //声明数码管的值void step_rst(void); //声明定位函数void delay5ms(int); //声明延迟函数void debouncer(void); //声明去抖函数//=====主程序========================================main() //主程序{ unsigned char i; //声明无符号变量iOUTPUT=0; //输出step_rst();P2=0xff; //设置输入口while(1) //while循环开始{ if (BUTTON1==0) //如果开关1按下{ debouncer(); //去抖SEG=TAB[0]; //数码管显示1(正常风)for(i=0;i<steps;i++) //20步{ OUTPUT=excite[3-i%4];delay5ms(times1);if(i==19){OUTPUT=0; //输出为0,开始延时delay5ms(1000);} //延时5000ms}}else if (BUTTON2==0) //若开关2被按下{ debouncer(); //去抖SEG=TAB[1]; / /数码管显示2for(i=0;i<steps;i++){ OUTPUT=excite[3-i%4]; //控制正转delay5ms(times2); //延时if(i==19){OUTPUT=0;delay5ms(1000);}}}else if (BUTTON3==0) //若按下开关3 { debouncer(); //去抖SEG=TAB[2]; //数码管显示3for(i=0;i<steps;i++){ OUTPUT=excite[3-i%4];delay5ms(times3);if(i==19){OUTPUT=0;delay5ms(1000);}}}}}//====延迟函数============================================== void delay5ms(int x) //延时函数开始{int i,j; //声明整型变量i,jfor(i=0;i<x;i++) //计数x次,延迟约x×5msfor(j=0;j<600;j++); //计数约600次,延迟约5ms}//========去抖函数========================================== void debouncer(void) //声明去抖函数{delay5ms(4); //延时20ms}//======定位函数============================================ void step_rst(void) //声明定位函数{char i; //声明变量ifor(i=0;i<4;i++){ OUTPUT=excite[i];delay5ms(100); //延时500ms}}七、实验结果截图(1)、按键1按下,数码管显示1,自然风。

相关主题