第1章 绪论
1.1空调的发展过程和现状
空气调节对人们生活起着重要的作用。传统空调器具有“开一关”调节模式。不仅噪音和温度波动大,而且开关时对空调压缩机有很大的损害。随着计算机技术、变频技术、智能控制技术的发展。人们摆脱了传统定频定速空调器的调节模式。开发出性能更为优良的变频变速空调器。
世界空调的发展可分为四个阶段。首先是后风扇时代。典型特征是,功能仅限制于制冷制热,技术含量低;接下来是纯空调时代。这个时代的最显著标志是空调成为真正意义的空气调节器。不光调节空气的温度,对空气的舒适度也进行调节;随着各国政府对空调的能耗标准提出要求。空调进入了超空调时代,其显著特点是空调不仅仅是空调。还能满足节能环保的要求;在以网络信息代表的2l世纪。作为家电产品的空调器也必将随之步入网络信息时代。
1.2空调发展的趋势
通过对空调发展的后风扇时代、纯空调时代、超空调时代和即将来到的网络信息时代回顾。以及几种典型的主流空调技术和产品的分析,可以看出科技创新势不可挡。高科技含量的空调产品必将取代市场上仅仅具备了制冷制热功能的低技术含量空调。未来空调将要朝着“四化”.即健康化、节能环保化、人性化、网络化迈进。
健康化:健康的空气舒适指数主要从空气洁净度、空调气流的舒适度、空气温湿度控制技术三方面来衡量。各空调厂家针对这一需求,推出了多重空气过滤技术、等离子技术、负离子技术、多元光触煤技术、环绕立体送风技术、自动除湿加湿等技术。并运用到产品上。目前,日本的一些空调企业以及中国的海尔在这方面都处于世界领先水平。
节能环保化:从世界发展趋势看,节能是环保的第一重要因素。环保始终是各国所关注的问题。欧盟颁布了相关法规,限制非环保产品进入,日本政府公布<节能法>,美国环保署公布了美国国家政府强行执行的能耗标准。把无环保产品拒之门外也是遵循这一节能环保的大趋势。中国国家技术监督局节能认证委员会在2000年也首次颁布了中国节能认证。从空调产品节能技术的演变上,已经实现了从最初的定频空调到变频空调的节能30%。随着先进技术的不断创新运用。2001年海尔又推出了具有高效数字直流变频压缩机、数字传感器、数字直流电机的空调器世纪超人。将节能水平提升至5l%。创造了目前国内外节能产品之最。
人性化:使用方便,人机互动是更高层次要求。由于传统空调的功能简单,各国空调厂商运用了多项人性化空调设计技术.推出了具有多种视窗显示(VFD点阵液晶、LED显示)的空调,使空调运行状态一目了然。同时。为了满足夜间使用空调,在多个系列产品中具有夜光显示功能的遥控器,背光功能,让消费者在黑暗中能够清晰可见地进行空调操作。具有语音声控功能的空调等。具有人性化设计功能的空调必将成为未来空调的发展方向之一。
网络化:网络信息空调时代。网络技术的发展必将为空调带来一场全新的技术革命。传统空调的概念将发生质的改变。谁先掌握网络技术在空调上的应用,谁就会成为未来空调市场的引领者,空调网络信息时代的到来成为不可逆转的潮流。一些新型空调产品开始预留网络接口,实现网络开放。通过选配的网络控制器可实现千里之外的网络遥控。集中控制器可实现同时控制128台空调,为智能化小区物业管理提供便利。高技术、高附加值的特点把空调这种最初简单的舒适品推向了一个全新的概念。成为人们在工作和生活中必不可少的人性化智能家电。
1.3空调控制系统的特点
空调控制器的任务是通过遥控器接收入的指令并根据房间的温度、室内热交换器温度、室外热交换器温度、压缩机的状态等来控制空调器的运行过程。具体地说,就是控制压缩机、室外风扇、换向阀、室内风扇、室内风向电机, 并将设定温度和房间实际温度用发光二极管指示出来。另外,系统软件中有过流检测以保护压缩机,其状态也可通过发光二极管指示。
空调系统中的控制对象多属于热工对象, 从控制的角度分析具有以下特点:
(1)多干扰性
例如:通过窗户进入的太阳辐射热是时间的函数,也受气象条件的影响;室外空气温度通过围护结构对室温产生的影响;为了换气所采用的新风,其温度变化对室温有直接的影响;此外室内人员的变动, 照明、机电设备的启停, 电加热器电源电压的波动以及热水加热器热水压力、温度的变化, 均随着建筑的构造、用途的不同而异, 更与空调本身有关。如果不采用变频调速技术,那唯一的方法就是利用最大的耗能来换取理想的控制状态,这就会带来干扰变动时控制的不理想以及能源浪费的问题。
(2)多工况性
空调系统中对空气的处理过程具有很强的季节性,一年中,至少要分为冬季,过渡季和夏季。另外在同一天中, 夜晚和白天的空气工况也不完全相同, 因此空调对空气的处理过程也具有多变性。多工况性的特点就决定了空调的运行不能设定在某一不变的参数,而这就要求空调的控制系统必须要灵活的动作来适应变化的工况。
1.4空调控制系统概述
空调技术发展的历史就是由如何满足社会经济和人民生活对室内环境不断提高的要求。以及如何最大限度地节约能耗,开辟新能源利用的历史。此外。空调技术的发展和各种相关科学技术的发展息息相关,冶金、化工和各种材料工业提供的材料日新月异。机械工业制造出各式各样的新型冷、热源设备和五花八门的末端装置.自动控制理论和技术的进步也改变着空调系统工作过程的控制与调节的方式与方法。深入开拓电子计算机在空调技术中的应用。自觉地理解和运用系统思想和系统方法。不仅可以加速空调技术革新的进程。并能更有效地移植和利用其他学科和专业的新的研究成果。近年来,特别是计算机技术和数据通讯与网络技术的结合开辟了一个信息化社会的新时代。信息技术快速的发展对科学技术及社会生活方式的巨大影响对空调技术不但是机遇。更是一种挑战。
第2章 方案选择及论证
2.1设计要求
控制系统要控制的是空气温度,是通过压缩机的运行、停止控制的,实际上单片机直接控制的是压缩机的工作状态。该系统要实现以下功能:
(1)根据环境温度控制压缩机工作:控制参数是温度,被控参数是压缩机电路通、断的工作状态。
(2)设置希望的环境温度值:由人手动按键控制。
(3)显示设定的温度值,显示的精度为1°C。
(4)显示传感器检测到的实际温度值,显示的精度为1°C。
(5)系统带数据的断电保护功能。
2.2方案选择
2.2.1单片机的选择机论证
单片机是整个系统的核心,单片机具有体积小、重量轻、价格便宜、功耗低、控制功能强及运算速度快等特点。按处理的字长分,现在的单片机主要分为8位与16位两种类型,型号的选择有两种方案:
方案一:选择Intel 的8位单片机80C51【6】
特点:工作电压为5V;8位的CPU;CPU时钟:小于24MHz,一般为6或12 MHz;4KB程序存储器;128Bytes数据存储器 ;最大可接64KB的外部程序存储器;最大可接64KB的外部数据存储器;21个专用寄存器;4组I/O口(P0、P1、P2、P3);2个16位的可编程定时/计数器(T0、T1);5个中断源(INT0、INT1、T0、T1、RXD、TXD),2个优先级;1组全双工的串行通信口;具有逻辑操作位寻址功能。
方案二:选择凌阳的16位单片机SPCE061A【7】
特点:16位μ’nSP 微处理器;工作电压(CPU)VDD为3.0~3.6V,(I/O)VDDH为3.0~5.5V;CPU时钟:0.32~49.152MHz;内置2K字SRAM ;内置32K字FLASH ;可编程音频处理 ;内置晶体振荡器;系统处于备用状态下(时钟处于停止状态),耗电仅为2uA/3.6V;2个16位可编程定时器/计数器(可自动预置初始计数值);2个10位DAC(数/模转换)输出通道;32位通用可编程输入/输出通道;14个中断源可来自定时器A/B、时基、2个外部时钟源输入和键唤醒;具备触键唤醒的功能;使用凌阳音频编码SACM_S480可以播放压缩的语音资源;锁相环PLL振荡器提供系统时钟信号;32768Hz实时时钟;7通道10位电压模/数转换器(ADC)和单通道声音模/数转换器;声音模/数转换器输入通道内置麦克风放大器,并具有自动增益控制(AGC)功能;具备串行设备接口;具备低电压复位功能和低电压检测功能;内置在线仿真电路接口;具有WatchDog功能。
通过对两种单片机的多方面比较,决定选用凌阳的16位单片机SPCE061A,因为SPCE061A单片机支持ISP下载,无需昂贵的编程器,只需要一根并口线,在几秒钟的时间就能完成程序的烧写,而且单片机无需从电路板上取下,在线调试非常方面。并且SPCE061A单片机的处理速度快,支持用标准C语言编程,减少编写代码的难度,同时还具有强大处理的语音处理功能,为对空调进行语音控制做了保留。
2.2.2温度传感器的选择及论证
方案一:热敏电阻AD590
AD590是美国Analog Devices 公司生产的二端式集成温度-电流传感器,测温范围为-50到+150摄氏度,作为温度传感器,精度可达±0.5摄氏度。
由其测出的是电流,经过AD芯片转换成对应的数字量,再计算出温度,这需要比较多的外部元件支持,且硬件电路复杂,制作成本相对较高。
方案二:智能温度传感器DS18B20
DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。
DS18B20的性能特点如下:
一线制数字温度传感器;温度测量范围为-55℃~+125℃,可编程为9位~12位A/D转换精度,测温分辨率可达0.0625℃,被测温度用符号扩展的16位数字量方式串行输出;电压范围为3.0~5.5V,其工作电源既可在远端引入,也可采用寄生电源方式产生;多个DS18B20可以并联到一起,CPU只需一根数据线就能与诸多DS18B20通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路;无须外部器件;零待机功耗;负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作;用户可定义的非易失性温度报警设置;报警搜索命令识别并标志超过程序限定温度(温度报警条件)。
通过对两种温度传感器的比较,决定选用DS18B20作为本设计系统的温度传感器【8】【9】【10】。
2.2.3显示电路的的选择及论证
显示电路的选择方案主要有两种:
方案一:LCD显示
LCD显示具有以下的特点:低压微功耗、平板型结构、被动显示(无眩光,不刺激人眼,不会引起眼睛疲劳)、显示信息量大、易于彩色化、寿命长等优点,但是电路结构比较复杂,成本较高。
方案二:LED显示
LED显示是由发光二极管排列组成的一显示器件。它采用低电压扫描驱动,具有:耗电少、使用寿命长、成本低、结构和电路简单、亮度高、故障少、视角大、可视距离远等特点。
综上所述,由于本设计中只需显示四位的数字值,所以显示电路可采用两片的LED共阴极数码显示管LG5621AH 和LG5641AH 动态扫描的方式实现显示。数码管的驱动采用7硅NPN型达林顿管ULN2003A驱动芯片。
2.2.4 数据的断电保护方案的选择及论证
本设计要求单片机断电后再次恢复工作时能够记住上次用户设定的温度值,所以选择断电保护的方案就显得比较重要了。该功能的实现可分别通过硬件和软件的方法来实现。
方案一:附加外部的硬件电路
此方案又有两种方案:一、加接不间断电源,让整个系统在掉电时继续工作;二是采用备份电源,掉电后保护系统中全部或部分数据存储单元的内容。不管采用此方案中的哪种,都会带来新的成本、额外的电路结构,同时也加大了整个系统的体积。
方案二:软件编程实现
由于FLASH ROM既具有ROM掉电不丢失数据的特点,又有RAM随机读写的特点。所以此方案是通过往单片机的FLASH ROM芯片中写入必要保护的数据,每次开机时再把该数据读出,这样即可实现断电数据保护功能。该方案不需外加什么电路,仅需通过软件编程的方法和SPCE061A单片机内部自带的flash存储器即可实现,而且该存储器可擦写数十万次,性能可靠。
综上所述,决定选用软件编程的方案。
2.2.5压缩机的的选择及论证
压缩机为制冷系统中的核心设备,只有通过它将电能转换为机械功,把低温低压气态制冷剂压缩为高温高压气体,才能保证制冷的循环进行【4】。
方案一:选择活塞式压缩机
活塞式压缩机的工作是靠气缸、气阀和在气缸中作往复运动的活塞所构成的工作容积不断变化来完成。活塞式压缩机每个周期的工作即曲轴每旋转一周所完成的工作,可分为吸气、压缩和排气三个阶段。曲轴旋转一周,活塞往复一次,气缸内相继实现进气、压缩、排气的过程,即完成一个工作循环。
方案二:选择离心式制冷压缩机
离心式制冷压缩机的工作原理与活塞式压缩机有根本的区别,它不是利用汽缸容积减小的方式来提高汽体的压力,而是依靠动能的变化来提高汽体的压力。
离心式制冷压缩机与活塞式制冷压缩机相比较,具有下列优点:
(1)单机制冷量大,在制冷量相同时它的体积小,占地面积少,重量较活塞式轻5~8倍。
(2)由于它没有汽阀活塞环等易损部件,又没有曲柄连杆机构,因而工作可靠、运转平稳、噪音小、操作简单、维护费用低。
(3)工作轮和机壳之间没有摩擦,无需润滑。故制冷剂蒸汽与润滑油不接触,从而提高了蒸发器和冷凝器的传热性能。
(4)能经济方便的调节制冷量且调节的范围较大。
综上所述,决定选用离心式制冷压缩机。
第3章 系统硬件设计
3.1系统硬件总体逻辑设计

根据上一章控制器所设计的功能,我们可以选择经典的计算机控制系统,即由传感器得到外界数据,计算机根据此数据判断系统的控制模式及其他参数。由此得出系统的总体逻辑设计图。如图所示3-1所示。
图3-1 系统的总体逻辑设计图
系统总体设计方案
(1)该制冷系统由SPCE061A单片机系统即可实现。电源由5v的干电池提供,采用内部时钟电路。
(2)选用DS18B20数字式温度传感器。
(3)温度设置信号由升温和降温两个按钮产生,以中断方式工作。
(4)利用交流固态继电器控制制冷压缩机工作状态。继电器由IOA7驱动。
(5)四位显示器温度的共阴LED八段码分别由IOB8、IOB9、IOB12、IOB13驱动。
3.2 SPCE061A单片机的介绍
3.2.1 SPCE061A单片机的内部结构
SPCE061A单片机的内部结构如图3-2所示

图3-2 SPCE061A的结构
时钟电路

μ’nSP™的时钟电路是采用晶体振荡器电路。图3-3为SPCE061A时钟电路的接线图。外接晶振采用32768Hz。推荐使用外接32768Hz晶振,因RC阻容振荡的电路时钟不如外接晶振准确。
图3-3时钟电路
锁相环振荡器

PLL锁相环的作用是将系统提供的实时时钟基频(32768Hz)进行倍频,调整至49.152MHz、40.96MHz、32.768MHz、24.576MHz或20.480MHz。系统预设的PLL振荡频率为24.576MHz。PLL的作用原理如图3-4所示:
图3-4 PLL锁相环电路图
低电压监测LVD (Low Voltage Detect)

低电压监测功能可以提供系统内电源电压的使用情况。如果系统电压Vcc低于用户设定的低限电压VLVD,P_LVD_Ctrl单元的第15位(LVD监测标志位)将被置为“1”;反之,当Vcc > VLVD时,该位被置为“0”。SPCE061A具有3级可编程低限电压:2.4V、2.8V、和3.2V,通过对P_LVD_Ctrl单元编程来进行控制,参见图3-5。假定VLVD=3.2V,当系统电压Vcc低于3.2V时,P_LVD_Ctrl单元的第15位会被置为“1”。系统预设的低限电压为2.4V。
图3-5低电压监测电路
低电压复位LVR (Low Voltage Reset)
通过某种方式,使单片机内存各寄存器的值变为初始的操作称为复位(reset)。SPCE061A复位电路如图3-6所示,在RESB端加上一个低电平就可令其复位。该电路具有手动和上电复位两种功能。

图3-6复位电路

当电源电压低于2.2V时,系统会变得不稳定且容易出错。导致电源电压过低的原因很多,如电压的反跳、负载过重、电池电量不足⋯⋯。如果电源电压低于2.2V时,会在4个时钟周期之后产生一个复位信号,使系统复位。LVR时序如图3-7所示。
图3-7复位示意图
3.2.2 SPCE061A单片机的外部引脚及功能
SPCE061A有两种封装片,一种为84个引脚,PLCC84封装形式,另一种为80个引脚,LQFP80封装。本文用的是PLCC84封装。在PLCC84封装中,有15个空余引脚,用户使用时这15个空余脚悬浮。如图3-8所示。

图3-8 SPCE061A引脚图
SPCE061A的引脚功能如表3-1。
表3-1 SPCE061A的引脚功能
| | | |
| | | |
| | | IOA[7:0]:通过编程,可设置成唤醒管脚 IOA[6:0]:与ADC Line_In输入共用 |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | 模拟电路(A/D,D/A和2V稳压源)VDD参考电压 |
| | | 模拟电路(A/D,D/A和2V稳压源)GND参考电压 |
RESET | | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
3.2.3 IOA与IOB口的使用特点
SPCE061A有两个16位的通用并行I/O口:A口和B口。这两个端口的每一位都可通过编程单独定义成输入或输出口。A口和B口均是位控制结构的I/O端口,每一位都可以单独用于数据输入或输出。每个独立的位可通过以下3种控制向量来作设定:数据向量Data;属性向量Attribution;方向控制向量Direction,每3个对应的控制向量组合在一起,形成一个控制字,用来定义相对应I/O端口位的输入输出状态和方式。
A口的IOA0~IOA7作为输入端口时,具有唤醒功能,即当输入电平发生变化时,会触发CPU中断。B口除了具有常规的输入/输出端口功能外,还有一些特殊的功能。
3.2.4 SPCE061A单片机的最小系统
最小系统接线如图3-9所示,在OSC0、OSC1端接上晶振及谐振电容,在锁相环压控振荡器的阻容输入VCP端接上相应的电容电阻后即可工作。其它不用的电源端和地端接上0.1μF的去藕电容提高抗干扰能力。
图3-9 SPCE061A的最小系统图
3.3 DS18B20数字温度传感器
3.3.1 DS18B20简介
DS18B20是DALLAS公司生产的一线制数字温度传感器;温度测量范围为-55℃~+125℃,可编程为9位~12位A/D转换精度,测温分辨率可达0.0625℃,被测温度用符号扩展的16位数字量方式串行输出;其工作电源既可在远端引入,也可采用寄生电源方式产生;多个DS18B20可以并联到一起,CPU只需一根数据线就能与诸多DS18B20通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。以上特点使DS18B20非常适用于远距离多点温度检测系统。
3.3.2 DS18B20 的内部结构
DS18B20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。DS18B20的外形及管脚排列如图3-10。

图3-10 DS18B20的外形及管脚排列
DS18B20引脚定义:
1 GND为电源地;
2 DQ为数字信号输入/输出端;
3 VDD为外接供电电源输入端(在寄生电源接线方式时接地)。
DS18B20的内部结构如图3-11

图3-11 DS18B20内部结构图
64位光刻ROM:
每只18B20都有一个唯一的长达64位的的编码。其前8位是单线系列编码(DS18B20的编码是19H),后面48位是芯片唯一的序列号,最后8位是以上56位的CRC码(冗余校验)。数据在出产时设置不由用户更改。
RAM数据暂存器
DS18B20的存储器结构如表3-2。RAM 数据暂存器,用于内部计算和数据存取,数据在掉电后丢失,DS18B20共9个字节RAM,每个字节为8位。第一和第二个字节包含测得的温度信息,第三和第四个字节是TH和TL的拷贝,是易失性的,每次上电复位时被刷新。下面两个字节没有使用,但是在读回数据时,它们全部表现为逻辑1。第七和第八字节是计数寄存器,它们可以被用来获得更高的温度分辨力。还有一个第九字节,可以用读暂存器命令读出,这个字节是以上8个字节的CRC码。
表3-2 DS18B20存储器结构

3.3.3 DS18B20 与单片机的接口设计
DS18B20与单片机的接口如图3-12所示
图3-12 DS18B20与单片机的接口
引脚说明:
1 电源地,接GND
2 数字信号输入输出,接单片机IOB0口,同时接一个4.7K电阻接VCC
3 电源输入,接VCC
单总线接法:单总线即只有一根数据总线,系统中的数据交换、控制都由这根线完成。主机或从机通过一个漏极开路或三态端口连至数据线,以允许设备在不发送数据时能够释放总线,而让其它设备使用总线。单总线通常要求外接一个约为4.7K的上拉电阻,这样,当温度传感器开路或没接(总线空闲)时,起到上拉作用,使之为高电平,使后续电路保护。
3.4 压缩机控制电路设计

压缩机控制电路比较简单。由I/O口输出信号,通过8050和8550组成反相驱动电路去控制继电器,再由继电器控制压缩机的开停。压缩机的开停由相关室内的温度决定,每次开机之前必须检测延时保护条件是否满足,才能作出开机决策。如图3-13所示。
图3-13压缩机控制电路
3.5 按键接口设计
按键与单片机的接口如图3-14所示,由两个按键构成独立键盘,按键的一端接高电平,另一端分别接IOA0、IOA1、IOA2。当没有按键按下时,IOA0口输入为低电平,当有按键按下时,相应的端口输入为高电平。利用中断的方式,判断

是否有键按下。
图3-14按键与单片机的接口
3.6 LED显示器的驱动

显示采用2位共阴极数码管LG5621AH 和四位的共阴极数码管LG5641AH进行动态显示。LG5621AH显示管如图3-16所示,在使用时,将a~dp接IOA8~IOA15,DIG0和DIG1分别接IOB12、IOB13。显示出的温度是DS18B20温度传感器检测到的温度值。
图3-15 LG5621AH元件图
图中:a~dp为数码管的段信号,G1、G2为2位数码管的位信号。段信号高有效,位信号低有效。
LG5641AH显示管如图3-16所示,在使用时,将a~dp接IOA8~IOA15,DIG5

和DIG6分别接IOB8、IOB9。显示出的温度是用户设定的空调工作温度值。
图3-16 LG5621AH 元件图
图中:a~dp为数码管的段信号,d1、d2为时钟冒号的段信号;G1~G4为4位数码管的位信号,G5为时钟冒号的位信号。段信号高有效,位信号低有效。

LED显示器的驱动采用ULN2003A ,其内部为三极管阵列,其IN脚相当于三极管的B极,OUT脚相当于三极管的C极。若IN脚输入高电平,对应的OUT脚接地;IN脚输入低电平,对应的OUT脚截止输出。ULN2003A元件图如图3-17所示。
图3-17 ULN2003A元件图
图中:IN1~IN7为输入信号,OUT1~OUT7为输出信号。输入信号高有效。
3.7单片机模块的电源设计

由于本设计的所有小模块都采用直流+5V供电,所以直接用5V直流电源供电,省去了复杂的电源变压电路。单片机模块的电源电路如图3-18所示。
图3-18单片机电源电路
S1是电源的开关,D1是电源指示灯,在开关按下时指示灯亮。P3是变压器的插座,可直接接5V直流电。VD1是一个防反接的稳压二极管,起到保护电路的作用。
3.8 空调电源
本系统采用空调变频电源。该产品主要应用于家用空调系统。其基本原理如下:
1 低转速起动。普通空调直接用于50Hz交流电源,因此起动电压要求高(198V),当电压偏低时无法工作。该变频空调电源(下简称电源)可以自适应外界电压,按照恒V/f原则,当V降低时,f亦降低,从而使起动转矩基本不变,使其在转速较低时亦可启动、运转,克服了低电压情况下不能运转的问题。
2 根据环境温度,自适应调节转速,节约电能效果明显,有该电源的空调运行情况:开机时,根据电源电压,选定起动频率f0,逐步增频,到fmax时,高速运转一段时间,当房间温度下降到设定温度℃s时电源自动选择最佳工作频率fs维持房间温度为℃s。而普通空调是通过通断间隔来调整房间温度,因此使房间温度波动范围大;由于频繁的通断,使能耗增加,空调寿命减少。
3 最新的“稳压”概念。普通稳压器通过调整电网电压来满足用户要求,但对于线路较长的供电系统,升压势必增加线路电流,使输入电压进一步下降,从而影响该线路正常工作。本电源针对电网电压的高低,自适应地选择f0、fmax,使空调适应于电网电压,同样达到使空调正常运转的目的,却不增大线路的负载,不影响其它用户的工作。当电网电压太高时,该电源的SPWM算法自动降低电压,维持正常工作。
4 该电源独立成设备,既可满足已安装了空调的用户,也可以和新空调配套销售。性能指标:
1.工作电压范围:165VAC~300VAC;
2.节能效果:和同类无变频电源的空调相比,节能达30~40%;3.噪声:由于没有频繁起动的缺点,噪声可比同类空调低15~25dB。
特点:1.适应电压范围宽;2.节能效果明显;3.独立分体结构,可独立销售,市场应用前景广阔;4.可以降低原空调的噪声,延长压缩机的寿命。
3.9 系统设计电路图
系统设计总电路图如图3-19所示。
图

3-19系统设计总电路
第4章 软件设计
4.1 软件整体设计
本系统的软件设计主要包括以下部分:
主程序:把温度检测程序、温度设定程序、启动/停止压缩机、断电数据保护等子程序有机结合起来。
温度检测程序:单片机不断地扫描DS18B20取得的温度值,并转换成相应的十进制值,并在两位的数码管上显示。
温度设定程序:单片机不断地扫描按键,把用户设定的预期温度值读出来,在数码管上显示。用户可通过两个按键设置预期温度,并在两位数码管上显示。

断电保护程序:当单片机突然断电时,把用户设定的空调工作温度值保存到单片机中的FLASH ROM存储器中;再次上电时,把保存的空调工作温度值读出到RAM中。以文件名的形式细化表示各程序间的调用关系如图4-1所示。
图4-1软件结构图
各个程序文件的功能如下【11】【12】:
main.c 主程序文件,实现系统的初始化,整个系统的运行控制,键值的处理和压缩机处理,断电保护等。
Dig.asm 数码管显示文件,包含显示的端口初始化,显存的刷新,数码管的闪烁等。
Key.asm 按键函数文件,按键的初始化、扫描及获取键值。
flash.asm 断电保护函数文件,内含对flash芯片进行读、写、擦除的用户接口函数 。
ISR.asm 中断服务函数文件,系统的显示刷新、按键扫描、通道的选择及压缩机的启动和关闭均通过中断完成。
Ds18b20_driver.c DS18B20处理文件,DS18B20温度传感器的初始化、读、写操作。
4.2 主程序的设计
4.2.1主程序流程图
主程序流程图如图4-2所示。
4.2.2主程序
主程序的代码:
int main()
{
unsigned int key;
unsigned int uiChannel = 0; // 选中模组中的0通道,1通道不用
float fTemp; // DS18B20读出的温度
V_Alarm[0] = 30; // 上限温度30
V_Alarm[1] = 10; // 下限温度10
Key_Init(); // 始化按键扫描程序
DIG_Init(); // 数码管显示初始化
Sys_Initial(); // 初始化TimerB及IRQ2_TMB中断
while(DS18B20_Initial(0) == 0); // 初始化DS18B20
LoadSD(); // 读出预设的空调工作温度
Tep[0] = g_Data[Temp_Alarm % 10]; // 个位数值,不带小数点
Tep[1] = g_Data[Temp_Alarm / 10]; // 十位数值
DIG_Set(1,Tep[0]); // 显示空调的工作温度值
DIG_Set(2,Tep[1]);
while(1)
{
// 进行一次测温并读取测量温度值
fTemp = DS18B20_ReadTemp(uiChannel);
fTemp += 0.5; // 对十分位四舍五入
DIG_Set(3,g_Data[(int) fTemp%10]); //显示实际的温度
DIG_Set(4,g_Data[(int) fTemp/10]);
if(fTemp >= Temp_Alarm)
{
StartCompressor(); // 温度过高,启动压缩机
}
else
{
StopCompressor(); // 温度过低,停止压缩机
}
key = Key_Get(); //按键扫描
if (key != 0)
Key_Process(key); //按键处理函数
*P_Watchdog_Clear = 0x0001; //喂狗
}
}
4.3温度检测子程序
4.3.1 DS18B20的操作时序
初始化
首先我们必须对DS18B20芯片进行复位,复位就是由控制器(单片机)给DS18B20单总线至少480uS的低电平信号。当18B20接到此复位信号后则会在15~60uS后回发一个芯片的存在脉冲。在复位电平结束之后,控制器应该将数据单总线拉高,以便于在15~60uS后接收存在脉冲,存在脉冲为一个60~240uS的低电平信号。至此,通信双方已经达成了基本的协议,接下来将会是控制器与DS18B20间的数据通信【13】【14】。时序如图4-3所示。

图4-3 DS18B20初始化时序图
写时序
写时间隙分为写“0”和写“1”,时序如图4-4所示。在写数据时间隙的前15uS总线需要是被控制器拉置低电平,而后则将是芯片对总线数据的采样时间,采样时间在15~60uS,采样时间内如果控制器将总线拉高则表示写“1”,如果控制器将总线拉低则表示写“0”。每一位的发送都应该有一个至少15uS的低电平起始位,随后的数据“0”或“1”应该在45uS内完成。整个位的发送时间应该保持在60~120uS,

否则不能保证通信的正常。
写0时序 写1时序
图4-4 DS18B20写时序图
读时序
读时间隙时控制时的采样时间应该更加的精确才行,读时间隙时也是必须先由主机产生至少1uS的低电平,表示读时间的起始。随后在总线被释放后的15uS中DS18B20会发送内部数据位,这时控制如果发现总线为高电平表示读出“1”,如果总线为低电平则表示读出数据“0”。每一位的读取之前都由控制器加一个起始信号。如图4-5所示。

图4-5 DS18B20 读时序图
4.3.2 单片机对DS18B20的操作流程
1.初始化:单总线上的所有处理均从初始化开始
2.控制器发送ROM指令:总线主机检测到DS18B20的存在便可以发出ROM操作指令。其主要目的是为了分辨一条总线上挂接的多个器件并作处理。ROM指令如表4-1。
3.控制器发送存储器操作指令:在ROM指令发送给18B20之后,紧接着(不间断)就是发送存储器操作指令了。存储器操作指令的功能是命令18B20做什么样的工作,是芯片控制的关键。存储器操作指令如表4-2。
4.执行或数据读写:一个存储器操作指令结束后则将进行指令执行或数据的读写,这个操作要视存储器操作指令而定。
表4-1 ROM 指令
表4-2 存储器操作指令
跳过ROM指令[CCH]
这条指令使芯片不对ROM编码做出反应,在单总线的情况之下,为了节省时间则可以选用此指令。
温度转换指令[44H]
收到此指令后芯片将进行一次温度转换,将转换的温度值放入RAM的第1、2地址。此后由于芯片忙于温度转换处理,当控制器发一个读时间隙时,总线上输出“0”,当储存工作完成时,总线将输出“1”。在寄生工作方式时必须在发出此指令后立刻超用强上拉并至少保持500MS,来维持芯片工作。
读内部数据存储器指令[BEH]
此指令将从RAM中读数据,读地址从地址0开始,一直可以读到地址9,完成整个RAM数据的读出。芯片允许在读过程中用复位信号中止读取,即可以不读后面不需要的字节以减少读取时间。
5.把温度值转换成十进制:读出当前的温度数据需要执行两次工作周期,第一个周期为复位、跳过ROM指令、执行温度转换存储器操作指令、等待500uS温度转换时间。紧接着执行第二个周期为复位、跳过ROM指令、执行读RAM的存储器操作指令、读数据(最多为9个字节,中途可停止,只读简单温度值则读前2个字节即可)。温度字节代表的十进制温度值如表4-3所示,当控制器读取了某个温度值后可以根据表4-3算出十进制温度值。
表4-3字节位与测量温度值的关系
4.3.3 温度检测程序
温度检测程序的流程图如图4-6所示

图4-6温度检测程序的流程图
温度检测程序如下:
float DS18B20_ReadTemp(unsigned int uiChannel)
{
int uiTemp=0;
float fTemp=0.0;
unsigned int Data[2];
__asm("int off");
F_18B20_SetSystemCLK();
F_18B20_Reset(uiChannel);
DS18B20_WriteByte(uiChannel,0xcc); // 不进行ROM匹配
DS18B20_WriteByte(uiChannel,0x44); // 启动一次温度采样
while(F_18B20_Read_DQ(uiChannel)==0) // 等待转换结束
{
*P_Watchdog_Clear = 0x0001;
}
F_18B20_Reset(uiChannel);
DS18B20_WriteByte(uiChannel,0xcc); // 不进行ROM匹配
DS18B20_WriteByte(uiChannel,0xbe); // 读取ROM命令
for(uiTemp=0;uiTemp<2;uiTemp++)
{
Data[uiTemp] = DS18B20_ReadByte(uiChannel);
}
F_18B20_Reset(uiChannel);
uiTemp = (Data[1]<<8)|Data[0]; // 取得温度部分
fTemp = (float)uiTemp;
fTemp = fTemp/16; // 转换为实际温度
F_18B20_RsuSystemCLK();
__asm("irq on");
return fTemp;
}
4.4 温度设定子程序
4.4.1 按键消抖

通常的按键所用开关为机械弹性开关,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。因而在闭合及断开的瞬间均伴随有一连串的抖动,如图4-7所示。抖动时间的长短由按键的机械特性决定,一般为5ms~10ms。这是一个很重要的时间参数,在很多场合都要用到。
图4-7按键抖动示意图
按键抖动会引起一次按键被误读多次,为确保CPU对键的一次闭合仅作一次处理,必须去除键抖动。在键闭合稳定时读取键的状态,并且必须判别到键释放稳定后再作处理。
软件消抖:如果按键较多,常用软件方法去抖,即检测出键闭合后执行一个延时程序,产生5ms~10ms的延时,让前沿抖动消失后再一次检测键的状态,如果仍保持闭合状态电平,则确认为真正有键按下。当检测到按键释放后,也要给5ms~10ms的延时,待后沿抖动消失后才能转入该键的处理程序。
4.4.2 按键的设置和显示方法
设置两个按键:key1、key2。key3保留。其中:
Key1:设置升温,每按下一次key1,设置温度的值增1,设置的上限值为30;
Key2:设置降温,每按下一次key2,设置温度的值减1,设置的下限值为10。
当有按键(key1或key2)按下时,只要设定的温度值控制在10—30的范围内,LED数码管的最低两位显示出当前设置的温度值。
4.4.3 温度设置子程序
温度设定的流程如图4-8所示

图4-8温度设定的流程图
温度设定子程序:
void Key_Process(unsigned int key)
{
key &= 0x0007; //共3个按键,key1升温,key2降温,key3保留
switch(key)
{
case 1: // 升温
Temp_Alarm++;
if(Temp_Alarm <= 30)
{
Tep[0] = g_Data[Temp_Alarm % 10]; // 个位
Tep[1] = g_Data[Temp_Alarm / 10]; // 十位
DIG_Set(1,Tep[0]); //显示个位
DIG_Set(2,Tep[1]); //显示十位
SaveSD(); // 保存设定的温度值到flash中
}
else
{
Temp_Alarm--;
}
break;
case 2: //降温
Temp_Alarm--;
if(Temp_Alarm >= 10)
{
Tep[0] = g_Data[Temp_Alarm % 10]; // 个位
Tep[1] = g_Data[Temp_Alarm / 10]; // 十位
DIG_Set(1,Tep[0]);
DIG_Set(2,Tep[1]);
SaveSD();
}
else
{
Temp_Alarm++;
}
break;
default :
break;
}
}
4.5 数据的断电保护子程序
断电的数据保护就是确保当单片机突然断电时,能把用户断电前设定的空调工作温度值保存到单片机中的FLASH ROM存储器中;而在再次上电后,能把断电前单片机保存的空调工作温度值读出到RAM中,空调继续按上次设定的温度工作,直到用户再次设定工作温度。由此可看出,断电保护主要的工作就是对SPCE061A单片机的FLASH ROM进行擦除、写和读的操作。
SPCE061A具有32K字(32K×16位)闪存容量,这32K字的内嵌闪存被划分为128个页,每个页存储容量为256个字。它们在CPU正常运行状态下均可通过程序擦除或写入。全部32K字闪存均可在ICE工作方式下被写入或被擦除。为了安全起见,该单片机不对用户开放整体擦除功能。
用户必须通过向P_Flash_Ctrl (写) ($7555H)单元写入0xAAAA,来启用闪存的存取功能。然后,向P_Flash_Ctrl (写) ($7555H)单元写入0x5511,来擦除页的内容。写入0x5533,对闪存写入。这些指令不能被任何其它的操作打断,包括中断、ICE的单步跟踪动作。这是因为闪存控制器必须保证闪存处于写入状态。如果其它的操作打乱了这个顺序,闪存的状态将发生改变,擦除页和写入的操作不能再继续进行。
此外,为保证数据的正确写入,用户必须在写入之前擦除页的内容。页大小为0x100。第一页地址范围:0x8000~0x80FF,最后一页的地址范围:0xFF00~0xFFFF。0xFC00~0xFFFF范围内的地址由系统保留,用户最好不要用本范围内的地址。
4.5.1读存储单元操作
在芯片上电后,闪存就处于读取状态,读取的操作与SRAM相同。
4.5.2擦除操作
在对闪存写入数据前,必须对闪存进行擦除操作。由于闪存采用分页的数组结构,使得各个存储页可以被独立地擦除。当用户向闪存控制接口发出页擦除命令以后,只要向某个地址写入任意的数据,对应到这个地址的的记忆页就被擦除。要保证擦除操作的正确完成,必须考虑以下几个参数:
1. 该闪存的内部分页结构。
2. 每个页分区的擦除时间。
4.5.3写入操作
闪存芯片的写入操作是自动字节写入, 既可以循序写入,也可指定地址写入。闪存的地址空间为0x8000—0xFFFF,闪存控制接口的地址为0x7555 。第一页范围是[0x8000—0x80FF],最后一页范围是[0xFF00—0xFFFF]。
1. 擦除一页的流程是:先对命令用户接口地址0x7555送出0xAAAA,然后再对命令用户接口地址0x7555送出0x5511,再来对要擦除的记忆页地址写入任意数据,约20ms即可完成擦除操作,之后就可以再进行其它操作。例如擦除第6页[0x8500—0x85FF]流程如下:(1)0x7555 ←0xAAAA (2) 0x7555 ←0x5511(3) 0x85XX←0xXXXX (其中X为任意值)。
2. 写入一个字的流程是:先对命令用户接口地址0x7555送出0xAAAA,然后再对命令用户接口地址0x7555送出0x5533,再来对要写入字的地址写入数据,约40us即可完成写入操作,之后就可以再进行其它操作。例如向0x8000记忆地址写入0xffff流程如下:(1)0x7555←0xAAAA (2) 0x7555 ←0x5533 (3) 0x8000←0xFFFF 。
3. 连续写入多个字的流程是:先对命令用户接口地址0x7555送出0xAAAA,然后再对命令用户接口地址0x7555送出0x5544,再给要连续写入字的起始地址写入字数据,约40us即可完成1个字的写入操作。再对命令用户接口地址0x7555送出0x5544,再对后续要写入的字地址写入字数据,等待40us,循环操作即可完成连续字的写入。

整个擦写的过程如图4-9所示。
图4-9 FLASH ROM的擦写流程
4.5.4数据的断电保护程序
读FLASH ROM的数据的程序如下:
void LoadSD()
{
unsigned int BS_Flag;
BS_Flag=*(unsigned int *)0xe000; //读存储单元0xe000
if(BS_Flag==0xffff) //没有预设的温度值(0xe000内容为0xffff)
{
Temp_Alarm = 25; //首次预设的温度是25°C
F_FlashErase(0xe000); //擦除0xe000开始的flash整页
F_FlashWrite1Word((int) 0xe000,Temp_Alarm); //写入数据25
}
else //存在预设的温度值(0xe000内容不为0xffff)
{
Temp_Alarm = BS_Flag; //读出数据
}
}
写数据到FLASH ROM的程序如下:
void SaveSD()
{
F_FlashErase(0xe000); //擦除0xe000开始的flash整页
F_FlashWrite1Word((int) 0xe000,Temp_Alarm); //写入数据
}
4.6 系统的干扰源及抗干扰对策
控制器的电气干扰主要来自以下几个方面:
1 电网的干扰:来自电网的干扰包括电网电压波动持续噪声及谐波的各种噪声干扰。
2 电源的干扰:电源的干扰包含尖峰脉冲在电源设计中、元件选用不当或器件的不稳定都将出现电源干扰而使单片机的工作电压不稳。
3 继电器动作引起的干扰:继电器动作尤其是多个继电器同时开源的输出产生一定的尖峰干扰。
各方面的干扰最终都可能引起控制器单片机的误动作、程序弹飞或者进入非正常死循环,影响按制器的优良性能:为提高控制器的抗干扰能力和单片机的可靠性,采取了以下几点措施:
1 硬件抗干扰方法:G采用电源线滤波器:由共模电感、电容和电阻构成的大源滤波器如图4-10所示。Cxl、CX2用来衰减差模干扰.CYl.CY2用来衰减共模干扰:这种电源绥滤波器对以很好地滤除来自交流电源线的干扰,同时还可以防止开关电源的干扰传人电网干扰其它设备。

图4-10 电源线滤波器原理图
(1)供电电源采用升关电源。采用开关电源可以最大程度地抗干扰.保证输出电压的稳定。目前普遍采用的是RCC或者LC3844、ToP9wUcL等专用芯片的开关电源。为保证电源输出级电压的可靠.可以再加“Π”型等滤波电路
(2)采用电压监测电路。SPCE061A单片机本身带有低电压复位功能,可充分利用这一特性以达到抗干扰的目的。
2 软件抗干扰方法
(1)采用Watchdog方法。在进入非正常循环时Watchdog就会出为溢出而对单片机复位,使系统恢复到正常状态,从而起到了抗干扰的作用。
(2)加入冗余指令。在继电器操作指令后加入若干条NOP指令以躲避电源尖峰干扰对单片机的影响。
(3)软件滤波方法。也电源产生波动时,单片机内部集成的ADC对传感器的采样误差也会较大,从而可能影响控制的正确性,因此需要对AD输入进行滤波:可以采用简单的多次采样后求平均值的算法以得到正确的传感器输入值。
(4)软件陷阱。在未用的中断向量区和未使用的程序存储区加入语句:UHF RESET.把弹飞程序重新引入正常程序,这也是一种有效办法。