这款芯片提供两种扫频模式:手动与自动。手动挡暂且不提,自动挡的相关寄存器如下:
由于官方的datasheet中没有给出例子,这里搬用评估板的例子。
这个波形完美符合了在FMCW雷达用所需的应用,无需扫频中途的校准线性度也非常好。
此处有一点我不理解,按照RAMP_INC的计算方式当RAMP_INC=336时,Δf为1001左右。虽然的确频率变化为10MHz,这个1001的单位十分古怪啊。
【前言】:既然申请了科创基金,就不能像SDR那样鸽了,也不能像能谱仪那样暂时烂尾,更不会像X射线教程那样把细节一笔掠过。既然元器件还在路上,这一篇文章主要讲述(唠嗑)扫频信号源的设计,也算是半篇基础教程了。
(若是有错误请各位指出,万分感谢!)
(本人语文烂透了,烦请各位海涵)
(征求项目命名中。。。)
在早期版本中扫频信号源一直参考的是MIT版本的方案,即使用XR2206之类的“函数信号发生器”芯片产生三角波用于调谐VCO。这种方案的优势是简单,无需耗费太多精力即可快速产生所需的扫频信号。缺点则为不够精确(电位器调节),调谐电压受限(要求电阻分压或者运放放大),扫频线性度差(取决于VCO,但是扫频线性好的价格更加美好)。
第二版本考虑过使用ADF4351(宽带频率合成器)产生“扫频”信号。由于产生线性扫频信号过于困难则放弃(波形大多为‘台阶’形状)。
第三版本甚至考虑过采用DDS来产生“高线性度”的调谐电压,而由于优点比第一版本还少则放弃。
现阶段则使用的为LMX2572这款“带有相位同步及JESD204B支持的 6.4G 低功耗 宽带 射频合成器 ”不仅如此,这款芯片还包含内置的扫频以及FSK。价格。。。。因此申请了科创基金。
另外一种解决方案为使用ADF4158(PLL)+ HMC431(VCO),但是由于更高的价格以及自制射频功分器带来不可控的插损,该方案被抛弃。
由于貌似没有开源项目采用此扫频信号源,就没有现成的代码可以剽窃。还好TI给出的datasheet提供了详细的例子以及参数,即使如此开发工作也愁死我这单片机小白了。
为了适应各种应用,LMX2572的外置晶振至鉴频器中间有一串儿倍频,分频器。为了省事,这里的各种设备一个都不用。晶振输入为评估板默认的100MHz,而后文会提及的Fpd(鉴频器频率)也是100MHz。
上图为LMX2572的内部结构,可见经过一串倍频分频器后fPD会直接影响后面VCO频率的输出。另外一项影响VCO频率的为输出端的分频器:由于内置的VCO并不覆盖全部频段(只覆盖3.2GHz-6.4GHz,分频器的使用得以输出更低的频率。
VCO频率的计算公式,三个带有下划线的参数均由用户配置。PLL_N为整数部分,PLL_NUM(Numerator) 为小数部分的分子,PLL_DEN(Denominator) 为小数部分的分母,二者组成PLL的小数频率。
举个例子,若是我想要获得490MHz的固定输出,怎么配置这些参数?
官方给出的范例:
晶振输入:100MHz,不操作分频器、倍频器,得到PDF(也就是Fpd)100MHz。
整数部分:低16位为39,高16为不配置(0)
小数部分:分子为2427136,分母为1224680。二者相除得到约1.9819,约等于2.
二者合并则为39.2,乘以fPD的100MHz得到VCO频率:3920MHz。
输出端的分频器把3920MHz除以8,得到最终输出490MHz。
以上内容只介绍了固定频率的输出,要是想要使用内部的扫频发生器,则要操纵另外一组寄存器。
[修改于 4年8个月前 - 2020/03/21 23:08:17]
这款芯片提供两种扫频模式:手动与自动。手动挡暂且不提,自动挡的相关寄存器如下:
由于官方的datasheet中没有给出例子,这里搬用评估板的例子。
这个波形完美符合了在FMCW雷达用所需的应用,无需扫频中途的校准线性度也非常好。
此处有一点我不理解,按照RAMP_INC的计算方式当RAMP_INC=336时,Δf为1001左右。虽然的确频率变化为10MHz,这个1001的单位十分古怪啊。
想与大家讨论一个问题:用STM32配ADC做采样的可能性?
此处DIY的设备对后级信号处理的要求很低,甚至声卡亦能胜任。但由于本人对声卡采样有不可磨灭的心理阴影,况且后期有可能更新使用差分的中频,我认为STM32F103的硬件USB串口配合外置12bit 1Msps的ADC应该可行。
12bit的动态有点捉鸡,而且我记得那个罐头雷达原版IF处理电路是没有距离补偿的。
“罐头”是没有的,也用不着差分运费,但是用四个lt6xxx的版本是带有补偿的,只要更新混频器即可。
3/21更新:
由于上一版PCB过于劣质(自动布线+我傻,导致LMX2572下面走各式各样的信号),因此决定再绘制一版。
确认项目名称:KS-5C。KS代表对空搜索,5代表版本,C代表波段。(中二之魂觉醒)
电路图未作更改,决定把中频放大移到射频线路板上(第二部分)。这里放一块100ksps的ADC玩一玩,就当学习了。
STM32 HAL还得学一遍,Arduino不管用了(滑稽
又开始不明白了:为了保证每一次FFT都在三角波上,扫频芯片必须要给出一个信号通知后级。对于LMX2572,是不是MUXout 配置成 锁相环锁定再输出,就会有一下的波形?在上升沿切换至下降沿时锁相环失锁,输出拉低。
嘿,之前的问题还是没有想通。
虽然看到了这个,但是RAMP_TRIG一类都是针对手动扫频模式的,全自动扫频中没有提及。
这款芯片总共就没几只输出端口,想不通啊。
又来发愁了(射频部分)。。。对于双层板的阻抗匹配我真是想不出来了。芯片设计的引脚那么小,微带线那么大。除了上四层板没有别的办法了吗?
那就用四层呗。不是说双层做不低阻抗,板厚搞薄点就可以了,但问题是双层怎么保证地平面完整,难道射频线下...
四层。。。资金捉急,而且没画过,恐怕打样出来要闹笑话的。
地平面完整还真的可以做,比如第一版扫频就是射频线路下面走了一条电源,一条时钟。第二版则做了个“C”形,把射频线下面绕过去了。
我尝试画一次4层,麻烦让各位坛友们审审看。
现在四层板也不贵了。咬咬牙就上了。我也在做这个,汗颜的是行动力完全没楼主这么强。。。搁了很久。Lay...
JLC打样,90RMB 5x5,大小不够。10x10 200RMB,快赶上一半射频元器件价格了。因此要小心小心再小心。
Ti芯片的扫频板已经送出去打样了,
用了个小伎俩保证了一路的射频输出地平面完整。
P.S. 申请了科创基金,不敢鸽~
2020/03/26更新:
pcb~ pcb~ 埋伏下bug千百万~ 埋伏下bug千百万~
pcb到了,stm32部分调试“完成”,能够正常下载,GPIO操作正常。USB不工作,在电脑上怎么也不显示串口,恐怕是缺了3个usb相关电阻导致的。我不想再改板了啊~
真的是太奇妙了,USB还没好,板子又没法下载了。还是等待新的pcb吧。
我可能惹上什么能让我倒霉的东西了.
新版本到了,usb上电都显示"unknown usb descriptor"(因为没写程序),ST LINK坏了.
等吧.........
哦!该死的USB还是没有解决。
无论什么程序,一直显示unknown usb descriptor。
尝试过不同的上拉电阻组合,一直是一样的问题。应该不是STM32硬件或者pcb的问题。
看样子是没有STM32没有响应上位机的USB。
真没辙了。
再见了stm32,买片CY7C68013开发板来玩玩。
引用GiroPetrenko发表于32楼的内容哦!该死的USB还是没有解决。无论什么程序,一直显示unknown usb descriptor。尝...
啊。。。
8MHz晶振的一端,这啥玩意?
经过与STM32,下载器,STM32CubeIDE,Arduino IDE艰苦卓绝的斗智斗勇之后,
此处经验总结:
检查USB的焊接
检查晶振的焊接
检查STM32的焊接
测试 示波器 测试 示波器 测试
ADC 单端测试,波形为手指。
未作任何DMA优化。
未作优化是不可以的,这是1KHz的信号,完全没法看。
嗐,LMX2572焊接搞不定,pcb掉焊盘了。软件部分也遇到了不小的阻碍,考虑换回HMC431(价格基本一致,自费)。
QFN是永远的痛啊。
决定改变一下设计:
STM32型号换为STM32f103cbu6 (QFN封装),因为手残把QFP引脚全部掰歪了。
Micro-USB更改为USB B (方口),不提搞坏过多少个Micro USB的母座了。
【重要】把LMX2572挪至射频板上,保证射频性能。
STM32控制板增加一组DDS,若是LMX2572调试不成功则尝试“直推”VCO。
【没有鸽 没有鸽 没有鸽】
2020.04.19 更新:
开学了~ 最近估计要搁置一小会了。
与群里一位前辈进行了深入的交流(前辈也在科创哟),逐再次更新扫频源的设计:
- 用四层板保证射频性能。
- 添加RFSA2023模拟衰减器,这样子此模块就能成为通用的扫频信号源,若是以后做射频的项目也能利用起来。
- 把两只LHA-1+挪入此板中,原因同上。
- 在设计pcb时添加布局上的“隔断”,方便以后放置腔体。
- 改为使用25MHz的高精度振荡器(100MHz的不便宜),同时留出SMA给予外部时钟的可能。
- 搞清楚了SMA接头的封装。
- 用KiCad或AD画pcb。
5.1假期期间争取把PCB画好发去打样。再次特别感谢各位前辈的支持!
学习虽然忙,架不住我划水能力强。
上图证明没有鸽
今天仿真了一个微带线耦合器,尺寸仿照的是hfrosten的。性能差远了(等级:无法使用),不过5.5G-6G部分基本是平的。改进任重道远啊~
再次感谢前辈帮我解答疑惑~
这个得看书,比如清华大学出的《微带电路》,不能全靠仿真软件,4-8G还是很容易做的。
对我来说这些一直是“造不如买”,也有现成的5-6G 0805封装的耦合器可用,不过我认为试试看模拟也是好的,但是更加重要的背后的理论知识。
有个想法:若是LMX2572有两路输出,从结构图上来看两路输出是内置VCO分出来的,配置得当输出应该是一样的。
若是拿RFoutB这一路去推混频器的LO,是否完全利用此芯片的性能,并且省下一只耦合器?
经过一系列的改进,设计,在先辈的指点下最终版的电路图如下:
电源板,12V输入同步buck至5.5V,三只LDO:ADM7171提供5V 1A,LP5907提供3.3V 250mA, LP2985提供2.5V给运放。
LMX2572,晶振加了滤波。
射频前端,RFSA2033提供-30dB~-1dB的衰减,两级LHA-1+提供+18dB的增益。
ADL5801混频,LO驱动由LMX2572的另外一路输出提供。LNA使用较为昂贵的PMA3-83LN+提供。
整体设计其实是宽带的,500M~6G都可以。
中频,抄radio大佬以及国外的Frosten大佬的。
忘了说了,我那个图里8338部分电路没有更新,直接抄的话你用不了它自己的AGC功能。
感谢提醒。AGC的确是个很重要的功能(尤其是幅度差这么大的情况下),我需要再钻研钻研datasheet。
求痛批!不然200¥要打水漂了!
顶面
地层
电源层
底层
很喜欢KiCad的渲染图,可惜缺少了部分封装。
求求各位大佬冒个泡~ 可怜可怜我,帮我审核一下吧!
只看了看射频建议把mixer和balun靠近PLL,让差分走线尽量短。减少相位不等长的问题。在1的基...
万分感谢!
pi型都是为了衰减,也是为了方便调试。
--------------------------------------
KS-5C CHANGE LOG V1.5.6
- LMX2572 PLL 转 90度:RFoutB直接面对混频器,RFoutA只要拐一个弯。
- 挪动负载。
- 挪动LNA,靠近SMA接头
- PA 和 LNA的屏蔽罩用一样的,美观大方。
- 把没啥用的模拟地和数字地接在一起,毕竟这块板子上没有数据流。
一堆博导七嘴八舌,毁人不倦中环路滤波器在背面?环路滤波器如果放在背面的话,应“向心性摆放”,即元件接...
虎哥救命~
- 向心性摆放明白了,虽然不清楚原理。明天查。
- 阻焊,的确没考虑到现实情况。这点重画时注意。
- 俩电感:迷糊。是不是使用频率必须低于自谐振频率(有的说是,有的说不是,得找点靠谱的来源)?若是必须低于那这个值就不合适了,选件看的maruata在5500mhz左右(记不太清了,肯定没6g)。
剩下的。。。迷糊。
你用两个LHA-1+串联,在500M的增益高达36dB,而在6G只剩下18dB,足足降了一倍,怎么避...
多谢虎哥!
这是此设计中最大的“毒瘤”。平坦并且不容易饱和的管子我再找找,预算也是要再考虑考虑的。
本来放大器前面的衰减器就是来对付这个夸张的差异,不过这样就做不到fail safe了。
PA决定用两级GVA-81+, 在500MHz下约有20dB的增益,在6GHz下有16dB的增益。不是很平坦,但是也是为数不多能满足条件的芯片了。
偏置器决定用"钞"能力: ADCH-80A+这个 "Very wide band RF Choke". 30RMB一个, 并不是很夸张。
为啥翻来覆去总是在minicircuits一棵树上吊死。一个低频放大器的馈电,几个电感电阻解决的问题...
不是说会有坑吗,更可怕的是我还没法测试。
1GHz以下还能测,问题是坑也在1GHz以上啊。
别的家的产品都不太合适,好不容易找到了又平,P1dB还行的片子:没地方买。。。
极端办法:12V供电,电感+电阻馈电,就不会有坑了。分析坑的原理,进行对症治疗,也可以5V无坑。别家...
真香,真香!
---
粗略分析一下原因,还是缺乏经验。基础差,我不知道问题可能出在哪里,也不知道解决方案。多学,多试,少走弯路。
也谢谢各位给我近乎无限的宽容,在此为我的偷懒行为向大家道歉。
嘉立创,520,大减价啊啊啊啊
为什么啊啊啊
终于迈出了艰难的第一步。至少SPI通联成功了。
好激动啊。。。
输出特别鬼畜,不过至少有输出了。估计寄存器配置有误。。。(现在就是把默认输出频率除以8)
这张板子的焊盘出了一点小问题,幸好不是在射频路上。飞线跳之~
向各位大佬求助!
按照官方示例配置的寄存器,不过改成了输入四倍频。理论上应该输出490MHz的信号。
现在却张这个奇妙样子。中心频率在614MHz,而且右边那个峰忽大忽小。
附又臭又长的代码一段。
uint8_t RESET[3] = {0x00, 0x21, 0x1D}; uint8_t MUX_AS_MISO[3] = {0x00, 0x21, 0x18}; // MODE+Addr, up8 value, down8 values // For this one: Write addr, change to mux as miso // uint8_t readback[3] = {0xEE, 0x00, 0x00}; // Readback lock uint8_t MULT_X4_CONFIG[3] = {0x0A, 0x14, 0x78}; uint8_t CHDIV_DIV8[3] = {0x4B, 0x08, 0xC0}; uint8_t DISABLE_RFOUTB[3] = {0x2E, 0x1F, 0xC3}; uint8_t PLL_N[3] = {0x24, 0x00, 0x27}; uint8_t PLL_NUM_HI[3] = {0x2A, 0x00, 0x18}; uint8_t PLL_NUM_LO[3] = {0x2B, 0x6A, 0x00}; uint8_t PLL_DEM_HI[3] = {0x26, 0x00, 0x7A}; uint8_t PLL_DEM_LO[3] = {0x27, 0x12, 0x48}; /* Infinite loop */ /* USER CODE BEGIN WHILE */ HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET); HAL_SPI_Transmit(&hspi1, RESET, 3, 100); HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET); HAL_Delay(50); // RESET is special. Must be executed 1st. // CHDIV & RFoutB disable HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET); HAL_SPI_Transmit(&hspi1, CHDIV_DIV8, 3, 100); HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET); HAL_Delay(50); HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET); HAL_SPI_Transmit(&hspi1, DISABLE_RFOUTB, 3, 100); HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET); HAL_Delay(50); // PLL CONF HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET); HAL_SPI_Transmit(&hspi1, PLL_NUM_LO, 3, 100); HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET); HAL_Delay(50); HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET); HAL_SPI_Transmit(&hspi1, PLL_NUM_HI, 3, 100); HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET); HAL_Delay(50); HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET); HAL_SPI_Transmit(&hspi1, PLL_DEM_LO, 3, 100); HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET); HAL_Delay(50); HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET); HAL_SPI_Transmit(&hspi1, PLL_DEM_HI, 3, 100); HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET); HAL_Delay(50); HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET); HAL_SPI_Transmit(&hspi1, PLL_N, 3, 100); HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET); HAL_Delay(50); HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET); HAL_SPI_Transmit(&hspi1, MULT_X4_CONFIG, 3, 100); HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET); HAL_Delay(50); HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET); HAL_SPI_Transmit(&hspi1, MUX_AS_MISO, 3, 100); HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET); HAL_Delay(50);
时段 | 个数 |
---|---|
{{f.startingTime}}点 - {{f.endTime}}点 | {{f.fileCount}} |
200字以内,仅用于支线交流,主线讨论请采用回复功能。