矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
楼主: abbey_tom

有用AD5941制作LCR表的吗

  [复制链接]
     
发表于 2023-9-20 15:54:05 | 显示全部楼层
本帖最后由 zhengrob 于 2023-9-20 15:55 编辑

网上能找到的用AD5941做LCR的也就这么一个,其实这也就算是一个验证方案,就一个1K的档位电阻,不算是完整的方案。以AD5941内置的这些模块,高达200KHz的DDS,16bit的ADC,DFT_DSP计算单元和一系列的PGA和filter,应该是可以做出一个较高性能的LCR的. 但做出来是不容易的,因为这个芯片上的模块太多了,消化起来并不容易。

CN0510的板子焊出来了,程序也能跑起来,但是测不出准确的电池内阻。单独测试ADC,正弦波都算正常,但就是AD5940-BATImpedance这个程序跑不出想要的结果,这个程序写得也太复杂,暂时没有太多时间去调试了。
CN0510.jpg
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2023-9-20 16:10:22 | 显示全部楼层
这个是自己制板的么?
您可真的是很厉害呀,
搞得和1500大元的原版差不多了。

我这一段时间基本把主要的模块消化得差不多了,
我没有试这个测电池内阻的,
因为好像牵涉到外扩其它的芯片。
建议先从不需要外围的例程开始测试起,
比如AD5940_Temperature、AD5940_Impedance、
AD5940_BIOZ-2Wire、AD5940_BIA等,
这些我都测试过了。
回复 支持 反对

使用道具 举报

     
发表于 2023-9-20 17:12:00 | 显示全部楼层
本帖最后由 zhengrob 于 2023-9-20 17:13 编辑
abbey_tom 发表于 2023-9-20 16:10
这个是自己制板的么?
您可真的是很厉害呀,
搞得和1500大元的原版差不多了。


这块板子就是用的官方gerber在立创打的板子,回来自己手焊的元件。
唯一的不同是板子上的5V转3V3的LDO我找不到原设计的那个型号,直接搭棚焊了一颗HT7533,实测这个电压是没有问题的。这板上外接芯片只有2颗,1颗是单刀双掷开关ADG636,其实用HC4052或者2G3157替代是完全没啥问题的(这块板上是不行的,引脚不兼容)。这颗的作用是切换测量信号,先测标准电阻的电压信号再切换到电池两端的信号,这样做的好处是被测电阻两端电压和标准电阻2端电压都由同一个测量通道来做,消除了测量通道寄生参数带来的的增益和相位误差。第2颗芯片是就是一颗4运放,把测量信号放大以后再送入AIN2和AIN3做差分ADC测量。

本来是一个很简单的电路,但ADI的参考例程搞得超级复杂,设计了一个sequencer加入了一堆状态机。还没找到调试的头绪。

其实这个测电池内阻的硬件框架最接近LCR的方案,标准电阻换成可切换的档位电阻就行了。信号激励由电池电压驱动改成外部电压驱动即可。
回复 支持 反对

使用道具 举报

     
发表于 2023-9-20 17:13:06 来自手机 | 显示全部楼层
abbey_tom 发表于 2023-9-20 16:10
这个是自己制板的么?
您可真的是很厉害呀,
搞得和1500大元的原版差不多了。

你好,你的合作设计LCR表项目还在继续吗。
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2023-9-20 17:30:36 | 显示全部楼层
本帖最后由 abbey_tom 于 2023-9-20 17:37 编辑
zhengrob 发表于 2023-9-20 17:12
这块板子就是用的官方gerber在立创打的板子,回来自己手焊的元件。
唯一的不同是板子上的5V转3V3的LDO ...


看起来您的模电基础比我扎实。
如果有立创免费打板文件可以发给我一份。

不过,
我这一段时间研究ADI的例程还是有些心得,
其实搞清楚了还是很清晰的。
所有的例程架构都是一样的,
并没有什么状态机,
说白了就是使用片内的序列器,
一般生成两个序列,
一个是初始化序列,
一个是测量序列,
初始化序列只执行一次,
后面都是启动测量序列
一轮测量执行完成后产生中断(一般是DFT阀值中断)令GPIO翻转,
这个GPIO触发MCU外部线中断,
MCU的中断服务则读取DFT结果并显示
下面是我第一次分析阻抗测试AD5940_Impedance例程时,
梳理的流程,后来发现其它例程都类似,
您可以参考。
有兴趣,可以在这里讨论交流。


阻抗测量程序流程.rar

10.04 KB, 下载次数: 226

回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2023-9-20 17:32:08 | 显示全部楼层
wang8472493 发表于 2023-9-20 17:13
你好,你的合作设计LCR表项目还在继续吗。

我画好了试验用的模拟电路板,
交给小鬼头老师在做试验。
回复 支持 反对

使用道具 举报

     
发表于 2023-9-20 17:47:49 | 显示全部楼层
abbey_tom 发表于 2023-9-20 17:30
看起来您的模电基础比我扎实。
如果有立创免费打板文件可以发给我一份。

看来你研究ADI的例程还是很有心得!多谢分享,我慢慢学习一下。
如果你需要光板PCB就不用再去做了,ADI设计的时候长度是定的4英寸整,恰好超过了JLC的10cm限一点点,所以再去做这个板子并不合算。我做了5块,还剩下4块。我可以发给你1-2块都可以。可以私信给我收货地址。
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2023-9-20 17:52:19 | 显示全部楼层
zhengrob 发表于 2023-9-20 17:12
这块板子就是用的官方gerber在立创打的板子,回来自己手焊的元件。
唯一的不同是板子上的5V转3V3的LDO ...

另外,
序列器也相当简单而高效,
序列命令是顺序执行的,没有分支,
一般一个四线阻抗测量序列只占30多个字(设32位为一个字)
写入片内SRAM后启动睡眠唤醒定时器,
达到唤醒时间点就自行执行测量序列,
执行完毕就睡眠。
如此周而复始。
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2023-9-20 17:57:27 | 显示全部楼层
zhengrob 发表于 2023-9-20 17:47
看来你研究ADI的例程还是很有心得!多谢分享,我慢慢学习一下。
如果你需要光板PCB就不用再去做了,ADI ...

好的谢谢。
回复 支持 反对

使用道具 举报

     
发表于 2023-9-26 16:46:51 | 显示全部楼层
终于在NUCLEO-F411上把BATimpedance跑起来了。跑1KHz定频和100Hz-10KHz扫频的结果截图, 锂电池的内阻用内阻仪测在26.5mΩ左右:
pic2.png
pic3.png
回复 支持 反对

使用道具 举报

     
发表于 2023-9-26 16:54:52 | 显示全部楼层
吐槽一下,ADI的例程真的太不严谨了,在BATimpedance的官方例程中,measurement sequence中有严重的bug,根本就跑不通。上了ADI英文的论坛,一群人在问这个例程跑不通的问题,但ADI的工程师的回答语焉不详。这跟TI的论坛上TI的工程师的细致和迅速回复根本没法比。

这个程序花了我近一个星期才调通,看这个测量结果还算过得去吧。我再看一下还有没有可能降低采样速度再提高测量稳定性。
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2023-9-26 20:12:56 | 显示全部楼层
zhengrob 发表于 2023-9-26 16:46
终于在NUCLEO-F411上把BATimpedance跑起来了。跑1KHz定频和100Hz-10KHz扫频的结果截图, 锂电池的内阻用内 ...

恭喜,
看起来结果基本符合实际了。
这个BATimpedance我还没有试过,
您最后解决的BUG在哪里呢?
省得我后面再踩坑。
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2023-9-26 20:25:34 | 显示全部楼层
本帖最后由 abbey_tom 于 2023-9-26 20:29 编辑
zhengrob 发表于 2023-9-26 16:54
吐槽一下,ADI的例程真的太不严谨了,在BATimpedance的官方例程中,measurement sequence中有严重的bug,根 ...


按说这个measurement sequence很简单的呀,
只有区区6个指令:
1  AD5940_SEQGenInsert(SEQ_WAIT(16*250));  /* 等待250us(参考电压从休眠模式开始上电) */
2  AD5940_AFECtrlS(AFECTRL_WG|AFECTRL_ADCPWR|AFECTRL_SINC2NOTCH, bTRUE);  /* 打开波形发生器、ADC电源 */
3  AD5940_SEQGenInsert(SEQ_WAIT(16*50));   /* 等待50us, ADC就绪. */
4  AD5940_AFECtrlS(AFECTRL_ADCCNV|AFECTRL_DFT, bTRUE);  /* 启动ADC转换、及 DFT */
5  AD5940_SEQGenInsert(SEQ_WAIT(WaitClks));  /* 等待DFT数据就绪 */  
6  AD5940_AFECtrlS(AFECTRL_ADCCNV|AFECTRL_DFT/*|AFECTRL_WG*/|AFECTRL_ADCPWR|AFECTRL_SINC2NOTCH, bFALSE);  
        /* 停止ADC转换、及DFT */
这能有什么BUG?

另外,
看例程好像采样率为800k
测量速度(ODR)为每秒20次
回复 支持 反对

使用道具 举报

     
发表于 2023-9-26 20:47:17 | 显示全部楼层
abbey_tom 发表于 2023-9-26 20:25
按说这个measurement sequence很简单的呀,
只有区区6个指令:
1  AD5940_SEQGenInsert(SEQ_WAIT(16* ...

你上边的代码肯定是跑不通的。
做如下调整:
... ...
AD5940_SEQGenInsert(SEQ_WAIT(16*250));  /* wait 250us for reference power up from hibernate mode. */
AD5940_AFECtrlS(AFECTRL_HSTIAPWR|AFECTRL_INAMPPWR|AFECTRL_EXTBUFPWR|AFECTRL_DACREFPWR|AFECTRL_HSDACPWR,bTRUE);
AD5940_AFECtrlS(AFECTRL_WG|AFECTRL_ADCPWR|AFECTRL_SINC2NOTCH, bTRUE);
... ...

也就是在你的第一和第二句之间增加

AD5940_AFECtrlS(AFECTRL_HSTIAPWR|AFECTRL_INAMPPWR|AFECTRL_EXTBUFPWR|AFECTRL_DACREFPWR|AFECTRL_HSDACPWR,bTRUE);

就OK了。
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2023-9-26 21:49:10 | 显示全部楼层
zhengrob 发表于 2023-9-26 20:47
你上边的代码肯定是跑不通的。
做如下调整:
... ...


哦,那可能是某些相关模块的电源没有打开。
您上面说要减小采样率,
我看了一下,
目前ADC的原始采样率好像是800kSPS
这个好像变不了,只有800k和1.6M两档。
想要稳定的话,
可以试一下SINC2滤波器过采样的设置
设置SINC3=2,SINC2=1333
可将最终ADC送DFT的速率降低为300SPS
回复 支持 0 反对 1

使用道具 举报

您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

小黑屋|手机版|矿石收音机 ( 蒙ICP备05000029号-1 )

蒙公网安备 15040402000005号

GMT+8, 2025-4-26 07:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表