论坛风格切换切换到宽版
  • 6545阅读
  • 10回复

请教AD8307换算的问题 [复制链接]

上一主题 下一主题
离线三剑
 
发帖
112
只看楼主 倒序阅读 0楼 发表于: 2011-08-11
想用ad8307做个数字功率表,参照下图。
不知道其输入电压与输出电压的关系。查阅资料有这么一句话:
"对数放大器ad8307会在50欧姆的负载上产生一个dc输出,该输出等价于25mv/db的输入功率(0.5v每十倍电压)。"
1.比如输入10mv rms电压,ad8307输出的电压应是多少?
2.ad8307未输入信号时,ad8307会有数百mv电压输出,计算时如何处理?
请了解该芯片的朋友支招。
本主题包含附件,请 登录 后查看, 或者 注册 成为会员
离线三剑
发帖
112
只看该作者 1楼 发表于: 2011-08-11
这个图中输出对地接了个470k电阻,好像输出斜率也不是25mv/db了。
原文在这里
http://www.webx.dk/oz2cpu/radios/miliwatt.htm
http://www.webx.dk/oz2cpu/radios/milliwatt-comp.htm
离线三剑
发帖
112
只看该作者 2楼 发表于: 2011-08-11
就拿这个来讲吧
当无信号输入时显示:
vin=0.1817 mvrms

dbmv : 20*log10(vin/1 mv) = 20*log10(0.1817) = -14.81 dbmv
dbm : dbmv - 46.9897 = -14.81 - 46.9897 = -61.8 dbm       (负载为50Ω时)
mw   : ((vin/1000)*(vin/1000)/50)*1000 = 660.2978 pw

显示与计算相符。


如现在输入vin=10 mvrms信号:

dbmv : 20*log10(vin/1 mv) = 20*log10(10) = 20.00 dbmv
dbm : dbmv - 46.9897 = 20.00 - 46.9897 = -26.99 dbm       (负载为50Ω时)
mw   : ((vin/1000)*(vin/1000)/50)*1000 = 0.0020 mw

所以这时应显示:

-26.99 dbm   10 mv     0.0020 mw

这时ad8307输出电压是多少啊?

根据输出等价于25mv/db的输入功率,难道是:

dbm增加 61.8 dbm - 26.99 dbm = 34.81 dbm
电压增加 34.81 dbm * 25mv/db = 870.25 mv

ad8307输出电压 = 870.25 mv + 0.1817 mv = 870.4317 mv?
本主题包含附件,请 登录 后查看, 或者 注册 成为会员
离线BG7TBL
发帖
2965
只看该作者 3楼 发表于: 2011-08-12
采用外加信号校准一下,不用理会这么多换算问题。
离线永远的FM
发帖
12095
只看该作者 4楼 发表于: 2011-08-12
我在使用时,8307输出对地不加电阻。
离线三剑
发帖
112
只看该作者 5楼 发表于: 2011-08-14
经朋友指点,发现以上算法的一个重大错误,错把ad8307的输出的电压直接当做rf电压处理

其实ad8307的输入与输出关系就是25mv/dbm(输出对地不接电阻时的曲线),ad8307的输入0dbm时输出电压固定为2v左右,故输入1dbm时输出电压应为2v+0.025v=2.025v。同理,如ad8307输出电压是1.950v时,输入的rf电平应是-2dbm。

后改进算法显示基本正确,由于用到双精度浮点的幂运算,占用资源太大,故dbm只保留一位小数进行mvrms计算,出来的值精度太低,dbm和mw尚可。

正在研究原作者的程序,发现他根本没按公式转换,采用查表的方法得到各相应值,但程序很复杂,正在考量方案。
离线代洪波
发帖
4809
只看该作者 6楼 发表于: 2011-08-15
如果宽带使用比较麻烦。不同频率的响应不一样。还是查表法简单!
离线nbcdmagsm
发帖
650
只看该作者 7楼 发表于: 2011-08-15
http://www.henteko.org/fswiki/wiki.cgi?page=%c5%c5%b3%a6%b6%af%c5%d9%b7%d7%a4%ce%c0%bd%ba%ee
这个网站可以参考一下,单片机参考电压是2.5v。
    dat = get_adc(0);
    // ad8307 spec. slope 25mv/db, intercept -84dbm
    dbm = dat * (2.5 / 1024.0) / 0.025 - 84.0 - 6.0;
    dbu = dbm + 107.0;
    mv = pow(10.0, (dbu / 20.0)) * 0.001;
    mw = mv * mv / 50.0 * 0.001;
离线三剑
发帖
112
只看该作者 8楼 发表于: 2011-08-15
[quote=代洪波]如果宽带使用比较麻烦。不同频率的响应不一样。还是查表法简单![/quote]
原作者的思路:分频段得到adc数据,采用分频段补偿校正得到正确的dbm,至于mv和mw通过dbm查表得到,mv和mw的表格有600个字节空间,还是比较占资源的(我的空间只剩下1k左右),.
离线三剑
发帖
112
只看该作者 9楼 发表于: 2011-08-15
'
http://www.henteko.org/fswiki/wiki.cgi?page=%c5%c5%b3%a6%b6%af%c5%d9%b7%d7%a4%ce%c0%bd%ba%ee
这个网站可以参考一下,单片机参考电压是2.5v。
    dat = get_adc(0);
    // ad8307 spec. slope 25mv/db, intercept -84dbm
    dbm = dat * (2.5 / 1024.0) / 0.025 - 84.0 - 6.0;
    dbu = dbm + 107.0;
    mv = pow(10.0, (dbu / 20.0)) * 0.001;
    mw = mv * mv / 50.0 * 0.001;
'

资料不错 ,正在研究,不过一看到pow()就 .前面试过的,1-2k的空间没有了,效率很低啊.
离线BG6JJI
发帖
4942
只看该作者 10楼 发表于: 2015-11-24
这个不错,试试用阿杜做一个,MEGA328应该能存下表
到处游荡的机器人火腿,目前在丽江
RIG:我有一堆uSDX
ANT:随时都能抄走的拉杆GP天线
QQ:1416160    我的DIY群:777353770
http://www.dxsummit.fi/DxSpots.aspx