一种基于FPGA的TDC激光测距方法
技术领域
本发明属于激光或红外等脉冲测距技术领域,具体涉及一种基于FPGA的TDC激光测距方法,可应用于激光雷达汽车智能防撞、遥感成像等方面。
背景技术
激光测距***是通过测量激光从发射到返回之间的时间来计算距离的。在如图1所示的脉冲式激光测距测距中,时差测量成为了一个影响整个测量精度最关键的因素。一般完成时差测量有两种基本途径:一是利用可编程门阵列,例如FPGA或CPLD,自己编程开发,二是使用商品化的通用TDC芯片。
利用可编程门阵列自己编程时差测量的优势是:能够在单个芯片上同时完成时间测量、控制与读出逻辑以及测量结果的后续处理,具有较高的性价比,但存在难以克服供电电压和环境温度波动的影响、难以保持多通道测量工作一致性以及测量精度低的缺点。
与之相比,通用TDC芯片可以较好地解决上述缺点。TDC芯片具有较高的测量精度,例如要测量1公里的距离,分辨率要求1cm,则时间间隔测量的分辨率则要求高达67ps,其中时间数字转换芯片TDC单次测量分辨率为65ps。另外,TDC芯片功耗低,集成度高,测量灵活性高,功能完善、使用者不需要了解TDC芯片的内部实现细节即可实现时差测量。但是,利用通用TDC芯片实现时差测量又也存控制接口复杂,需要配合单片机或FPGA逻辑才能实现芯片的配置和测量结果的读出等缺点。
发明内容
本发明提出一种基于FPGA的TDC激光测距方法,提高了测量精度,增强了数据稳定性并能实时得到距离信息。
为了解决上述技术问题,本发明提供一种基于FPGA的TDC激光测距方法,由FPGA和TDC共同完成;其中,TDC用于计算开始信号与截止信号之间的时间差;FPGA用于提供脉冲信号,并将TDC时间差转换为距离信息;脉冲信号用于驱动激光发射器以及作为触发TDC进行时间差测量的开始信号;所述TDC为TDC-GP2。
进一步,通过FPGA对TDC进行配置以及控制TDC进行时间差测量。
进一步,所述脉冲信号在驱动激光发射器发射激光的同时触发TDC;光电探测器一旦接收到反射脉冲,FGPA就将截止信号输入给TDC的STOP通道。
进一步,目标回波信号先进入FPGA,FPGA将回波信号转换为数字信号后送给TDC。
进一步,TDC的管脚电压Vio与电源电压Vcc均采用FPGA的内部电压供电,且Vio>Vcc-0.5V。
进一步,FPGA采用三段式状态机控制其SSN信号的拉低、拉高以及读和写操作;所述三段式状态机共有五个状态,分别为:IDLE、READ_SSN、WRITE_SSN、READ_DATA及WRITE_DATA;空闲时,状态机处于IDLE状态,当需要往TDC写数据时,先从IDLE状态跳转到WRITE_SSN状态,将SSN信号拉低;之后立即跳转到WRITE_DATA状态,将八位数据写到串行外设接口SPI的发送寄存器,通过发送寄存器移位转化成串行输出,利用MOSI信号线将数据发送给TDC;数据发送完成后重新跳转到WRITE_SSN状态,拉高SSN信号。
进一步,FPGA对TDC进行配置的方法为:FPGA向TDC写入50h进行上电复位;然后配置6个寄存器,FPGA向TDC内写入80000422h配置寄存器0,使得TDC选择测量范围1,进行自动校准,晶振上电后一直起振并且选择START信号上升沿触发,STOP_1信号下降沿触发;FPGA向TDC写入81014100h配置寄存器1,定义TDC内部计算方式为用STOP_1通道的第一个脉冲的上升沿减去START通道第一个脉冲的上升沿;FPGA向TDC写入82E00000h配置寄存器2,开启所有中断源,使得在TDC收到截止信号后开启中断;FPGA向TDC写入83000000h和84200000h配置寄存器3和寄存器4;FPGA向TDC写入85080000h,关闭噪声单元。
进一步,FPGA控制TDC进行时间差测量的过程为:FPGA向TDC写入70h进行初始化测量,使TDC进入测量准备状态;当START通道和STOP_1通道都接收到脉冲信号完成测量后,TDC产生中断,当INTN中断信号为低时,TDC发送读命令,FPGA读取MISO线上的读状态寄存器数据,判断是否溢出,若读取为0200h,则代表TDC溢出,FPGA向TDC写入70h来初始化,若读取为0009h,则代表在测量范围内,继续向TDC写入B0h,FPGA读取寄存器0中的数据,存放在OUT寄存器中,获得最初的时间差数据;FPGA在读完一次数据后,三段式状态机返回到IDLE状态,重新上电复位。
进一步,TDC在完成时间差计算后将时间差传输给FPGA,FPGA将TDC时间差转换为距离信息后将距离信息送显示器显示。
本发明与现有技术相比,其显著优点在于,考虑到脉冲激光测距对时差测量精度的要求,以及为了尽可能的减小供电电压和环境温度波动产生的测量误差,本发明选用时间数字转换芯片TDC_GP2进行激光测距,TDC_GP2芯片时差测量从接收到的开始信号到截止信号,计算产生的高速单元的数目得到时间信息;本发明提出在FPGA配合实现TDC-GP2芯片的配置,实现测量结果的输出以及后续结果处理。
附图说明
图1为TDC_GP2激光测距原理框架图。
图2为TDC_GP2时间测量***示意图。
图3为本发明基于FPGA的TDC精确时差测量的原理图。
图4为SPI串口状态机流程图。
图5为TDC工作流程图。
图6为FPGA最初距离与修正后距离关系图。
具体实施方式
容易理解,依据本发明的技术方案,在不变更本发明的实质精神的情况下,本领域的一般技术人员可以想象出本发明基于FPGA的TDC激光测距方法的多种实施方式。因此,以下具体实施方式和附图仅是对本发明的技术方案的示例性说明,而不应当视为本发明的全部或者视为对本发明技术方案的限制或限定。
本发明中,基于TDC的脉冲飞行时间的测量,即开始信号和截止信号之间的时间差测量,由;FPGA和TDC共同完成。TDC用于精确计算出接收到的开始信号和截止信号之间的时间差;FPGA用于提供激光发射的脉冲信号,还用于与TDC通讯,提供开始信号和截止信号,并将TDC所测的时间差信息处理成距离信息,提高了测量精度。
测量原理为:FPGA产生的脉冲信号,在驱动激光二极管发射激光脉冲的同时,输入到TDC的START通道,用于触发开始信号和截止信号之间的时间差测量,一旦从物体传回的反射脉冲到达光电探测器(接收电路),则FGPA将截止信号输入到TDC的STOP_1通道,此时时差测量完成。通过FPGA对于TDC进行寄存器配置以及时间测量控制,TDC完成测量后将时间测量结果传回给FPGA通过算法进行距离的精确计算,从而将结果通过RS-422串口显示在电脑上,完成整个脉冲激光测距功能。
测量步骤为:
步骤1,FPGA产生开始信号接入TDC的START通道,测距激光产生的回波信号先通过FPGA然后接入DC_GP2芯片的STOP_1通道,并且配置好FPGA和TDC的接口。
步骤2,FPGA通过SPI协议与TDC芯片通讯,对TDC上电及寄存器配置后,将测得的时差信息再传回FPGA进行处理。
步骤3,FPGA采用时间距离转换算法将TDC所测的时差数据转换成实际距离数据。
步骤4,FPGA将实际距离数据通过RS-422串口显示在电脑上,完成整个测距工作。
对于步骤1,如图3,首先FPGA产生脉冲信号作为开始信号接入TDC的START通道,用于触发TDC时差测量,同时脉冲信号接入发射电路,产生激光。激光遇到障碍物,反射后的回波信号接入FPGA的IO口,FPGA的IO口输出作为截止信号接到TDC的STOP_1通道。其中,回波信号不直接接入TDC而是先通过FPGA转成数字信号后接入TDC,这样可使得开始信号和截止信号都通过FPGA产生相应的延时,在TDC内部相减时可消除开始信号接入FPGA的时间误差,提高测量精度。并且FPGA的数字信号的上升沿上升时间更短有利于TDC的测量。最后,在FPGA与TDC连接中,配置好时钟信号、INTN中断信号、RST复位信号及SPI串行数据端口(SSN,SCK,MOSI,MISO)。
电路中,为了防止灌电流对于TDC芯片的损坏,TDC的管脚电压(Vio)和电源电压(Vcc)需要满足以下要求:首先,电源为TTL和CMOS电平兼容,需要满足公式Vio>Vcc-0.5V,否则如果Vcc过大,将会形成灌电流,可能使芯片过热甚至烧毁芯片,因此管脚电压Vio和电源电压Vcc都采用FPGA的内部电压3.3V,无需另设计电源并且又满足电路要求。另外,为了尽量避免电源线干扰,稳定电源值,需将TDC的管脚电压Vio电压滤波电容加到相对比较大的值,而且离TDC越近越好。
对于步骤2,FPGA首先完成***时钟的配置,对于主频50M的FPGA通过锁相环分出10M时钟供给TDC模块;然后完成SPI通信串口的配置,如图4,FPGA采用三段式状态机控制SSN信号的拉低、拉高以及读和写操作。状态机共有5个状态:IDLE、READ_SSN、WRITE_SSN、READ_DATA及WRITE_DATA。空闲时,状态机处于IDLE状态,当需要往TDC写数据时,先从IDLE状态跳转到WRITE_SSN状态,将SSN信号拉低;之后立即跳转到WRITE_DATA状态,将8位数据(一个字节)写到串行外设接口SPI的发送寄存器,通过发送寄存器移位转化成串行输出,利用MOSI信号线发送给TDC,整个步骤循环n次(n为需发送的字节数),发送完成后重新跳转到WRITE_SSN状态,拉高SSN,完成写操作。从TDC中读数据的流程与写数据类似,只是将SSN信号拉低后状态跳转到READ_DATA状态,TDC利用MISO信号线将数据发送给FPGA,其余不变,完成读操作。另外,READ_SSN状态用于读取SSN信号线的值,通常情况下不需要用到这个状态,只是考虑到功能的完整性保留了这个状态。
FPGA与TDC通讯后,通过往TDC内部寄存器读写数据完成对TDC的配置,流程如图5。首先,FPGA向TDC模块写入50h进行上电复位;然后配置6个寄存器,FPGA向TDC内写入80000422h配置寄存器0,使得TDC选择测量范围1,进行自动校准,晶振上电后一直起振并且选择START信号上升沿触发,STOP_1信号下降沿触发,满足短距离激光测量要求;FPGA向TDC模块内写入81014100h配置寄存器1,从而定义TDC内部计算方式为用STOP_1通道的第一个脉冲的上升沿减去START通道第一个脉冲的上升沿;FPGA向TDC模块内写入82E00000h配置寄存器2,以此来开启所有中断源,使得在TDC收到截止信号后开启中断,此时FPGA可以读取所测得的时差信号;FPGA向TDC模块内写入83000000h、84200000h默认配置寄存器3和4;FPGA向TDC模块内写入85080000h,关闭噪声单元,使得测量值不叠加额外的噪声。之后FPGA向TDC模块写入70h进行初始化测量,使得TDC进入测量准备状态。当START通道和STOP_1通道都接受到脉冲,完成测量后,TDC会产生中断,判断出INTN中断信号为低时,TDC发送读命令,FPGA读取MISO线上的读状态寄存器数据,判断是否溢出。若读取为0200h,则表明TDC溢出,FPGA向TDC模块写入70h来初始化,若读取为0009h,则代表在测量范围内,继续向TDC模块写入B0h,FPGA读取寄存器0中的数据,存放在32位的OUT寄存器里,此时就得到最初的时差数据。在读完一次数据后,状态机返回到IDLE状态,重新上电复位而非回到初始化状态,这样可保证TDC持续测量,不会出现TDC卡住无法继续测量下一个脉冲的情况。
对于步骤3,由于FPGA发射脉冲的频率是1KHz,所以每1ms应该收到一个时差数据。为了精确接收到每一个数据,在接收数据时另外设置一个DONE信号,只有DONE信号为高时,OUT寄存器里的数据才能有效。根据公式1可将32位寄存器所测得的时间信息转化成距离信息。
公式(1)中,T为32位寄存器所测得的时间数据;v为光速3×108m/s;除以2是由于测得的是往返距离;除以65536是由于32位寄存器前16位为整数部分,后16位为小数部分;除以109是由于之前得到的时间以ns为单位;250是TDC模块内部晶振4M来修正频率的。
得到最初的距离信息后,通过最小二乘法拟合修正。表1为实验中所测得的部分有效数据,其中第一列为FPGA输出的最初距离(s),第二列为参考距离(s0),第三列为拟合修正之后的实际距离(s′)。
表1:实验数据
s/m |
s<sub>0</sub>/m |
s′/m |
25 |
1.506 |
1.59 |
29 |
3.782 |
3.74 |
33 |
6.240 |
6.23 |
37 |
8.672 |
8.77 |
41 |
11.008 |
11.10 |
45 |
13.306 |
13.35 |
49.5 |
15.882 |
15.98 |
53 |
18.310 |
18.21 |
57 |
20.676 |
20.65 |
61 |
23.080 |
22.98 |
65 |
25.488 |
25.54 |
69 |
27.706 |
27.67 |
73 |
30.212 |
30.15 |
77 |
32.392 |
32.49 |
80.5 |
34.300 |
34.41 |
83.5 |
36.466 |
36.36 |
86.5 |
37.944 |
38.02 |
经最小二乘法修正,FPGA的SOUT寄存器输出的值为最终的距离数值。
对于步骤4,为了确保传输过程中数据的精确性,可采用同步时钟RS_422串口传输。可参阅图5。
对于芯片TDC-GP2而言,脉冲信号的速度越快,带宽越宽,则测量精度相应得会越高。另外,TDC-GP2芯片本身有两个测量范围,测量范围1和测量范围2。测量范围1的时间测量从0ps-1.8us,相对于距离来讲大约为0-270m。测量范围2的测量范围从2倍的高速时钟周期到4ms,最远距离可达20km。本发明基于测量范围1完成精确的时差测量。