压电元件施加交变电场,靠逆压电效应产生机械力作用在叉体上。用另外一组压电元件的正压电效应检测振动,它把振动力 为微弱的交变电信号。再由电子放大器和移相电路,把检振元件的信号放大。经过移相,施加到驱动元件上去,构成闭环振荡器。在这个闭环中,既有机械能也有电能,叉体是其中的一个环节,倘若受到物料阻尼难以振动,正反馈的幅值和相位都将明显的改变,破坏了振荡条件,就会停振。只要在放大电路的输出端接以适当的器件,不难得到开关信号。
为了保护压电元件免受物料损坏和粉尘污染,将驱动和检振元件装在叉体内部,经过金属膜片传递振动。如果在容器的上下方都装叉体,可以实现自动进料或自动出料的逻辑控制,或者把料位越限信号远传到控制室。在控制室里的控制电路判断料位是否越限,并按要求使被控的进出料设备启停。
并且叉体的制造和装配良好时,音叉也可用于液体测量和控制。在测量时不需要大幅度的机械运动,驱动功率小,机械结构简单、灵敏而可靠。
系统采用LD-YC/YG 型 音叉式物位限位开关
LD-YC/YG型音叉式物位限位开关作为一种新型的物位传感器,具有安装简单,不用标定,搅动、气泡对测量无影响等优点。在未来工业过程中将全面取代如浮球液位开关等落后的检测方式广泛应用于各行各业。
原理
传感器安装于仓的顶部或仓的侧壁上。音叉由压电晶体驱动产生振动,当叉体被液体浸没或被物料埋没时振动频率发生变化。这个变化由电子电路检出并输出一个开关量用于报警或控制。
适用范围
中等粘度、腐蚀性液体。流动性好的粉状物料和颗粒状物料。
禁用范围
高温、高粘度液体。高温、易结垢固体、块状物料。
主要技术指标
[YC 部分]
供电电压:直流 24V 或 10-55V (防爆型用 DC 24V)
交流 25-250V 50Hz
工作温度:叉体 -40-80℃ 仪表 -20-45℃
输出方式:
直流24V 供电时为继电器输出(AC 220V 1A)
直流10-55V 供电时为集电极开路输出(350mA
防爆型产品≤50mA)
交流25-250V 供电时为两线制输出(220V
4.4W-77W)
功 耗:直流供电时 0.25W(DC 24V)
交流供电时 1.5W(AC 220V)
安装方式:G1 管螺纹
防爆标志:本安 iaⅡBT4 隔爆型 dⅡBT4
[YG 部分]
供电电压:直流 24V 或 18-55V
交流50-250V 50Hz
工作温度:叉体 -40-150℃ 仪表 -20-70℃
输出方式:
直流24V 供电时为继电器输出(AC 220V 1A)
直流18-55V 供电时为集电极开路输出
(350mA)
交流50-250V 供电时为两线输出(220V
350mA 防爆型产品≤50mA)
功 耗:直流供电时 0.25W(DC 24V)
交流供电时 1.5W(AC 220V)
安装方式:G1.5 管螺纹
第四章 系统的抗干扰及可靠性
单片机系统供电线路是干扰的主要来源,电源采用隔离变压器接入电网,隔离变压器在初级和次级之间加了一层屏蔽层。交流接触器是继电器控制的,在紧靠交流接触器的输入端口并上一个电阻和电容串联的电路滤去高次谐波。每个集成电路芯片的电源和地之间要并上0.1F的陶瓷电容。在输入输出通道上要加光藕P521。除了在继电器通道上外,两个满料信号也要经过P521光藕才送至 INT0、INT1。另外,数字地和模拟地要分开,数字地线要粗而短。
软件抗干扰方面,本系统采用指令冗余和软件陷阱。当CPU受到干扰后,会把一些操作数当作指令码来执行,引起程序混乱。由于当PC指针飞到单字节指令上时,会自动步入正轨。因此我们在程序中人为地在 RET、RET1、LCALL、LJMP、AJMP、DJZE、JZ、CJNE 等处插入一些单字节指令(NOP)。并在继电器开闭指令 SET、CLR前插入两条NOP指令。同时,当程序飞到ROM中未使用的非程序区时,非程序区要能捕获PC指针并强行拉到处理故障程序中。所以非程序区要每隔一段设置一个软件陷阱。软件陷阱
由三条指令构成:
NOP
NOP
LJMPERROR
ERROR 处理过程放在 0030H
开始处
第五章 软件设计
程序设计包括主程序、中断程序、故障处理程序,系统中用到了两个定时器中断:定时器0每隔1.2s使P1.7产生脉冲信号;定时器1产生1s的定时,使LED显示递减。故障处理程序使PC指针跳回到原来起动的相应程序段;主程序完成内部RAM数据区初始化、8255初始化,并根据按键信号跳转到想应程序段。
第六章 结论语
本设计是基于AT89C51的自动加料系统没有外扩ROM和RAM,程序直接放在AT89C51内部闪存中。设定数据通过串行口存入2864A中,另外,系统从硬件和软件方面采取了抗干扰措施。
但是在物体送到料斗式干燥机后没有设计如何把物体从干燥机排除来,如果考虑到这一点,那设计就更加完美了。
附录A:系统框图
附录B:系统硬件框图
程序清单:
ORG
LJMP IINT0
ORG 0080H
MAIN:MOV SP,#60H
MOV PSW,#00H
MOV 71H,#14H
MOV 72H,#
MOV 73H,#00H
MOV 74H,#00H
MOV 75H,#00H
MOV 76H,#00H
MOV TMOD,#01H
MOV TL0,#0B0H
MOV TH0,#3CH
SETB TR0 ;,开中断
SETB EA
SETB ET0
JMCGS:JMB P1.2,KK
NOP
NOP
JB P1.2,KK
NOP
MOV 70H,#01H
KK:LJMP JMCGS ;等待中断
ORG 0100H ;中断服务子程序
IINT0:PUSH A ;入栈保护
PUSH PSW
CLR EA ;关中断
CLR TR0
DJNZ 71H,ZDFH ;不到2秒直接中断返回
MOV A,70H
MOV B,72H
MVL AB
MOV R6,B
MOV R5,A
MOV R2,#02H
LCALL CHUFA
MOV 73H,R5
LCALL KZCX
MOV 74H,73H
ZDFH:SETB EA ;开中断
SETB ET0
MOV TMOD,#01H 0重新赋初值
MOV TL0,#0B0H
MOV TH0,#3CH
SETB TR0
POP PSW ;出栈
POP A
RETI ;中断返回
CHUFA:MOV R7,#08H
CHU1:CLR C
MOV A,R5
RLC A
MOV R5,A
MOV A,R6
RLC A
MOV 07H,C
CLR C
SUBB A,R2
JB 07H,CHU2
JNC CHU2
ADD A,R2
AJMP CHU3
CHU2:INC R5
CHU3:MOV R6,A
JNE R7,CHU1
RET
KZCX:MAIN A,73H ;控制子程序
CJNE A,74H,KZ2
ZJFH:RET ;直接返回
KZ2:JC PFKZ
CFKZ:MOV B,#03H
DIV AB
MOV 75H,A
CJNE A,#04H,ZJFH
JC ZJFH
MOV A,75H
CJNE A,#0AH,CFKZ1
JNC CFKZ2
CFKZ1:MOV TMOD,#10H
MOV TL0,#0B0H
MOV TH0,#3CH
SETB TR1
SETB P1.0
DELAY:JNB TF1,DELAY
CLR TR1
CLR TF1
CLR P1.0
LJMP ZJFH
CFKZ2:MOV R4,#02H
CFKZ3:MOV TMOD,#10H
MOV TH0,#3CH
SETB TR1
SETB P1.0
DELAY:JNB TF1,DELAY1
CLR TR1
CLR TF1
CLR P1.0
DJNZ R4,CFKZ3
LJMP ZJFH
PFKZ:MOV B,#03H
DIV AB
MOV 76H,A
CJNE A,#08H,ZJFH
JC ZJFH
MOV A,76H
CJNE A,#0AH,PFKZ1
JNC PFKZ2
PFKZ1:MOV TMOD,#10H
MOV TL0,#3CH
SETB TR1
SETB P1.1
DELAY:JNB TF1,8
CLR TR1
CLR TF1
CLR P1.1
LJMP ZJFH
PFKZ2:MOV R4,#02H
PFKZ3:MOV TMOD,#10H
MOV TL0,#0B0H
MOV TH0,#3CH
SETB TR1
SETB P1.1
DELAY4:JNB TF1,DELAY4
CLR TR1
CLR TF1
CLR P1.1
DJNZ R4,PFKZ3
LJMP ZJFH
存储器扩展子程序
STORE: SETB VSDA;
SETB VSCL;
NOP;
NOP;
NOP;
NOP;
CLR VSDA;
NOP;
CLR VSDA;
NOP;
NOP;
NOP;
NOP;
CLR VSCL;
RET;
STOP:CLR VSDA;
SETB VSCL;
NOP;
NOP;
NOP;
NOP;
SETB VSDA;
NOP;
NOP;
NOP;
NOP;
CLR VSDA;
CLR VSCL;
RET;
MACK: CLR VSDA;
SETB VSCL;
NOP;
NOP;
NOP;
NOP;
CLR VSCL;
SETB VSDA;
RET;
MNACK:SETB VSDA;
SETB VSCL;
NOP;
NOP;
NOP;
NOP;
CLR VSCL;
CLR VSDA;
RET;
CACK: SETB VSDA;
SETB VSCL;
CLR F0;
MOV C,VSDA;
JNC CEND;
SETB F0;
CEND:CLR VSCL;
RET;
WRBYT: MOV R0,#08H;
WLP: RLC A;
JC WR1;
AJMP WR0;
WLP1:DJNZ R0,WLP;
RET;
WR1:SETB VSDA;
SETB VSCL;
NOP;
NOP;
NOP;
NOP;
CLR VSCL;
CLR VSDA;
AJMP WLP1;
WR0:CLR VSDA;
SETB VSCL;
NOP;
NOP;
NOP;
NOP;
CLR VSCL;
AJMP WLP1;
RDBYT:MOV R0,#08H;
RLP: SETB VSDA;
SETB VSCL;
MOV C,VSDA;
MOV A,R2;
RLC A;
MOV R2,A;
CLR VSCL;
DJNZ R0,RLP;
RET;
WRNBYT:MOV R3,NUMBYT;
LCALL STA;
MOV A,SLA;
LCALL WRBYT;
LCALL CACK;
JB F0,WRNBYT;
MOV R1,#MTD;
WRDA:MOV A,@R1;
LCALL WRBYT;
LCALL CACK;
JB F0,WRNBYT;
INC R1;
DJNZ R3,WRDA;
LCALL STOP;
RET;
RDNBYT:MOV R3,NUMBYT;
LCALL STA;
MOV A,SLA;
LCALL WRBYT;
LCALL CACK;
JB F0,RDNBYT;
RDN:MOV R1,#MRD;
RDN1:LCALL RDBYT;
MOV @R1,A;
DJNZ R3,ACK;
LCALL MNACK;
LCALLSTOP;
RET;
ACK:LCALL MACK;
INC R1;
SJMP RDN1;
中断服务子程序:
X0S: MOV DPTR,#2000H
MOVX @DPTR,A
SETB TR0
MOV 3AH,#20H
MOV 3BH,#00H
MOV R7,#00H
MOV R6,#04H
CLR 70H
X0S0: CLR01H
X0S1: JNB 01H,X0S1
CJNE R6,#00H,X0S0
CJNE R7,#00H,X0S0
CLR TR0
CLR EX0
SETB 00H
RETI
键盘程序:
KEYI:ACALL KS1 ;调用判有无键闭合子程序
JNZ LK1 ;有键闭合,跳LK!
NI: ACALL DIR ;无键闭合,调用显示子程序,延时
AJMP KEYI
LK1: ACALL DIR ;可能有键闭合,延时12MS软件区
ACALL DIR
ACALL KS1 ;调用判有无子程序
JNZ LK2 ;经去消抖,判断确实有键按下跳
ACALL DIR ;调用显示子程序延时6MS
AJMP KEYI ;抖动引起跳KEYI去处理
LK2: MOV R2,#0FEH ;列选码—〉R2
MOV R4,#00H ;R4 为列号计数器
LK4: MOV DPTR,#7F01H ;列选码—〉8155H
MOV A,R2
MOVX @DPTR,A
INC DPTR ;数据指针增2,指向PC口
INC DPTR
MOVX A,@DPTR ;读8155H的PC口
JB Acc.0,LONE ;第0行线为高,无键闭合,跳LONE
;转判第1行
MOV A,#00H ;第0行有键闭合,首键号—〉A
AJMP LKP ;跳LKP,计算键号
LONE: JB Acc.1,LTOW ;1行线为高,无键闭合,跳LTW0
;转判断第2行
MOV A,#08H ;1行有键闭合,首键号8—〉A
AJMP LKP ;跳LKP ,计算键号
LTW0: JB Acc.2,LTHR ;2行线为高,无键闭合跳LTHR
;转判;第3行
MOV A,#10H ;2行有键闭合,首键号10H—〉A
AJMP LKP ;跳LKP,计算键号
LTHR: JB Acc.3,NEXT ;3行线为高,无键闭合跳NEXT,
;准备下一列的扫描
MOV A,#18H ;3行有键按下,首键号18H—>A
LKP: ADD A,R4 ;计算键号
PUSH A ;键号进栈保护
LK3: ACALL DIR ;调用显示子程序,延时6MS
ACALL DIR ;调用判有无键闭合子程序,延时6MS
JNZ LK3 ;判键释放否,未释放,则循环
POP A ;键已释放,键号出栈->A
RET
NEXT: INC R4 ;列计数器加1,为下一列扫描做准备
MOV A,R2 ;判是否已扫到最后一列(最右一列)
NB Acc.7,KND ;键扫描已到最后一列,跳KND重新
;进行整个
;键盘的扫描
RL A ;键扫描未扫到最后一列,位选码左
;移一位
MOV R2,A ;位选码->R2
AJMP LK4
KND: AJMP KEYI
KS1: MOV DPTR ,#7F01H ;判有无键闭合子程序,全0->扫描(PA口)
MOV A,#00H ;列线全为低电平
MOVX @DPTR,A ;
INC DPTR ;DPTR增2,指向PC 口
INC DPTR
MOVX A,@DPTR ;从PC口读行线的状态
CPL A 行线的状态取反,如无键按下,则A
;中内容为0
ANL A,#0FH ;屏蔽无用的高4位
RET
PID: MOV R5,3 1H ;取W
MOV R4,32H
MOV R3,#00H :取Yi
MOV R2,2AH
ACALL CPL1 ;取Yi的补码
ACALL DSUM ;计算ei=W-Yi
MOV 39H,R7 ;存ei
MOV 3AH,R6
MOV R5,35H ;取I
MOV R4,36H
MOV R0,#4 AH ;R0放乘积高位字节地址指针
ACALL MULT1 ;计算Pi=I*ei
MOV R5,39H :取ei
MOV R4,3AH
MOV R3,3BH ;取ei-1
MOV R2,3CH
ACALL CPL1 ;求ei-1:的补码
ACALL DSUB ;求pp=△ei=ei-ei-1:
MOV A,R7
MOV R5,A :存△ei
MOV A,R6
MOV R4,A
MOV R3,4BH ;取Pi
MOV R2,4AH
ACALL DSUM ;求Pi+Pp
MOV 4BH,R7
MOV 4AH,R6 ;存和(Pi+即)
MOV R5,39H
MOV R4,3AH ;取ei
MOV R3,3DH
MOV R2,3EH ;取ei-2
ACALL DSUM :计算ei=ei-2
MOV A,R7
MOV R5,A
MOV A,R6
MOV R4,A
MOV R3, 3BH
MOV R2,3CH ;取ei-1
ACALL CPL1 :求ei-1,补码
ACALL DSUM ;计算ei=ei-2-ei-1
MOV A,R7
MOV R5,A ;存和
MOV A,R6
MOV R4,A
MOV R3,3BH
MOV R3,3CH ;取ei-l
ACALL CPL1 :求ej-1补码
ACALL DSUM ;计算ei=ei- 2-2ei-1、
MOV R5,37H ;取D
MOV R4,38H
MOV R0,#46H
ACALL MULT1 ;求出Pd=D*(ei=ei-2-2ei-1)
MOV R5,47H
MOV R4,46H :存Pd
MOV R3,4BH
MOV R2,4AH ;取(pi+PP)
ACALL DSUM ;计算pi+pp+pd
MOV R5,33H ;取Kp
MOV R4,34H
MOV R0,#46H
ACALL MULTl ;计算Kp*(Pi+Pp+Pd)
MOV R3,47H
MOV R2,46H
MOV R5,2FH ;取ui-1
MOV R4,30H
ACALL DSUM ;求出ui=ui-l+KP*(Pi+Pp +pd)
MOV 2FH,R7 ;存ui~ui_,
MOV 30H,R6
MOV 3DH,3BH ;ei-l-ei-2
MOV 3EH,3CH
MOV 3BH,39H :ei-ei-1
MOV 3CH,3AH
RET
DSUM: MOV A,R4
ADD A,R2
MOV R6,A
MOV A,R5
ADDC A,R3
MOV R7,A
RET
CPLI: MOV A,R2
CPL A
ADD A,#0lH
MOV R2,A
MOV A,R3
CPL A
ADDC A,#00H
MOV R3,A
RET
MULTI: MOV A,R7
RLC A
MOV SIGN1,C ;存被乘数符号位
JNC POS1 ;被乘数为正转
MOV A,R6 ;求补
CPL A
ADD A,#0lH
MOV R6,A
MOV A,R7
CPL A
ADDC A,#00H
MOV R7,A
POSI: MOV A,R5
RLC A
MOV SIGN2,C :存乘数符号位
JNC POS2 ;乘数为正转
MOV A,R4
CPL A
ADD A,#0lH
MOV R4,A
MOV A,R5
CPL A
ADDC A,#00H
MOV R5,A
POSZ: ACALL MUL1,
MOV C,SIGN1
ANL C,SIGN2
JC TPL ;C=1是两个负数相乘转
MOV C,SIGN1
ORL C,SIGN2
JNC TPL ;C=0是两个正数相乘转
DEC R0
DEC R0
DEC R0
MOV A,@R0
CPL A
ADD A,#0lH
MOV @R0,A
INC R0
MOV A,@RO
CPL A
ADDC A,#00H
TPL: RET
MULT: MOV A,R6 ;取b
MOV B,R4 ;取d
MUL AB ;求bd
MOV @Ro,A ;求bdL
MOV R3, B ;求bdL~R3
MOV A, R4 ;取d
MOV B,R7 ;取a
MUL AB ;求ad
ADD A,R3 ;求adL+bdH
MOV R3,A ;暂存adL+bdH
MOV A,B
ADDC A,#00H ;adH+进位
MOV R2, A ;暂存
MOV A,R6 ;取b
MOV B,R5 ;取c
MUL AB ;求bc
ADD A, R3 ;求adL+bcL+bdH
INC R0 ;修改指针
MOV @R0,A ;乘积第三字节存入
CLR 55BH ;清标志
MOV A,R2
ADDC A,B ;求adH+bcH
MOV R2,A
JNC LAST ;无进位数
SETB 5BH ;置进位标志
MOV A,R7 ;取a
MOV B,R5 ;取c
MUL AB ;求ac
ADD A,R2 ;求acL+adH+bcH
INC R0
MOV @R0,A ;存积的第二个字节
MOV A,B
ADDC A,#00H
MOV C,5BH
ADDC A,#00H
INC R0 :修改指针
MOV @R0,A ;存积的最高字节
RET
显示子程序:
ORG055CH
MOV R0,#79H
MOV @R0,#01H
INC R0
MOV @R0,#01H
INC R0
MOV R0,#05H
INC R0
MOV @R0,#16H
INC R0
MOV @R0,#1BH
INC R0
MOV @R0,#1EH
MOV DPTR,#4F00H
MOV A,#0C3H
MOVX @DPTR,A
AJMP DISUP
ORG 0772H
MOV R0,#79H
MOV R3,#01H
MOV A,R3
MOV DPTR,#4F01H
MOVX @DPTR,A
INC DPTR
MOV A,@R0
ADD A,#12H
MOVC A,@A+PC
JNB F0,DISUP2
SETB a,7
MOVX @DPTR,A
ACALL D2MS
INC R0
MOV A,R3
JB A,5,DISUP3
RL A
MOV R3,A
AJMP DISUP1
ORG 0792H
TABLE:DB 3FH
DB 06H
DB 5BH
DB 4FH
DB 66H
DB 6DH
DB 7DH
DB 07H
DB 7FH
DB 6FH
DB 77H
DB 7CH
DB 39H
DB 5EH
DB 79H
DB 71H
DB 73H
DB 3EH
DB 3EH
DB 31H
DB 48H
DB 1CH
DB 23H
DB 40H
DB 03H
DB 18H
DB 80H
DB 00H
DB 3DH
DB 76H
DB 38H
DB 1EH
ORG 07B1H
D2MS :MOV R7,#02H
D2MS1:MOV R6,#0FFH
DJNZ R6,$
DJNZ R7,DSMS1