刘珍珍,汪涛,郑雪丽
(重庆大学 物理学院,重庆 401331)
摘要:为了提高电荷耦合器件(CCD)一维尺度非接触测量系统的集成性和便携程度,设计了以STM32为核心的测量系统。使用3.7 V锂电池供电,用STM32产生线阵CCD驱动信号,内嵌边缘检测算法并设计了LCD液晶触摸屏操作界面,实现了一款高精度便携式非接触测量仪。系统功能完整、操作方便、可靠性高。
关键词:线阵CCD;STM32;LCD液晶触摸屏;边缘检测
0引言
电荷耦合器件CCD(ChargeCoupled Device)[1]自上世纪60年代诞生以来,由于其具有精度高、功耗低、尺寸小、寿命长等优点,被广泛地应用于自动测量、图像获取等方面。随着CCD应用市场的扩大,CCD测量系统的实现方法也曾出不穷。现有的CCD测量系统多采用单片机或FPGA驱动,用串口或USB进行数据传输,用电脑上位机完成数据的处理和显示,供电方式则多采用5 V电压转换器或USB供电。这样的设计使得CCD测量系统的使用灵活程度、便携性、实时性都受到限制。
为解决以上问题,设计了一款基于STM32便携式线阵CCD测量系统。系统驱动方式采用ARM驱动,选用意法半导体公司的STM32F103作为主控芯片完成驱动信号的生成和控制功能。采用中值滤波和基于梯度算子的直线拟合边缘提取算法[2]处理数据,设计了LCD触摸屏操作界面实时显示数据波形和测量结果。供电方式采用3.7 V锂电池供电,并设计了USB充电电路。如此设计克服了现有CCD测量系统开发成本高、连线复杂、便携性差等问题。
1系统结构
系统主要由ARM处理器、电平转换、线阵CCD、A/D转换、LCD液晶触摸显示及SD存储卡等部分组成。
系统工作过程如下:ARM处理器产生驱动脉冲,通过电平转换之后驱动线阵CCD工作,线阵CCD的光敏单元受光的激发产生电信号,并在驱动脉冲的作用下输出离散的模拟信号,此信号经过0.1 μF的隔直耦合电容后传入A/D转换电路,A/D转换后的数字信号经过ARM内部的DMA快速数据传输通道送入片内RAM。在接收完一帧CCD数据之后,对数据进行计算,并通过LCD液晶屏显示信号波形和测量结果。通过LCD触摸屏按键可以选择性地保存原始数据和屏幕截图到SD卡。系统框架如图1所示。
2系统硬件组成
2.1电源模块
本系统选用的电池为单节3.7 V锂电池,电池容量6 000 mWh。该电池电量在5%以上时电压范围3.45 V~4.2 V。根据系统需求设计了3.3 V降压电路和5 V、12 V升压电路。芯片选型和电路设计中主要考虑了输入电压范围、电源转换效率、输出功率、静态电流、电路复杂程度和成本等问题。
2.2控制模块
系统主控芯片选用STM32F103ZET6,其为意法半导体公司推出的一款基于Cortex-M3内核的32位微处理器。该处理器最大时钟频率可达到72 MHz,具有64 KB静态RAM,516 KB闪存,完全满足系统对实时性以及存储空间的要求。具备3个SPI通信接口和FSMC灵活的静态存储器管理系统,方便对SD卡和LCD屏幕的操作。 带有2个高级定时器和6个通用定时器,为CCD驱动和AD驱动时序的设计提供了支持,有112个GPIO口,可根据需求对引脚的功能进行复用,方便对系统进行扩展。
2.3信号采集和A/D转换模块
本设计选用的线阵CCD传感器为东芝公司生产的TCD1209,这款CCD灵敏度高、暗信号电压小、动态范围比较大,适用于测量系统。它有2 048个有效像元,像元尺寸为14 μm×14 μm,光敏区总长度为28.4 mm。 TCD1209工作需要6路5 V电平的驱动时序,这些信号的时序关系在驱动信号设计部分介绍。
选用AD公司生产的AD9945对线阵CCD输出的模拟信号进行模数转换。它是一款适合本系统CCD应用的完整模拟信号处理器[3]。该芯片最高采样频率为40 MHz,其信号链包括CDS(相关双采样器)、VGA(数字控制增益放大器)、AD(12位模数转换器)以及暗电平钳位。其相关双采样器CDS可以减小系统的复位噪声、热噪声等,有效提高信号质量。数字控制增益放大器VGA可以通过一个10位的串行数字接口编程配置,设置CCD的信号增益,增益范围为6~40 dB,增益调整的公式为VGA Gain(dB)=(VGA Code×0.035 dB)+5.3 dB。12位的A/D转换器将模拟信号转换为12 bit数字信号,实现并行输出。
2.4LCD显示模块
本设计中显示器选用分辨率为800×480的4.3英寸TFTLCD电容触摸屏模块,该模块16位真彩色显示,采用NT35510驱动,该芯片自带GRAM,无需外加驱动器。TFTLCD模块与STM32的连接采用FSMC(灵活的静态存储控制器),16位8080并行数据端口用于传输数据,5个控制端口用于驱动液晶屏,这样的驱动模式可以实现快速读写,写周期只需要33 ns,理论上最大速度可以达到每秒3 030万像素,即刷屏速度每秒78.9帧。
3驱动信号设计
3.1CCD驱动时序产生
CCD工作需要的6路驱动时序包括移位脉冲φ1、φ2,信号输出脉冲φ2b,转移脉冲SH,复位脉冲RS,箝位脉冲CP。在这六路驱动信号协同工作下,CCD完成光的积分和转移输出。SH为低电平时,CCD进行光积分,此阶段不发生电荷转移。SH为高电平时,CCD将光积分信号转移至移位寄存器,移位寄存器在φ1、φ2的作用下将电荷逐位转移至输出端,最后由φ2b输出。在下一个信号到来前,RS和CP对相元中的残余信号进行清除。CCD六路驱动信号需要满足严格的时序关系,时序图如图2所示。
φ1由STM32的高级定时器TIM1_Channel2产生。STM32时钟主频为72 MHz,TIM1工作在PWM1模式,设置TIM1 自动重装载寄存器的值为71,输出比较值为35,输出比较极性为高,便可以产生频率为1 MHz、占空比1∶1的时序波形。TIM1_Channel2的输出信号经反相器SN74LVC3G04取反并转换为5 V电平后即得到驱动信号φ1,φ1再次经过反相器即得到φ2和φ2b。
RS和CP分别由STM32定时器3的Channel1、 Channel2和Channel3、 Channel4产生。由CCD驱动时序图可以看出,以φ1的信号周期为标准,在一个信号周期内RS和CP信号要先上升后下降,也就是需要在一个周期内产生低—高—低电平,而STM32定时器在一个周期内只能产生高—低电平或者低—高电平。因此本设计用定时器的两个通道输出两个有相位差的高—低电平,经过异或门SN74LVC2G86来生成所需信号。TIM3工作在PWM3模式,设置TIM3 自动重装载寄存器的值为71,4个通道输出比较值分别为36、42、46、52, Channel1和Channel2经过SN74LVC2G86取异或得到信号RS,Channel3和Channel4经过SN74LVC2G86取异或得到信号CP。
SH配置到PA_10,由TIM2中断控制产生,TIM2工作在TIM1触发模式,TIM1计数器满则触发TIM2计数器加1,TIM2预装载寄存器的值设置为3 000,TIM2计数器溢出进入中断函数。关闭所有定时器,将PA_10置0,延时3 μs,将PA_10置1,打开所有定时器,退出中断。PA_10输出信号经SN74LVC3G04取反并转换为5 V电平后即得到驱动信号SH。
3.2A/D驱动工作控制
AD9945工作包括数字控制增益放大器的配置、相关双采样和12位AD转换。配置VGA(数字控制增益放大器)需要三路时序信号SL、SCK、SDATA,这三路信号满足SPI协议,所以利用STM32的SPI2接口来为SL、SCK、SDATA提供时序脉冲。
AD9945的相关双采样功能的实现和暗电平钳位功能的实现需要驱动信号SHP、SHD、DATACLK和PBCLK、CLPOB。SHP和SHD的采样频率应该与CCD的频率一致,才能保证各个信号被有效采集。在本系统中,SHP、SHD和SDATA分别由STM32 TIM4的Chanel1、Chanel2和Chanel3控制。TIM4工作在PWM2输出模式,预装载寄存器的值为71,3个通道输出比较值分别为38、60、20,即得到满足时序关系的SHP、SHD和SDATA信号,这三路信号经过SN74LVC3G04电平转换增强驱动能力。
PBCLK、CLPOB分别由定时器2的Channel1、Channel2和Channel3、Channel4产生,TIM2工作在PWM2模式,预装载寄存器的值为3 000,4个通道的输出比较值分别为14、28、14、2 088,信号CLPOB由定时器2的Channel1、Channel2两路输出信号经SN74LVC2G86取异或得到,信号PBCLK由定时器2的Channel2、Channel3两路输出信号经SN74LVC2G86取异或得到。
4图像处理和LCD显示
本系统用于测量缝宽的光路图如图3所示。用均匀光源照射待测物体,物体反射光经镜头在CCD光敏面成像,CCD采集到的数据图像在像的位置形成凹槽,只要检测出凹槽的两个边缘位置,即可得到像的宽度。镜头在某个物像位置下的放大倍数通过定标和曲线拟合的方法获得,待测缝宽可由像宽乘以放大倍数得到。
4.1数据预处理
CCD采集的数据中通常带有高频噪声,这些噪声的存在会影响算法的执行效率。中值滤波是最常用的处理高频信号的方法,它能够在除去高频噪声的同时保留图像边缘细节。因此需要先对原始数据进行中值滤波处理。
4.2边缘提取
理想的边缘信号是一阶跃函数[4],而CCD采集到的实际边缘信号是一个渐变信号,为准确地提取边缘信号,采用基于梯度算子的直线拟合法[5]。算法经过简化处理后实现步骤如下:
(1)选取拟合窗口,由于实际测量光照强度的不确定性,采取浮动阈值法,即先寻找一帧数据中的最大值Vmax与最小值Vmin,由此设定窗口阈值:
Vh=Vmin+0.8(Vmax-Vmin)
Vl=Vmin+0.2(Vmax-Vmin)
(2)边缘粗定位,根据边缘成像的原理,线阵CCD图像的边缘即为过渡区中灰度变化斜率最大值所在位置。线阵CCD采集得到的数字图像是离散量,其梯度幅值为 R(i)=|V(i)-V(i-1)|,在窗口区域内,利用梯度算子寻找出梯度最大值,对应的位置即为图像边缘粗定位所在位置。
(3)确定边缘,在原窗口内,以梯度最大值点的灰度V(i)为中心,向两边按步长m扩张,确定拟合值:
Vl=V(i)-m(Vmax-Vmin),Vl>Vmin
Vh=V(i-1)+m(Vmax-Vmin),Vh<Vmax
从i开始向左搜索找出第一个大于Vl的点n1,从i-1开始向右搜索找出第一个小于Vh的点n2,点(n1,Vl)与点(n2,Vh)所连直线的中点位置X1作为图像边缘。
(4)重复步骤(3)3次,得到5个边缘值X0、X1、X2、X3、X4,将5个边缘值按顺序排列取中值作为最终确定的边缘X。
4.3LCD显示
LCD选用ALINTAK 4.3英寸电容触摸屏模块,模块自带底层驱动,提供了丰富的操作函数,包括画点、读点、显示字符、触屏读点等。此屏幕分辨率为800*480,将屏幕分为波形显示区和按键区两部分。
4.3.1波形显示的实现
首先用画点函数LCD_DrawPoint( px[i], py[i]) 绘制网格并显示坐标。接着绘制数据波形,CCD输出的一帧有效数据为2 048个,每个数据都是12 bit,即范围在0~4 096。在600×400的点阵范围显示信号波形,把长度方向作为线阵CCD的像素序号横坐标,宽度方向作为纵坐标,对应像元灰度值。横坐标方向上数据抽样显示,纵坐标方向对灰度值进行压缩。具体实现如下:
for(i=0;i<600;i++)
{
px[i]=i+Left;
py[i]=( ccd_data [i*2048/600]*400)>>12;
}
LCD_DrawPoint( px[i], py[i]);
为实现波形实时显示,需要完成波形的自动擦除和重绘[6]。定义了一个数组 iTemp[600]={0} 用于存储上一帧数据,定义一个8 bit变量Py_Used用于标志屏幕上是否有波形显示。在绘制波形前先检查Py_Used是否为1,若为1则用背景色绘制iTemp[600]存储的数据并将Py_Used置0。绘完一帧波形后将当前的数据存入iTemp[600],以备下一次擦除波形使用。
用背景色绘制上一帧数据擦除波形的方法简便快捷,但是擦除波形的同时,会擦除一部分网格线。为了解决这个问题,使用定时器中断,每隔0.5 s重绘网格。最终得到了很好的波形显示效果。
4.3.2触摸屏按键的实现
通过测量触摸点电压经过A/D转换的值得到触摸点的横纵坐标。通过判断触摸点位置所在的按键区域,执行相应操作,触摸屏操作程序流程如图4所示。
5结论
基于STM32设计的便携式CCD测量仪,取代了以往设计中依赖固定电源和电脑上位机的测量系统。利用STM32的多种优势,提高了系统的集成度和便携性,内嵌边缘检测算法的设计提高了系统的实时性和测量精度。如图5所示为系统测量5 cm标准缝宽,LCD显示结果为4.98 cm,测量相对误差为0.4%。本系统还可以拓展到其他应用中,例如测量位移、衍射法测量细丝直径、振动测量等,将数据进行灰度阈值划分并以灰度颜色显示还可以用于扫描图像。
参考文献
[1] 王庆有. CCD应用技术[M]. 天津:天津大学出版社,2000.
[2] 翟青涌,黄建国,程玉华. 基于梯度算子的线阵CCD图像边缘检测方法研究[J].电子质量,2009(10):12.
[3] 刘奋飞,赵辉,陶卫,等. 改进的直线拟合线阵CCD图像边缘检测方法[J].光电工程,2005,32(3):4043.
[4] 杜昕,汪小澄. 线阵CCD数据采集及LCD显示[J].自动化仪表,2007,28(12):3639.
[5] 余皓,刘秉琦,王海宽,等. 线阵CCD图像两种直线拟合边缘检测方法比较研究[J].光学仪器,2015,37(3):268271.
[6] 马超,高鹏,杨白芹,等. 基于STM32和uC/OSII的嵌入式数字示波器设计 [J].电子技术,2013(12):7375.