热度 53
2015-9-12 22:57
14352 次阅读|
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: 这个项目的调试花了不少时间,前期设计主要是和几个同学还有我老师一起讨论得来的。还有一个很主要的部分是放大部分,不是用的普通放大器实现的,而是通过调谐放大来产生了,这里没有详细讲解。在后来又去其他地方测试了。总共花了将近半年的时间。用来纪念下。其实每一个项目只要用心去探索和调试,你在其中都能学到很多东西,哪怕是很细节的东西都可以描述的很清楚。所以是不是自己参与的别人一问几乎能问出来。此项目涉及到很多指标,有兴趣的可以参考国标。最后上传几个主芯片资料。