tag 标签: DDS

相关帖子
相关博文
  • 热度 53
    2015-9-12 22:57
    13147 次阅读|
    52 个评论
                  当时寒假和队友一起做的,那会武汉的冬天有点冷,我老师负责指导我们。他人挺好,对待学生亲热有家,每一次我们遇到问题他总是能够及时回答我们那个地方出了问题需要调试或者修改参数,甚至看我们动手太慢他主动来用烙铁来修改板子上的参数。在我的学生生涯里面,这样的老师几乎很少见吧,大多数导师只会要求你做什么看什么书而不会亲力亲为来教你甚至自己动手。所以碰上这样的导师我也是醉了。然后那会的寒假都很自觉,主动留在他那里做事,不像后来的一些年被老板逼着留在学校只有临近春节才放假。所以选老师就好像选对象,选错了各种不开心。                   说是做接收机,其实主要的工作量集中在本振,因为混频之后的滤波器只允许一个信号过去,这就意味着当本振固定的时候,接收进来的信号也就固定了。接收机进来的信号通过预选频之后就进入混频端,而混频的本振是选择信号的关键之处,当改变混频的本振时,就会选择某个进来的频率,这是接收信号里面的主要之处。                         一个信号进来首先经过预选频,之后通过低噪放,这里的opa很关键,因为进来的信号灵敏度很低,不能随便选择一个放大器。因为越在前面一级他的噪声系数要求就越高。镜像抑制之前我的博客讲解过,涉及很多指标以后有机会再统一归纳一下。天线进来的信号与本振一起进入混频之后通过41.4M的晶体滤波器,因为输出选择有晶体滤波器的存在,也就是说当本振固定的时候,选择的天线进来的频率也就固定了,这也是接收机最主要的理论。这里的DDS显得很关键,因为它几乎是整个系统的核心,选择的频率由它决定了。我们采用的DDS为AD9953,时钟要求较高,配合锁相环一起做的本振。进入混频出来之后的信号通过滤波器再进行自动增益控制,采用两级信号自动增益以及滤波的原因是为了更好的滤除掉波形。接着进入模数转换AD中进行数字采集,再通过下变频之后把信号的频率转换为基带的信号,送入DSP去处理就行了。                     指标要求:                 频率范围:1-35M                 频率间隔:1Hz                 基准灵敏度: 端口电压 ≤0.5uV                 中频抑制和镜像抑制90db                 较大信号信噪比40db                 阻塞: ≥100dBuV                          先看一下平时的仪器。这张图几乎可以代表着平时的生活状态以及接触的东西。                   再看原理图吧,这是本振部分的。                 处理器用的ti的。                 虽然市场上USB芯片很流行,但是我老师对232特别有情怀,每次他都说用这个就好, 省钱。                   中间用了多阶滤波器以及后面加了一个固定增益放大器。下面是多个电源部分。                     本振部分的PCB和3D图。                       实物板子图,                   这是MSP430                     dds在这里了.                   信号经过混频出来之后通过滤波,信号不太稳定的情况下这里设计了AGC用来稳定信号的幅度再送往后级处理。芯片用的ADI的AD8367和AD603.多级603,前期的实验用的是AD605,但是605被我调废了。之后改的方案就用的这款。我老师特别喜欢AD8367,不仅仅是因为它的带宽很高!AGC有很多种方案,采用603的原因除了因为他熟悉之外还有因为他的移植性很高,在ADI的一个典型的方案里面就配合了AD8367做的一个自动增益。                   放大图。           AGC设计在这里了,AD8367用来检波的。603负责程控。                     最后的指标测试,晶振源的频谱。                 单信号频谱                     测试细节部分不过多解释,测试的指标包括带宽,灵敏度,阻塞,镜像抑制等。大部分指标达标。                 上一张接收机的图。       附带AD9953的部分程序。     主程序部分: void main( void ) {     /*下面六行程序关闭所有的IO口*/     P1DIR = 0XFF;P1OUT = 0XFF;     P2DIR = 0XFF;P2OUT = 0XFF;     P3DIR = 0XFF;P3OUT = 0XFF;     P4DIR = 0XFF;P4OUT = 0XFF;     P5DIR = 0XFF;P5OUT = 0XFF;     P6DIR = 0XFF;P6OUT = 0XFF;     WDTCTL = WDTPW + WDTHOLD;   //关闭看门狗       InitAD9953();  //初始化 //    InitDAC12();   //初始化DA     InitUART0();   //初始化串口     InitADF4350();  //初始化PLL          AD9953_WriteFreq(30000000);      while(1)     {       UART0_ChangeFreq(); //      UART0_ChangeDA(); //      a=10000; //      if(flag==3) //      { //        a=10000; //        while(a--); //        i=i+100000; //        if(i75000000) i=46500000; //        AD9953_WriteFreq(i);   //      }        //      DA_Sweep=DA_Sweep+10; //      if(DA_Sweep3000) i=0; //      DAC12_0DAT=DA_Sweep;           } }                 DDS主要用的AD99系列的。程序参考了ADI官网的代码示例,想要参考的可以去下载。在那个基础上修改就好了。另外剩下的就只有PLL的程序部分,也可以下载参考,剩下的MCU模块里面的只有串口的程序,组合在一起就差不多。   DDS程序部分: void WriteByte(unsigned char data) {   PORT_SCLK_OUT;   PORT_SDIO_OUT;   unsigned char i;   unsigned char temp;   temp = data;   for(i=0;i8;i++)       //送入1个字节的数据   {     CLR_SCLK;     nNop(4);     if(temp0x80)        SET_SDIO;     else        CLR_SDIO;     temp=1;     nNop(2);     SET_SCLK;     nNop(4);   }   }                   PS: 这个项目的调试花了不少时间,前期设计主要是和几个同学还有我老师一起讨论得来的。还有一个很主要的部分是放大部分,不是用的普通放大器实现的,而是通过调谐放大来产生了,这里没有详细讲解。在后来又去其他地方测试了。总共花了将近半年的时间。用来纪念下。其实每一个项目只要用心去探索和调试,你在其中都能学到很多东西,哪怕是很细节的东西都可以描述的很清楚。所以是不是自己参与的别人一问几乎能问出来。此项目涉及到很多指标,有兴趣的可以参考国标。最后上传几个主芯片资料。
  • 热度 7
    2015-3-24 13:48
    440 次阅读|
    0 个评论
       前言   调相脉冲信号可以获得较大的压缩比,它作为一种常用的脉冲压缩信号,在现代雷达及通信系统中获得了广泛应用。随着近年来软件无线电技术和电子技术的发展, DDS (直接数字频率合成)用于实现信号产生的应用越来越广。DDS技术从相位的概念出发进行频率合成,它采用数字采样存储技术,可以产生点频、线性调频、ASK、PSK及FSK等各种形式的信号,其幅度和相位一致性好,具有电路控制简单、相位精确、频率分辨率高、频率切换速度快、输出信号相位噪声低、易于实现全数字化设计等突出优点。   目前,DDS的 ASIC 芯片如AD公司的AD9852、AD9854等,对于相位调制信号,可方便地产生BPSK,但是,对 QPSK 或8PSK等则实现困难,它们对控制更新脉冲要求极高,一旦偏差超过DDS内极高的系统时钟,输出相位就会错误。本文介绍了一种通过 FPGA 实现QPSK或更高阶PSK信号的方法,可灵活地通过上位机的PCI总线控制参数,产生不同载波频率、不同脉冲宽度、不同占空比、不同重复周期等的QPSK信号,对雷达等系统的设计者具有很好的借鉴意义。    QPSK 信号源 的设计方案   DDS原理   DDS是一种全数字化的频率合成器,由相位累加器、正弦波形ROM存储器、D/A转换器和低通滤波器构成,其基本原理如图1。   输出信号的频率为fout=fclk?Δφ/2N,而最小频率分辨率为Δfo=fomin=fo/2N,可见改变频率控制字N即可改变输出信号的频率。当参考时钟频率给定后,输出信号的频率取决于频率的控制字,频率分辨率取决于累加器的位数,相位分辨率取决于ROM的地址线位数,幅度量化取决于ROM的数据字长和D/A转换器的位数。   为了提高DDS输出信号的频谱指标和降低正弦的ROM存储器,近来发展了如在相位截断后加数字反sinc滤波,利用三角函数对称性只存取1/4周期查找表,基于CORDIC、泰勒级数加权的频率合成方法等技术。    QPSK信号源的设计方案   在FPGA中,通过正弦查找表和相位累加器实现DDS,通过计数器实现QPSK信号的起停控制。在计数器计数到零时,设置标志位,读取寄存器中的QPSK控制码,从而设置初始相位。在计数到根据QPSK脉冲宽度设定的值后,计数器置0并重新开始计数。运行完设置码元的个数及次数后,使能输出禁止标志位。   QPSK信号的重复周期也通过计数器实现。根据周期的范围和系统时钟,设置计数器的位数并使其满足要求。在计数器计数到设定值后,清除输出禁止的标志位。需要注意的是周期计数器应该与QPSK码元宽度计数器同步。   QPSK信号参数控制通过PCI总线实现,包括QPSK信号的开始、结束、码元个数、次数、码字以及QPSK信号重复周期等。在FPGA内通过寄存器读取、保存参数。    硬件设计   系统组成与结构   FPGA选用XILINX公司Spartan3系列的XC3S1000,为100万门大规模可编程器件。它内部具有432kbit的Block Ram和120kbit的Distributed Ram;4个时钟管理单元DCM;24个乘法器。配置采用XILINX的专用PROM XCF04S,4M位的串行Flash PROM。XC3S1000通过XCF04S实现主串配置,M0、M1、M2均置低。系统框图如图2。   高速DAC选用AD公司的AD9767,它是双通道14位精度的高速CMOS DAC。它内部集成1.2V的电压基准,SFDR和IMR可达83dBc,最高转换率为125MSPS,满量程电流可调范围为2mA~20mA,两路D/A输出后经两片高速、宽带放大器AD8047放大,然后经滤波器输出,AD8047增益为1,实现电流到电压的转换。   PCI接口芯片采用PCI9054,是PlX公司应用广泛的32位、33MHz的PCI桥芯片,实现PCI总线和本地总线的转换。PCI9054可工作在主、从模式,支持DMA,支持猝发操作。PCI9054的上电通过2k位的EEPROM NM93CS56配置,包括PCI9054的本地总线控制、PCI配置空间寄存器的配置等。PCI9054在PCB设计中应注意PCI总线和时钟的长度约束。   为了提高板上的存储容量,FPGA通过CYPRESS的CY7C1372C-200扩展了(512k×36)/1M×18位的ZBT SRAM。以零等待状态读写速率可达200MHz,最大访问时间为3ns,支持Burst操作,适用高速的数据读写。   系统通过SMA外接时钟,同时内部50MHz晶振经时钟缓冲芯片CY2308输出,分别作为PCI9054和FPGA的本地时钟。外接时钟的输入阻抗为50Ω,注意通过信号源提供时钟时应使其峰峰值在2V以上。   复位电路采用MAXIM的看门狗及电压监控芯片MAX708实现。   电源由PCI总线提供,3.3V电压直接从PCI总线的3.3V引出,通过凌特公司的LT1764实现2.5V电压,采用TI公司的TPS54612实现1.2V电压,分别作为FPGA的辅助电压Vccaux和核电压Vccint。TPS54612输入电压为3-6V,在3.3V、5V均可使用,输出可高达6A,且开关控制器内部集成FET场效应管,方便应用。AD8047的正负电压输入分别为+5V和-5V,分别由从PCI总线接入的+12V和-12V电压经稳压器7805和7905提供。    软件设计   QPSK信号的生成   QPSK信号产生的原理在前面已作详述,FPGA的外接60MHz时钟通过内部的时钟管理器倍频实现120MHz时钟,通过Block RAM 资源实现只读ROM,然后通过累加器进程、读QPSK码字进程、重复周期计数进程等实现DDS功能,通过乘法器还可实现输出信号的幅度控制。以下是部分源程序,采用Verilog HDL语言编写。   时钟管理单元,使用XILINX的DCM实现倍频,由60MHz变为120MHz。   dcm60 dcmclk60 (   .CLKIN_IN(clk_in),   .RST_IN(~reset),   .CLKIN_IBUFG_OUT(clk_ibufg_out),   .CLK0_OUT(clk_0),   .CLK2X_OUT(clk_2x),   .LOCKED_OUT(locked_out60) );   单口只读ROM,使用IP核,实现正弦查找表,数据宽度为14位,深度为16384字(14地址位)。ROM核接收的数据文件为COE文件,然后转换为mif二进制文件格式,COE文件可通过C语言或MATLAB生成。ROM核的实现如下:   rom16384 rom16384(   .addr( DDS _addr),   .clk(clk_2x),   .dout(dds_data),   .sinit(~reset),);   相位累加器位数设置为32位,系统时钟120MHz,这样可实现小于0.03Hz的频率分辨率,查找表相位截取低14位。累加器进程如下:    always@(posedge clk_2x)   begin   if(dds_countT ==1'b0) //dds_countT为脉冲宽度计数器,时钟为clk_2x。   dds_start=1'b1;   else   dds_start=1'b0;   if(dds_stop=1'b0 dds_stop_set=1'b0) //dds_stop是周期起停标志,dds_stop_set是上位机控制起停标志   begin   if(dds_start==1'b1 )   case (psk)   2'b00:dds_acc=phase1;   2'b01:dds_acc=phase2;   2'b10:dds_acc=phase3;   2'b11:dds_acc=phase4;   endcase;   else   dds_acc=dds_acc + dds_freq_add;//dds_freq_add对于设置的 QPSK 载波频率。   end;   if(dds_countT=countF_set dds_countT1) // countF_set为设置的QPSK脉冲宽度对应的数值。   dds_addr=dds_acc ;   else   dds_addr=14'b00000000000000;   end;   end;    DDS信号的控制实现   上位机通过PCI总线实现信号参数的读写控制。因本系统中只需PCI实现信号参数的控制,数据量不大,故配置PCI9054为PCI的从目标(Slave),C模式。   在 FPGA 中实现参数寄存器,实时读取PCI总线的数据并更新。FPGA本地总线的读写通过三态门控制。实现代码如下:   assign data_inout=(enout)? data_out:32'bzzzzzzzz;    always@(clk )   begin   data_in=data_inout;   end   读写实现通过状态机程序实现,读写状态流程图如图3。    上位机程序设计   上位机安装Windows系统,传统上,PCI的驱动通过微软的DDK实现WDM驱动程序,本 信号源 设计中采用Windriver软件,可方便地读写主机给PCI9054系统板分配的内存及I/O资源,并可生成inf文件和基于VC等开发环境的程序文件。    结论   试验表明,以本文所介绍的方法产生的信号源具有很好的性能,5MHz时连续波点频的杂散SFDR达到70dB以上,输出信号的频率覆盖短波波段,可达30MHz以上。在实际应用中,还可以加上线性调频等其他信号形式。若信号频段在超短波以上,可用DDS产生固定中频,经数字上变频和DAC芯片(如AD公司的AD9857)上变频后输出,该方法具有很强的可扩展性。
  • 热度 5
    2015-3-17 21:01
    356 次阅读|
    0 个评论
    DDS理论        图2.1.1 DDS原理       DDS实现框图如图1-1所示,主要由相位累加器、正弦ROM表、D/A转换、低通滤波器构成。正弦信号与幅度的对应关系如图2所示。- 图2.1.2 正弦信号与幅度的关系 DDS输出频率方程: .....................................................................................(2.1.1) 其中输出频率,为采样时钟n为相位累加器的位宽,M为频率控制字。 相位移动方程: ..............................................................................................(2.1.2) 其中是相位偏移,是相位控制字。 2.1.3  DDS优点 DDS产生正弦波形的频率分辨率非常高,频率切换速度快,频率切换相位连续可以产生任意波形。 代码 module signal( sys_clk, sys_restn, en, signal_out                                    );                                    ///////////////////////////////////////////////////// input sys_clk; input sys_restn; input en; output signal_out; wire address_sig; ///////////////////////////////////////////////////// data       data_ROM (        .address ( address_sig ),        .clock ( sys_clk ),        .q ( signal_out )        );   ////////////////////////////////////////////////////// reg count; always @(posedge sys_clk or negedge sys_restn)        begin               if(!sys_restn)                      count = 10'd0;               else if(en)                      count = count + 1'b1;               else                      count = count;                             end //////////////////////////////////////////////////// assign address_sig = count;   endmodule
  • 热度 6
    2012-5-2 20:07
    1325 次阅读|
    0 个评论
    Connext DDS to the rescue? Real Time Innovations announcement that it would soon make available its new Connext DDS real time publish-subscribe communications framework is what got me thinking about the implications of the IPv6-based 6LoWPAN Internet of Things and what it will take for embedded developers to integrate the new protocols into their connected designs. RTI may have a pub/sub implementation that will meet many of the diverse requirements of the still emerging commercial embedded Internet of Things, although most details of its new Connext DDS are still under wraps. RTI has built its new Connext DDS framework around three essential elements: 1. The DDS Integrator used to link independently developed DDS and non-DDS applications and which acts as a middleware to transform data types to provide interoperability between independently developed DDS apps; 2. Connext Messaging, which includes a variety of enhanced messaging capabilities, including Java Message Service (JMS) and distributed logging APIs, real-time data recording and playback, and run-time services for federation and persistence, an important consideration in many wirelessly connected 6LoWPAN-based IoT apps. 3. A small-footprint messaging capability for use on resource-limited devices using a subset of its DDS API and its DDS-RTPS (real-Time P/S) wire protocol. This will make the scheme scalable across the diverse range of 6LoWPAN-based IoT apps. The RTPS subset built to operate in constrained sensor and controller environments should make it possible for developers to build apps that are independent of the underlying transport and protocol. Unlike some 6LoWPAN IoT implementations, TCP and IP are not required. I suspect its use of a reliability protocol that supports Disconnected, Intermittent, and Low-bandwidth (DIL) operation, all too common in wireless sensor networks, makes it more attractive in 6LoWPAN implementations. Data is sent in a compact binary representation, and most metadata is only exchanged once, at discovery time. But the linchpin that makes it all hang together is an updated and much improved version of a dynamically modifiable framework that incorporates elements of DDS and a Relational Database Management System. This allows data distributed by the DDS to be automatically stored in a relational database management system and accessed via SQL or ODBC interfaces, and, conversely, allows the contents of a RDBMS to be automatically distributed via DDS. Rules are specified for translating between a DBMS table record and the DDS wire format representation. It provides mechanisms for preventing publication of data seen by DDS, and for preventing application of changes already made in a DBMS table. By allowing relational database table updates to be propagated in real time to the embedded nodes, each small footprint Connext device can make use of the DDS API to subscribe to a DDS topic associated with a data table. When the table is altered, either by an enterprise application (via SQL) or an application as small as that on an MCU-based sensor using the DDS API, the local table is updated and the update information is published via DDS for consumption by all interested DDS subscribers. This allows information to be seamlessly bridged from an enterprise application to an embedded real-time application. What I have learned so far about the new Connext DDS tool suite makes me think it will be a valuable tool in the development of next-generation sensor net designs. But until more information is available, I have these questions: * Is Connext tied only to pub/sub configurations of its own design, or is it flexible enough to be useable with other variations? * What is the lower range of MCU capability on which it can be used, and is its use dependent upon particular architectural features? * The documents I have seen so far only indicate that neither TCP or IP are required for operation. Is that because Connext is based on the UDP subset and can't operate with the use of TCP/IP? Or can either TCP or IP be used as options? * Some of the 6LoWPAN applications operate with amazingly small amounts of resident memory. How memory-intensive are low-end MCU-based implementations of the Connext DDS? A lot of these questions are likely to be resolved when the company formally rolls out Connext DDS. But, what has emerged so far is tantalizing in what it implies about the range of applications in which it can be used. As commercial opportunities arise outside of current mil/aero and factory system controller management applications, it certainly looks like RTI will have a head-start in a variety of pub/sub based IoT designs.  
  • 热度 11
    2011-7-19 16:38
    6060 次阅读|
    3 个评论
      好久没有提交文章了。今天再次打开博克,感到非常的亲切。我想把这段时间得到的有关测试测量技术方面的信息,和各位朋友们分享一下。 首先从这个PxP新技术开始。   在本文中,我想要比较生成波形的直接数字合成(DDS)技术和逐点(PxP)技术。DDS 技术是当前市场上在 FG/AWG 中应用最广泛的技术。DDS 技术曾广泛用于安捷伦和其他厂家的函数和任意波性发生器(FG/AWG)系列,其中包括广受欢迎的 33120A 和 33220A(目前仍在售)。安捷伦最新的 FG/AWG 系列――33500 系列采用 PxP 技术生成波形,并且是同类产品中目前唯一采用该技术的波形发生器    从理论上说,生成任意波形的最简单的方法是在存储器中存储波形点,然后接连读出这些点,并通过数模转化器输出。读完最后一个点后,发生器会重新跳回第一个点,开始下一个周期。这有时称为“每时钟点”(PPC)生成法。这种方法适合几乎任何长度的波形,而且在每个波形周期,每个点都表达得很确切。这种方法好像是生成任意波形的最直观的方法,但是却有两大缺陷。首先,如果更改波形频率或采样率,时钟频率也必须更改,拥有一个良好的变频时钟会增加成本和仪器的复杂程度。其次,数模转换器的步进式输出不适用于大多数应用,因此需要进行复杂的模拟滤波,来获得平稳的步进输出。由于复杂程度和成本问题,该技术只用于高端波形发生器。    DDS 使用固定的频率时钟和一个或两个滤波器,因此要比 PPC 方法简单和便宜得多。DDS 采用相位累加器在每个时钟周期向输出添加增量,而且累加器的输出显示波形的相位。输出频率与增量成正比,即使将时钟频率固定,也很容易更改频率。累加器的输出经过某类查阅表后,通常会从相位输出转换幅度输出。由于 DDS 不会使用波形存储器中的每个点,所以会生成一个非常接近实际情况的输出。但是,由于是近似输出,因此波形数据在某种程度上会发生改变。DDS 可能会以不可预知的方式跳过和/或重复波形数据。在最好的情况下,这会导致附加抖动(除非波形是正弦曲线);在最坏的情况下,这会导致严重的失真。波形的一些小特性可能会部分或全部跳过。    33500 系列的 PxP 技术提供高端 PPC 发生器的特性和性能,并具有 DDS 的低成本和易用性。与 PPC 一样,通过逐个读出波形存储器中各个点来生成任意波形。用户的波形数据与 DDS 相比,并没有做出任何修改,因此 PxP 能够更可靠地重新生成波形。33500 系列提供多种波形滤波器以供选择--一个用于平坦度、一个用于宽频率响应、一个用于最佳的步进响应――但是通过 PxP,滤波器阻止频率自动跟踪采样率,因此波形不会随频率的调整而更改形状。另外,PxP 不会出现困扰 DDS 发生器的抖动或波形失真。   作为 PxP 与 DDS 的实例,我使用 1000 个点生成一个脉冲波形,在脉冲上生成 7 个幅度值递减的尖峰。每个尖峰都由一个单波形点生成。我将波形加载至采用 PxP 技术的 Agilent 33522A 和采用 DDS 技术的 Agilent 33220A――与目前市场上的大多数 FG/AWG 一样采用 DDS 技术。在 3 个不同的频率上操作波形:50 KHz、100 KHz 和 200 KHz。如下图所示,在每个频率上捕获示波器信号(点击放大)。PxP 波形显示为**,DDS 波形显示为绿色。                 上方的屏幕显示的是 50 KHz 波形,清晰地显示了每个脉冲的全部 7 个尖峰。中间的屏幕快照显示 100 KHz 波形,如图所示 DDS 技术无法重新创建任何尖峰。下方的屏幕快照是 200 KHz 波形,此时 DDS 技术只能生成 3 个尖峰。由于 50、100 和 200 都是 DDS 发生器时钟速率的倍数,尖峰存在与否都是恒定的。频率设置不是时钟的倍数时,波形中实际显示的尖峰将是在每个新周期内脉冲的不同点上。这就是一些 DDS 波形具有不可预知性的原因。 例如,在 PxP 技术的低抖动实例中,将每个 50 KHz 信号输入到无间隙采样计数器,并执行 100 次连续频率测量。100 次 PxP 测量的标准偏差是 15 uHz,100 次 DDS 测量的标准偏差是 280 uHz。 较之 DDS 技术,PxP 技术以相同的成本对这类信号的质量进行了很大改进。 PxP 技术由于成本的原因,过去仅用在高端的测试设备中。如今,随着技术的发展,这个高端的技术已经用在了经济型的产品中。我相信 FG/AWG 市场已开始从 DDS 转向 PxP。
相关资源
广告