网站首页 > 技术文章 正文
做了个便携时钟源,4层板。
主控采用STM32F411。
下文将分享——功能/亮点,实测说明,硬件设计,软件设计,成本说明,开源网址
一、功能/亮点
- 输出20M-9800MHz射频信号,两个射频信号,一个参考输入,一个参考输出
- 使用上位机、串口控制
- 频率分辨率到1hz
- 单个TYPEC口供电+通信+上位机图形化配置,无需单独配置各种寄存器,即插即用
- 板载ocxo作为基准或锁定外部基准,支持锁定内部/外部参考信号输入
- 整机启动时(恒温晶振预热)功耗约为4W,运行时稳定功耗约为2W-3W。
- 硬件配置:1个type-c、6个状态指示灯。含:电源正常指示、锁定指示,实用内部OCXO指示、使用外部参考源指示、两个射频信号是否输出指示
二、实测一下
1.射频信号相噪特性
6GHz测试相位噪声:100hz处约 -70dBc
受限于仪器设备该档位的底噪(实际相噪会更小),无法测到更远位置的相位噪声情况。
- 测试仪器:Keysight N9000B
- 输出功率:0dBm
- RBW:5.1Hz
在RBW=1Hz条件下测试。
6GHz测试相位噪声:100hz处约-80dBc
2.射频信号输出
下图为SDS804测试的114.5141MHz,双通道输出。
下图为Keysight测试的7.1GHz输出波形与FFT谱。
由于该PLL的VCO最大振荡频率为7100MHz,再往上需要使用片内的倍频器对VCO进行倍频,因此有较大的次谐波(怀疑是芯片没做次谐波的抑制),测试结果如下图所示。
可见FFT谱中9.8GHz输出时,有较大的4.6GHz的次谐波成分。
3.参考信号输出
测试仪器:Keysight
可正常输出10MHz参考信号,输出阻抗为50Ω,10MHz。峰值为1.72V,上升沿为330ps左右(甚至可以用来做TDR),如下图:
那么问题就来了,想做一个这样的“仪器”,如何设计软硬件呢?
三、硬件设计
原理图1
原理图2
原理图3
PCB图
1.说明
4层板,叠层:7628;板厚:1.6mm;RF单端:13.75mil
铝型材外壳尺寸23*54*80
内尺寸卡槽:51;板宽:47;最大高度:16
OCX0高度:12mm
四、软件设计
底层驱动基于C语言,使用STM32HAL库开发,开发软件为Keil v5。
1.UART驱动
串口发指令控制,有十余条指令,可覆盖基本功能,所有命令及解释如下图所示:
2.上位机
玩了玩QT6,简单写了个图形化上位机,该有的功能基本都有了,目前支持Win平台,可控制输出频率,参考信号切换,N分频模式,每个通道输出使能与关闭,每个通道的输出功率等。
3.实操说明
最主要的控制函数为LMX2592_WRITE_FREQ,用来配置PLL输出频率及基本寄存器。下面仅展示流程,详细代码见工程附件(参考第6章指引)。LMX2592寄存器部分代码在LMX2592.c /.h文件中。
void LMX2592_WRITE_FREQ(double freq){
// Fvco = Fpd x PLL_N_PRE x (PLL_N + PLL_NUM / PLL_DEN)
// The VCO core covers an octave from 3.55 to 7.1 GHz.
// F_PFD=20Mhz Fout = pfd * (N) / channel_div; input freq is in Mhz
// denominator = 20M(0x0131 2D00 ) the resolution = 1Hz
/****************** REF PART ********************/
/****************** OUTPUT PART ********************/
/****************** NDIV SET ********************/
/****************** STRAT WORK ********************/
}
与上位机通信、接收命令,发送状态函数在UART_CTRL.c /.h文件中,主要依赖strstr函数对命令进行检测。UART通信采用的中断接收。
void LMX2592_FREQ_CTRL(){
temp_ret=strstr(CTRLBuffer, "FREQ=");
if(temp_ret){
RX_freq=atof(temp_ret+5);
if(debug_outen) printf("freq=%f\n",RX_freq);
LMX2592_WRITE_FREQ(RX_freq);
}
...... 其余部分省略
}
上位机基于QT6 Cmake,比较简单,但基本功能均已实现。
最后补充一下整体原理:
本质上就是基于锁相环对输入参考信号任意倍频,获得想要的输出信号想详细了解的可以去Bing搜一搜。
这次完成度蛮高的,有外壳有上位机,即插即用,尺寸也很小,一手掌握,揣在口袋里就走。
五、成本说明
总体成本大概150元以内,预祝各位制作成功。
参考资料:
https://oshwhub.com/z_star/pocket-rf-clock-source
【正文完】
你的点赞,就是我的动力~
猜你喜欢
- 2025-05-23 STM32学习笔记-CubeMX使用
- 2025-05-23 嵌入式开发丨51、STM32、Linux点灯的区别
- 2025-05-23 【基础】STM32F103C8T6制作舵机测试仪详细图文教程
- 2025-05-23 利用Proteus仿真STM32实现DHT11温湿度检测
- 2025-05-23 《GD32开发实战指南》第13章 DAC
- 2025-05-23 51-FORTH(1): 8051计算机诞生记
- 2025-05-23 _attribute__((weak))关键字如何使用?
- 2025-05-23 终极调试利器,各种Link通吃
- 2025-05-23 循环队列原理及在单片机串口通讯中的应用(二)
- 2025-05-23 超详细的FreeRTOS移植全教程——基于stm32
- 05-25菜籽饼窝料自制秘方!三步搞定野钓爆护神器,鲫鲤草鱼通杀
- 05-25将DeepSeek接入WPS,只要三步
- 05-25一文搞懂 VBA 循环结构,附超实用应用方案!
- 05-25Deepseek嵌入Excel,帮你自动做表格,感觉我要失业了
- 05-25怎么样获取剪贴板中格式的类型,VBA编程教你这样操作
- 05-25tdlex是什么文件
- 05-252分钟教你学会Word接入deepseek
- 05-25Word接入DeepSeek方法:第二版解决宏消失保存失败。
- 最近发表
- 标签列表
-
- cmd/c (64)
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- sqlset (64)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- chromepost (65)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- linux删除一个文件夹 (65)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)