电风扇模拟控制系统分析.docx
《电风扇模拟控制系统分析.docx》由会员分享,可在线阅读,更多相关《电风扇模拟控制系统分析.docx(18页珍藏版)》请在冰豆网上搜索。
电风扇模拟控制系统分析
单片机技术课程设计
题目风扇模拟控制系统
院系轨道交通学院
专业铁道信号年级2013级
学生姓名张三李四王五
学号
指导教师罗世民
需求书
题目十一:
电风扇模拟控制系统设计★★
1.用4个LED显示电风扇的工作状态(1,2,3,4四档风力),显示风类:
“自然风”、“常风”和“睡眠风”。
(20分)
2.设计“自然风”、“常风”和“睡眠风”三个风类键用于设置风类;
设计一个“摇头”键用于控制电机摇头。
(20分)
3.设计一个“定时”键,用于定时时间长短设置;(20分)
4*.设计过热检测与保护电路,若电风扇电机过热,则电机停止转动,蜂鸣器报警,电机冷却后电机又恢复转动。
5*.用LCD作为用户界面显示风扇运行模式等信息。
6@.其他功能(创新部分10分)
电风扇模拟控制系统设计
通信工程专业
学生张三李四王五指导教师简磊
【摘要】本设计以直流电机控制为基础,基于传感器技术,以单片机控制技术为核心,实现电风扇的智能控制,同时设计采用轻触开关即可具有电风扇的调档功能。
使用集成电路LM298N完成电风扇的驱动设计,通过单片机STC89C52的定时器0以及定时器1产生不同占空比的PWM波形控制电风扇电机驱动芯片从而改变电风扇电机的输入电流,最终实现电风扇电机转速调节功能,使得设计更加人性化,更加环保节能。
【关键词】调速功能单片机测温智能控制
摘要Ⅰ
引言Ⅲ
引言
单片机原理应用广泛根据单片机原理及应用课程的要求,主要进行两个方面的设计,即单片机最小系统和存储器扩展设计、接口技术应用设计。
其中,单片机最小系统主要要求学生熟悉单片机的内部结构和引脚功能、引脚的使用、复位电路、时钟电路、4个并行接口和一个串行接口的实际应用,从而可构成最小应用系统,并编程进行简单使用。
电风扇模拟控制系统具有电路简单、成本较低、操作方便、灵敏可靠等优点,经使用效果良好, 具有较高的推广价值,在很多领域都有广泛的应用。
本文设计出以STC89S52单片机为核心的电风扇模拟控制系统,采用了LCD1206直接指示,显示状态,并自动复位的设计思想,它能根据按键输入的信号,经过单片机的控制处理并产生不同的与输入信号相对应的输出信号,最后通过LCD1206显示相应的状态,分别显示当前电机实时温度以及当前风力,充分利用了单片机系统结构简单、功能强大、可靠性好、实用性强的特点。
一、方案设计
1.1简介
本人首先设计了硬件电路,硬件电路充分体现了模块化的思想,主要由以下几个模块组成,
1、STC89C52单片机最小系统;
2、按键模块:
共六个按键,三个控制风力的大小,两个控制电机的摇头以及睡眠定时功能;
3、LED指示灯模块:
共四个绿色LED指示灯,分别指示风扇电机运行状态,自然风(naturalwild),常风(ordinarywind),睡眠风(sleepwind),无风(nowind)
4、电机温度实时测量模块:
本系统采用DS18B20测量电机实时温度
5、电机驱动模块:
本系统采用LM298N集成驱动芯片驱动电机转动
6、LCD显示模块:
本系统采用LCD1206模块显示电风扇实时状态
1.2课程设计目的
(1)综合所学的单片机原理及接口技术等课程的理论知识完成本课程设计;
(2)学习并掌握基本电路设计与使用方法,单片机的编程与应用方法;
(3)提高综合分析、解决实际问题的能力。
1.3任务和要求
本设计以STC89C52处理器为核心,单片机作为外围检测与控制电路设计实现智能家居系统。
其中单片机系统通过传感器检测到相关信息,向嵌入式平台发送相对应的信息,嵌入式平台做出相应判断与处理,并同时通过网络告知主人与物管人员做出相应处理,以保证业主的财产人身安全。
本设计主要设计指标:
(1)按键输入模块,4个按键分别调整“睡眠风”,“自然风”,“常风”,“无风”
2个按键分别控制“摇头”“定时”;
(2)直流电机转速控制,通过LM298N芯片驱动;
(3)当前转速显示、当前电机温度显示,状态在LCD上显示。
二、硬件电路
2.1电路系统框图
2.2STC89C52RC最小系统
2.3按键模块
TIMEBUTTON:
定时按钮
SHAKEBUTTON:
摇头按钮
NATURALWIND 自然风按钮
ORDINARYWIND常风按钮
SLEEP WIND睡眠风按钮
2.4LED指示灯模块
NATURALWIND自然风指示灯
ORDINARYWIND常风指示灯
SLEEPWIND睡眠风指示灯
NO WIND无风指示灯
2.5电机温度实时测量模块
采用DS18B20测量电机实时温度
2.6电机驱动模块
采用LM298N驱动芯片驱动两个直流电机
2.7LCD显示模块
采用LCD1206输出显示当前状态
2.8蜂鸣器报警模块
三、软件程序
3.1主函数程序流程图
3.2按键模块驱动程序
#include"head_file.h"
sbitNatural_wind_button=P2^0;
sbitOrdinary_wind_button=P2^1;
sbitSleep_wind_button=P2^2;
sbitTime_button=P3^6;
sbitShake_button=P3^7;
voidBUTTON_Config()
{
Natural_wind_button=1;
Ordinary_wind_button=1;
Sleep_wind_button=1;
Time_button=1;
Shake_button=1;
}
3.3LED指示灯驱动程序
#include"head_file.h"
sbitNatural_wind_LED=P2^3;
sbitOrdinary_wind_LED=P2^4;
sbitSleep_wind_LED=P2^5;
sbitNO_Wind_LED=P2^6;
sbitBuzzer=P0^3;
voidGUIDE_Led_Config()
{
Natural_wind_LED=1;
Ordinary_wind_LED=1;
Sleep_wind_LED=1;
NO_Wind_LED=0;//ÎÞ·çָʾµÆÁÁ
Buzzer=0;//·äÃùÆ÷¾²Ä¬
}
3.4电机测温驱动程序
#include"head_file.h"
sbitdq=P2^7;
voidsdelay(uinti)
{
while(i--);
}
voidDS18B20_Reset()
{
ucharx=0;
dq=1;
sdelay(8);
dq=0;
sdelay(80);
dq=1;
sdelay(14);
sdelay(20);
}
voidDS18B20_Write_Byte(uchardat)
{
uchari=0;
for(i=8;i>0;i--)
{
dq=0;
dq=dat&0x01;
sdelay(5);
dq=1;
dat>>=1;
}
}
ucharDS18B20_Read_Byte()
{
uchari=0,dat=0;
for(i=8;i>0;i--)
{
dq=0;
dat>>=1;
dq=1;
if(dq)
dat|=0x80;
sdelay(4);
}
return(dat);
}
uintGET_Temperature()
{
uchara=0,b=0;
uintt=0;
floattt=0;
DS18B20_Reset();
DS18B20_Write_Byte(0xCC);//Ìø¹ýROM
DS18B20_Write_Byte(0x44);//¿ªÆôζÈת»»
DS18B20_Reset();
DS18B20_Write_Byte(0xCC);
DS18B20_Write_Byte(0xBE);//¶ÁÔÝ´æÆ÷
a=DS18B20_Read_Byte();
b=DS18B20_Read_Byte();
t=b;
t<<=8;
t=t|a;
tt=t*0.0625;
t=tt*10+0.5;
return(t);
}
3.5电机驱动驱动程序
#include"head_file.h"
uchart0,add0;
uchart1,add1;
sbitEN0=P3^4;
sbitEN1=P3^5;
sbitIN0=P3^0;
sbitIN1=P3^1;
sbitIN2=P3^2;
sbitIN3=P3^3;
voidL298_Config()
{
t0=50;
t1=50;
IN0=0;
IN1=1;
IN2=0;
IN3=1;
}
voidTIM_Config()
{
TMOD=0x11;
TH0=(65536-50000)/256;;
TL0=(65536-50000)%256;;
ET0=1;
TR0=1;
TH1=(65536-50000)/256;;
TL1=(65536-50000)%256;;
ET1=1;
TR1=1;
EA=1;
}
voidTIM0()interrupt1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
if(add0==100)
{
add0=0;
EN0=1;
}
if(add0==t0)
{
EN0=0;
}
add0++;
}
voidTIM1()interrupt3
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
if(add1==100)
{
add1=0;
EN1=1;
}
if(add1==t1)
{
EN1=0;
}
add1++;
}
3.6LCD显示驱动程序
#include"head_file.h"
ucharcodetable[]="temperature27'c";//ÏÔʾµÄ×Öĸ
ucharcodetable1[]="statusNOWind";
sbitlcdrs=P0^0;//¼Ä´æÆ÷Ñ¡ÔñÒý½Å
sbitlcdwr=P0^1;//¶ÁдÒý½Å
sbitlcde=P0^2;//ƬѡÒý½Å
voidLCD1206_config()
{
uchari;//¶¨Òå¾Ö²¿±äÁ¿
init();
write_com(0x80);//Ö¸ÕëµÄλÖÃ
for(i=0;i<16;i++)//ÏÔʾ
{
write_dat(table[i]);
delay(50);//ÑÓʱ£¬ÓÃÓÚµ÷½ÚËٶȲ»Æ¥Åä
}
write_com(0x80+0x40);
for(i=0;i<16;i++)
{
write_dat(table1[i]);
delay(50);
}
}
/****************ÑÓʱ×Óº¯Êý********************/
voiddelay(ucharx)
{
uchari,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
/****************дָÁî×Óº¯Êý********************/
voidwrite_com(ucharcom)
{//¸ù¾Ý1602Òº¾§ÏÔʾÆ÷ÐÒé±àд
P1=com;
lcde=0;
lcdrs=0;
lcdwr=0;
delay(5);
lcde=1;
delay(5);
lcde=0;
}
/*****************дÊý¾Ý×Óº¯Êý********************/
voidwrite_dat(uchardat)
{
P1=dat;
lcde=0;
lcdrs=1;
lcdwr=0;
delay(5);
lcde=1;
delay(5);
lcde=0;
}
/*****************³õʼ»¯×Óº¯Êý********************/
voidinit()
{
write_com(0x01);//ÇåÆÁ
write_com(0x3f);//¹¦ÄÜÉèÖÃ
write_com(0x0f);//ÏÔʾ¿ØÖÆ
write_com(0x06);//ÊäÈ뷽ʽÉèÖÃ
}
四、调试结果
五、小结
在将近一周的单片机课程设计,终于完成了电风扇模拟控制系统的设计,虽然没有完全达到设计要求,但还是收获良多。
通过这次课程设计,使我更进一步地熟悉了单片机芯片的工作原理和其具体的使用方法。
单片机课程设计重点就在于软件算法的设计,需要有很巧妙的程序算法,这锻炼了自己独立思考问题的能力和通过查看相关资料来解决问题的习惯。
还有了解了课程设计的一般步骤,和设计中应注意的问题。
课程设计是需要我们每个人去用心去做,抓紧学习的机会,通过查阅更多的资料,使得理论与实践相结合,在做模拟仿真的时候,利用自己平时所学到的,以及老师对同学们的指点,就可以在无限的探索中体验求知的快感,当自己做出一个作品时或是仿真实验成功时,总能体会到着劳动成果来之不易。
在课设的同时,不仅锻炼了动手动脑能力,知识面广阔了,感谢自己,同时更感谢辛勤付出的老师。
在此要感谢老师,感谢老师给我这样的机会锻炼。
在整个设计过程中我懂得了许多东西,也培养了我独立学习工作的能力,树立良好的学习心态,虚心求教,相信会对今后的学习工作生活有非常重要的影响。
而且大大提高了动手的能力,使我充分体会到了在创造过程中的探索的艰难和成功的喜悦。
虽然这个项目还有不足之处,但是在设计过程中所学到的东西是这次设计的最大收获和财富,真是受益匪浅。
附录一:
总电路仿真
附录二:
程序清单
Main.c//主函数
Button.c//按键驱动程序
ds18B20.c//ds18b20驱动程序
guide_led.c//led指示灯初始化程序
L298n.c//l298n驱动程序
Lcd1206.c//lcd1206驱动程序
head_file.h//全部头文件声明
附录三:
元件清单
STC89C52RC单片机
1个
轻触开关
6个
绿色LED灯珠
4个
12v直流电机
2个
LM298N芯片
1个
DS18B20传感器
1个
LCD1206
1个
1K贴片电阻
4个
4.7K贴片电阻
1个
100R电阻
2个