图3 光电二极管放大电路
硬件设计
整个自动定位系统硬件部分主要包括立柱感光部分、PSD感光部分、直流无刷电机驱动部分、传感器部分、通讯部分、LED显示部分和逻辑电路部分,各部分的协调工作和数据传输由主微控制器C8051F020来完成。主微控制器是系统的核心,它一方面负责完成大灯仪移动过程中的数据采集和处理,另一方面还要将处理结果传递给相应的控制电机以便进行相应的位置调整。因此,对处理器的运行速度和接口功能都有较高的要求。
立柱感光部分
大灯仪的立柱沿垂直于地面的方向上均匀分布有8个光电二极管。大灯仪启动进入灯照区后,光电二极管将感应到的光照转换为电信号,然后将这8路电信号经过放大处理后送入C8051F020自带的ADC进行采样。C8051F020片内集成了两个多通道 ADC子系统。由于此部分对数据精度要求不高,故选用8位ADC1系统将8路电信号采用单端输入方式进行转换。
图2是环境光电压补偿电路,该电路利用置于环境光下的一个光电二极管根据外界环境光的强弱产生不同的参考电压Verf,并做为立柱上光电二极管放大电路的反相电压基准补偿。图3是一对光电二极管的放大电路图,实际放大倍数根据所使用的光电二极管性能调整R3(R7)和R2(R6)的电阻值即可。
PSD感光部分
PSD传感器用来完成前照灯中心的精确定位。该传感器是一种基于横向光电效应的光电位置敏感
元件,当入射光点落在器件感光表面的不同位置时,PSD将对应输出不同的电信号。通过对输出信号的处理,即可确定入射光点在PSD器件上的位置。入射光点的强度和尺寸大小与PSD的位置输出信号无关。同时由于PSD是非分割型元件,对光斑的形状无严格要求,所以可对光斑的位置进行连续测量,从而获得连续的坐标信号。
前照灯灯光通过大灯仪灯头的菲涅耳透镜后投射到灯箱后部的聚光板上,在聚光板的适当位置有一细小孔,光照透过小孔后聚焦为光斑,此光斑照在PSD表面输出强弱不同的电信号。用运算放大器 TLC2272将此4路电信号两级同相放大后送入12位的ADC0进行转换。需要注意的是,放大后的电压值不要超过C8051F020的参考电压,以免出现电压饱和的情况。
直流无刷电机驱动部分
控制大灯仪左右及上下的移动是通过驱动两个直流无刷电机(垂直和水平各一个)来完成的。系统对反馈信号电压进行周期性采样,采样值经过数字信号处理,作为控制器的参数,最后由合适的控制算法得出控制量,并经DAC转换为直流无刷电机的控制电压来调节电机的转速。
传感器部分
大灯仪采用了增量式光电编码器作为电机旋转方向和速度的反馈元件。它是一种通过光电转换将输出轴上的机械几何位移量转换成脉冲或数字量的传感器。依靠部件旋转,用光电编码器产生电脉冲信号,并送至单片机进行处理。增量式光电编码器有A、B、Z三相脉冲信号输出,当正转时,A相脉冲超前B相脉冲90°(或 1/4周期);反转时,B相脉冲超前A相脉冲90°。本设计中利用A相脉冲触发外部中断,然后根据B相脉冲电平的高低来判断电机的旋转方向,同时记录编码器的脉冲数。
通讯部分
C8051F020有两个增强型UART串口,其中UART0与PC机的RS-232串口相连,用来接收检测命令和发送检测结果 ;UART1与大灯仪检测装置的通讯串口相连,根据接收到的PC检测命令启动相应的检测项目,然后将结果返回给主微控制器。
I2C总线LED显示部分
SAA1064 是Philips公司的4位LED驱动器,为双极型电路,具有I2C接口,专为驱动4位带有小数点的七段LED显示器而设计。该器件内部带有I2C总线从发送接收器,可以通过地址引脚ADR的输入电平编程为4个不同的从器件地址。在本系统中共使用了两个SAA1064驱动器。
逻辑电路部分
逻辑电路在单片机系统的设计中不可或缺。一般的逻辑电路都采用了通用逻辑IC(如 74系列)来搭建电路,功能越复杂的系统其相应的逻辑电路也越复杂,所需要的逻辑IC也越多。但是如果用可编程逻辑器件来实现的话,只要将逻辑表达式按规定的语法进行描述,经过
仿真、编译等过程,最后下载到可编程逻辑器件中,就可以完成所设计的逻辑功能,从而使得逻辑设计的自由度大大提高。
在本系统中使用了Xilinx公司的CPLD可编程逻辑器件XC9572,该器件内含36个宏单元,并具有1600个逻辑门。开发环境使用的是Xilinx公司的软件工具包FOUNDA
tiON ISE7.1i。设计过程如下:首先从抽象的角度对电路的功能、接口和总体结构进行描述。接下来使用行为级描述来分析电路的功能、性能、标准兼容性等问题。行为级描述使用了VHDL语言来编写,分别实现了电机控制模块、编码器计数控制模块和行程限位开关控制模块的逻辑电路设计。最后通过CPLD译码,将命令控制I/O映射到相应的独立地址。以电机控制模块为例,两个电机的使能、刹车、转向共6个控制量只需对其映射地址的对应位操作即可。
软件设计
本系统的软件设计中采用了C/OS-II操作系统。 并选用了最新的KEIL7.50集成开发环境来开发程序。
通过在系统中嵌入C/OS-II,可以把整个程序分成许多任务,每个任务相对独立,即使一个任务发生问题,也不会影响其他任务的运行。这样既提高了系统的可靠性,同时也使调试程序变得容易。
任务的创建
根据大灯仪定位过程中不同阶段所要实现的目标,软件设计中划分了主任务、自动测试任务、位置控制任务、立柱找光任务、PSD找光任务、PC通讯任务、检测通讯任务、电机制动任务和I2C显示任务。
每个任务都有自己的名称、内存空间和优先级。优先级的设置根据不同的系统有不同的设定,本设计中,电机制动任务在系统中起保护设备的作用,如果发生控制失效的情况下不能及时制动电机可能会对大灯仪造成损坏,所以其优先级设为最高; PSD找光任务和立柱找光任务运行较为频繁,任务执行的好坏直接关系到检测结果的准确度,优先级分别设为第二级和第三级;其余的任务均是常规运行状态,只是实现人机交互、显示状态和参数,对检测性能没有直接影响,优先级的设定没有严格的高低之分,可以随意设定。
系统运行过程分析
系统运行的首要环节为初始化, 包括两部分: 第一部分是系统及硬件部分的初始化,创建主任务;第二部分是创建信号量及建立功能任务,并为之分配优先权。
系统初始化后,首先从主任务开始运行,此时各功能任务均处于就绪状态。上电后检测人员在PC机上发送检测指令,此时最先响应的功能任务是PC通讯任务。系统利用中断接收PC机下达的指令,并根据指令内容发送开始自动检测的标记量。主任务接收到自动检测标记后唤醒自动检测任务,同时发送显示信号量唤醒 I2C显示任务。进入自动检测任务后,系统根据检测的进程在不同的检测阶段调用不同的功能任务。检测项目完成后,大灯仪自动回到起始位置,等待下一次检测命令。
结语
本文中的大灯仪自动定位系统充分利用了C8051F020单片机优越性能,使控制系统达到了很好的集成,降低了设计成本。同时实践表明, 在系统复杂、对实时性和精度要求比较严格,并且需要并行处理任务较多的运动控制系统中使用uC/OS-II实时操作系统,会加快嵌入式控制系统的开发速度,降低软件编写的复杂度,提高产品的开发效率,并使维护和功能扩展都非常方便。经在山东某汽车检测站为期半个月的系统实际运行证明,该系统灯光定位准确,响应速度快,运行良好。
0