目录一、设计题目与设计任务 (1)1.设计题目:单片机压力测控系统设计 (1)2.设计任务 (1)二、前言 (1)三、主体设计 (1)1、系统设计 (1)2、系统框图 (1)3、设计思路 (2)4、压力传感器和A/D转换芯片选择 (2)(1)压力传感器1210—030 G—3 S (2)(2)AD模数转换芯片ADC0809 (3)四、参考文献 (4)五、结束语 (4)六、完整程序 (5)七、仿真结果 (7)八、程序流程图 (9)一、设计题目与设计任务1.设计题目:单片机压力测控系统设计2.设计任务1、本设计是微机控制的制氧机压力测控系统。
单片机系统通过压力传感器和检测比较器测得气缸内压力达到某一上限值(176 kPa)和下限值(64 kPa)时,单片机系统控制执行相应的动作(达到上限值时打开放气阀放气,达到下限值关闭放气阀进行充气)。
如此反复循环,不断将氧气提供给需氧者。
在此过程中若充气或放气10 s仍达不到设定值(176 kPa和64 kPa)则进行光报警。
2、写出压力测量过程,绘制压力控制系统结构图。
3、(1)系统硬件电路设计。
单片机采用89S52;选择适合上述测量范围的压力传感器,设计数据采集及信号调理电路,设计键盘显示电路及报警电路。
(2)编制压力测量程序。
二、前言本设计为基于AT89S52单片机的气缸压力测量与控制系统,压力传感器选择1210—030G—3S,能够在0~207kPa范围内有效测量气缸供氧系统的压力,并进行实时压力(LED)显示。
单片机控制部分实现当压力超出上限值176kPa时,放气阀打开进行放气,当压力低于下限值64kPa时,放气阀关闭,气缸充气;压力在正常范围(64~176kPa)时,压力改变不影响放气阀的状态。
报警功能实现当压力超出设定的压力范围(64~176kPa)10S时,发光二极管点亮进行报警。
关键词:AT89S52单片机、1210—030G—3S型压力传感器、LED显示、报警。
三、主体设计1、系统设计考虑到过程控制系统的一般组成及本次设计的任务要求,本设计主要由以下几部分组成:被控对象(气缸及附带的进气阀和放气阀)、压力传感器FT、A/D转换(ADC0808)、AT89S52单片机、LED显示、报警电路和放气阀驱动电路。
2、系统框图基于AT89S52的压力测控系统3、设计思路压力传感器(1210—030G—3S)测量气缸中的压力(0~207kPa)输出电流信号(75~150mA),经A/D模数转换(结果为00000000~11111111即0~255)后给单片机,单片机进行算法处理将传感器的输出信号和测量的压力对应起来并实时显示在LED 上,当所测压力大于176kPa时,放气阀打开进行放气,当所测压力小于64kPa时,放气阀关闭,进气阀给气缸充气。
此过程中若放气或充气10S任没达到正常的压力范围则进行1S报警。
当然A/D转换的启停、压力大小的判断、10S延时都由单片机来控制。
4、压力传感器和A/D转换芯片选择(1)压力传感器1210—030 G—3 S网上查找了很多压力传感器,其中较为典型常用的是上海名动公司生产的MD —PS系列和MD—GA高精度绝压传感器,但是由于二者都不适合本次课程设计的压力范围(0~200kPa),最终选择1210—030G—3S压力传感器,它的测压范围为30*6.895=207kPa,输出电流范围是75~150mA,性能参数如下:典型应用电路如下:设计仿真时由于PROTEUS中没有传感器,因此用一个范围为75~150分压电路代替传感器的输出电流,使的仿真得以进行。
(2)AD模数转换芯片ADC0809ADC0809是目前广泛使用的逐位逼近型8位单片A/D转换芯片,片内含8 路模拟开关,可允许8路模拟量输入。
主要由3部分组成:模拟输入选择部分、转换器部分、输出部分。
ADC0809芯片为28引脚为双列直插式封装,ADC0809主要信号引脚功能说明如下:IN7~IN0——八路模拟量输入通道。
ALE——地址锁存允许信号。
START——转换启动信号。
START=1转换启动。
A、B、C——地址线、通道端口选择线。
CLK——时钟信号。
ADC0809要求外接时钟频率为10kHz~1.2MHz。
通常使用频率为500KHz的时钟信号。
EOC——转换结束信号。
EOC=1,转换结束。
D7~D0——数据输出线。
OE——输出允许信号。
OE=1,输出转换得到的数据。
Vcc——+5V电源。
Vref——参考电源参考电压用来与输入的模拟信号进行比较,作为逐次逼近的基准。
其典型值为+5V(Vref(+)=+5V, Vref(-)=-5V)。
ADC0809与MCS-51单片机的连接主要涉及两个问题。
一是8路模拟信号通道的选择,二是A/D转换完成后转换数据的传送。
转换数据的传送有定时传送方式、查询方式、中断方式这三种方式。
A、B、C的值与被选择的通道之间的关系如下表1—1所示:表1—1 通道选择表实际画图时由于PROTEUS中没有ADC0809,因此用ADC0808代替。
ADC0808和ADC0809的使用接发相同,只是ADC0809的转换误差为1位,ADC0808为5位而已。
四、参考文献1. 《51单片机原理及应用—基于Keil C与Proteus》陈海宴北京航空航天大学出版社。
2. 《单片机原理与接口技术》第二版马淑华等北京邮电大学出版社。
3. 《微型计算机原理与接口技术》第二版冯博琴吴宁清华大学出版社。
五、结束语本次课程设计历时一周,除键盘电路外基本完成了所要求的设计任务。
设计过程中参考了陈海宴老师编著的《51单片机原理及应用—基于Keil C与Proteus》一书中数字电压表的设计。
本设计的难点在于:考虑到现场传感器的气体压力测量与传感器输出是实时进行的,因此ADC0808的模数转换必须时刻进行,至少两次转换之间的时间间隔不能太长。
但是如果一次转换完成后立即进行下一次转换,则对应的转换子程序就是一个死循环,这样的话就不能进行报警,因为无法取出10S之后的转换数据。
考虑到这个问题之后再转换之程序中做一个0.1S的延时,这样每次转换大约耗时0.1S,转换子程序进行多少次转换通过主程序来控制,这样调用转换子程序100次之后就可以得到10S以后的转换结果,将转换结果和压力上下限比较以后就可以决定是否进行报警了。
当然,这样做的局限是使得LED的显示不那么连续了。
因此,进一步想办法解决这个问题是我们以后应该继续做的。
设计过程中老师和同学给了我很多支持和帮助,这里一并致谢!六、完整程序#include<reg51.h>#define uint unsigned int#define uchar unsigned charuchar code table[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xf6,0xee,0x3e,0x9c,0x7a,0x9e,0x8e};//七段共阴数码管编码表sbit START=P3^0;sbit EOC=P3^1;sbit OE=P3^2;sbit ONOFF=P3^3; //控制放气门开或关sbit ALARM=P3^4; //报警显示void delay(uint m) //LED显示延时子程序{while(m--);}delay1(uint c) //循环间隔延时C毫秒子程序{uchar a,b;for( ;c>0;c--)for(b=142;b>0;b--)for(a=2;a>0;a--);}void fun1(uint i) //AD转换及数据处理子程序{uint P;extern uint PP; //定义全局变量PPSTART=1;START=0;while(i>0) //fun1只执行i次{if(i>0){OE=1; //转换结束输出使能P=P0; //AD转换结果赋给PP=P*1.0/255*207; //完成75~150mA到0~207kPa的转换OE=0; //停止输出P2=0xfe; //个位位选P1=table[P%10]; //个位段选delay(500); //个位显示延时约1msP2=0xfd; //十位位选P1=table[P/10%10]; //十位段选delay(500); //十位显示延时约1msP2=0xfb; //百位位选P1=table[P/100%10]; //百位段选delay(500); //百位显示延时约1msif(P>176)ONOFF=1; //打开放气阀if(P<64)ONOFF=0; //打开放气阀i=i-1;delay1(100); //每次转换后延时100ms(0.1s)START=1; //启动下一次转换START=0;}}}void main() //主程序{ONOFF=0; //初始时放气阀关闭START=0; //初始时不进行AD转换ALARM=0; //初始时不报警OE=0;while(1) //死循环{fun1(1); //调用一次转换子程序PP=P; //转换处理结果(压力值)给PPif(PP>176||PP<64) //判断压力是否超限{fun1(100); //压力超限则调用转换子程序100次,用时约0.1*100=10s PP=P;if(PP>176) //10s后压力任超出上限则进行报警{ALARM=1;delay1(1000); //报警显示延时1s}if(PP<64) //10s后压力任超出下限则进行报警{ALARM=1;delay1(1000); //报警显示延时1s}if(64<PP<176) //10s后压力正常则不进行报警{ALARM=0;delay1(1000);}}else if(64<PP<176)ALARM=0; //10s后压力正常则不报警}}七、仿真结果正常压力范围,放气阀关闭压力超出上限,放气阀打开压力超出上限10S后仍未恢复正常报警八、程序流程图NY开始 初始化 P<64||P>176 启动A/D 转换采集模拟信号转化成0-207KPa 压力扫描数据并进行 LED 动态显示。