《TMS320C3X系列-DSP原理与开发技术》课件第9章_第1页
《TMS320C3X系列-DSP原理与开发技术》课件第9章_第2页
《TMS320C3X系列-DSP原理与开发技术》课件第9章_第3页
《TMS320C3X系列-DSP原理与开发技术》课件第9章_第4页
《TMS320C3X系列-DSP原理与开发技术》课件第9章_第5页
已阅读5页,还剩187页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第9章TMS320VC33芯片的

应用实例

9.1高分辨率感应测井仪数据采集系统9.2基于DSP芯片的USB通信接口的实现本章小结

思考题与习题

9.1高分辨率感应测井仪数据采集系统

9.1.1系统功能描述感应测井是重要的传统电阻率系列测井方法之一,是依据线圈与地层之间的电磁感应原理来测量地层电导率的。自感应测井仪器出现以来,科技人员不断地对感应测井仪器的探测性能进行改进,以使测井仪器的分辨率得到提高。主要从两方面入手:一是改进线圈系结构;一是选用更先进的信号处理算法。由美国哈里伯顿公司生产的高分辨率感应(HRI)测井仪采用新的线圈系设计,使纵向、径向两个方向能同时得到最优化响应。同时,由于其深感应没有盲频率的影响,通过现代信号处理可以使深、中感应具有相同的纵向分辨率,能分辨薄至0.44 m的薄层,其探测深度也比传统的深、中感应仪器要深,达到2.3 m,具有很高的实用价值。高分辨率感应测井仪的数据采集和处理电路系统采用了浮点DSP(型号TMS320VC33)作为信号处理核心,对深、中感应,聚焦信号进行数据采集和各种预处理,同时响应井上数据传输命令;同时应用FPGA作为系统的控制核心,用来控制所有模拟开关的切换,A/D的采样、发射信号产生、通信等模块。这种集成化的设计降低了仪器的体积,而且FPGA作为现场可编程逻辑,可靠性高,调试方便。该感应测井仪器包括双感应、数字式球形聚焦两部分以及辅助量的测量(如自然电位、温度、直流电等参数),故该系统为多通道高速的DSP系统,这对设计基于DSP的数据采集系统有重要的参考价值。具体来说,感应测井包括中感应和深感应两路信号,球形聚焦包括4路测量信号,外加一路辅助信号,共7路信号需要采集。数据采集完成后,DSP暂存数据并做相应的处理,如噪声处理、检波、归一化处理过程,最后把信号送到通信接口,通过测井电缆把传输到地面,双感应测井和数字聚焦测井原理框图分别如图9.1、9.2所示。图9.1双感应测井系统框图图9.2数字聚焦测井系统框图9.1.2硬件电路设计本数据采集系统的硬件设计主要从系统总体结构、双感应数据采集原理、球形聚焦数据采集原理和通信四个方面介绍。

1.系统总体结构整个系统是以DSP和FPGA为核心的数据采集系统。按照功能划分为DSP模块、数据采集模块、FPGA模块,其中DSP模块主要包括DSP芯片、DSP专用电源模块、程序存储器、接口及外围电路,主要功能是完成双感应(DIL)和数字聚焦(DFL)部分的数据处理;数据采集模块主要包括用于双感应部分同步启动的两片高速A/D、用于数字聚焦(DFL)部分和辅助道采样的四通道高速A/D,主要功能是采集A、B道的双感应信号,A、B、C、D四道的聚焦信号及辅助道信号;

FPGA模块由Xilinx公司Sparten系列产品及外围电路构成,主要任务是实现DSP芯片的并行数据与数据传输3506接口板之间的接口、控制与管理高速A/D芯片的状态。整个系统的原理框图如图9.3所示。图9.3高分辨率感应测井仪数据采集系统原理框图由于TMS320VC33芯片内部不带FLASH程序存储器,系统掉电后程序将丢失,因此需要外接高速程序存储器,使得DSP在上电后,立即把片外的程序引导到片内高速的RAM内,高速执行程序。本系统采用AMD公司的AM29F010作为DSP片外的程序存储器,AM29F010具有128KB存储空间、8位数据位,具有读、写、擦除功能,并且支持在线烧写功能。本系统中选用的FPGA芯片为XCS30XL,它内部包含1368个逻辑单元,最大系统门高达30 000个,从而可大大减少整个系统的体积。它除了实现与数据遥传的接口和管理高速A/D芯片的状态外,还起到电平转换的功能,这是因为TMS320VC33的I/O口为3.3 V供电,可选用的A/D芯片是5 V供电,所以它们之间不能直接接口;虽然FPGA也为3.3 V供电,但I/O口允许通过+5 V的逻辑高电平信号,可直接与5 V的电平接口,所以可以通过FPGA实现DSP与A/D的接口,省去了专门的电平转换芯片,使得整个系统结构紧凑,功耗大为降低。FPGA的程序被存放在专用PROM中,可被重复擦写,有利于增加系统的灵活性和可修改性。数据采集模块主要完成高分辨感应测井中的双感应、球形聚焦和辅助道的数据转换和采集。为了充分地利用DSP的资源,系统中采用了并行A/D转换器和串行A/D转换器,分别对双感应及数字聚焦和辅助道的数据进行模数转换。双感应(中感应和深感应)的数据通过DSP的并口读取;数字聚焦(包括A、B、C、D四个通道)和辅助道数据采用DSP的串口读取。这些A/D转换器的启动信号都由FPGA提供。由于选用的A/D转换器是 +5 V供电,故数字聚焦和辅助道的数据先通过FPGA,再送入DSP。

2.双感应测井数据采集原理双感应测井系统从接收线圈中获取原始的测井信号,经过滤波电路后,得到深感应测量信号、中感应测量信号,连同测井仪的刻度信号CAL、零信号,经过状态控制线A0、A1、A2、A3控制的模拟开关,转换成A、B两道信号,这两道信号的处理不同于传统的感应测井方法。在该系统中,采用数字相敏检波的方法,不需要对A、B道分离实部、虚部,而是直接对A、B道信号采样,对所采集到的数据按照数字相敏检波的原理,分离出实部和虚部,所以双感应测井有两路数据采集通道。这两路信号经过前置放大后送到A/D转换器的模拟输入口,由A/D转换器将双感应测井的模拟信号变成数字信号并存储在DSP中,再由DSP对测井数据作一系列的处理,包括数据平均、相敏检波、归一化等处理。本系统需要两片A/D转换器分别对A道和B道数据采样,这两片的启动是同时的。由DSP处理后的数据通过通信接口对其进行曼彻斯特编码,由七芯电缆的2# 缆芯和5# 缆芯传输到地面系统。在数据采集时,必须保证A道和B道同时采样。这是因为仪器每50.4ms切换一次深、中发射,而测量信号由A、B两道组成,共有四种信号深感应测量信号MD、中感应测量信号Mm、刻度C、内零Z,其中刻度C和内零Z信号深、中感应时的值不同。在作归一化处理时,是按照A、B道测量数据和时间顺序进行的,从而分别计算出一帧内深、中感应测量信号归一化值,且每个归一化值(深、中感应)的时间间隔为100.8 ms。所以若A、B道不同时采样,将使深、中归一化结果产生混乱,导致数据的不准确。所选数据采集芯片为AD公司的AD7665,它是一种高速、高精度的A/D转换芯片,分辨率为16位,最大采样速率为500kSPS,具有多种模拟输入范围,正常工作时的功耗仅为64 mW。

1)数据采集原理一帧数据的周期为16个50.4 ms,每个50.4 ms中的30 ms用于采集数据,另外20.4 ms用于处理数据。其中数据处理和数据采集的时间是由FPGA控制的,AD7665的启动信号也是由FPGA控制的,但数据读取信号则由DSP提供。在30 ms数据采集时间内,A、B两道同时采样,采样间隔为3.125μs/点,一个周期内采集16个点,所以30 ms内每个通道共采集9600个点,按A、B两道分别存储。

2)时序控制根据数据采集原理,AD7665的控制时序如图9.4所示。图9.4AD7665控制时序图9.4所示时序的产生是由FPGA进行逻辑组合实现的。采样间隔为3.125 μs/点,即采样频率为320 kHz。FPGA的外部时钟采用10.24 MHz时钟源,通过内部分频获得320 kHz。FPGA只有这一个时钟源,从而避免多个时钟源间串扰,保证时序的稳定。其他时序的产生通过一定的组合逻辑实现,如图9.5所示。图9.5AD7665控制时序产生框图

3)数据处理电路中的DSP主要功能是读取A/D转换的数据,并对其进行处理。由控制时序可看到,除去30 ms的数据采集时间,还有20.4 ms的时间是用来数据处理的。双感应数据处理主要包括以下内容:

(1)数字相敏检波。相敏检波的目的是把测量信号的实部信号和虚部信号分量出来。由于感应测井时的接收信号与发射信号有相位的变化,而与发射信号同相的分量被称为实部信号,也是获得地层视电阻率非常有用的信号;与发射信号的相位相差90°的分量被称为虚部信号。

(2)刻度剔刺。因为内刻度信号取自发射电流,故采集的内刻度信号幅值应该相同,但由于干扰信号的存在,采集到的数据常常含有较大的数据,这里称为毛刺。因此为了消除干扰对内刻度信号的影响,设计了内刻度信号剔毛刺子程序,即把变化较大的内刻信号剔除。

(3)刻度、内零信号平均。为了对A、B道的测量信号归一化处理,首先必须确定参与处理的内刻信号(C),内零信号(Z)。每道测量信号均用本道测得的内刻、内零平均值进行归一化处理。而C、Z平均值则采用该道在一段时间内测得的32个内刻、内零的平均值,在仪器刚通电工作,没有达到32个数据时,则采用有几个便用几个值来平均的处理方法。

(4)归一化处理。根据归一化处理公式:对A、B两道信号进行归一化处理。其中M为测量信号的矢量(包括R、X信号),C为内刻度矢量,Z为内零矢量。按A、B道测量数据及时间顺序,可以分别计算出一帧内深、中感应测量信号归一化值。每个归一化值(深、中感应)的时间间隔为100.8 ms(深、中感应以每50.4 ms交替发射,故每个值相应的时间间隔为100.8 ms)。一帧的深、中感应按时间顺序都能得到8个归一化处理后的测量信号Hn,其中有4个A道信号,4个B道信号。

3.数字聚焦测井数据采集原理数字聚焦测量的信号有M1和M2电极之间的电位M12V、M0电极的电位M0V、检测发射的主电流I0和聚焦电流Ib以及刻度信号CAL,这四个信号由模拟开关切换变成0、1、2、3四路信号。这四路信号的全部是差分信号。其中在获取M12V时,先经过变压器耦合,再经运算放大器放大,经过了一个由状态线A5控制的模拟开关。而在获取M0V信号时就没经过这样的一个模拟开关。这是因为在不同的电流工作模式下,测量到的M12V的符号相反。四路信号经过差分变单端后,送到A/D转换器中,实现测井数据的数字化,在DSP中完成数据的处理,然后并行送到FPGA中,通过通信接口对其进行曼彻斯特编码,由七芯电缆的2# 缆芯和5#缆芯传输到地面系统,如图9.2所示。数字聚焦测井的数据采集是由AD公司的数据采集芯片AD974和DSP及FPGA实现的。测量到的四个信号经过A/D转换后,变成数字信号,DSP接收到数字信号后,进行信号处理。选用的数据采集芯片为AD974,分辨率为16位,最大采样速率为200kSPS,四个单端输入通道,通道选择由芯片中的A0和A1脚决定;片内有数据时钟;采用芯片内部的2.5 V参考电压,保证了采样的稳定性。

1)数据采集原理数字聚焦共有四道数据,对0、1、2、3这四道每隔12.5 μs采一点或者说每通道的采样间隔为50 μs/点,转换后数据采用串行方式送到DSP并按0、1、2、3道分别存储。由于所用的TMS320VC33DSP芯片只有一个串口,用它既接收数字聚焦数据又要接收辅助道的数据。因此二者的数据采集和传输就需要分时进行,即在30 ms的采样时间间隔中,前28 ms用于采集数字聚焦数据,每通道采集35个周期,每周期16点,即每通道共采集560点;后2 ms用于采集辅助道数据,共采集160个点。数据处理在每个50.4 ms间隔中的20.4 ms内完成。另外,数据传输可在任何时刻进行。

2) AD974控制时序的产生按照数据采集原理,产生的控制信号满足在一个状态50.4 ms内有28 ms的时间采样,同时还需对AD974的A0和A1提供控制信号,实现通道切换功能。控制时序如图9.6所示。具体在FPGA中的实现与AD7665的控制时序产生方法相同,如图9.7所示。图9.6AD974控制时序图9.7控制时序产生框图

3)数据处理数字聚焦和辅助道的数据分时送到DSP的串口后,在每个工作状态中有20.4 ms的时间来完成数据处理。对采样数据进行相敏检波,分离出实部分量和虚部分量后,进行归一化处理,同时也进行刻度剔毛刺和内零平均,最后求出阻抗DZm、DZb、Zm、Zb。阻抗计算公式为,,其中,为发射测量电流时M0电极的电位归一化值;为发射测量电流时电极M1、M2的电位归一化值;为发射聚焦电流时M0电极的电位归一化值;为发射聚焦电流时电极M1、M2的电位归一化值;为测量电流归一化值;为聚焦电流归一化值。计算出各个阻抗值后,可按照下面的视电阻率公式算出地层的视电阻率:9.1.3软件设计高分辨率感应测井仪的数据采集的软件主要完成数据的读取和保存、处理以及传输等功能,其中数据处理是软件设计的核心,也是系统的关键。在前面的硬件电路设计部分,简单地介绍了双感应信号和数字聚焦信号的处理内容。本节主要介绍数据处理的流程和程序设计。

DSP对测井数据的接收和处理充分利用了中断操作,程序流程如图9.8所示。图9.8高分辨率感应测井仪数据处理流程中断分配如下:(1)中断0(INT0):用于程序引导;(2)中断1(INT1):读取双感应数据;(3)中断2(INT2):数据传输;(4)中断3(INT3):数据处理;(5)串口中断:读取数字聚焦数据,数字聚焦和辅助道是通过串口读取数据的。

1.数字相敏检波所谓相敏检波,就是把输入信号的相位和频率分离开,对感应测井信号来说,就是把测井信号分离成实部和虚部的过程。传统的相敏检波采用模拟电路把测井信号的实部和虚部分离开来,在本系统中,则采用数字相敏检波。其原理如下。假设观测信号(测量信号)d(t)为

d(t)=Dcos(wt-j)=Dcosjcoswt+Dsinjsinwt(9.1)如果假设dR(t)=DRcos(wt-180)=DRcoswt为实部信号

dX(t)=DXcos(wt-90)=DXsinwt为虚部信号。那么测量信号就可表示为d(t)=dR(t)=dR(t)+dX(t),式中DR=DcosjDR=Dcosj,DX=Dsinj,

j=arctg(DX/DR),D=。我们关心的是,怎么才能根据测量信号得出DR和DX的表达式。设或(9.2)(9.3)同理(9.4)或(9.5)由式(9.2)、(9.4)可见,只要把测量信号乘上对应同频率的标准正弦波和标准余弦波后可直接分离出DR和DX。若把式(9.2)、(9.4)采用离散化形式,用求和近似代替积分,则有(9.6)同理式(9.6)、(9.7)的计算相当于求d(t)的面积。由于正弦(或余弦)信号正负累计的误差可相互抵消,因而计算本身几乎不产生误差。但是起始采样点不准确会带来误差,因此我们要确保在绝对零点采样。在这种要求下,我们利用FPGA控制起始采样点。FPGA是硬件电路,能够将误差控制在5 ns之内。同时由于FPGA的所有控制信号都是由同一个晶振分频而得的,因此不会造成累计误差。有了FPGA的高精度控制和DSP的浮点数据处理,就能够保证系统整体误差较小,达到了测井仪高精度、高分辨率的设计要求。

2.感应测井预处理分析数字式高分辨感应测井仪感应部分井下数据处理如图9.9所示。中、深感应信号交替地通过A、B道信号进入高速A/D,变为数字信号后送入DSP进行数字相敏检波,得出相应的A、B道的R、X信号:

DR、DX、MR、MX为中、深感应测量的R、X信号;

CRD、CXD、CRM、CXM为中、深感应内刻度的R、X信号;

ZRD、ZRD、ZRM、ZZM为中、深感应内零的R、X信号。图9.9数字式高分辨感应测井仪感应信号井下预处理流程之后,对A、B道的测量信号进行归一化处理。在归一化处理时,首先必须确定参与处理的内刻信号(C)、内零信号(Z),即需要对内刻信号进行剔毛刺处理和内刻信号C、内零信号Z平均处理。内刻C、内零Z的平均值采用该道在一段时间内测得的32个内刻、内零的平均值(在仪器刚通电工作,若测量数据不足32个时,则采用有几个值用几个值来平均的方法)。具体的计算方法如下:N≤32(9.8)N>32(9.9)N≤32(9.10)N>32(9.11)式中,N代表工作时已到达的最后一个C、Z数据的位置(个数),用该C、Z平均值对其后到达的测量信号进行归一化处理;n代表第n个内刻或内零值;D(M)代表深(D)、中(M)感应的内刻、内零;A(B)代表A道或B道所测得内刻、内零;R(X)代表内刻或内零的R或X信号。其具体工作过程是设置16个长度为可存32个信号的暂存器,把A、B道测得的深、中感应内刻、内零的R、X信号,分别存入相应的暂存器中。这些信号按到达时间顺序依次排列存入暂存器中。当第32个信号存满,第33个信号来后,把暂存器中信号依次递升,使第一个信号溢出,第33个信号存入原第32个信号位置。以此方式使暂存器中永远保留最新的32个内刻、内零值。再把这32个信号平均,作为当前使用的内刻、内零值。根据归一化处理公式,对A、B两道信号信号进行归一化处理。其中M为测量信号的矢量(包括R、X信号);C为内刻度矢量;Z为内零矢量。分解可得:其中按A、B道测量数据及时间顺序,可以分别计算出一帧内深、中感应测量信号归一化值。每个归一化值(深、中感应)的时间间隔为100.8 ms(深、中感应以每50.4 ms交替发射,故每个值相应的时间间隔为100.8 ms)。一帧的深、中感应按时间顺序都能得到如下8个归一化处理后的测量信号Hn,其中有4个A道信号,4个B道信号,A、B道信号按100.8 ms时间间隔出现。聚焦信号处理的流程如图9.10所示。共有四个输入通道,每个通道按照给定的状态分别测量的聚焦(b)电流,测量(m)电流发射时所测信号:M0电极的电位信号,M1M2电极的电位差信号以及内刻度,内零。图9.10高分辨率感应测井仪聚焦信号井下预处理流程聚焦也和感应一样采用一帧16个测量周期,每50.4 ms为一发射测量周期,每一个测量周期中总有三个测量信号,一个内零或内刻信号。刻度的剔刺程序和感应类似,不同的是内零、刻度的采用16个数据平均。聚焦信号测量的是幅度,因此归一化公式为所测的各种信号均据此进行归一化处理。,,,,式中上标m、b分别代表测量电流和聚焦电流发射。H代表该信号的测量道,H的取值范围是0~3。Vm0为M0电极至M1、M2电极中点的电位。Vm12为M1、M2电极间的电位差。Vi是发送电流(测量电流,聚焦电流)的电压取样值。根据DFL测量原理,一帧16个周期中,相邻两个测量周期组成一完整的DFL测量数据,这些数据归一化后,可根据下式计算出等效阻抗Zm、DZm、Zb、DZb:,,式中H、H+1、H+2的意义是Zm、DZm、Zb、DZb是在同一测量时间确定的,因此各测量信号不在同一道。当测量Vm0在第0道时,Vm12则在第1道,Vi则在第2道测量,以H+1,H+2类推,当加数为4时则为第0道,为5时则为第1道(H的取值仅为0、1、2、3)。一帧16个测量周期。由于篇幅所限,在此只给出主程序和主要子程序的源代码。下面为高分辨率感应测井仪数据采集与处理的程序伪指令及地址定义。;***********程序的伪指令,定义地址************************

.globalggy .global _c_int00stack_size .set300h ;定义堆栈大小为300hstack .usect".stack",stack_size .data ;以下为.data段A_DIL_STAADDR.word801a70h ;A通道原始数据的起始地址B_DIL_STAADDR.word 804100h;B通道原始数据的起始地址DFL_STADDR .word 806681h;数字聚焦原始数据的起始地址STACK_ADDR.word stackIO_ADD.word 808000h;*************以下为双感应A、B道的内刻、内零的存储地址**********************;****说明标识符中带“D”表示为双感应的数据,“M”表示为中感应的数据,下同******A_CRD_ADDR .word 809800h A_CXD_ADDR .word 809810h A_CRM_ADDR.word 809820h A_CMX_ADDR.word 809830h B_CRD_ADDR .word809840h B_CXD_ADDR .word 809850h B_CRM_ADDR .word 809860h B_CMX_ADDR .word 809870h A_ZRD_ADDR .word 809880h A_ZXD_ADDR .word 809890hA_ZRM_ADDR .word 8098a0h A_ZMX_ADDR .word8098b0h B_ZRD_ADDR .word 8098c0h B_ZXD_ADDR .word 8098d0h B_ZRM_ADDR .word 8098e0h B_ZMX_ADDR .word 809900h ;***********以下为数字聚焦刻度、内零的存储地址**********************DFL1_CM_ADDR .word 809910h DFL1_CB_ADDR .word 809920h DFL2_CM_ADDR .word 809930h DFL2_CB_ADDR .word 809940h DFL3_CM_ADDR .word809950h DFL3_CB_ADDR .word 809960h DFL4_CM_ADDR .word 809970h DFL4_CB_ADDR .word 809980hDFL1_ZM_ADDR .word 809990hDFL1_ZB_ADDR .word 8099a0hDFL2_ZM_ADDR .word8099b0hDFL2_ZB_ADDR .word 8099c0hDFL3_ZM_ADDR .word 8099d0hDFL3_ZB_ADDR .word 8099e0hDFL4_ZM_ADDR .word8099f0hDFL4_ZB_ADDR .word 809a00h;*************以下为数字聚焦待处理的数据地址*****************************DFL1_OLD_CM_ADDR .word 809a01hDFL1_OLDEST_CM_ADDR.word 809a02hDFL1_OLD_CB_ADDR .word 809a03hDFL1_OLDEST_CB_ADDR.word 809a04hDFL2_OLD_CM_ADDR .word 809a05hDFL2_OLDEST_CM_ADDR.word809a06hDFL2_OLD_CB_ADDR .word 809a07hDFL2_OLDEST_CB_ADDR.word809a08hDFL3_OLD_CM_ADDR .word 809a09hDFL3_OLDEST_CM_ADDR.word 809a0ahDFL3_OLD_CB_ADDR .word 809a0bhDFL3_OLDEST_CB_ADDR.word 809a0chDFL4_OLD_CM_ADDR .word 809a0dhDFL4_OLDEST_CM_ADDR.word 809a0ehDFL4_OLD_CB_ADDR .word809a0fhDFL4_OLDEST_CB_ADDR.word 809a10h;*************以下为处理后的数据地址***************************ZB_ADDR .word 809a11hDZB_ADDR .word 809a12hZM_ADDR .word809a13hDZM_ADDR .word 809a14hA_DR_ADDR .word 809a15hA_DX_ADDR .word 809a16hA_MR_ADDR .word 809a17hA_MX_ADDR .word 809a18hB_DR_ADDR .word 809a19hB_DX_ADDR .word 809a1ahB_MR_ADDR .word 809a1bhB_MX_ADDR .word 809a1ch;28个字DFL_AFTER_ADDR .word 809a1dh;16个字AFTER_ADD_ADDR .word 809a2dh;16个字;***********************************************************************;*******************双感应A、B道待处理的数据地址***********************A_OLDEST_CRD_ADDR

.word 809a5dhA_OLD_CRD_ADDR .word 809a5ehB_OLDEST_CRD_ADDR.word 809a5fhB_OLD_CRD_ADDR .word 809a60hA_OLDEST_CXD_ADDR.word809a61hA_OLD_CXD_ADDR .word 809a62hB_OLDEST_CXD_ADDR.word 809a63hB_OLD_CXD_ADDR .word 809a64hA_OLDEST_CRM_ADDR.word 809a65hA_OLD_CRM_ADDR .word809a66hB_OLDEST_CRM_ADDR.word 809a67hB_OLD_CRM_ADDR .word 809a68hA_OLDEST_CXM_ADDR.word 809a69hA_OLD_CXM_ADDR .word 809a6ahB_OLDEST_CXM_ADDR.word 809a6bhB_OLD_CXM_ADDR .word 809a6chA_DIL_MR_ADDR .word 809a7dhA_DIL_MX_ADDR .word809a8dhA_DIL_DR_ADDR.word 809a9dhA_DIL_DX_ADDR.word 809aadhB_DIL_MR_ADDR.word 809abdhB_DIL_MX_ADDR.word 809acdhB_DIL_DR_ADDR.word 809addhB_DIL_DX_ADDR.word 809aedhRE_600 .float0.00166666667RE_16 .float0.0625RE_36 .float0.02777777778RE_24 .float0.04166666667RE_34 .float0.02941176471RE_125 .float0.008DATA_XISHU.float0.125XISHU_DFL.float0.125DFL_MED_ADDR .word809b8dh;************************定时器0的初始化赋值**************************T0_CTIADDR .word00808020HT0_CTLINIT .word0000003C3HPERIOD_0 .word200;***********************************************************************DATA_WW .set04e2hDIL_ADDR .word 0bfffffhDFL_ADDR .word80804ChP0_GLOBAL .word0A1c0300hP0_GLOBALRESET .word021c0300hFSR_CON .word333hFSX_CON .word222hVECTOR_ADD .word0809fc1hVECTOR_SRC .wordINT0textaddr .word809bd0h;******************下面为辅助道的数据地址********************************VP5_ADDR .word809be0hSP_ADDR .word809be1hVN15_ADDR .word809be2hFISH_ADDR .word809be3hVP60_ADDR .word809be4hVHEAD_ADDR .word809be5hTEMP_ADDR .word809be6hGND_ADDR .word809be7hVP15_ADDR .word809be8hVN60_ADDR .word809be9hAUX_DATA_ADDR .word806FD0h;*************************************************************;***************以下为.text段的内容,即程序代码***************************

.textRESET:BR_main;复位优先级最高INT0:BRwait ;用于程序引导INT1:BRDIL_GET;进入读取双感应数据子程序INT2:BRTRANSMIT;进入数据传输子程序INT3:BRDATA_DEAL;进入数据处理子程序XINT0:BRwaitRINT0:BRDFL_GET;进入读取数字聚焦数据子程序X: BR waitR:BR waitTINT0:BR waitTINT1:BR wait;************************以下为主程序,主要对DSP初始化**************_main:

LDPSTACK_ADDRLDI@STACK_ADDR,SP;定义堆栈LDI 1800H,ST ;状态寄存器

LDI 808,R0 LDI @IO_ADD,AR0

NOP NOP STI R0,*+AR0(64H) ;主总线初始化

LDI@P0_GLOBALRESET,R0 ;串口初始化

STIR0,*+AR0(40H) LDI@P0_GLOBAL,R0 STIR0,*+AR0(40H) LDI@FSX_CON,R0 STIR0,*+AR0(42H) LDI@FSR_CON,R0 STIR0,*+AR0(43H) LDI@T0_CTIADDR,AR1 ;定时器0初始化

LDI0,R1 STIR1,*+AR1(4) LDI@PERIOD_0,R1 STIR1,*+AR1(8) LDI@T0_CTLINIT,R1 STIR1,*AR1;**************************************************************************;*******由于数据处理较复杂,占用篇幅较大,故在这里只给出了关键算法的子程序;*******包括相敏检波子程序、平均处理子程序和归一化处理子程序***********;***********************相敏检波子程序*********************************DIGITAL: LDI @AFTER_ADD_ADDR,AR0 LDI 16,R2 LDI @COS_ADDR,AR1 LDF 0.0,R1 LDF 0.0,R0DIGITAL_R: MPYF3*AR0++,*AR1++,R0 ADDFR0,R1 ;R1受保护

SUBI 1,R2 BNZ DIGITAL_R MPYF@DATA_XISHU,R1 LDI @AFTER_ADD_ADDR,AR0 LDI 16,R2 LDI @SIN_ADDR,AR1 LDF 0.0,R3 LDF 0.0,R0DIGITAL_X: MPYF3*AR0++,*AR1++,R0 ADDF R0,R3

;R3受保护

SUBI 1,R2 BNZ DIGITAL_X MPYF@DATA_XISHU,R3 LDF0,R2 SUBFR3,R2 LDFR2,R3 RETS;**************************************************************************;***************平均处理子程序,给出双感应的A道平均子程序,B道同A道***************************************************************************A_DIL_AVER: LDI @AFTER_ADD_ADDR,AR2 LDI16,R2 LDI@A_DIL_STAADDR,AR0 LDI@textaddr,AR5 LDI0,IR1DIL_SAMPLE1:LDI@A_DIL_STAADDR,AR0 LDI 0,R0 LDI*++AR0(IR1),R1;改变起始地址

LDI599,RC;循环600次

RPTBAVER1

AVER1: ADDI*AR0++(16),R0 FLOATR0 MPYF@RE_600,R0 STF R0,*AR2++ FIXR0 STI R0,*AR5++

ADDI1,IR1 SUBI 1,R2 BNZ DIL_SAMPLE1

RETS;*****************双感应A道的归一化处理********************************A_DIL_D_SUB:LDI@A_DR_ADDR,AR0

NOP STF R1,*AR0 NOP

LDI @A_DX_ADDR,AR0

NOP STFR3,*AR0 NOP LDI @A_CRD_ADDR,AR0 NOP LDF *AR0,R1 NOP;*********************归一化算法****************************

LDI @A_ZRD_ADDR,AR0 ;AR0指向A道中感应零刻度实部地址

NOP LDF *AR0,R0 SUBFR0,R1 ;CR_ZR送给R1 LDI@A_CXD_ADDR,AR0 ;AR0指向A道中感应内刻度的地址

NOP LDF *AR0,R2 LDI @A_ZXD_ADDR,AR0 ;AR0指向A道中感应零刻度虚部地址

NOP LDF *AR0,R0 SUBFR0,R2 ;CX_ZX送给R2 LDI@A_DR_ADDR,AR0 ;AR0指向A道中感应信号实部的地址

NOP LDF *AR0,R3 NOP LDI@A_ZRD_ADDR,AR0

;AR0指向A道中感应信号零刻度;虚部的地址

NOP LDF *AR0,R0 SUBF R0,R3 ;DR_ZR送给R3 MPYF R1,R3 ;(DR_ZR)*(CR_ZR)送给R3 MPYF R1,R1 ;(CR_ZR)*(CR_ZR)送给R1 LDI @A_DX_ADDR,AR0 ;AR0指向A道中感应信号虚部地址

NOP LDF *AR0,R4 NOP LDI @A_ZXD_ADDR,AR0 ;AR0指向A道中感应信号零虚部的地址

NOP LDF *AR0,R0 SUBF R0,R4 ;XD_ZX送给R4 MPYFR2,R4 ;(XD_ZX)*(CX_ZX)送给R4 MPYF R2,R2 ;(CX_ZX)*(CX_ZX)送给R2 ADDF3 R3,R4,R6 ;R3+R4送给R6 ADDF R1,R2 CALL RECIPROCAL ;对R2求倒数出口还为R2 MPYF R2,R6 LDI @A_DIL_DR_ADDR,AR0 ;A_DIL_DR_ADDR中感应实部地址

NOP STF R6,*AR0 NOP LDI@A_CRD_ADDR,AR0 NOP LDF*AR0,R1 NOP

LDI @A_ZRD_ADDR,AR0 ;AR0指向A道中感应零刻度实部的地址

NOP LDF*AR0,R0 SUBFR0,R1 ;CR_ZR送给R1

LDI @A_DX_ADDR,AR0 ;AR0指向A道中感应信号虚部的地址

NOP LDF *AR0,R4 NOP LDI @A_ZXD_ADDR,AR0 ;AR0指向A道中感应信号零虚部的地址

NOP LDF *AR0,R0 SUBFR0,R4 ;XD_ZX送给

MPYFR1,R4 ;R4=(XD_ZX)*(CR_ZR)

LDI @A_CXD_ADDR,AR0 ;AR0指向A道中感应内刻度的地址

NOP

LDF*AR0,R1 NOP

LDI @A_ZXD_ADDR,AR0 ;AR0指向A道中感应零刻度虚部的地址

NOP LDF *AR0,R0 SUBFR0,R1 ;CX_ZX送给R1

LDI @A_DR_ADDR,AR0 ;AR0指向A道中感应信号实部的地址

NOP LDF *AR0,R3 NOP

LDI @A_ZRD_ADDR,AR0 ;AR0指向A道中感应信号零刻度虚部的地址

NOP LDF *AR0,R0 SUBFR0,R3 ;DR_ZR送给R3 MPYFR1,R3 ;(MR_ZR)*(CX_ZX)送给R3 SUBFR3,R4 MPYFR2,R4 LDI @A_DIL_DX_ADDR,AR0 ;A_DIL_MR_ADDR中的感应虚部地址

NOP STF R4,*AR0 RETS9.2基于DSP芯片的USB通信接口的实现9.2.1USB接口概述自1994年11月由Compaq、DEC、IBM、Intel、Microsoft、NEC以及NorthernTelecom等公司共同提出通用串行总线(USB)以来,USB以其传输速率高、支持热插拔、易于扩展的突出优势,迅速发展起来。特别是2000年后,台式PC都增加了USB接口,甚至笔记本电脑也安装了两个USB接口。

1998年起,USB接口开始进入测量仪器领域,IOtech和NI两家公司首先在它们的数据采集仪器中使用了USB技术,随后许多著名仪器公司都接纳了USB接口。由于USB接口拥有大量PC机外设,使得USB接口的支持产品,包括控制器芯片、集成器和桥接器、电缆和连接器、驱动程序和安装程序、开发工具等非常普及,加上USB接口的安装方便、数据率较宽、容易扩展、即插即用、成本较低等特点,使得USB总线成为外设接口设计的首选总线。9.2.2USB接口设计方案选择实现USB接口一般有三种方式:一种是使用带USB接口的专用微控制器(MCU)。这类MCU有自己的系统结构和指令,从底层控制USB,比如Cypress公司的CY7C63xxx和CY7C64013,这类MCU的开发需要用专用工具,且性能有限;第二种方式是使用带USB接口的通用MCU,这类MCU只是基于一般芯片内核增加了USB接口,比如Intel公司的8x931、8x930以及Cypress公司的EZUSB等,这类MCU的开发语言和开发工具都和一般MCU相似,因而较易入手,但其缺点是成本较高。第三种方式是使用纯粹的USB接口芯片,通过外加MCU对其控制。如Philips公司的PDIUSBD12、ISP1581以及National公司的USBN9602、南京沁恒公司的CH375等。这类USB接口芯片价格便宜、接口方便、灵活性高,针对不同的硬件环境可以配合多种MCU使用,如单片机、DSP、FPGA都可以。由于地面接口板中需要使用DSP完成信号处理功能,所以此处可以采用第三种方式,用DSP作为USB控制器,通过专用接口芯片实现USB通信。从芯片的易用性及性价比等方面综合考虑,选用PDIUSBD12作为USB接口芯片。PDIUSBD12的性能特点将在10.2.3节详细介绍。9.2.3USB接口芯片PDIUSBD12

PDIUSBD12是一款性价比很高的USB器件,完全符合USB1.1版规范,它还符合大多数器件的分类规格,如成像类、海量存储器件、通信器件、打印设备以及人机接口设备。它通常用作微控制器系统中实现与微控制器进行通信的高速通用并行接口,同时还支持本地的DMA传输。PDIUSBD12所具有的低挂起功耗,连同LazyClock输出可以满足使用ACPIOnNOW和USB电源管理的要求,低的操作功耗可以应用于使用总线供电的外设。

PDIUSBD12的主要特性如下:

(1)符合通用串行总线USB1.1版规范;

(2)高性能USB接口器件集成了SIEFIFO存储器收发器以及电压调整器;

(3)符合大多数器件的分类规格;

(4)可与任何外部微控制器/微处理器实现高速并行接口(2MB/s);

(5)完全自治的直接内存存取DMA操作;

(6)集成320B多结构FIFO存储器;

(7)主端点的双缓冲配置增加了数据吞吐量并轻松实现实时数据传输;

(8)在批量模式和同步模式下均可实现1 MB/s的数据传输速率;

(9)具有良好EMI特性的总线供电能力;

(10)在挂起时可控制LazyClock输出;

(11)可通过软件控制与USB的连接;

(12)采用GoodLink技术的连接指示器,在通讯时使LED闪烁;

(13)可编程的时钟频率输出;

(14)符合ACPIOnNOW和USB电源管理的要求;

(15)内部上电复位和低电压复位电路;

(16)有SO28和TSSOP28封装;

(17)工业级操作温度-40~+850C;

(18)高于8 kV的在片静电防护电路减少了额外元件的费用;

(19)具有高错误恢复率(>99%)的全扫描设计确保了高品质;

(20) 3.3 V和5 V的双电源操作;

(21)多中断模式实现批量和同步传输。

PDIUSBD12的功能框图如图9.11所示。其内部集成了许多优良特性:包括SoftConnetTM和GoodLinkTM、可编程时钟输出、低频晶振和终止寄存器。集合所有这些特性都为系统显著节约了成本,同时使USB功能在外设上的应用变得容易。图9.11PDIUSBD12功能框图

1.SoftConnectTM与USB的连接是通过1.5 kΩ上拉电阻将D+(用于高速USB器件)置为高实现的。1.5 kΩ上拉电阻集成在PDIUSBD12片内,默认状态下不与VCC相连,连接的建立通过外部/系统微控制器发送命令来实现。这就允许系统微控制器在决定与USB建立连接之前完成初始化时序,USB总线连接可以重新初始化而不需要拔出电缆。PDIUSBD12在连接可以建立之前会检测USBVBUS是否可用,VBUS可通过EOT_N管脚进行检测。

2.GoodLinkTM

GoodLinkTM技术可提供良好的USB连接指示。在枚举中LED指示灯根据通信的状况间歇闪烁。当PDIUSBD12成功地枚举和配置后LED指示灯将一直点亮,随后与PDIUSBD12之间成功的传输带应答将关闭LED,处于挂起状态时LED将会关闭。该特性为USB器件集线器和USB通信状态提供了用户友好的指示,作为一个诊断工具,它对隔离故障的设备是很有用的。该特性降低了现场支持和热线的成本。

3.并行和DMA接口该芯片提供了一个易于使用、快速且可与主流微控制器直接连接的并行接口。对一个微控制器而言,PDIUSBD12看起来就像一个带8位数据总线和一个地址位的存储器件。PDIUSBD12支持多路复用和非复用的地址和数据总线,还支持主端点与本地共享RAM之间直接读取的DMA传输,支持单周期和突发模式的DMA传输。9.2.4DSP与PDIUSBD12硬件接口

DSP与PDIUSBD12的连接如图9.12所示。采用单独地址/数据总线配置,即用DSP的地址线A23控制PDIUSBD12的A0引脚,实现命令数据的选择。A0 = 1表示传送的是命令,A0 = 0表示传送的是数据。片选及挂起SUSPEND信号分别由DSP的I/O口控制。图9.12PDIUSBD12硬件连接对于PDIUSBD12的读写选通信号,可以用DSP的R/引脚控制写选通,取反后控制读选通。但这样就需要在电路设计中增加反相器。为了节约器件缩小电路体积,可以充分利用DSP引脚资源丰富的特点,另外选择一个I/O口来控制PDIUSBD12的读选通。本设计中选用,这样就可以通过对不同地址的访问来区分对PDIUSBD12的读写操作了。

PDIUSBD12只占用微控制器的三个地址资源,其一用来向PDIUSBD12写命令,其二用来向PDIUSBD12写数据,另外一个用来从PDIUSBD12读数据。对DSP而言,PDIUSBD12就相当于一个有8位数据总线和3个地址的存储器件。

USB电缆有四根线,分别为VCC、D+、D+ 和GND。本设计中,设备采用自供电方式,需要将通过一个10 kW的电阻接至USB电缆的VCC(+5 V)端,并加1 MW下拉电阻,借此检测USB设备是否已经连接到USB口。SoftConnect功能只有在检测到此信号时才会进行连接,换言之,如果不接此信号,则PDIUSBD12总认为设备还没有插入到USB接口中,SoftConnect永远不会连接。9.2.5软件设计

USB软件设计包括固件(firmware)程序、PC端的驱动程序和应用程序。其中固件程序要求编写者对复杂的USB通信协议有深刻的理解,编程难度较高。

1.固件程序固件程序是写入MCU内的程序,使MCU可以完全按照USB协议,识别接收到的信息包类型,对包的内容、意义进行分析,并按照要求完成相应的动作。通过这些不同类型包的传递,完成MCU与接口芯片的命令及数据交换,进而实现主机与设备间的通信。固件程序设计成中断驱动模式,采用模块化设计,其总体结构如图9.13所示。图9.13固件程序整体结构

1)主循环主循环中主要完成DSP的寄存器及端口初始化,向PDIUSBD12发送设置模式命令,接通SoftConnect,判断是否接收到建立包(SetupPackage),若收到,则调用标准请求处理程序进行处理。若收到主机请求信号,则调用数据发送程序发送数据。程序流程如图9.14所示。图9.14主循环程序流程图该部分的子程序如下:#include<stdio.h>#include<string.h>#include"epphal.h"#include"d12ci.h"#include"mainloop.h"#include"usb100.h"#include"chap_9.h"/*//*************************************************************************//USBprotocolfunctionpointerarrays//**************************************************************************/void(*StandardDeviceRequest[])(void){ get_status,

clear_feature, reserved, set_feature, reserved, set_address, get_descriptor, reserved, get_configuration, set_configuration, get_interface, set_interface, reserved, reserved, reserved, reserved};/*//*************************************************************************//Publicstaticdata//**************************************************************************/externEPPFLAGSbEPPflags;externunsignedcharGenEpBuf[];externunsignedcharEpBuf[];//externIO_REQUESTidataioRequest;CONTROL_XFERControlData;voidwait(){}voidinit_special_interrupts(void){IE=8;}voidinit_flags(){ bEPPflags.bits.bus_reset=0; bEPPflags.bits.suspend=0; bEPPflags.bits.setup_packet=0; bEPPflags.bits.remote_wakeup=0; bEPPflags.bits.in_isr=0; bEPPflags.bits.control_state=0; bEPPflags.bits.configuration=0; bEPPflags.bits.ep1_rxdone=0;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论