江边树 发表于 2018-8-6 11:15:15

简易数字扫频仪的编程设想和请教

本帖最后由 江边树 于 2018-8-6 11:31 编辑

一,竖屏横放的问题:深圳晶联讯产的1.77寸128X160点阵彩屏是竖屏.我们将它横放,则V字就变成了>,我查资料,说要先发送MADCTL指令(即0Bh),紧接着送参数:(D5,D6,D7)=(MV,MX,MY)=110,实现X-Y Exchange,同时X-Mirror,也就是横屏后,X,Y交换,X是镜像.这样,原来竖屏右上角的地址(127,0)变成现在横屏左上角
的地址(0,0)

二,采样方法:用户检测465中周,扫频从450KHZ-470KHZ,宽度20KHZ.但是检测无字晶体,从0扫到20MHZ,宽度是前者的1000倍.设从FQ_UD的上升沿到频率真
的更新延时为定值,扫频步长为定值,那么扫无字晶体所需时间就是扫中周时间的1000倍.这样用等时采样脉冲来采样就很困难.
古老的描点法测中周,是用信号发生器顺序发465KHZ附近的几个频点,测出对应的电压,在坐标纸上描出曲线就成了.扫频仪是否也可以仿照此法呢?
把用户输入的扫频开始频率fb和结束频率fe之差作扫频宽度B,将B除以水平点数160得每相邻两点之间的频率增量d,用循环for(i=0;i<159,i++),x=i;对于每次
循环,令fi=fb+dx,如此,f0=fb, f1=fb+d, f2=fb+2d......f159=fb+159d
画点(i,yi)前,先用fi对应的频率控制字Mi让AD9850产生新频率,发出FQ_UD后至少延时18个系统时钟周期,给足时间让频率真的更新了, 然 后 对 AD发
ADC_START=1(即令ADC_CONTR的b3=1),然后等待adc_flag=1到来,让vi=ADC_RES*256/1024,对于vi要进行量化成整数.例如28.4,就取28,28.5,就取
29.又因为电压的0V的对应点应该最低,所以令yi=159-vi,这时就可以画点(i,yi)了.这一点对应的频率是fi,这一点的高度对应被测网络的输出电压vi.可行吗?请指教!谢谢!

补充内容 (2018-8-6 16:28):
更正:对于竖直方向128个点的横屏,yi=127-vi 而不是竖屏的yi=159-vi

乐至乐酉 发表于 2018-8-6 14:49:21

太专业了,小白路过都看不懂

hzlaczm 发表于 2018-8-6 15:23:43

建议上大屏,7.5寸,10.4寸的:lol专业的就这两个尺寸了:lol

gxg0000 发表于 2018-8-6 18:35:18

方法是可行,但注意三点;
1.输入AD转换器的高频电压要整流
2.扫描启始频率和扫频步长要可以设置,否则实用性不强
3.要有明显的频标指示

ace919 发表于 2018-8-6 22:06:22

建议采用USB-RS232接口芯片,在PC上显示。扫频的范围大点,至少10.7M也包括进去

lht5631080 发表于 2018-8-7 00:31:55

采样到20M,这ADC可不便宜,信号调理系统也复杂。用二极管检波,对ADC要求低些,小信号非线性又是个问题。

江边树 发表于 2018-8-7 10:05:59

三,量化误差
   设所用的屏竖直方向有y=0~y=127共128个像素点.如前述若测出电压vi=28.5v,这个值将位于y=98和y=99之间.但是屏上相邻两个像素点之间是没有显
示物质的,因此只能将vi量化为29,将该值显示在y=98的点上.显然,量化误差最大可达最末一位值的一半.设屏从上到下对应3V电压,则相邻两个y值之间的差为
0.0234v,半格即0.0117v,就是说显示值比"真实"值大11.7mv.
    在水平方向上同样存在类似的情况.在测中周时,设扫频宽为20KHZ,则相邻x之间的频率增量d=125HZ.而测量无字晶体时,假设扫频宽为20MHZ,则相邻两个
x之间频率增量d=125KHz,频率是阶梯形变化的 _┏ .在相邻两个x点之间同样也没有显示物质.因此若d是小数,也要量化成整数,量化误差也不可避免.

四,扫频步长
任何网络都存在过渡过程,尤其是窄带网络在突变信号到来时,过渡过程更不可忽视.因此扫频步长不宜过大,每次改变频率后要有适当的延时,等电路进入稳
态再开始AD转换.
    根据这种思路,如果用户设定的扫频步长step>扫频宽度B/160,就丢弃step.例如扫465KHZ中周时,相邻两个x之间频率增量d=125Hz,若用户设定的step=
1KHz,就不用step,而用d.但是,如果用户设定的step<d呢?例如在d=125KHz时,用户设定的step=10Khz,这时xi点的频率仍然是fb+dx,而我们把它作为扫频的起
始频率,把下一个x点的频率f(i+1)=fb+d(x+1)当做扫频结束频率,把用户设的step作为扫频步长进行xi--x(i+1)之间的扫频.
   由于AD9850是开环器件,它不提供反馈信息告诉我们它何时真正更新了频率,何时已经扫描到结束频率,因此画两个相邻的x点必须留足够的时间.假设我们
画完一个点延时2ms,那么画完160个点也就是用0.32秒,并不影响使用.在这2ms延时期间,如果扫描尚未结束,就开始下一个点频率值的设定也不要紧,因为这
时两个频率之差总比d小;如果扫频已经完成了呢?因为结束时的频率控制字并未清除,因此下一个x点的频率将提前出现.但是因为相邻两个点之间无法显示,
只要在下一个x点及时更新频率,显示还是正确的.对于选定的器件,画相邻两x点间隔时间多长合适,往往要多次调试修改程序,以得到较好的结果.
以上是我肤浅的想法,请指教!

1996 发表于 2018-8-7 12:14:51

lht5631080 发表于 2018-8-7 00:31
采样到20M,这ADC可不便宜,信号调理系统也复杂。用二极管检波,对ADC要求低些,小信号非线性又是个问题。

一,买成品检波探头,二,小信号放大处理,三,对于已有探头,软件补偿

Paktu 发表于 2018-8-18 12:46:21

AD5933,这芯片可以考虑使用一下。
或者使用DDS的线性扫描功能,比如说AD9910,从100KHz往上扫,二极管整流滤波后让ADC采样。
页: [1]
查看完整版本: 简易数字扫频仪的编程设想和请教