|
弄了个树莓派,突然想起以前好奇过树莓派怎么实现IO口翻转输出可调频率做成FM广播的,咕大师回复是树莓派内带小数分频的PLL。https://www.amobbs.com/thread-5663017-1-1.html?_dsign=c2d3af0e 正好手上有小数分频PLL芯片ADF4351,于是花一个小时也试了下。
先做计算
PLL输入频率FI,输出频率FO, 粗框架计算公式 FO =(I+F/M)*(FI/R/DEV) R是10位 I是16位 F&M是12位 DEV可取1-2-4-8-16-32-64 要满足2200<=(I+F/M)*(FI/R)<=4400
FI=20M 取FO=80M左右避开正常FM广播 最简单计算80=(128)*(20/1/32)
FM广播带宽记得似乎是75K,按8位音频,分辨率75K/256=292.9HZ,分母需要(20*1000*1000/32)/(75*1000/256)=2134
取R=1,DEV=32,I=128,M=2134,F=F0+WAV WAV在0--255之间变动 唯一需要改动的是F值。
由于PLL芯片修改频率后有锁定时间,所以需要两片乒乓操作,一片输出一片配置,4351锁定时间在100US左右,乒乓操作也只能做到刷新率8K(125us). 硬件就STM32外挂两片4351芯片了。
上位机读取一个WAV音频文件重编码为8K采样率8位采样深度的大BUF数组,
单片机定时器定时8Khz:关闭正在输出的芯片,打开就绪的芯片输出,读取下一个WAV值,填入已经关闭的芯片的F字段,让它自己去锁定,锁定完成时差不多也该切过去输出了。
用对讲机收音功能接收试了下,靠近能清晰听到FM声音,杂音不少,一米不到就完全收不到了。
STM32其实是闲的蛋疼的,每次中断几个us就完事,可以用USB虚拟声卡做成实时发射绰绰有余。
上面参数不方便调整频点,间隔太大,可以修改参数 加大R,降低I, 3200*(20/20/32)=100M 2200<3200<4400 20/20/32=31K 这样之后可以将广播频点以31K间隔做设置,M取4095,(75*1000)/(31250/4095)=9828,调制有14位分辨率
采样率是不可逾越了,锁定时间太长。
上次看树莓派介绍说是6位分辨率,过采样实现高分辨率的,这里用上乒乓操作才能得到最入门的8K采样率,实在是汗颜啊 。假设100K,操作间隔10us, 难道是树莓派的PLL锁定时间是可以忽略的。
而且感觉很神奇,树莓派这么操作的话跟单片机中断一样的效果了,可以以上百K速度准点节拍操作啊,跟单片机中断没区别了。线程优先级调到最高就能实现了?WIN上上百K准点操作似乎是不可想象的。
搜了下,没搜到树莓派的小数PLL相关文档。哪位能传一份么。 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!
|