电子技术
 
【开源】HX9500.02扫频仪试验电路图和程序
虎哥 2012-1-15
喜欢射频仪器的KCer有福了!今天我们开放扫频仪HX9500第二版的源码,欢迎大家讨论!

在HX9500.01的基础上研制HX9500.02标量网络分析仪的过程中,我们进行了一系列改进试验,包括采用嵌入DDS的锁相环(如“相加环”)改善全频段的频率步进(step)、采用超外差电路进行检波,以便消除跟踪源谐波对动态范围的影响;采用二次变频,在高第一中频用较宽的中频带宽,在第二本振采用频率范围比较窄,但步距很小的PLL进行频率微调,从而低成本实现全频段小步进;以及进行137MHz以下分析时,跟踪源PLL空闲,可以用来与S21检波器的本振混频来产生低频率本振,从而节省一个DDS电路等设计。这些方案是为了降低扫频仪的成本,并且提高扫频仪的性能。这些方案的试验都获得了成功,但是也有相应的缺陷。

例如,当采用二次变频,二本振微调实现小步进时,对第一中频滤波器的带内波动有严格要求。采用共用一个PLL的方案,跟踪源向S21检波电路的泄漏较大,影响动态范围,且需要增加滤波器等。

HX9500.02的设计频率范围1MHz~1GHz,动态范围80dB,采用一次变频,中频455KHz。同9500.01一样,仍然在137MHz以上采用4350做PLL振荡器,在137MHz以下采用9951作为振荡器。频率步进在137MHz以下约为1Hz。实际测试效果,在采用中频滤波以后,动态范围可以很轻松的提升到70dB以上,如果做好屏蔽措施,到80dB以上不成问题。

由于设计水平一直未达到KC的最低要求,直到该项目终止也没有完成实验,这里面除了技术的因数,主要是人事和流程管理过多依赖信任,疏于体制约束和对人性的洞察,对表面善良内心阴险的人缺乏防范。结果项目负责人在KC积攒知识和资源,在开发即将完成之时另立山头,导致人力物力投入全部报废,造成重大损失。这套方案本身是可行的,但是只适合爱好者学习和DIY,确实达不到KC对成品仪器的基本要求。这一系列实验提供了多种思路,为开发相关低成本仪器提供了经验,大家感兴趣的话可以继续研究。

下面是HX9500.02的原理图和布板图(最后一次的改动尚未完成,因此布板图仅供参考),分辨率都足够,点击图片或者另存为可以看到清晰大图。

控制板
pic


pic


射频板
pic

pic



键盘板
pic


pic



HX9500项目已经终止,取而代之的是HX9501标量网络分析仪/频谱仪项目,现在正在制作试用版:https://www.kechuang.org/t/40754
2012-1-15 23:06:31
虎哥(作者)
1楼
HX9500.02共有3张电路板:控制板、射频板和键盘。控制板上面也有一部分射频电路。布板是按照一个小型手持仪器考虑的,其外观与HX9501.01已经颇为接近。

下面是9500.02试验时留下的文物。

控制板,CPU在背面。
pic


射频板。
pic


键盘
pic
折叠评论
加载评论中,请稍候...
折叠评论
虎哥(作者)
2楼
下面是源代码。电路图和程序随时都在改,很乱,不能直接用,需要自己修改。高手就不要吐槽了,吐槽点太多。



因为CPU资源不够(经9501课题组评估,认为实际上是程序有缺陷),所以还尝试了两块CPU分别负责射频硬件控制、显示、键盘扫描的方案,CPU间用串口通信。由于工作不稳定,放弃实验。这是当时用的代码。

HX9500.02.rar567k47次
折叠评论
加载评论中,请稍候...
折叠评论
2012-1-16 11:22:45
3楼
[s:271]  [s:271]  [s:271]  [s:271]  [s:223]
折叠评论
加载评论中,请稍候...
折叠评论
2012-1-19 13:09:24
2012-1-19 13:09:24
4楼
455的像频有抑制吗?
折叠评论
加载评论中,请稍候...
折叠评论
虎哥(作者)
5楼
没有采用镜像抑制措施,从电路图也可以看出来。扫频分析是闭路测试,一般情况下不会有镜像干扰的问题,所以不需要抑制镜像。如果要用此机观察空间频谱,则可能出现假响应。所以频谱功能是附送的功能,仅供参考。
折叠评论
加载评论中,请稍候...
折叠评论
2012-2-4 18:01:36
2012-2-4 18:01:36
6楼
问个问题。用了DDS,为何频率最低是1M呢?
折叠评论
加载评论中,请稍候...
折叠评论
虎哥(作者)
7楼
引用第6楼edzyj于2012-02-04 18:01发表的  :
问个问题。用了DDS,为何频率最低是1M呢?


受很多因素制约,看看电路图就明白了。软件可以设到100Hz,但无法保证指标。

爱好者几百元就能搞出到1G的VNA,并不表明他能达到一个成品仪器的最起码要求。
折叠评论
加载评论中,请稍候...
折叠评论
2012-2-17 09:29:42
2012-2-17 09:29:42
8楼
[s:271][s:271][s:271][s:271]楼主好人
折叠评论
加载评论中,请稍候...
折叠评论
2014-1-21 11:02:46
2014-1-21 11:02:46
9楼
谢谢分享
折叠评论
加载评论中,请稍候...
折叠评论
2014-1-28 16:19:21
2014-1-28 16:19:21
10楼
谢谢分享,功能在全点就好了
折叠评论
加载评论中,请稍候...
折叠评论
2014-6-14 14:39:29
2014-6-14 14:39:29
11楼
不错学习了
折叠评论
加载评论中,请稍候...
折叠评论
12楼
本帖最后由 suyuping99 于 2014-6-14 16:08 编辑

忍不住吐槽一下。控制板和射频板的设计与布板布线,其风格与KC901 的风格大相径庭,许多地方都缺仔细考量,不太协调。极其暴露负责人的功力~~~这有点像在玩啊~~
折叠评论
加载评论中,请稍候...
折叠评论
2015-3-19 20:15:06
2015-3-19 20:15:06
13楼
ting le xiang mu ke xi le(gang huan win7 ,han zi diao bu chu lai)
折叠评论
加载评论中,请稍候...
折叠评论
14楼
发现有3R33[s::lol]
折叠评论
加载评论中,请稍候...
折叠评论
2015-5-21 04:29:51
2015-5-21 04:29:51
15楼
Hello, it is impossible to build a project in keil,
折叠评论
加载评论中,请稍候...
折叠评论
16楼
谢谢分享
折叠评论
加载评论中,请稍候...
折叠评论
2015-5-22 05:05:48
17楼
提供的示例代碼,也可以收集並寫處理器
折叠评论
加载评论中,请稍候...
折叠评论
18楼
高手 我能和你做朋友吗?
折叠评论
加载评论中,请稍候...
折叠评论
2015-5-29 21:04:07
2015-5-29 21:04:07
19楼
不能建设项目keil、缺乏图书馆,并编写了很多错哪儿弄到的所有项目档案
折叠评论
加载评论中,请稍候...
折叠评论
2015-6-1 06:09:41
2015-6-1 06:09:41
20楼
compiling main.c...
ili9320.c(412): error:  #20: identifier "GPIOD" is undefined
ili9320.c(488): error:  #20: identifier "GPIOD" is undefined
ili9320.c(495): warning:  #223-D: function "ADC_GetConversionValue" declared implicitly
ili9320.c(495): error:  #20: identifier "ADC1" is undefined
ili9320.c(598): error:  #20: identifier "GPIOD" is undefined
ili9320.c(612): error:  #20: identifier "GPIOD" is undefined
main.c(9): error:  #20: identifier "ADC_InitTypeDef" is undefined
main.c(10): error:  #20: identifier "DMA_InitTypeDef" is undefined
main.c(11): error:  #20: identifier "EXTI_InitTypeDef" is undefined
main.c(108): warning:  #223-D: function "DMA_DeInit" declared implicitly
main.c(108): error:  #20: identifier "DMA1_Channel1" is undefined
main.c(111): error:  #20: identifier "DMA_DIR_PeripheralSRC" is undefined
main.c(113): error:  #20: identifier "DMA_PeripheralInc_Disable" is undefined
main.c(114): error:  #20: identifier "DMA_MemoryInc_Disable" is undefined
main.c(115): error:  #20: identifier "DMA_PeripheralDataSize_HalfWord" is undefined
main.c(116): error:  #20: identifier "DMA_MemoryDataSize_HalfWord" is undefined
main.c(117): error:  #20: identifier "DMA_Mode_Circular" is undefined
main.c(118): error:  #20: identifier "DMA_Priority_High" is undefined
main.c(119): error:  #20: identifier "DMA_M2M_Disable" is undefined
main.c(120): warning:  #223-D: function "DMA_Init" declared implicitly
main.c(123): warning:  #223-D: function "DMA_Cmd" declared implicitly
main.c(125): error:  #20: identifier "ADC_Mode_Independent" is undefined
main.c(128): error:  #20: identifier "ADC_ExternalTrigConv_None" is undefined
main.c(129): error:  #20: identifier "ADC_DataAlign_Right" is undefined
main.c(131): warning:  #223-D: function "ADC_Init" declared implicitly
main.c(131): error:  #20: identifier "ADC1" is undefined
main.c(134): warning:  #223-D: function "ADC_RegularChannelConfig" declared implicitly
main.c(134): error:  #20: identifier "ADC_Channel_3" is undefined
main.c(134): error:  #20: identifier "ADC_SampleTime_55Cycles5" is undefined
main.c(136): warning:  #223-D: function "ADC_DMACmd" declared implicitly
main.c(139): warning:  #223-D: function "ADC_Cmd" declared implicitly
main.c(142): warning:  #223-D: function "ADC_ResetCalibration" declared implicitly
main.c(144): warning:  #223-D: function "ADC_GetResetCalibrationStatus" declared implicitly
main.c(147): warning:  #223-D: function "ADC_StartCalibration" declared implicitly
main.c(149): warning:  #223-D: function "ADC_GetCalibrationStatus" declared implicitly
main.c(152): warning:  #223-D: function "ADC_SoftwareStartConvCmd" declared implicitly
main.c(209): error:  #20: identifier "ADC_Channel_12" is undefined
main.c(213): warning:  #223-D: function "ADC_GetConversionValue" declared implicitly
main.c(216): error:  #20: identifier "ADC_Channel_11" is undefined
main.c(240): warning:  #223-D: function "SysTick_CLKSourceConfig" declared implicitly
main.c(240): error:  #20: identifier "SysTick_CLKSource_HCLK" is undefined
main.c(246): warning:  #223-D: function "SysTick_SetReload" declared implicitly
main.c(249): warning:  #223-D: function "SysTick_ITConfig" declared implicitly
main.c(639): error:  #20: identifier "GPIOD" is undefined
main.c(644): error:  #20: identifier "GPIOC" is undefined
main.c(653): error:  #20: identifier "GPIOE" is undefined
main.c(721): warning:  #223-D: function "SysTick_CounterCmd" declared implicitly
main.c(721): error:  #20: identifier "SysTick_Counter_Enable" is undefined
main.c - 30 Error(s), 18 Warning(s).
折叠评论
加载评论中,请稍候...
折叠评论
21楼
compiling main.c...
main.c(1): error:  #5: cannot open source input file "stm32f10x_lib.h": No such file or directory
main.c - 1 Error(s), 0 Warning(s).
折叠评论
加载评论中,请稍候...
折叠评论
虎哥(作者)
22楼
这个项目已经废了,源码里面能用的只有一些控制函数,写得很烂而且应该是在两个版本之间的代码,发出来只是起参考作用,不建议再继续搞。
折叠评论
加载评论中,请稍候...
折叠评论
2015-6-12 22:22:24
2015-6-12 22:22:24
23楼
woo,learning
折叠评论
加载评论中,请稍候...
折叠评论
2017-4-1 09:44:42
2017-4-1 09:44:42
25楼
很好的参考。
折叠评论
加载评论中,请稍候...
折叠评论
2017-8-21 09:32:57
2017-8-21 09:32:57
26楼
对业余玩玩有很好的参考作用,谢谢。
折叠评论
加载评论中,请稍候...
折叠评论

想参与大家的讨论?现在就 登录 或者 注册

{{submitted?"":"投诉"}}
请选择违规类型:
{{reason.description}}
支持的图片格式:jpg, jpeg, png