P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P0口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的低八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须接上拉电阻。
P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为低八位地址接收。
P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口,如下表所示: 口管脚备选功能: P3.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 /INT0(外部中断0) P3.3 /INT1(外部中断1) P3.4 T0(记时器0外部输入) P3.5 T1(记时器1外部输入)
6
P3.6 /WR(外部数据存储器写选通) P3.7 /RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的低位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器
(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。 3.2键盘模块
在本次设计当中,输入设备采用4*4矩阵键盘。当“设定”键按下时触发键盘中断服务程序,由程序程控扫描法确定那个键按下并执行相应的动作。程控扫描的任务是:
(1)首先判断是否有键按下。
方法:使所有的行输出均为低电平,然后从端口A读入列值。如果没有键按下,则读人值为FFH.如果有链按下.则不为FFH。 (2)去除键抖动。
方法:延时10—20 ms,再一次判断有无键按下,如果此时仍有键按下,则认为
7
键盘上确实有键处于稳定闭合期。 (3)若有键闭合,则求出闭合键的键值。 方法:对键盘逐行扫描。
程序中需等闭合键释放后才对其进行处理。 3.3设计输入输出通道
输入通道:因为所控的实际温度在50 ~ 350℃,即(350-50)=300所以选用8位A/D转换器,其分辨率约为1.5℃/字,再加放大器偏置措施实现。(通过调整放大器的零点来实现偏置)这里采用一般中速芯片ADC0809。ADC0809是带有8位A/D转换器,8路多路开关以及微型计算机兼容的控制逻辑的CMOS组件,其转换方法为逐次逼近型。8路的模拟开关由地址锁存器和译码器控制,可以在8个通道中任意访问一个通道的模拟信号。这种器件无需进行零位和满量程调整。由于多路开关的地址输入部分能够进行锁存和译码,而且其三态TTL输出也可以锁存,所以它易于与微型计算机接口。其具有较高的转换速度和精度,受温度影响较小,能较长时间保证精度,重现性好,功耗较低,故用于过程控制是比较理想的器件。
ADC0809应用接线图
输出通道:据其实际情况,D/A转换器的位数可低于A/D转换器的位数,因为一般控制系统对输出通道分辨率的要求比输入通道的低,所以这里采用常用的DAC0832芯片。DAC0832是8位D/A转换器,与微处理器完全兼容。期间采用先进的CMOS工艺,因此功耗低,输出漏电流误差较小。它的内部具有两级输入数据缓冲器和一个R-2RT型电阻网络,因DAC0832电流输出型D/A转换芯片,为了
8
取得电压输出,需在电流输出端接运算放大器,Rf为为运算放大器的反馈电阻端。
双极性电压输出的D/A转换电路通常采用偏移二进制码、补码二进制码和符号一数值编码。只要在单极性电压输出的基础上再加一级电压放大器,并配以相关电阻网络就可以构成双极性电压输出。在上图中,运算放大器A2的作用是把运算放大器A1的单向输出电压转变为双向输出。 3.4电源部分
本系统所需电源有220V交流市电、直流5V电压和低压交流电,故需要变压器、整流装置和稳压芯片等组成电源电路。电源变压器是将交流电网220V的电压变为所需要的电压值,然后通过整流电路将交流电压变为脉动的直流电压。由于此脉动的直流电压还含有较大的纹波,必须通过滤波电路加以滤除,从而得到平滑的直流电压。但这样的电压还随电网电压波动(一般有+-10%左右的波动)、负载和温度的变化而变化。因而在整流、滤波电路之后,还需要接稳压电路。稳压电路的作用是当电网电压波动、负载和温度变化时,维持输出直流电压稳定。整流装置采用二极管桥式整流,稳压芯片采用78L05,配合电容将电压稳定在5V,供控制电路、测量电路和驱动执行电路中弱电部分使用。除此之外,220V交流市电还是加热电阻两端的电压,通过控制双向可控硅的导通与截止来控制加热电阻的功率。低压交流电即变压器二次侧的电压,通过过零检测电路检测交流电的过零点,送入单片机后,由控制程序决定双向可控硅的导通角,以达到控制加热电阻功率的目的。
四、软件设计
4.1系统主程序
本系统的应用程序主要由主程序、中断服务程序和子程序组成。主程序的任务是对系统进行初始化,实现参数输入,并控制电加热炉的正常运行。主程序主要由系统初始化、数据采集及处理、智能推理等部分组成。系统初始化包括设置栈底、工作寄存器组、控制量的初始值、采样周期、中断方式和状态、定时器的工作方式以及8255的初始化、MAX1232的初始化等。数据采集及处理主要包括实时采集电加热炉的炉温信号,计算出实际炉温与理想值的差值以及温差的变化率,并对炉温信号进行滤波和限幅处理。
9
开始 系统的初始化 温度数据采集及处理 温度值显示 计算温差e(k)和温差变化率 N Y 智能控制算法程序 e(k)?0? 求出输出控制量 控制输出 结束 图4.1系统主程序
4.2模数转换模块
ADC0809是一个典型的逐次逼近型8位A/D转换器。它由8路模拟开关、8位A/D转换器、三态输出锁存器及地址锁存译码器等组成。它允许8路模拟量分时输入,转换后的数字量输出是三态的(总线型输出),可以直接与单片机数据总线连接。ADC0809采用+5V电源供电,外接工作时钟。当典型工作时钟为500KHz时,转换时间约为128us.
(1) 时钟信号:由于ADC0809无片选端,因此电路增加了或非门74LS02,
以便对ADC0809进行读/写控制。单片机采用6MHz/s的晶振,ALE输出66MHz/s时钟信号,经74LS74触发器2分频,得到500KHz的时钟信号,与ADC0809的时钟端CLK相连。
(2) 通道选择:三位通道选择端ADDA、ADDB、ADDC与数据线P1口的低三
10