CPU智能散热监控系统设计Word文件下载.docx
《CPU智能散热监控系统设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《CPU智能散热监控系统设计Word文件下载.docx(50页珍藏版)》请在冰点文库上搜索。
![CPU智能散热监控系统设计Word文件下载.docx](https://file1.bingdoc.com/fileroot1/2023-5/9/2f55a1f3-8fa6-44f8-8c02-a47062a66524/2f55a1f3-8fa6-44f8-8c02-a47062a665241.gif)
案,其一是使用CPU芯片内部的EEPROM(这需要CPU本身具有这个功能),其二是向
片外扩展存储芯片。
虽然本系统选用的CPU具有1k字节的EEPROM,但由于使用内部
存储器的操作比较简单,出于本次课程设计训练的目的,我还是倾向于使用扩展一片
外部I2C总线的24C08存储器,让自己在I2C总线硬件接口及软件设计等方面得到较
多的设计体会。
为便于人机交互,检测的温度值及设定温度阈值的过程必须直观的显现出来,显示的内容包括当前检测到的温度值,已设定的温度值或者正在设定状态的输入温度数值,由于显示的信息比较简单,可以利用开发板附件中的1602液晶显示屏完成输出显示。
出于本次课程设计训练的目的,直流电机吹风散热用直流输出电机代替。
Cpu电源保护用开发板自带继电器。
最后剩下的就是蜂鸣器输出报警模块,这个功能模块可以使用定时器输出一定频率的方波信号来获得蜂鸣器发出一定频率的声音。
根据上述分析,由硬件功能可以将本系统分解为如下7个功能模块:
1.温度检测软硬件模块,采用18B20数字温度传感器及其接口电路;
2.蜂鸣器发音软硬件模块,采用蜂鸣器及其接口电路;
3.按键输入软硬件模块,采用4*4矩阵按键及其接口电路;
4.存储器软硬件模块,采用I2C总线的24C08存储器及其接口电路;
5.液晶显示软硬件模块,采用1602液晶显示屏及其接口电路;
6.直流电机输出软硬件模块,采用NCV7B直流电机;
7.继电器软硬件模块,采用开发板自带的继电器;
8.系统CPU模块,采用STC89c52最小系统。
3.系统主要硬件电路模块设计
根据上述分析确定的设计方案,本系统主要设计和使用了温度检测电路模块、矩
阵按键电路模块、蜂鸣器电路模块、液晶显示电路模块、直流电机转动软硬件模块以及存储器电路模块,前两个属于信号输入模块,后四者属于输出模块。
下面就这六个模块的设计分别论述。
3.1温度检测电路模块
根据18B20数字温度传感器的性能及电气参数特性,设计接口电路如图3.1所
示。
18B20数字温度传感器属于单总线数据通讯器件,即只有一根数据线,系统中的
数据交换、控制都由这根线完成。
为了通讯的需要,在设计电路中,在该传感器的数
据I/O引脚上外接一个约为4.7K的上拉电阻,以保证当该总线闲置时其状态为高电
平。
图3.1 温度传感器18B20接口电路图
3.2矩阵按键电路模块
如前所述,本系统采用4*4矩阵按键,电路如图3.2所示。
图中的四条行线和四条列线可接入一个8位的端口,该端口各位都上拉一个1k的电阻。
图3.2矩阵按键接口电路图
3.3蜂鸣器电路模块
本系统的报警提醒采用蜂鸣器发音鸣叫来实现,蜂鸣器控制电路如图3.3所示。
图3.3蜂鸣器接口电路图
在PNP型三极管8550的基极通以一定频率TTL电平的方波信号,使三极管产生同样频率的开关动作,从而引发蜂鸣器发出对应频率的声音。
3.4液晶显示电路模块
本系统采用1602液晶显示集成电路模块,它与单片机的接口如图3.4所示。
图3.4液晶显示电路模块
对于该集成电路模块,其控制端(4-14号引脚)可以直接接入CPU端口。
图中设计有一个10K的可调电阻,其中心抽头联至该模块的3号引脚,其2号引脚接5V电源正极一并联至可调电阻的一侧,另一侧接至5V地,调节可调电阻的大小可以调整液晶显示字符的对比度。
液晶显示背屏光的电路接口由15及16号脚分别接5V电源正极和5V地来实现。
3.5存储器电路模块
本系统采用具有I2C总线的24C08存储器,组成系统结构简单,占用空间小,芯片管脚的数量少,无需片选信号,价格低,应用比较广泛,传送速度可达400kbps,
标准速率为100kbps。
器件引脚地址是由I2C总线外围器件的地址引脚(A2,A1,A0)决定,由于本系统只扩展一片1K字节的24C08存储器,故引脚(A2,A1,A0)直接共地,其地址代码相对应信号为0。
该存储器的SDA,SCL引脚联至CPU端口并分别外接10K的上拉电阻。
电路如图3.5所示。
图3.5存储器接口电路
3.6直流电机输出电路模块
本系统采用NCV7B直流电动机代替cpu风扇转动。
电机用P3.0和P3.1口控制。
图3.6直流电机控制原理
本系统采用由达林顿管组成的H型PWM电路。
用单片机控制达林顿管使之工作在占空比可调的开关状态,精确调整电动机转速。
这种电路由于工作在管子的饱和截止模式下,效率非常高;
H型电路保证了可以简单地实现转速和方向的控制;
电子开关的速度很快,稳定性也极佳,是一种广泛采用的PWM调速技术。
3.7继电器软硬件模块
本系统采用开发板自带继电器。
继电器为P3.7口控制。
正常情况下单片机的P3.6、P3.7都被程序初始化时置“1”,继电器处于吸合状态。
图3.7继电器电路
3.8单片机CPU最小系统
本系统CPU采用宏晶科技推出的STC89S52RC,它是一款高速、低功耗、超强抗干扰的单片机,指定代码完全兼容传统8051单片机,有E2PROM功能,内部集成MAX810专用复位电路,外部晶体20M以下时可以省略外部复位电路,本系统便充分利用该CPU的特点,省去了传统的晶振和复位电路。
具有为便于后续端口的扩展和使用,本系统已对全部I/O端口做了上拉电阻设计,考虑到程序代码总量不到2K字节,完全可以使用片内ROM空间,故而将EA引脚接高点位。
如图3.6所示。
图3.6单片机最小系统
3.9单片机硬件端口分配
为合理利用单片机的端口资源,并且兼顾程序设计的便利,将系统的输出和输入端口作如表3.1配置。
表3.1单片机端口配置表
单片机端口
外围接口电路硬件模块
P3.3
18B20温度传感器模块
P3.7
继电器软硬件模块
P2.0-P2.5,P0.0-P0.7
液晶显示集成电路模块
P3.0-P3.1
直流电机输出模块
P1.0-P1.7
按键电路模块
P3.4,P3.5
存储器电路模块
P3.6
蜂鸣器电路模块
4.程序软件设计与分析
4.1系统软件分析及详细技术文件设计
作为一个完整的智能测温报警调节系统,其每一个动作细节都是确定和符合设计要求的,这些动作细节就是软件的设计过程和任务,如同设计一个更为详细的产品使用说明书,这个工作必须由系统研发者设计、完成。
根据本次课程设计的提出的功能要求,整个系统功能可以分为两种状态:
报警提
醒的“正常工作状态”以及设置报警阈值并存储的“设置工作状态”。
在“正常工作
状态”完成温度比较并根据比较结果确定蜂鸣器鸣叫、电机转动和继电器的吸合。
当检测到“设置”按键按下,系统就进入“设置工作状态”,这时可以按下数字键设置报警阈值,在这个过程中如果按下“清零”键,则将已输入设置温度阈值都清零,用户可以在此基础上继续输入数字键;
当温度阈值数字输入完成后,按下“确定”按键,则将该输入数值保存到存储器,并作设置温度的更新显示,然后系统状态切换到“正常工作状态”;
如果这时按下的是“取消”键,就不保存设置的数值,系统直接切换到“正常工作状态”。
由此可见,上述两种状态是由用户通过按键的选择来决定的。
所以,可以在按键
处理软件模块中设置状态标志位,以便于在主循环程序中进行个别处理。
另外,不论
系统处于上述何种工作状态,系统都要检测和显示当前温度,所以系统的主循环应该
安排完成如下三个方面的工作:
(1)检测、显示温度;
(2)查有没有按键按下,如果有按键按下,就完成按键键值处理和设置选择状态;
(3)根据状态选择,确定是显示设置的过程,或是比较设置温度与当前温度,决
定是否报警提醒输出,确定电机转动及转动的快慢,确定继电器的吸合。
通过以上的设计和分析,本系统操作主要通过按键进行,按键有数字键0-9,还
有“警告设置”“清零”“取消”“确定”“预置设置”等五个功能按键。
详细技术文件设计如下:
上电后,首先完成系统初始化和硬件自检:
初始化液晶显示模块、存储器和定时
器,自检动作为:
蜂鸣器鸣叫10秒,同时液晶屏显示内部保留的与之温度和警告温度,电机转动。
(自检的目的是测试输入和输出硬件的状态,通过输出系统(如显示器或喇叭)告知操作者关于系统的状态。
)
自检完成后,系统进入工作状态:
读取24C08存储器的已设置温度阈值,检测当
前温度值;
液晶显示,从第1行第1列显示“yuz:
”,在该行第5列显示三位的预置温度值;
在该行第8列显示“dq:
”,在该行第11列显示三位当前温度值;
从第2行第1列显示“set:
”,在该行第5列显示三位的已设置警告温度值;
当有“设置”键按下,系统就进入“设置工作状态”,从第1行第14列显示“SET”或“YUZ”字符,从第2行第14列显示初始的“000”字符。
当检测到数字键按下,从低位到高位更新显示设置的字符,这个过程中如果按下“清零”键,则将已输入设置都做清零显示,继续更新显示后续按下的数字键;
当检测到“确定”按键按下,将该输入数值保存到存储器,并作设置温度阈值的更新显示,把“SET”或“YUZ”字符和设置过程的数字作消隐处理,然后系统状态切换到“正常工作状态”;
如果检测按下的是“取消”键,就不保存设置的数值,同样做消隐处理,然后系统直接切换到“正常工作状态”。
4.2系统软件主程序设计
系统软件的主程序包括初始化、自检和主循环。
初始化主要针对定时器、液晶显
示模块、存储器等硬件进行初始化。
系统使用定时器0的定时中断输出获得蜂鸣器一定频率鸣叫,使用定时器1的定时中断输出一定频率电机转动。
使用定时器方式1,以定时方式工
作,通过TR0、TR1启动。
故TMOD值为0x11,TH0、TL0和TH1、TL1分别是:
TH0=0XF5,TL0=0XAA;
TH1=0XFF,TL1=0XF6;
初始化液晶显示模块通过调用"
1602LcD.H"
头文件的初始化函数完成。
存储器初始化只需使得存储器引脚SDA和SCL信号都为1,使设备处于空闲状态
即可。
与此同时,还要对系统工作的标志位和全局变量做初始化,部分标志位和变量的
设置及其功能将在各软件模块中详细说明;
系统的设置的全局变量和标志位如表4.2所示。
表4.2系统软件全局变量及标志位说明
全局变量及标志位
属性
功能说明
input_l
uchar
按键输入数值的低位
input_m
按键输入数值的中位
input_h
按键输入数值的高位
temp_dq
当前温度值
temp_set
警告温度值
temp_yuz
预置温度值
fmq_on
bit
蜂鸣器开启标志
wenbiao
温度检测标志位
status
系统状态位=1:
设置参数
=0:
系统运行
开机后默认运行状态
本系统自检工作设计比较简单,主要完成液晶模块、蜂鸣器及电机的输出动作,以供操作者观察设备是否完好;
主循环完成上述分析中述及的三个方面的工作,前2项工作在本文有专门模块进
行说明,此处对第三个工作进行阐述。
如果系统当前状态是设置工作态,那么系统在指定位置完成对设置输入数值的更
新显示;
而且由于系统在设置态,所以蜂鸣器定时中断输出必须关闭,蜂鸣器也必须
关闭,电机输出也关闭。
另外,如果系统处于正常工作状态,那就需要判断设置报警温度阈值、预置温度值和检测温度的关系。
程序分两个语句块进行警告温度和当前温度的判断,一个是当警告温度阈值小于当前温度时,蜂鸣器开启,定时中断0开启,同时设置蜂鸣器开启标志位,这样做的目的是:
当蜂鸣器开启后就不必重复进入到这个语句块中去开定时中断,以免影响定时输出蜂鸣器的声音效果。
另一个是当警告温度阈值大于当前温度时,蜂鸣器关闭,定时中断0关闭,这时就要把蜂鸣器开启标志位清零,以便于温度重新升高后,能进入上一个语句块开启蜂鸣器和中断。
程序分两个语句块进行预置温度和当前温度的判断,一个是当预置温度值小于当前温度时,定时中断1开启,当前温度在中断中进行。
另一个是当预置温度值大于当前温度时,定时中断1关闭,当前温度检测在主程序中进行。
具体流程图如图4.2所示,该模块程序见附录main()函数。
图4.2主程序流程图
4.3定时中断程序设计
系统使用定时器0的定时中断输出获得蜂鸣器以一定频率鸣叫,故在定时中断
程序中只需完成蜂鸣器输出取反,然后重新定义定时初始值,最后启动定时器TR0
即可,该模块程序见附录voidintt0()interrupt1函数。
系统使用定时器1的定时中断输出获得电机转动的快慢调节,故在定时中断程序中只需定时初始化,然后当小于占空比值时输出低电平,高于时是高电平,从而实现占空比的调整,最后启动定时器TR1即可,该模块程序见附录voidtimer1(void)interrupt3using2函数。
4.4按键检测及处理模块程序设计
在该软件模块中主要做两件事,其一:
检测有没有按键按下并获取按键键值;
其
二:
根据按下的键值设置状态标志或对按下的值做进一步数据处理。
对于第一件事,本系统专门设计了一个头文件函数"
key_value.h"
来完成这个功
能,当系统没有按键按下,函数返回键值为0xff,如果有按键按下,则返回该按键的
键值。
本系统设计的数字键的键值就为数字键的本身的数字值,另外四个功能键的键
值分别是:
“警告设置”为0x0a,“清零”为0x0b,“取消”为0x0c,“确定”为0x0d,“预置设置”为0x0e。
下面说明第二件事情。
当有按键按下,这时就要结合当前的状态进行处理。
比如
在正常工作状态下,就不响应数字按键的处理。
但如果当前是设置工作状态,那就可
以对数字按键进行响应和处理了。
首先说明对四个功能按键的处理。
如果用户按下了“设置”按键,系统即进入“设置工作状态”,使标志位status
置1,表示当前进入设置状态。
按键输入的3个公共变量做初始化清零,在LCD上
相应位置显示“SET”或“YUZ”字型,输出FMQ控制端口信号为1,把蜂鸣器关掉,使在设置温度阈值的时候不做蜂鸣器输出。
当前系统如果在“设置工作状态”,这时用户按下了“清零”按键,那么系统将
按键输入的3个公共变量重做初始化清零,其功能很明确:
将用户之前按下的数字一
次性全部清零,以便于重新数字输入新值。
当前系统如果在“设置工作状态”,这时用户按下了“确定”按键,系统就将之
前用户输入的三个数字键键值进行个位、十位、百位的数据计算得到一个数值,判断
该值是否在系统要求的“20—32摄氏度”预置范围和“33—50摄氏度”警告范围,如果是就把这个数值放入变量yuz和set,并调用函数WriteSet(n,temp_set)保存到存储器中指定的存储单元中;
如果不属于该范围,则不做保存。
上述过程结束后,由于系统即将要切换到正常工作状态去,所以必须对屏幕显示做消隐,也就是把设置状态的显示字符和数字隐去。
然后把系统状态标志位status清零。
当前系统如果在“设置工作状态”,这时用户按下了“取消”按键,也就是不想
保存设置的数值,直接返回“正常工作状态”。
系统直接对屏幕显示做消隐,也就是
把设置状态的显示字符和数字隐去,然后把系统状态标志位status清零即可。
当前系统如果在“设置工作状态”,这时用户按下了数字按键,只需完成对输入
数值的低、中、高三位依次更新,即把中间位的数值input_m赋值给input_h,然后
把原来最低位的数值input_l赋值给input_m,把当前输入的数值给最低位input_l。
该模块程序详见附录voidrun_key()函数。
4.5其他程序的设计
4.5.1温度检测程序模块设计
程序中设计了2个变量TH和TL,分别用于存储从18B20传感器分两次读取的温度数据,其中,先读的是温度值低位存入放入TL,接着读的是温度值高位放入TH。
然后进行温度数据的处理,把温度数据的整数部分提取出来,结果放入变量temp_now中,整数提取的算法是:
TH*16+TL/16。
该模块程序详见附录voidget_temp()函数。
4.5.2温度显示程序模块设计
该程序软件模块完成温度值的数据处理并进行显示。
程序入口参数为无符号字符型,在程序中对该参数进行个位十位百位的拆解并转换成对应的ASCII码,并输出显示。
该模块程序详见附录voiddisp_temp(uchartemp)函数。
(4.1)
5.后续有待完善和提高的工作
本系统设计了一套温度检测及智能报警系统,完成了本次课程设计给出的基本要求,随着设计的逐步推进,我对该系统的功能也有了更加深入的理解,我认为可以在以下几个方面更进一步提高和完善:
1.温度提醒阈值的保存状态可以使用声音或显示提醒,以告知操作者对本操作成功与否。
2.温度检测报警提醒实现进一步的智能化,采用不同频率的声音来区别温度超
出的程度。
比如温度超出2度范围内播放一种频率的声音,超出3-5度范围则播放另一种频率的声音,其余依此类同。
3.为了能够进一步体现“以人为本”设计思想,可以使用播放音乐来替代单调
的鸣叫声音。
4.为了使显示更加具有动感,在工作状态可以用滚动方式来显示当前的温度,
比如温度每发生变化,则通过滚屏的方式显示1次或多次。
参考文献
[1]刘祖京.实用接口技术[M].北京:
北京工业大学出版社,1999.
[2]王彤.C语言在测量与控制中的应用[M].北京:
机械工业出版社,2009.
[3]徐煜明.C51单片机及应用系统设计[M].北京:
电子工业出版社,2009.2
[4]谢维成,杨加国.单片机原理及应用及C51程序设计.北京:
清华大学出版社,2009.
附录
/*系统软件源程序*/
//CPU智能散热监控系统设计
//主要功能:
//《1》可设定和存储预置温度数值(20-32摄氏度)
//《2》可设定和存储报警温度数值(33-50摄氏度)
//《3》系统工作时能实时检测温度,当超过预置温度数值时启动直流电机吹风散热,温度超出越高使电机转速越快,以加强散热效果。
//《4》系统启动时,接通继电器控制电路使CPU工作,当温度超过设定的报警温度时,系统通过继电器电路切断CPU电源以作保护,同时蜂鸣器使鸣叫报警10秒钟。
//《5》液晶显示
//其他功能细节以及按键功能可以根据自己设定的要求拟定。
//提高:
#include<
reg51.h>
#include"
18b20.h"
24c08.h"
#defineunitunsignedint
#defineucharunsignedchar
ucharinput_l;
//按键输入的高中低三位定义
ucharinput_m;
ucharinput_h;
ucharkey_zhi;
uchardisp_set;
uchardisp_yuz;
uchartemp_dq;
//当前温度值
uchartemp_yuz;
//预置温度值
uchartemp_set;
//警告温度值
sbitJDQ=P3^7;
//继电器
sbitfmq=P3^6;
//蜂鸣器
unsignedintt1;
unsignedintt2;
bitfmq_on;
//蜂鸣器开启标志
bitstatus=0;
//定义一个状态位1:
设置参数0:
系统运行,开机后默认运行状态
bitwenbiao=1;
//定义一个状态位
voiddelay(uint);
//申明一个延时函数位
voiddisp_inilcd();
//液晶屏初始化显示
voiddisp_temp(uchar);
//显示给定温度数值
voidget_temp();
//获取温度值
voidintt0();
//蜂鸣器定时中断
voidrun_key();
//按键处理函数;
voidtimer1();
//电机定时中断
#defineV_TH00XFF
#defineV_TL00XF6
voidmain()
{
SDA=1;
//SDA=1,SCL=1,存储器初始化,使主从设备处于空闲状态
SCL=1;
lcd