zhengrob 发表于 2024-4-16 22:24:04

基于AD7175的Voltgen自校准电压源_更新V2.1

本更新篇是之前的工作的延续和更新(原贴:Voltgen自校准电压源ADC芯片升级):

http://www.crystalradio.cn/forum.php?mod=viewthread&tid=2112710&highlight=voltgen

虽说是ADC的升级,很多的工作并不只是围绕AD7175展开,其实还包含另一项重要的内容,就是所有的功能模块在STM32的移植和实现。刚开始想主要靠移植,但后来发现程序框架已经面目全非,所以基本上是乾坤大挪移,这也是后期进展越来越慢的原因。

在上边帖子的最后,谈到了当时没完成的几项内容,我就先从这几项内容讲起。

1. AGND的电压采集。据说之前V1.0的设计中LTC2400可以正确读出一定范围内的负电压,所以没遇到什么问题。但是当AD7175设置为单端输入模式的时候是不能读任何小于0的电压的(负电压一律读为0,并且ADC报错),这样就带来了一个问题,AD7175有可能读不到正确的AGND电压。那就有可能通过这个算法:Vx'=(Vx-Vgnd)/(Vref-Vgnd) * Vref 得不到正确的被测电压Vx’。解决办法有多个,其中最简单的就是在U27位置放置一颗正电压offset的运放,但是选一个正offset运放也并不是很方便,所以实际的办法是选用一颗可调offset的运放作为U27,通过微调电位器使offset落在合适的数值上。一个不利的地方是可调offset的运放选型受到一定程度的制约。目前选用的型号是AD711,这是一颗有些年代的运放型号,如果坛友有更适合的型号可以推荐过来。

附上最新的电路图:



2. 关于键盘,沿用了之前Washu版本的键盘硬件和与主机的通讯协议。唯一修改的是将键盘PCB上的晶振由11.0592MHz改为8MHz以使得其能正常工作在3.3V的电压上,其余硬件没做任何改动。甚至键盘板的MCU固件也没有因为晶振的改变而重新编译,但实测工作效果没有发现任何问题。

3. 关于上位机,继续沿用washu的VoltgenROM.exe 上位机, 通讯波特率是19.2Kbps。在上一篇的帖子中有使用示范截图。

附上与上边原理图硬件匹配的固件hex文件(基于STM32F103RCT6)


本版固件的使用:

推荐使用STM32 ST-LINK Utility 将hex固件烧录至MCU中。校准信息存放在0x3D000开始的flash中,多次烧写需注意保护0x3D000至0x40000范围的Flash内容不被擦除,否则只能重新做校准。

关于元器件的选择。除了AD569之外,建议尽可能从正规渠道购买全新的IC。2277,4277,177这些运放和模拟开关DG412在立创商城都有大量现货供应并且价格还是可以接受的。如果自认为是高手有足够的排错和填坑能力,当然可以使用一些二手拆机件。LCD要选驱动IC是UC1701X(有人说与ST7565R兼容,但我没试过)的,假货宝上有很多的,切记必须是3.3V和SPI总线的。(未完,待续)

scu319hy 发表于 2024-4-16 23:27:33

我最近弄个AD7799的测试板,5V参考,差分输入,同一个电压源,正反接会有30~50uV的回差,这个回差会随PGA的放大倍数一起放大,还没弄清楚是哪里的问题
请问AD7175是否有这种问题?

zhengrob 发表于 2024-4-17 11:01:31

简单讲一下组装调试。对于硬件,如果从画板子开始到打板焊接元器件,这绝对是一个需要耐心的大工程。建议采用4层板结构,内一层是GND,内二层是power,这样走线会比较从容些,当然高手用2层版结构肯定也是能布出来的。如果内外层都采用1oz铜箔,制版成本还要更高一些。

不管是外发SMT贴片还是手工焊接元件,强烈建议首次上电时要先隔离检查验证电源部分。所谓隔离检查就是把板上所有电源对外的供电通道都先断开,依次验证+-15V,+-5V,+-9V,+3.3V电源的工作状况,并且通电保持一段时间并且没有异常后,再连通所有线路作进一步的测试。这样做的目的是防止IC等元器件因为电源问题造成损坏,如果电源有问题的话+-15V的破坏力还是很显著的。

如果硬件组装完毕并且成功刷入固件后,开机画面后能大约5秒钟内显示Lock在10.000000V,证明整个系统已经正常运行了:

https://www.bilibili.com/video/BV1AF4m1P7EF/?vd_source=717b823ed22079139ba3044c193ad67f

如果不能的话,需要逐一排查硬件。

上一步OK后,接下来是U27运放的offset微调,操作方法是按住板子上的KEY2按键不放开,然后按一下Reset键,此时系统会重新启动,进入如下画面:



这个界面,显示AGND的读数是0x0000,用钟表旋具微调R56会发现显示的读数开始变化,选择一个介于0x000800至0x000FFF的数值停下即可,稳定后这个数值会在+-1个字之间跳动,调整完成,按Reset重新启动即可。

https://www.bilibili.com/video/BV1H1421d7JD/?vd_source=717b823ed22079139ba3044c193ad67f

我手上的板子还是V2.1b版本的PCB,R56只能通过搭棚焊在U27之上了,看起来是这个样子的:


上边步骤都完成后,就是校准了,这需要至少一块6.5位的台表来辅助完成了,当然最好是7.5位及以上了,这个后边接着再讲。

slsdz 发表于 2024-4-18 09:52:27

高大上的金属箔不见了,可以统一贴片,出套件更方便:victory:
有合适的DAC换了现有的569

washu 发表于 2024-4-18 10:01:38

但是当AD7175设置为单端输入模式的时候是不能读任何小于0的电压的(负电压一律读为0,并且ADC报错)

+++++++++++
那设置为差分模式是否可以?


如果也不可以,是否可考虑偏置 ADC 本身?AD711 这个运放性能不太好(噪声大,其它指标不太重要),我当时纯粹就是手头上有这个运放 :$



washu 发表于 2024-4-18 10:02:58

slsdz 发表于 2024-4-18 09:52
高大上的金属箔不见了,可以统一贴片,出套件更方便
有合适的DAC换了现有的569

用 AD569 纯粹是因为它有大量二手货源且便宜,其实你舍得的话一个 AD5791 就搞定了 :P

Rafier 发表于 2024-4-18 17:11:02

可以改为差分输入,成本也不太高。增加OP1177、ORNA1001(4×1K配对电阻)、ADA4940各一片。

zhengrob 发表于 2024-4-18 17:34:59

Rafier 发表于 2024-4-18 17:11
可以改为差分输入,成本也不太高。增加OP1177、ORNA1001(4×1K配对电阻)、ADA4940各一片。

多谢资料。

zhengrob 发表于 2024-4-18 17:41:40

washu 发表于 2024-4-18 10:01
但是当AD7175设置为单端输入模式的时候是不能读任何小于0的电压的(负电压一律读为0,并且ADC报错)

+++ ...

改差分是可以的。

电路中预留了R35,目前是空位,如果贴上一颗0R电阻,AIN2/AIN3就构成一个差分输入组合。虽然看起来更像一个伪差分,但是一定是可以读负电压的。

Vref为5V,差分输入范围为+-5V,但是Voltgen实际使用0-5V的范围,浪费掉了50%的分辨率(变为23bit)。换来的好处是,可以使用ADA4522/4523这些噪声低的新一代运放。

明天试一下实际效果!

washu 发表于 2024-4-18 17:48:58

zhengrob 发表于 2024-4-18 17:41
改差分是可以的。

电路中预留了R35,目前是空位,如果贴上一颗0R电阻,AIN2/AIN3就构成一个差分输入组 ...

由于历史原因,发行的 Voltgen 是一个验证版 + 适合玩鸡肫的版本,所以只有正压,但其实本身设计上是正负的源表 :D 也就是说,2400 是最初为了方便用的,其实计划上是 2440(差分),DAC 这边,也是故意把 AD569 接成正压,但 569 本身也是正负的(其实第二颗 569 就是正负的,因此调零时第二个 569 可以输出 -10V)

对 2440 我设计的输入调理是这样的

zhengrob 发表于 2024-4-19 10:10:04

本帖最后由 zhengrob 于 2024-4-19 10:34 编辑

washu 发表于 2024-4-18 17:48
由于历史原因,发行的 Voltgen 是一个验证版 + 适合玩鸡肫的版本,所以只有正压,但其实本身设计上是正负 ...

对于24bit ADC的典型差分应用,Vref是很少用5V的,这是有原因的。因为ADC芯片供电电压(Vcc-Vss)大多都是5.0V,这种情况下Vref选用2.5V是最合理的。如果供电电压(Vcc-Vss)是5V-0V,一般以+2.5V作为AGND电位,差分测量范围是0-5V(以+2.5V为中点+-2.5V);如果供电电压(Vcc-Vss)是正2.5V- 负2.5V,就可以以0V作为AGND电位,差分测量范围是-2.5V到+2.5V。选择Vref为2.5V的另一个好处是,在+-Vref范围内,绝对电压分辨率得以保持。

目前V2.1c的电路中如果将R35焊接0R,AIN2/AIN3组成伪差分测量输入,仍然保持Vref是5.0V,ADC程序也改成差分读取后是可以正常工作的。ADC可以准确读出ADC的微小负电压:



就是说,以牺牲1bit分辨率为代价(0.3uV vs 0.6uV)是可以处理这个细节的。但是实测当前这个伪差分电路ADC最多只能处理-0.2V左右的负电压,再低了测量不了,这是当前电路的局限性了。

zhengrob 发表于 2024-4-19 14:29:40

washu 发表于 2024-4-18 10:01
但是当AD7175设置为单端输入模式的时候是不能读任何小于0的电压的(负电压一律读为0,并且ADC报错)

+++ ...

关于AD711,其实它没那么差。实测与ADA4522-1对比能看出些许差异,但相差不是很大,在白天我们的楼内电梯随机启动停止的情况下,这2颗芯片在34401设为100PLN读100个点的情况下,峰峰值差1-2个uV。

这是把程序改为差分ADC采样,U27换成ADA4522的100个点测试情况:



Rafier 发表于 2024-4-20 14:47:10

用伪差分的方案挺好,麻烦大佬共享下伪差分的固件。

zhengrob 发表于 2024-4-20 16:41:19

本帖最后由 zhengrob 于 2024-4-20 16:42 编辑

Rafier 发表于 2024-4-20 14:47
用伪差分的方案挺好,麻烦大佬共享下伪差分的固件。

伪差分工作模式固件(需要R35放置0R电阻):



不需要调U27的offset了,U27选择更宽了。仍然保留按KEY2开机进入ADC监控模式,是这样的:

https://www.bilibili.com/video/BV12r421G7rx/?vd_source=717b823ed22079139ba3044c193ad67f



zhengrob 发表于 2024-4-20 16:46:52

以上发布的2版固件,都没有激活DS18B20,因为长时间运行发现温度会不定时的显示0.00°C的情况,等debug完再加上。
页: [1] 2
查看完整版本: 基于AD7175的Voltgen自校准电压源_更新V2.1