2.2温度检测与控制主程序
主程序功能:完成系统初始化操作;判断温度是否超限,如果超限则转报警处理,如果未超限则读入K1、K2、K3、K4状态,并根据其输入状态,散转执行相应的功能子程序。主程序流程图如图6所示。
图6 主程序流程图
2.3主要的子程序流程图
1)PID运算子程序:取出温度给定值与测量值,计算出偏差信号e(k),将e(k)与设定的死区值比较,如果P(足)未超出死区范围,则本次输出调节量为0,返回检测程序;如果e(k)超出死区范围,则计算出p(k)=Pp(k)+P1(k)+Pn(k)的调节输出值。
2)步进电机驱动程序:本系统选用三相步进电机,采用三相六拍工作方式,各绕组供电的步进信号由8155的A口控制,其转动方向及通电顺序字见表1。
表1 步进电机转动方向及通电顺序字
根据步进电机的转向与工作时绕组通电顺序变化规律,可以在8155的RAM中设置步进电机的控制字表,如表1所示,表头地址为TABO,表尾地址为TAB7。显然,驱动信号从TAB0开始控制通电顺序,电机为正转;若从TAB7开始控制通电顺序,则电机为反转。
步进电机的转速由脉冲信号的周期T决定。脉冲信号的周期由CPU通过延时程序或定时器/计数器的定时时间来确定。系统中的三相绕组由8155的A口控制是,程序中的延时时间为10电机的转速为:n=60/(N×T)转/分
式中N一电机转动一周应输出的控制字节数。采用三相六拍工作时,步距角为1.5°,则有:N=360°/1.5°=240,即转一周要输出240个字节控制字。设旋转角度与输出控制字节数M的关系为M=a/1.5°,只要把M保存在字节计数器里,每输出一个字节,步进电机转动一步,同时将字节计数器减1,当字节计数器为0时,步进电机转动了M步,对应的角度为a。
图7所示为驱动步进电机转动一步的子程序流程图。入口条件DPTR中已存放步进电机的控制字表的地址,设正转时R5置为01H,R6为FAH;反转时置R5为FFH,R6为06H。调用本程序前应已对8155进行了初始化,每输出一个字节后延时1OOms。设置R5、R6是为了保证步进电机按两种不同顺序改变控制字表的地址指针,以完成正转或反转操作。步进电机驱动程序流程图如图8所示。调用该程序前应将步进电机的转动步数和方向标志存放在R4R3寄存器中,符号为1表示反转,为0表示正转,其绝对值代表转动步数。
图7 电机转动一步的子程序流程图
图8 步进电机驱动程序流程图
3)A/D转换子程序。该子程序由单片机的P2.2启动A/D转换,根据ICL7109的STATUS的状态判断转换是否完成,若A/D转换完成,将芯片置为保持状态(HOLD信息有效)。然后,分两次由P0口读入转换后的12位数据存入单片机内部R0指示的RAM单元中。连续采集5次,再经中值滤波及线性化程序段处理,得出一次温度检测值。该程序只对应一个温度检测点,未涉及对其他检测点和参量的巡回检测问题。图9所示为A/D转换子程序流程图。
图9 A/D转换子程序流程图
3 结论
AT89C5l单片机具有高可靠性、控制方便简单和灵活性大等优点。控制器采用PID控制算法,控温精度高,误差精度小于0.08%,稳态误差可达±3℃以内。采用AT89C51单片机来对温度进行控制,具有控制方便、组态简单和灵活性大等优点,整个系统操作简便、抗干扰能力强、运行可靠、反应速度快,可以大幅度提高被控系统温度的技术指标。