




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、TDC-GP2在时差法(TOF)脉冲式激光测距中的应用摘要:在脉冲式激光测距仪的设计当小,时差测量(time of flight measurement)成为了一个 影响整个测暈赫度最关键的因素。徳国acam公司设计的时间数字转换芯片TDC-GP2 为激光测距的时间测最提供了完美的解决方法。木文着雨介绍了应用TDC-GP2在设计 激光测距电路当中的优势,以及在应用屮给出一些建议和提出了需要注意的一些问1.概述在当今这个科技发达的枚会,激光测距的应用越來越普遍。在很多领域,电力,水 利,通讯,环境,建筑,地质,警务,消防,爆破,航海,铁路,反恐/军事,农业, 林业,房地产,休闲/户外运动等都可以
2、用到激光测距仪。激光测距仪一般采用两种方 式來测量距离:脉冲法和相位法 脉冲式激光测距仪是通过测帚激光从发射到返冋之间的时间來计算距离的。因此时间 测就对脉冲式激光测距仪來说是非常重要的一个环节。由于激光的速度特别快,所 以发射和接收到的激光脉冲之间的时间间隔非常小。例如要测量1公里的距离,分 辨率耍求lcm,则时间间隔测最的分辨率则耍求高达67pso徳国acam公司的时间数字 转换器TDC-GP2单次测啟分辨率为典m 65ps,功耗超低,集成度高,测量灵活性高, 是脉冲式激光测距仪时差(TOF)测量非常理想的选择。2. TDC-GP2激光测距原理TDC-GP2的激光测趴某本原理如图1所示:J
3、光学元件丿图1: TDC-GP2激光测距原理激光发射装胃发射出光脉冲同时将发对脉冲输入到TDC-GP2的start端口,触发时并测 屋。一旦从物体传回的反射脉冲达到了光电探测器(接收电路)则给TDC产生一个 Stop信号,这个时候时差测量完成。那么从Start到Stop脉冲之间的时差被TDC-GP2 精确记录下來,用于计算所测物体与发射端的跖离。在这个原理中,单片机对T TDC- GP2进行寄存器配置以及时间测量控制,时间测量结果传回给单片机通过算法进行距 离的精确计算,同时如果有显示装置的话,将距离显示出来。在这个原理当中距离的 测最除了与TDC-GP2的时差测最粘:度有关外还与很多其他因素
4、有关系:激光峰值功率激光束发散程度光学元件部分光传输的媒体(空气,雨天,雾天等)物体的光反射能力光接收部分的灵敏程度等等被测物体特性以及传输媒介的铁性一般是由应用的条件给出的,那么可以根据应用的 条件來选择激光的发射器(波长,驱动条件,光束的特性等)和接收器(类型,灵敏 度,带宽等)。测最的范用在激光峰值功率更高以及信噪比更岛的怙:况下也会相应增 加。那么时羞测量的精度除了与TDC-GP2芯片本身测量精度尙关系外还与激光的脉冲 特性有关,比如脉冲的形状(宽度,上升下降沿的时间),以及探测器带宽和信号处 理电路。对T tdc-gp2而言,脉冲信号的速度越快,带宽越宽,则测鼠粘度相应得会越 高。那
5、么上而所述的些需耍注意的问题在这里我们并不做讨论,我们假设其他方面都已 经解决,那么这电我们着雨介绍一下如何应用单片机和TDC-GP2來控制时间测帚:。对T* tdc-gp2而言,这颗芯片本身有两个测暈范围,测屋范围1和测暈范围2。测战范阳1的时间测最从Ops-1.8us,相对J讪肉來讲大约为0-270mo测社范闌2的测帚 范闌从2倍的高速时钟周期到4ms辿就是说最高的距离测最可以到25公电以外.那么 我们下面就以不同的测量范围來进行介绍.测量范围1:Ops-1.8us在这个测量范围下,TDC GP2芯片的测量工作全部是由TDC高速测量单元完成的。在 这个测量范围中,gp2的start通道,s
6、topl, stop2通道都可用。每个slop通道有4个脉 冲的测量能力。在这个测最范用下,测最结果可以选择校准结果(32位)或者非校准 结果16位。推荐使用32位的校准结果,也就是每次测最都对TDC测最单元进行一次 校准。需要引起注意的问题:对于TDC-GP2來讲触发它的脉冲宽度必须耍大于2.5ns。任slarl通道的触发边沿与笫一个“op通道的脉冲边沿之间的时间间隔耍大于3.5ns。 推荐门动校准结果,并且选择每次测最完成后进行门动校准。这个功能通过设置寄 存器0的H动校准位为0來开启。如果计5? stop 1和sk)p2通道的脉冲时差的话,脉冲的时差范圉可以降低到0。Slml到 最后一个
7、slop脉冲的距离不能够超过1.8us,这是由丁硬件本身所限制的。山这个测臺模式卜测呈流程以及典型的寄存器设置如下:单片机与tdc-gp2的通信是通过spi串口完成的,那么对J:测最范用1的一个典型的测 暈过程为:void gp2config()SPIwriteS (0x50); /上电复位/配置寄存器:SPIwrite32 (0x80000420); 选择测量范围1, 11动校准,晶振上电后一血起振。SPIwrite32 (0x81014100):/stop 1接受1个脉冲,定义计算方法,用stopl通道的第一个 脉冲减去start脉冲SPlwrite32 (Ox82EOOOOO);/ 开启
8、所有中断源SPIwrite32 (0x83000000);SPlwrite32 (0x84200000);SPIwrite32 (0x85080000);测最循环:void measurementOSPIwriteS (0x70);初始化测量,通知gp2进入测屋准备状态Check INTN=0?SPIwrite32 (0xb4); 发送命令读状态寄存器SPlreadS (STAT);STAT&0x06000 ? /=说明有测量溢出,有问题SPIwrite32(OxbO); 发送命令读 regO 结果SPIread32(regO);I那么单片机在从gp2读取完数据Z后,可以对数据进行处理,來计算
9、脉冲來回的距 离。在上面的测最过程中如果gp2在被初始化之后,并没有接受到任何start信号,测量将 不会发生。也不会产生中断。只有start信号被接受后,测最才被触发,那么无论是测 量止常还是在规泄时间内没有接受到stop脉冲,在gp2的INTN管脚都会有中断信号 产生,通过判断状态寄存器的内容來判断测量是否正常。注:在接受start,stop脉冲之前,必须要将gp2的管脚en_start, en_stop置高平,否则 start,stop通道则不会被选通,测量也不会被触发! ! 应用平均提高精度的方法:上而所说的情况为,你的激光start脉冲给tdc-gp2的start通道,激光的返回脉冲
10、给tdc- gp2的slop通道的情况。A这种情况下,gp2的单次测量精度为65pso当测量的输出频率并不泉菲常帀要的怙 况下,比如每秒钟输出1到2次结果,那么这个时候为了提高测量粘:度,我们可以通 过多次测最平均的方法來消除系统误差。为了使gp2能够通过平均的方法來大大的减 少误差,那么下面推荐的测量设计是非常有效的,可以将系统谋差的峰峰值降低到 10ps 下。如下图所示:StartEN Start noiseMicroprocessorr-lStopl:50D5trnStop20? 二说明有测暈溢出,有问题SPIwrite8(0xb0); 发送命令读regO结果SPIread32(regO
11、);在上而的gp2测最范围2寄心器设置中,品耍注意的是任寄心器1中设置接受脉冲个 数的时候,如果你预期接受1个脉冲,则盂耍设置为2个。因为在测竝范国2中如原 理图所示实际上是进行了两次测最,因此耍多设置一个脉冲。同样在测量范围2中,对丁系统测晶数据进行平均同样可以大大的提高测量精度,因 此用户可以根据fl己的实际情况和所需的测最频率來进行相应得平均测暈。例程代码:下而是用C语言编弓的MSP430F135系列单片机对于gp2控制的一些控制函数的例程 代码+注释,其中描述了一些对gp2功能上的控制,通信为单片机用普通io 口模拟spi 通信操作,仅供参考:=二=端口设置程序=/void port_
12、init(void) /端口 初始化P5DIR l=BITiy/EN_STOPP5DIR l=BIT27/STARTP5D1R l=BIT37/ENSTARTP5DIR &=(BIT4);/INTNP6D1R l=BIT57/RSTNP5OUT &=(BIT1);P5OUT &=(B1T2);P5OUT &=-(BIT3);P5OUT &=(BlTO)y/stopP6D1R l=BITOy/SCK-输出方向P6DIR I二BIT1 SSN输出方向P6DIR &二(BIT2);/SO输入方向P6D1R l=BIT3y/SI-输出方向P6OUT &=(B1TO);/SCK空闲时低平,spi时钟极性
13、为0。P6OUT I二BIT1;/SSN片选在没有通信情况下置鳥void spi_enable(void) /开启 spi 通信,将 ssn 置低P6OUT &=-(BITl):/ssn 置低_NOP();return;void spi_disable(void) /关闭 spi 通信,将 ssn 置高P6OUTI二B1T1;ssii 置高_NOP();return;void send_zero(void) /发送 0P6OUT I=B1TO;/SCK 高电平_NOP();P6OUT &=(BIT3)y/Sl-输出一个低平_NOP();P6OUT &=-(BIT0)y/SCK 低平_NOP()
14、;return;void send_one(void) /发送 1P6OUT I=B1TO;/SCK 高电平_NOP();P6OUT l=BIT3;/SI-输出一个高平_NOP();P6OUT &=(BIT():/SCK 低平_NOP();return;/=/=SPI 写数据=/void spi_write8(unsigned char wbuf8) / spi弓入 8 位数据unsigned char cnt,tmp=0x80;spi_enable();for(cnt=&cm0;cnl)if(wbuf8&tmp)0)send_one()7/ 发送 1elsesend_zero();/发送 0
15、tmp /=2; /tmp右移一位 没有spi关闭命令,测试程序中代码关闭!return;void spi_write 16(unsigned int wbufl6) / spi 写 16 位数据 unsigned char ent;unsigned int tmp=0x8000;spi_enable();for(cnt= 16;cnt0;cnt)if(wbufl 6&tmp)0)send_one()7/ 送 1elsesend_zero();发送 0tmp/=2; /tmp 右移一位_NOP();spi_disable();return;void spi_write32(unsigned l
16、ong wbuf32) / spi 写 32 位数据unsigned char ent;unsigned long tmp=0x80000000;spi_enable();for(cnt=32;cnl0;cnt)if(wbuf32&tmp)0)send_one();发送 1elsesend_zero();/发送 0tmp /=2; /Imp 右移一位_NOP();spi_disable();return;/=/ /=SPI 读数据=/ unsigned long spi_read32()unsigned char ent;unsigned long tmp=0x80000000;unsigne
17、d long int rbuf32=OxOOOOOOOO;spi_enable();for(cnt=32;cnt0;cnt-)P6OUT l=BIT0;/SCK_NOP();if(P6IN &0X04)0X00)/P6.2 SOrbuf32 l=tmp;tmp /=2;P6OUT &=(BIT0): SCK_NOP();I_NOP();spi_disable();return(rbuf32);/=/ /=GP2 上电复位程序=二二=/ void GP2_RESET(void)P6D1R l=BIT5; 设置p6.5输出方向P6OUT l=BIT5; 输出高平_NOP();P6OUT &=(BI
18、T5); /输出低平_NOP();P6OUT l=BIT5; 输 出高平_NOP();给gp2RSTN管脚一个Reset的方波 /=/ =GP2 寄存器配置程序=/ void GP2_init(void) unsigned long REGO,REG1,REG2, REG3, REG4,REG5;unsigned char PU=0X50;unsigned char init=()x7();REG0=0X80008420;/校准陶瓷晶振时间为8个32k周期,244.14us.设置高速晶振上电后一宜起振.设置测最范围11动校准,上升沿敏感REG 1=0X81014100:/预期 stopl 脉冲
19、数 1 个.计算第一个 stop 1-startREG2=OX82EOOOOO;/开启所有中断源REG3=Ox83O8OOOOy/REG4=0x842(XX)(X);/REG5=OX85O8OOOO:/spi_write8(PU);/ 上电复位_NOP();spi_disable();spi_write32(REGO);_NOP();spi_write32(REG 1);_NOP();spi_write32(REG2);_NOP();spi_write32(REG3);_NOP();spi_write32(REG4);_NOP();spi_write32(REG5);_NOP();return
20、;/=/=GP2 时钟校准程序=/void GP2_cal(void)unsigned char cal_start=0x03;unsigned char read_reg()=Oxb();unsigned long in( CAL;float CAL_f;P5OUT l=(BIT3)y/EN_STARTspi_write8(cal_start);/ 启动校准_NOP();spi_disable();while(P5IN &0x 10)=0x 10)判断中断置位否_NOP();spi_write8(read_reg0); 读校准的时间数据_NOP();CAL=spiead32();通过计算校准
21、系数为 244.146/(float(CAL)/65536*0.250)_NOP();return;/=/=时间测量状态寄存器判断程序=/void GP2_TMSTAT()unsigned char stat=0xb4;unsigned long a;unsigned int b;while(P5IN&0x 10)=0x 10)/判断中断置位否_NOP();spi_write8(stat);_NOP();a=spi_read32();b=(a16);if(b&0x0600)=0)BZ1 &=0XFE;elseBZ1 1=0X0U/置溢出预计数器或溢出TDC标志/=/ /=用单片机口产生STAR
22、T信号= void GP2_START(void)P5OUT &=(BlT2)y/STARTNOP():P5OUT l=(BIT2);_NOP();P5OUT &=(B1T2);_NOP(); return;/=/=通讯测试=/void tes(comunication(void)unsigned long int REG1;unsigned char ent;unsigned char tmp=0x80;unsigned char test_reg=Oxb5; 读结果寄心器5,反映寄器1的岛8位 unsigned char test_regO=OxOO;REg1=0x81 112233;/写
23、寄存器1,随便输入,然后从结果寄存器5读岛8位spi_wriet32(REG 1);_NOP();spi_writc8(test_reg);_NOP();for(cnt=&cnl0;cnl)P6OUT l=BITO;/SCL_NOP();if(P6IN &0X04)0X00)/P6.2 SOtest_regO l=tmp;Imp /=2;P6OUT &=(BIT0);SCL_NOP();Ispi_disable();/=/=测试fire脉冲产生测试=/void fire(void)unsigned char TDCni匸0x70;unsigned char start_cycle=0x01;P
24、5OUT l=(BIT3)y/EN_START 开启spi_write8(TDC_init); /初始化 TDC_NOP();spi_disable();spi_write8(start_cycle); /发送 fire 脉冲_NOP();spi_disable();GP2_START(); / start信号,否则Be信号只能发送一次,系统将会挂起/=二温度测量=/void TEMP(void)unsigned long int A,B,C,D;SPIwrite32 (0x8(X)007e0); 选择 4 个温度测帚:口,Tcycle = 3(X)us 4MHz ref. clock. 2个
25、预热测量,SelClkT = 1,spi_write8(0x02); /启动温度测最_NOP();spi_disable();while(P5IN&0x 10)=0x 10)/判断中断置位否_NOP();GP2_TMSTAT(); /GP2 状态读取_NOP();spi_write8(read_reg0);_NOP();A =spi_read32()y/读结果寄存器0的温度测量时间结果_NOP();spi_write8(read_reg 1);_NOP();B =spLread32();/读结果寄存器1的温度测最时间结果_NOP();spi_write8(read_reg2);_NOP();C
26、 =spi_read32()y/读结果寄存器2的温度测最时间结果_NOP();spi_write8(read_reg3);_NOP();D =spi_read32()y/读结果寄存器3的温度测応时间结果_NOP();后而可以对参考电阻和传感器电阻阻值比较,然后査表获得温度/=/ /=时间测量测试=/ void timemeasurement(void)unsigned long int M;spi_write8(0x70); /初始化 TDC_NOP();spi_disable();P5OUT l=(BIT3);/EN_STARTF5OUT I=(BIT1);/EN_STOPGP2_START
27、();给 start 信号 _NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP(); 延迟P5OUT I二B1TO;给 STOP 信号_NOP();while(P5IN&0x 10)=0x 10)/判断中断置位否_NOP();GP2_TMSTAT(); /GP2 状态读取_NOP();spi_write8(read_reg0); /读时间测量数据_NOP();M=spi_read32();_NOP();I在应用tdc-gp2时还需要注意的一些细节问题:关于32K晶振和4
28、M高速晶振需要注意的问题这两个晶振都可以通过外部來给出。但是4M高速晶振我们建议用我们的推荐电路.因为这个晶振时钟 .匸川!血的,所以禽要I#常好的进行控制。关帖振电路的电阻和电容诘也同样按照我们F册推荐的 电路给出.因为:首先和晶体串联的那个电阻据我们的测试没仃也应该圧可以的。但圧推荐使用这个电阻。因为晶体输 出的是方波.这将引起谐波干扰.尤其是阳抗严取不匹配的诸况卜,加卜电阳后.该电阻将与输入电容 构成RC积分平滑电路.将方波转换为近似正弦波,虽然信号的完整性受到 淀影响.但宙于该信号还 要经过后级放大、整形后才作为时钟信号,因此性能并不受彩响。还有一点就是减小冋波干扰及导致的 信号过冲。
29、另一个和品体并联的电阻,足必须要有的,这个电阻是为了帮助起振用的。要想构成一个振 荡器,耍求放大电路有一个介适的增益,因此通常会加入反馈电阻降低电路的增益为一个合适的值,这 就是加入电阻的作用.如果不加的话起振就会有问題。在gp2 I电之后高速晶振和32k晶按应该自动超振,如果没有,说明电路或者芯片由问题这个是判斷 芯片损坏的种方法。示波器的探头要训到X10档。高速晶振我们推荐使用陶瓷晶振,因为起振时间快.而n tdc-gp2可以对陶瓷晶振进行校准。用石英晶 振没有太人的作用,而且起振时间慢,对于功耗控制上比较难。关于电源控制问为了防止灌电流对于芯片的损坏,tdc.gp2的Vio和Vcc电澹需
30、耍满足一下耍求:首先电源为TTL和CMOS电平加容,霜耍满足公式VioVcc-0.5V,否则如果Vcc过人,将会形成灌 电流 io内部的保护2级管将会被击穿.可能使芯片过热茯至烧毁芯片,所以在控制电源匕一定要注 意以上所提到的问题,避免不必耍的损失。还冇就足电源的稳定性。如果在电源上冇周期性的干扰的话,对于测量是非常不利的。首先时差测量的 粘度和电源稳定性何关,还仃温度测呈也同电源仃关。请尽星避免由于电源线干扰,稳定电源值.从而 获得高质就的测就结果。将gp2 Vio电源的滤波电容加到200ut而H离gp2越近越好。关于spi通信:我们手册匕所讲的spi通信需要将时钟相位置1,时钟极性置0。但是对于不同的单片机似乎有所不同。 在msp430中的spi通信时钟相位和时钟极性的定义与摩托罗拉正好相反。所以在进行通信调试的时候, 请改变一下时钟相位和时钟极性进行测试,看看到底适用哪种悄况。关于温度测量问题:首先温度测量.要求电源电压耍稳宦,不
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版商铺店面房屋租赁合同(含节假日客流保障条款)
- 2025版绿色能源项目商务合作保密协议文本
- 2025版全新定制化团队建设服务合同范本
- 2025年度危化品安全操作人员资质认证服务协议
- 2025年度高考复读生代理招生服务合同范本
- 2025年度店面转让合同范本:包含品牌使用权约定
- 2025年二手房买卖合同附带租客权益保障
- 2025年度商铺物业管理与公共安全服务合同范本
- 2025版环保产业商务合同范本
- 2025版快速救援拖车服务合同范本
- 电子工业出版社小学-信息技术-第五册-5年级-上册-全册课件
- (施工方案)二期混凝土施工方案
- 课堂因“融错·容错·溶措”而精彩
- 《简爱》课本剧剧本
- 阳光晾衣房钢结构专项施工方案
- 安宁疗护服务流程
- 肿瘤科实习生入科培训课件
- 热分析DSC培训new
- 注塑机安全操作规程
- 运动处方(课堂PPT)
- 第2章曲柄压力机
评论
0/150
提交评论