资源描述
上海交通大学机电控制技术课程设计题目: 液位控制系统 指导教师:张银桥院 系:机械与动力工程学院姓 名: 学 号:其他组员: 目录(一)设计背景-3(二)设计方案的分析与确定-42.1 设计任务与要求-42.2 系统总体方案的确定-5(三)硬件的选择与设计-73.1 A/D转换器-73.2 运算放大电路-8存储器扩展-103.4 LED的连接-133.5 拨码盘的设计-143.6 光电隔离和电机控制电路-143.7 测量液位传感器的选择-14(四)软件功能的设计-15(五)设计说明-29(六)设计小结-46(七)致谢-46(八)参考文献-47(一)设计背景单片机作为微型计算机发展中的一个重要分支,以其可靠性、高性能价格比、低电压、低能耗等优势,广泛应用于工业控制等领域,它具有系统结构典型、灵活、通用性强、指令完整丰富,计算机技术系统化、理论和应用精密结合,外部配件丰富,接口简单等诸多独特优点,非常适合工业控制,但在实际应用工程中单片机控制系统的控制算法及其实现是应用人员在系统设计中应注意的问题,必须根据实际控制的需要进行研究设计,设计方案一定是合理的、可行的。否则,如果很随意地制定一个方案,而它又存在缺陷和错误,那么,后续工作做得愈多,花的时间愈长,损失也愈大。本文以居民屋顶水箱液位为控制对象,给出了用8031单片机实现的液位控制系统。(二)设计方案的分析与确定2.1 设计任务与要求 设计任务要求设计一个以8031单片机为核心的液位控制器,对居民屋顶水箱中的液位进行测量显示并控制水位在一定高度。 设计要求1 居民用水作为水箱出口,无规则;水箱进水受电动水泵控制,当水位低于某给定值时,起动水泵工作,当水位达到给定值时停止水泵工作。2 当单片机系统故障时,可以手动控制液位,防止居民断水引起不便。3 操作简单。 设计条件传感器采用压力传感器,水箱最大深度为2米。一般将水位控制在左右。10cm认为是合适的。2.1.4 设计提示4 显示的设计:显示液位高度需要4位数码管,5 键盘的设计:能设定液位值,但必须在断电的情况下能保存该设定值,最好用拨码盘。6 压力传感器输出信号为420mA,量程可根据需要选择。2.2 系统总体方案的确定 系统框图 本次设计的液位控制系统,它通过一个压力传感器将液位信号转换成电流信号,再通过运算放大器转化成合适的电压信号输送给AD转换器再将数字信号送单片机,然后单片机将液位值送到数码管输出,居民设定液位值通过拨码盘输入,单片机将设定值与测量值比较,控制水泵启停。系统框图如下图所示: 系统总体方案的初步确定通过对设计要求的分析,首先初步确定系统的工作流程。系统开机初始化后通过AD转换器读入液位的测量值。再将液位值用数码管显示,然后从拨码盘中读入用户设定的液位值,与测量值比较,控制电机动作。然后通过循环多次调用液位显示子程序,达到液位一直显示的效果,同时也起到了定时的作用,在初步确定系统的工作流程后,根据设计的具体要求与工作方式选择出各部分的具体硬件。然后根据各部分硬件的性质与设计所要达到的目的,分别完成相应的程序。最后,将各程序整合,完成该液位控制系统的设计。在进行以上设计的同时,画出表明各部分之间接线关系的电路原理图。 系统流程图经过以上分析可确定系统的流程图如下: 电路原理图我们用Proteus软件画图,下面是主电路和辅助电路。(三)硬件的选择与设计3.1 A/D转换器A/D转换器选用ADC0809。ADC0809是带有8位A/D转换器、8路多路开关以及微处理机兼容的控制逻辑的CMOS组件。它是逐次逼近式A/D转换器,可以和微机直接接口。其姐妹芯片是ADC0808,可以互相替换。ADC0809的内部逻辑结构:ADC0809的内部逻辑结构如上图所示。由上图可以看出,ADC0809有一个8路模拟开关、一个地址锁存与译码器、一个A/D转换器和一个三态输出锁存器组成。多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用一个A/D转换器进行转换。三态输出锁存器用于锁存A/D转换完的数字量,当OE端为高电平时,才可以从三态输出锁存器取走转换完的数据。引脚结构:ADC0809采用双列直插式封装,共有28条引脚。其引脚结构图如下图所示。(1)IN0IN7:8条模拟量通道 ADC 0809对输入模拟量要求:信号单极性,电压范围是05v,若信号太小,必须进行放大;输入的模拟量在转换过程中应该保持不变,如若模拟量变化太快,则需在输入前增加采样保持电路。(2)地址输入和控制线:4条ALE 为地址锁存允许输入线,高电平有效。当ALE现为高电平时,地止锁存与译码器将ADDA、ADDB和ADDC三条地址输入线,用于选通IN0IN7上的一路模拟量输入。通道选择如下表所示。我们只用IN0通道,所以直接将ADDA、ADDB和ADDC接地。ADDCADDBADDA选择的通道000IN0001IN1010IN2011IN3100IN4101IN5110IN6111IN7(3)数字量输出及控制线:11条START 为转换启动信号。当START上跳沿时,所有内部寄存器清零;下跳沿时,开始进行A/D转换;在转换期间,START应保持低电平。EOC位转换结束信号。当EOC为高电平时,表明转换结束;否则,表明正在进行A/D转换。OE为输出允许信号,用于控制三态输出锁存器向单片机输出转换得到的数据。OE=1,输出转换得到的数据;OE=0,输出数据线呈高阻状态。D7D0位数字数出线。(4)电源线及其他:5条CLOCK为时钟输入信号线。因ADC0809的内部没有时钟电路,所需时钟信号必须有外界提供,通常使用频率为500KHz的时钟信号。Vcc为+5V电源线。GND为地线。Vref(+)和Vref(-)为参考电压输入,参考电压用来与输入的模拟信号进行比较,作为逐次逼近的基准。其典型去值:Vref(+)=+5v,Vref(-)=0v.接线图如下图所示:3.2 运算放大电路压力传感器把压力信号转换成模拟电流,当液位从0m变化到1m时,压力传感器输出电流是从4mA到20mA。我们通过一个运算放大电路把4mA到20mA的电流信号转化成0到5V的电压信号。电路用了三个741芯片,共有三个步骤。第一个步骤:压力传感器与一个250的电阻串联成回路,U0=I*R12U1=U0第二个步骤:用运算放大器将1到5伏的电压信号通过减法运算转化成0到-4伏的电压信号,(U1-u)/R5=(u-U2)/R7u=12V*R11/(R11+R6)第三个步骤:用一个运算放大器反相,就得到了0到5伏的电压信号。U3=-U2*R9/R23.3 存储器扩展由于本程序用到的数据并不多,内部RAM已经够用了,所以就没有扩展外部数据存储器,我们只扩展了4K的外部程序存储器2732。A8口到A11口接到了P2.0到P2.3,2732的片选段接到了A12上。其中还用到了地址锁存译码器74LS373。接线图如下图:3.4 LED的连接我们用LED数码管来显示液位,用到了4位的数码管,第二位显示小数点,显示到小数点后二位,ABCDEFG和DP八个接口接到了P0口上,数码管的选择端接到了译码器74LS139上,这样可以减少与单片机的连线。译码器的片选连在了A14上。数码管的显示是通过动态扫描的方式。通过A8,A9选择四个数码管,循环点亮,扫描的频率很高,给人以连续显示的效果。3.5 拨码盘的设计我们选择拨码盘作为用户设定水位的输入工具,主要是因为拨码盘使用直观简单,稳定可靠,易于操作,设定的数值断电仍可保存。拨码盘示意图和原理图如下。上图是我们拨码盘的连线图,我们用到了两个拨码盘用来输入液位的小数点后一位和两位。拨码盘的com端起到片选作用,连到译码器上。拨码盘的1,2,4,8四个接口接到P0口的低四位上。由于在软件中未找到拨码盘,故未画出,只画出五个接线端。3.6 光电隔离和电机控制电路为了防止输出对输入可能产生的反馈和干扰,采用了光电耦合器MOC3031M,最后通过一个继电器KM就可以控制电机的启停。3.7 测量液位传感器的选择为了测量液位,我们选择了TBP-4投入式液位变送器。TBP-4投入式液位变送器用途和特点:采用进口芯片,质量可靠,液位测量计不受外界大气压的影响,具有优良的密封剂防腐性能,测量准确,长期稳定性好。适用于很多领域。量程规格我们选择10:存在的问题是测量的范围小于量程的五分之一,会影响精度。(四)软件功能的设计程序如下: ORG 0000HMAIN: MOV 30H,#00H;RAM区清零 MOV 31H,#00H; MOV 32H,#00H; MOV 33H,#00H; MOV 35H,#00H; MOV 36H,#00H; MOV 37H,#00H; MOV 38H,#00H; MOV 40H,#00H; MOV 41H,#00H; MOV 42H,#00H; MOV 43H,#00H; MOV 44H,#00H; ACALL HADC;调用液位检测子程序 ACALL DISP;调用显示当前液位 ACALL BMP;调用拨码盘读数子程序 ACALL CONT;液位控制子程序LOOP1:MOV R0,#200;LOOP2:MOV R1,#200; ACALL DISP;调用显示当前液位 DJNZ R1,LOOP2; DJNZ R0,LOOP1; AJMP MAIN;测量液位子程序HADC: MOV 31H,#00H; MOV 30H,#00H; MOV R2,#04H;采样次数 MOV DPTR,#7FF0H;HADC0:MOVX DPTR,A;HADC1:JNB P3.2,HADC1;查询AD转换结束 MOVX A,DPTR; CLR C; ADD A,31H; MOV 31H,A; ADDC 30H,#0; DJNZ R2,TADC0; MOV A,31H; CLR C; RRC A; CLR C; RRC A; MOV 31H,A; MOV A,30H; RR A; RR A; ADD A,31H; MOV 31H,A;得到平均值,存在31H中 RET;控制电机子程序CONT: MOV 32H,31H;液位测量值从31H中取出放入32H MOV A,32H; CLR C; MOV 33H,43H;液位设定值从43H中取出放入33H SUBB A,33H; JC CONT1;若液位偏低,跳转,液位偏高则继续执行 CLR C; SUBB A,#6;偏差值与5cm相比较 JC CONT2;过高则Cy=0,继续,否则跳转 SETB P1.0;关电动机 SJMP CONT2;CONT1:CPL A;液位偏低情况 CLR C; SUBB A,#6;偏差值与5cm相比较 JC CONT2;过低则Cy=0,继续,否则跳转 CLR P1.0;开电动机CONT2:RET;拨码盘读数转化子程序BMP:MOV R1, #40H ;存放单元首址 MOV R2, #DCH ;读第一个拨码盘数,小数点后第二位 MOV A, R2 MOV P2, A MOV A, P0 ANL A, #OFH MOV R1, A INC R1 MOV R2, #DDH ;读第二个拨码盘数,小数点后第一位 MOV A, R2 MOV P2, A MOV A, P0 ANL A, #0FH MOV R1, A INC R1 MOV R2, #DEH ;读第三个拨码盘数,整数部分 MOV A, R2 MOV P2, A MOV A, P0 ANL A, #0FH MOV R1, A CLR C SUBB A,#2 JC BMP1 MOV R1,#2;如果整数部分大于1,则默认为2m DEC R1 MOV R1,#0 DEC R1 MOV R1,#0BMP1:MOV A,42H MOV B,#100 MUL AB MOV 43H,A MOV A,41H MOV B,#10 MUL AB ADD A,43H ADD A,40H MOV 43H,A;存放0到200间的液位设定值;43H*255/200;43H+43H/4+43H/40MOV A, 43H CLR C RRC A CLR C RRC A ADD A,43H MOV 44H,A MOV A,43H MOV B,#40 DIV AB ADD A,43H ADD A,44H MOV 43H,A;液位设定值存在43H中 RET;液位显示数码管子程序(约50个机器周期)DISP:MOV 35H,31H;液位测量值从31H中取出放入35H中 MOV A,35H; MOV B,#200; MUL AB; MOV 36H,B;高位 MOV 37H,A;低位 ADD A,36H; MOV 38H,B; ADDC 38H,#0; ADD A,#01H; ADDC 38H,#0;(35H)*200/255的商 MOV A,38H; MOV B,#100; DIV AB;A,B对应百位和十个位;X*200/255;Y=X*200=256*36H+37H;Y/255=36H+(36H+37H)/255 MOV DPTR,#TAB MOVC A,A+DPTR MOV P2,#B0H; MOV P0,A; NOP NOP NOP MOV P2,#B1H; MOV P0,80H; NOP NOP NOP MOV A,B MOV B,#10; DIV AB;A,B对应十位和个位 MOVC A,A+DPTR MOV P2,#B2H; MOV P0,A; NOP NOP NOP MOV A,B MOVC A,A+DPTR MOV P2,#B3H; MOV P0,A; NOP NOP NOP RETTAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH(五)使用说明一、本产品适用于居民用屋顶水箱,水位高度不能超过两米。二、本产品有自动调节水位和手动调节水位两种功能。可以通过按钮SA在两种功能之间进行切换。三、在自动模式下:1.用户设定的水位值通过拨码盘输入。输入单位是厘米。2.水箱水位显示在数码管上,显示数据的单位是米。10cm。四、在手动模式下:按动按钮SB2开启水泵,向水箱注水,按动按钮SB1停止向水箱注水。(六)设计小结本次的机电课程设计,在得到参考题目之后,我们小组就进行了比较长时间的周密准备,对于题目的选取进行了多次的讨论。最后根据本次课程的重点内容,我们选取用单片机实现的液位控制系统作为本次设计的题目。在确定题目之后,我们首先对总体设计方案进行了考虑。这里,我们设计单片机每隔一定的时间采集一次数据并处理数据实现电机启停。为了实现这个时间间隔,我们想到了两种方法,一种是通过定时器中断的方式来实现。还有一种通过循环多次调用数据显示子程序,利用执行子程序花掉的时间来实现定时间隔。我们小组成员分别采用了不同的方法。我采用了第二种方法。在设计中有一些细节问题,例如传感器输出的电流信号怎样转变成合适的电压信号,怎样实现光电隔离,我们一起讨论,解决了这些问题。然后,我们对设计的硬件进行了设计。主体单片机芯片,我参考设计要求,需用8031芯片。在液位测量实现上,我们选用传感器AD590以及0809芯片,作为液位的采样以及读取。同时,我们还选用了LED数码管以及拨码盘等部件。在整体硬件规划好之后,我们开始了硬件电路图的绘制。这里,我们使用的是Proteus软件来实现。由于原来对该软件了解不多,所以在软件的应用上面也下了很大的苦功夫。在电路的设计中,怎样合理的接线也是一个很大的问题,我们不断地进行了修改,才得到了最后的结果。在完成硬件电路图以后,我们开始了软件的设计。对于软件的基本设想是:先编写好主程序,主程序调用数据采集,数据显示,电机控制等子程序。再分别编写各个子程序。在大家的努力下,通过查阅了很多资料,我们最终成功的完成了软件的设计。至此,课程设计基本完成了。在这次设计中,我们相互学习,共同努力,收益良多。对于单片机的知识加深了理解,在实际的应用中锻炼了解决问题的能力,更重要的是学到了只要不放弃努力,任何困难都能克服的人生哲理。这对与我们今后成长为合格的工程师是大有裨益的。 (七)致谢首先要感谢张银桥老师这一个学期以来在这门课程上对我们的指导与帮助,张老师上课富有激情的讲解引发了我对单片机的兴趣,帮我们加深了对单片机的了解。另外,感谢小组的另外两名成员,大家的共同合作与努力使这次课程设计任务得以圆满完成。(八)参考文献1王显正 机电控制技术 上海交通大学机械工程系2杨居义单片机课程设计指导 清华大学出版社3. 杨居义单片机原理与工程应用 清华大学出版社4. 李朝青 Proteus入门实用教程 北京航空航天大学出版社5. 刘迎春 传感器原理设计与应用 国防科技大学出版社6. 沈红卫 单片机应用系统设计实例与分析 北京航空航天大学出版社附录:硬件定时程序:ORG 0000HAJMP MAINORG 000BHAJMP TT0ORG 0100HMAIN: MOV 30H,#00H;RAM区清零 MOV 31H,#00H; MOV 32H,#00H; MOV 33H,#00H; MOV 35H,#00H; MOV 36H,#00H; MOV 37H,#00H; MOV 38H,#00H; MOV 40H,#00H; MOV 41H,#00H; MOV 42H,#00H;MOV TMOD,#01H;T0工作在方式1LP: MOV TL0,#0B0H;置定时器初值(定时时间50ms)MOV TH0,#3CHSETB TR0;启动定时器0MOV IE,#82H;允许定时器0中断MOV R5,#40;置2s循环次数LOOP: ACALL DISPSJMP LOOPTT0: MOV TL0,#0B0H;重置T0初值MOV TH0,#3CH;DJNZ R5,LPP;2s到否,不到返回ACALL HADC;调用液位检测子程序ACALL DISP;调用显示当前液位ACALL BMP;调用拨码盘读数子程序ACALL CONT;液位控制子程序AJMP LPLPP: RETI;测量液位子程序HADC: MOV 31H,#00H; MOV 30H,#00H; MOV R2,#04H;采样次数 MOV DPTR,#7FF0H;HADC0:MOVX DPTR,A;HADC1:JNB P3.2,HADC1;查询AD转换结束 MOVX A,DPTR; CLR C; ADD A,31H; MOV 31H,A; ADDC 30H,#0; DJNZ R2,TADC0; MOV A,31H; CLR C; RRC A; CLR C; RRC A; MOV 31H,A; MOV A,30H; RR A; RR A; ADD A,31H; MOV 31H,A;得到平均值,存在31H中 RET;控制电机子程序CONT: MOV 32H,31H;液位测量值从31H中取出放入32H MOV A,32H; CLR C; MOV 33H,42H;液位设定值从42H中取出放入33H SUBB A,33H; JC CONT1;若液位偏低,跳转,液位偏高则继续执行 CLR C; SUBB A,#13;偏差值与5cm相比较 JC CONT2;过高则Cy=0,继续,否则跳转 SETB P1.0;关电动机 SJMP CONT2;CONT1:CPL A;液位偏低情况 CLR C; SUBB A,#13;偏差值与5cm相比较 JC CONT2;过低则Cy=0,继续,否则跳转 CLR P1.0;开电动机CONT2:RET;拨码盘读数转化子程序BMP:MOV R1, #40H ;存放单元首址 MOV R2, #BCH ;读第一个拨码盘数,小数点后第二位 MOV A, R2 MOV P2, A MOV A, P0 ANL A, #OFH MOV R1, A INC R1 MOV R2, #BEH ;读第二个拨码盘数,小数点后第一位 MOV A, R2 MOV P2, A MOV A, P0 ANL A, #0FH MOV R1, A MOV A, 41H MOV B,#51 MUL AB CLR C RRC A ADD A,40H ADD A,40H MOV 42H,A MOV A,40H CLR C RRC A ADD A,42H MOV 42H,A;液位设定值存在42H中 RET;液位显示数码管子程序DISP:MOV P2,#B0H; MOV P0,06H; NOP MOV P2,#B1H; MOV P0,80H; NOP MOV 35H,31H;液位测量值从31H中取出放入35H中 MOV A,35H; MOV B,#100; MUL AB; MOV 36H,B;高位 MOV 37H,A;低位 ADD A,36H; MOV 38H,B; ADDC 38H,#0; ADD A,#01H; ADDC 38H,#0;(35H)*100/255的商 MOV A,38H; MOV B,#10; DIV AB;A,B对应十位和个位 MOV DPTR,#TAB MOVC A,A+DPTR MOV P2,#B2H; MOV P0,A; NOP MOV A,B MOVC A,A+DPTR MOV P2,#B3H; MOV P0,A; NOP RETTAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH程序解释:*100/255*20/51X*100/255Y=X*100=256*36H+37HY/255=36H+(36H+37H)/25541H*0.1*255+40H*0.01*25541H*51/2+40H*51/2041H*51/2+40H*2+40H*11/2041H*51/2+40H*2+40H/2+40H/20
展开阅读全文