duke83 发表于 2023-12-12 16:29:08

本帖最后由 duke83 于 2023-12-12 17:21 编辑

washu 发表于 2023-12-12 14:58
应该是一致的,反而是 PCB 画错过您是哪地方对应不上?

看图说:


磁耦 ADUM1411 的 pin 6 与 Pin 11 改光耦是不是不要管它?
可能会装一块 FOD8012A x 4 的小板再叠上去。
ADCCLK 与 ADCDATA 共用一个 FOD8012A(双向),其余的 REGCLK, REGDATA, REGSTB 各用一个 FOD8012A。
找不到这种输出入是逻辑闸的同包装有两组以上高速光耦合。

这就是我几年前初试 Voltgen 卡关没有再玩下去的地方。

washu 发表于 2023-12-12 17:58:34

duke83 发表于 2023-12-12 16:29
看图说:




是的不去管它,并没有被使用 :dizzy:

5free 发表于 2023-12-12 22:12:48

我请教一下:为啥采用 二次三项式非线性校准 方式? 是不是 四次 五次也行? 这个怎么考虑的?

washu 发表于 2023-12-12 22:34:31

VGCalibration 源码,需安捷伦 VISA 库,支持安捷伦 82350、82357、E5810(网关)接口,支持安捷伦 3458、Advantest 6581 万用表

washu 发表于 2023-12-12 22:34:51

5free 发表于 2023-12-12 22:12
我请教一下:为啥采用 二次三项式非线性校准 方式? 是不是 四次 五次也行? 这个怎么考虑的?

可以但二次多项式比较简单 :D

MF35_ 发表于 2023-12-13 09:28:42

5free 发表于 2023-12-12 22:12
我请教一下:为啥采用 二次三项式非线性校准 方式? 是不是 四次 五次也行? 这个怎么考虑的?


理论上非线性方程通过泰勒级数展开后,多项式的项可以达到无穷个之多,但是大多数项的系数很小,所以近似的情况下只取几个主项就可以了,否则无法进行工程计算,具体取几次,取决于曲线的形态,如果曲线具有两个单调区间(即U型曲线),那么其展开多项式中,以二次和一次为主,其他更高次的系数都比较小,适合用二次多项式近似,如果曲线具有三个单调区间(即S型曲线),则三次系数也会比较大,适合三次多项式近似,至于更复杂的曲线,会用到更高次,但更高次一来计算复杂度,二来做修正算法运算量会几何倍增长,所以一般会把它进行分段,然后使每段符合U型或S型,实际上S型也可以分段成几个U型,因此曲线拟合方程大多使用二次多项式,少数会使用三次多项式。

LT2400的INL曲线,基本上是一个U型曲线,所以用二次多项式即可,个别器件差异导致U型不理想时,可以加入三次项,再多就没必要了,因为INL曲线本身也是温度相关的,手册给出的曲线,是25度时的样子,温度变化后曲线会不同,甚至变化很大(可以参考其他24位ADC的手册,基本都会给出不同温度下的INL曲线),所以这个非线性校准的目的只是把非线性误差尽可能降低(在校准温度下降低最多,能超过一个数量级),而不是完全消除,所以没必要搞得太复杂。

radioham 发表于 2023-12-15 20:22:36

瓦叔威武,感谢开源

lg676041036 发表于 2023-12-15 22:27:15

我以为瓦叔真是叔呢,原来才有小孩。看来比我年龄小。:lol

washu 发表于 2023-12-15 22:54:12

lg676041036 发表于 2023-12-15 22:27
我以为瓦叔真是叔呢,原来才有小孩。看来比我年龄小。

不是才...这个就不便多言了 :dizzy:

duke83 发表于 2023-12-17 02:35:38

问个使用操作的问题:要如何将此机当电压表使用,就是打开 Vin 的输入端,在上位机软件中没看到此选项。

washu 发表于 2023-12-17 20:52:33

duke83 发表于 2023-12-17 02:35
问个使用操作的问题:要如何将此机当电压表使用,就是打开 Vin 的输入端,在上位机软件中没看到此选项。

由于 M32 ROM 空间不够,后期固件已移除此部分 :$

zhengrob 发表于 2023-12-17 23:34:13

washu 发表于 2023-12-17 20:52
由于 M32 ROM 空间不够,后期固件已移除此部分

washu请教个问题,在M32的代码中有一个地方没看太明白,请你回忆一下当年写代码的时候的思路:lol :

在主loop中有一句 fTrn = Readback(),这里面fTrn定义的是一个浮点数,而Readback()是一个不带返回参数的子程序,奇怪的是这条语句编译器也没报错。问题来了,那这条语句真正要做的操作是什么呢,是不是只是想运行一下Readback()这个子程序呢?

washu 发表于 2023-12-18 00:02:14

zhengrob 发表于 2023-12-17 23:34
washu请教个问题,在M32的代码中有一个地方没看太明白,请你回忆一下当年写代码的时候的思路 :

...

这是一个非常令人难以启齿的编译器问题,简而言之就是这个编译器有很多 Bug,其中一些 Bug 在代码数量较少的时候无法发现,等我的代码积累到很多之后 :'( 编译器就 Bug 频出,而由于各种原因不得不继续维护这些代码使得一些写法非常别扭,你看到的这部分其实就是编译器 Bug 的一部分:原来 Readback() 部分代码直接就在主循环 Readback() 一行的位置,但如果它在这个位置编译器就会出错,我不得不从主循环中移除并以函数或子过程的方式调用。

最初移除的只有
fCalfSynth = (fSynthesis - fGndOffset) / ((fReference - fGndOffset) / fCalsacles)

所以最初 Readback() 是一个函数,因此遗留下了
fTrn = Readback()

这句代码,但后来发现必须把
If bINLCorrect = 1 Then
        fCalfSynth = fCalfSynth + Getinlerr(fCalfSynth)/ 1000000
ElseIf bINLCorrect = 2 Then
        fCalfSynth = fCalfSynth + GetMultinlerr(fCalfSynth)/ 1000000
Else
       
End If
fError = fSetting - fCalfSynth * 1000000
iError = fError
wError = Abs(iError)

都从主循环移走,编译器才不会报错,所以这就写成了一个子过程,但在你看到的位置就没有正确写成子过程调用而是原来(函数)的样子 :dizzy:

所以说,这是一个典型的屎山 :$


washu 发表于 2023-12-18 00:06:47

duke83 发表于 2023-12-17 02:35
问个使用操作的问题:要如何将此机当电压表使用,就是打开 Vin 的输入端,在上位机软件中没看到此选项。

补充:Voltgen V1 版无法继续维护的原因就是 M32 爆掉了,不得不将很多代码移除最后变成现在看到的样子

而实际上这个项目最初是用的 M16,我那时候对这样的项目的大小一无所知 :'(

zhengrob 发表于 2023-12-18 09:07:04

zhengrob 发表于 2023-12-17 23:34
washu请教个问题,在M32的代码中有一个地方没看太明白,请你回忆一下当年写代码的时候的思路 :

...

哈哈,了解了:lol !这代码算不上屎山,可读性还是不错的。
页: 1 2 3 [4] 5
查看完整版本: 数字闭环自校准的 6 位半电压源 Voltgen V1 版终结贴