LF356运算放大器是一个集成运算放大器,Rf为反馈电阻,若Rf→ ∞时,输出电压U0与输入电压Ui的比值叫做运算放大器的开环增益K0。运算放大器的输入阻抗r很大,理想情况下r→∞,可以认为反馈电流等于信号源的输入电流Is。其中,运算放大器的输入电压Ui与输出电压U0二者的关系为:[4]
其中K0运算放大器的开环电压放大倍数,一般为105~106。所以,如果测出U0,即可得到Is。我们选取反馈电阻Rf = 1MW,用量程为200 mV的数字电压表,它的分辨率为0.01 mV,则能测到的最小电流为:
此处,把DAC0832接成单缓冲工作方式,其连接图如图2-9所示,使输入寄存器处于锁存状态,ILE接+5V,/WR1接CPU写信号/WR,/CS接CPU的P2.0,DAC寄存器处于不锁存状态,所以将/WR2和/XFER直接接地。通常AGND和DGND都接在一起,接到数字地上。由于DAC0832内部有8位数据输入寄存器,可以用来锁存CPU输出的数据,因此,CPU的数据总线可直接接到DAC0832的数据输入线DI0~DI7上。因为DAC0832的Iout1和Rfb端之间已有一个15K欧姆的内部反馈电阻,所以这里就将运算放大器的输出端Uout和Rfb端短接起来。
图2-9 单缓冲工作方式
通过上述方式连接,可以求出最后的输出电压OUTV0=-VREF*D*/256,取VREF为-5V,则OUTV0=D*/51.2。其中,D*为输入到DAC0832中的数字量。
2.4 信号检测电路
此处采用光电式码盘,它是一种非接触性光电传感器,具有测量准确度高、响应速度快、可靠性高和使用寿命长等优点。光电式码盘的工作原理就是用光码盘上透光与不透光,在码盘的另一侧形成光脉冲。脉冲光照射在光电敏感元件上产生与光脉冲相对应的电脉冲。典型的光电式码盘有TLP507A和TLP800,其速度转换电路如图2-10所示。
发光二极管LED发出红外光,透过码盘的圆孔照射光敏三极管,使其迅速由截止状态变为导通,如此反复形成光脉冲信号,经NPN三级管放大,再由反向器反向整形后送给单片机的定时器0和定时器1。该测速电路充分利用单片机,完成一系列的数据采样、处理,最后计算得到较准确的速度值并显示该速度。脉冲频率与转速的关系:n=60f/P式中,P为光码盘开孔的总数;f为脉冲频率;n为直流电机的转速。采样周期T内光脉冲个数N与频率的关系n=N/f,即n=60N/PT。
图2-10 速度转换电路
这里同时使用两个计数器T0和T1,它们的作用目的不同。在自动程序中,T0主要用状态之间切换,在每个状态里的计数初值不同,以便于限定各个状态的运行时间,当某个状态的计数溢出,就会在相应的中断服务程序中改变标志位并重新赋计数初值,用于计数下一个状态;T1采用方式2的自动重装计数功能,每计数32个脉冲就要中断一次用于改变深度;在手动程序中,T0用作保护功能,开始赋初值用于计数407个脉冲,如果在操作的过程中,T0计数到了407个脉冲而操作人员还没有开启爬行状态,则程序会自动进入T0的中断服务程序中,封锁键盘,禁止手动再键盘,强制电动机进入爬行状态,直至停止,然后才打开键盘,用做判断下一步要采用手动还是自动方式。
2.5 电源电路
电源是系统极其重要的一部分,是基础的基础,这里需要用到直流电源+5V,-10V和交流电源220V。由于关于电源部分的设计早已成型,故而在本文中没有出现。本项目中使用荣盛达(R-Senda)的300T+P4,其参考图片如图2-11所示。
图2-11 300T+P4
3 系统软件设计
3.1 主控制模块设计
P0和P2口作为地址线,用于选择DAC0832,P0口用作数据线将数据输入到DAC0832,P1口用于键盘输入,P2.7、P3.0和P3.1接到74HC595上,用于锁存显示待显的数据,P3.2用于接收键盘信息,P3.4和P3.5用于计数从光码盘送入的脉冲。
主程序的作用是首先完成各个部件的初始化工作,设定好各个中断向量,为各个部件以后的工作做好基础。然后就不停的进行状态判别和数据显示,同时等待各中断的到来,转入相应的中断服务子程序。其主控制流程图如图3-1所示。
图3-1 主控制流程图
3.2 键盘模块设计
本模块采用外部中断控制方式,只要有键闭合,就向CPU请求中断,CPU响应键盘输入的中断,就会转向INT0中断服务程序,在断服务程序中识别哪一个键处于闭合状态,然后执行相应的处理程序。键盘中断处理程序的主要功能是改变标志位,进而影响程序流程的转向。
为了保证以CPU对键的闭合做一次处理,必须先要进行去除抖动处理,在键稳定闭合时识别按键,在键释放后再做键输入处理。[3]在程序设计中采用判断识别,按程序的执行顺序一旦前面的程序响应了某个按键操作,即在执行的过程中不能再响应别的按键,因而每次只能用作单一键。其程序流程图如图3-2所示。
图3-2 键盘模块
3.3 显示模块设计
在程序中定义了20个字节的缓冲区,其中第0个字节~第3个字节用于存储发光柱的低位,第4个字节~第7个字节用于存储发光柱的高位,第8个字节~第11个字节用于存储要显示的电动机的转速,第12个字节~第15个字节用于存储频率数据,第16个字节~第19个字节用于存储深度数据。对于74HC595来说,要先将待显的数据锁存,然后再发送命令让数据显示出来,也就可以达到串入并出的效果,其程序流程图如图3-3所示。
图3-3 显示程序流程图
因为要求的行程距离只有1.5m,主、副井提升机中罐笼的运动正好相反,所以显示的效果如图3-3所示,两者之和为1.5。其中主井的数据放在缓冲区的第17、16字节里,副井的数据放在缓冲区的第19、18字节里。这些数据来自T1中断计数,即每中断一次值会增加0.1m,再通过一些转换算法才能用于显示。
图3-3 深度显示
速度及频率显示效果如图3-4所示,这两组数据都是通过D*计算得到的。
循环扫描显示程序中要用到位选,每次送数时只让你一个位点亮,由于扫描速度快,所以人眼看上去好像同时显示的。对于数码管里面出的小数点都是额外设定的,只有需要时才会让它显示出,在七段数码的查询表里都把小数点位忽略,以免影响效果。
图3-4 速度及频率显示
图3-5 8位的16进制转换为十进制BCD码流程图
3.4 16进制转十进制BCD的算法