智能空调温度控制电路的设计
智能空调温度控制电路的设计
一、 目的 单片机综合练习是一项综合性的专业实践活动,目的是让学生将所学的基础理论和专业知识运用到具体的工程实践中,以培养学生综合运用知识能力、实际动手能力和工程实践能力,为此后的毕业设计打下良好的基础。 二、 任务 本次单片机综合练习的任务是设计并制作一个空调控制器。 基本任务是利用AT89C51单片机、ADC0809模数转换器等芯片设计并制作一个具有制冷、制热、通风和自动运行的手控型空调控制器。 三、硬件部分的具体内容和要求 1.手控型空调控制器的功能: 1)空调控制器应具有制冷、制热、通风和自动运行四种工作模式。 a.制冷:室内风机、压缩机及室外风机工作,而四通换向阀停止工作。 b.制热:室内风机、压缩机、室外风机和四通换向阀均工作。 c.通风:室内风机工作,而压缩机、室外风机和四通换向阀均不工作。 d. 自动运行:能根据当前室内温度和自动运行的设定温度,自动选择制冷、制热或通风工作模式。 e.每按一下工作模式选择键时,工作模式按图3所示的箭头方向依此变换: 图3 工作模式选择
2).能对温度进行设定和控制: a.制冷时温度调节范围为:20℃~32℃。当室内温度高于设定温度1℃时,开始制冷;而当室内温度降到设定温度时,则转为通风状态。 b.制热时温度调节范围为:14℃~30℃。当室内温度低于设定温度1℃时,开始制热;而当室内温度升到设定温度时,则转为通风状态。 c.通风时温度设置栏显示“ 一 一 ”,并且温度设置键无效。 d. 自动运行温度调节范围为:25℃、27℃、29℃。若室内温度低于设定温度5℃时,自动按制热工作模式运行;若室内温度高于设定温度时,则按制冷模式运行;否则按通风模式运行。 e.温度设定键每按一下,则温度上升或下降1℃(在设定范围内)。 f.控温精度为±1℃ 3).室内风机具有高、中、低三档风速和自动风控制功能。 每按一下风速选择键时,风速模式按图4所示的箭头方向依此变换: 图4 风速模式选择
其中自动风与工作模式及温度有关: a.制冷时,当室内温度高于设定温度5℃时,为高速风; 当室内温度高于设定温度2℃~5℃时,为中速风; 当室内温度不高于设定温度2℃时,为低速风; b.制热时,当室内温度低于设定温度5℃时,为高速风; 当室内温度低于设定温度2℃~5℃时,为中速风; 当室内温度不低于设定温度2℃时,为低速风; c.通风时,当室内温度高于25℃时,为高速风; 当室内温度介于20℃~25℃时,为中速风; 当室内温度低于设定温度20℃时,为低速风; 4).具有压缩机三分钟自动保护功能。由于家用空调器所使用的压缩机大多为电容启动运行电动机,带载启动能力较差,因此无论在制冷运行还是在制热运行时,当压缩机停止工作后,必须在三分钟后才允许重新启动。
2.电路设计、制作的功能和要求: 1)用6只共阴极的八段数码管来分别显示工作模式、风速状态、设定温度和室内温度。为了统一起见,对6只八段数码管的具体排列和工作状态的显示符号作如下规定:
2)用5只按钮来分别作为启动/关闭键、工作模式键、风速选择键、温度设定上升键和下降键。(此外还有1只系统复位按钮,共6只) 3)上电后,自动显示自动工作模式、自动风速档、设定温度27℃和实际室内温度,这时用户可以对工作模式、风速档、设定温度进行设定,但只有在按下启动/关闭键后,空调器才正式开始运行;在空调器运行期间,若 对上述状态进行设定,则空调器马上开始执行。若关机后(非断电)重新启动空调器,则空调器自动进入上次关机前的设定状态。 4)用6只LED发光二极管来分别表示室内风速的高、中、低三档,压缩机、室外风机和四通换向阀,所有发光二极管均要求用2003达林顿管或三极管放大驱动。 5)温度传感器采用AT502热敏电阻。 3.空调控制器硬件电路图
4.硬件设计思想 1)根据任务书可知,该系统需要人机界面(按键输入7段码LED显示),AD采样,以及单片机控制部分等模块,并且可以得到以下硬件系统框图
2)各部分硬件的设计 a.温度传感器选择 根据任务要求我们选择了AT502作为温度传感器,根据电阻分压(如下图左),实现由温度到电压值的转换,因为AT502的温度系数比较大,经计算当温度变化范围是0-99度时,IN0口的电压范围是0.64—3.6伏,所以就可以不用运放,直接送到AD采样的输入端进行AD采样。
b.AD芯片的选择 因为温度变化范围是0-99度,理论上AD位数只要7位(128级)就够了,所以系统采用了经典的ADC0809(8位AD)作为AD采样芯片。 温度的计算公式:V=5*Rt/(R+R1+Rt) c.按键输入: 因为按键数目不多,所以系统直接采用非编码方式,直接连接单片机I/O口。 系统采用74HC573和ULN2003作为驱动,P0和P2作为输出口,控制动态显示的LED显示器。
e.输出控制 任务要求用6只LED发光二极管来分别表示室内风速的高、中、低三档,压缩机、室外风机和四通换向阀,51单片机的低电平驱动能力较强,LED可以直接连接单片机的I/O口。 四、软件程序设计 1.工作模式和风扇模式设计思想: 由系统要求可以列出下表:
根据上表,我们列出一系列子程序,再根据当前状况选择相应的子程序。例如在制冷模式时,我们的子程序是: void work_csub() //制冷子程序 { if(compressor_delay==0&&compressor_on==1) { compressor_on=0; compressor_delay=compressor_delay_s; } else //灰色部分是实现压缩机保护功能的 if(compressor_delay!=0&&compressor_on==1) compressor_block=1; //3 min protect
ext_room_fan =0; //开室外风机 valve =1; //关换向阀 work_mode_fact=1; //设实际工作模式为1(制冷) } 2.压缩机三分钟保护功能的实现 压缩机三分钟保护功能相对而言是程序中相对较难的的部分,在编程前提出过多种实现方案,最后确定了以下的设计方案: 设置一个全局变量 compressor_delay,在定时子程序的1秒定时中,发现如果变量compressor_delay 〉0就减一,而在压缩机需要工作时,先判断compressor_delay是否为“0” 如果为0,则执行压缩机打开动作,否则compressor_block置1,主程序发现compressor_block置位了,并且三分钟时间已经到了,就执行压缩机打开子程序。 相关程序流程图如下: 3.为了能够在关机的时候能够自动关闭LED显示,用了类似于压缩机3分钟保护功能的处理方法,实现了当系统处于关机状态并且无按键持续7秒钟(可设)时,LED显示会自动关闭。
五、系统程序流程图 六、设计中遇到的问题及解决方法 1.在画protel图时,我们使用网络名,NET走线。但是有时候因为疏忽,没 靠在线上,从而出现错误(要两黑点载同一点上才算是连接上)。 2.画原理图时,由于将一些不必要的元器件删去后没有及时将net网络名删去, 或者更改,致使网络名成单个出现,导致错误。 3.将所有的错误都去掉,如果有一些没有错误但被打上错误标志的连接 线用“No Error”标示。 4.刚开始编写的程序中,工作模式切换后,容易出现温度超过调节范围的情况。比如:通风模式的温度调节范围是14~32度,而制热模式下的温度范围是14~30度。当工作模式从通风模式转换到制热模式下的时候,若通风模式的温度是31或32度,切换到制热模式后它的温度仍然是31或32度,这就超出了制热模式的温度调节范围,出现bug。 后来,我们在切换模式时做了一些改进:当工作模式切换时,程序先判断当前的温度是否超出温度调节范围,若超出,将其设置为温度调节范围内的温度。 5.在工作模式的选择上,原本只用了work_mode来表示四种工作模式,后来发现若只有work_mode,则有不能选择制冷和通风模式的可能。比如:使用者选择的模式为自动,空调会根据当前的实际温度选择制冷、通风或制热模式。假设空调自动选择的是通风模式(模式2),那么无论使用者怎么按模式选择键,它都将跳过制冷模式(模式1),从而无法选择制冷模式。 我们采取的办法是增加变量work_mode_fact,意为在自动模式下实际执行的工作模式。方便工作在在自动模式的时候进行风速的调节。 6.一开始,我们将按键读入、处理和执行一揽子进行,发现无论选择哪种模式,压缩机都会启动,而后才判断工作模式,让它继续工作或关闭。虽然这个时间很短,没有影响LED的显示,但这样一来增加了压缩机的损耗,也使执行效率降低,显然是我们不愿看到的。我们的措施如前程序设计中所提。 7. 在处理工作在自动模式下实际工作模式选择时,使用了一下语句: if((tempr_set-temperature_get)>5) //判断1:如果设定温度比室温大5度以上 work_hsub(); //选择制热模式 else if(temperature_get-tempr_set>0) //判断2:如果室温大于设定温度 work_csub(); //采用制冷模式 else work_fsub(); //否则通风 在调试的时候发现室温大于设定温度的时候还会继续制热,经再三检查还是没有发现问题,发现是因为 temperature_get和tempr_set都是用的是无符号数,即使temperature_get < tempr_set 在相减之后得到的是temperature_get+255-tempr_set的值, 所以判断2修改为if((temperature_get>tempr_set)); 判断1 则用if((tempr_set-5)>temperature_get);
七、学习心得及体会 在画原理图时,虽然我们组成员有参加过电子设计的同学,但是过于粗心,以致出了许多错误,后来在同学和老师的帮助下一一改正。学习知识一定要扎扎实实的一步一步走,走捷径、一步登天的想法是万万不能有的。 编程时,如上所述,出现了很多的小错误(篇幅和时间所限,我们没有一一将其列出),甚至有时从流程上就走不通,我们不断的进行修改和测试,逐步完善整个程序。只有耐心、细致的工作,才使得整个程序越来越完善。 另外在整个实验中,我们组两名成员相互帮助,测试硬件、编写程序及流程图等等,相互检错、提供改进思路,更好地完成了任务。 当然,我们的设计还有很多需要改进的地方,我们想在日后通过老师的指导、同学的帮助下,逐步使这个设计更加完美、成熟起来。
八、感谢 经过一个星期的忙碌,本次短学期任务已经接近尾声,作为一个没有实践经验的学生,难免有许多考虑不周全的地方,如果没有老师的指导,队友的努力以及同学们的支持,想要完成这个设计是难以想象的。
|
|