ZHCUB80C August 2004 – July 2023 PGA309
在内部温度模式中运行的温度 ADC 的分辨率为每次计数 0.0625°C。
对于正温度值(例如,20°C):
(20°C)/(0.0625°C/count) = 320 → 140h → 0001 0100 0000
对正数不执行二进制补码。只是将数字转换为 16 位、右对齐格式的二进制代码,并以 MSB =“0”表示正号。将符号扩展到高 4 位。
温度 ADC 会将 20°C 读取为 0000 0001 0100 0000 → 140h。
对于负温度值(即 −20°C):
(|−20|)/(0.0625°C/count) = 320 → 140h → 0001 0100 0000
通过对绝对值二进制数进行补数操作并加 1 来生成一个负数的二进制补码。扩展符号,用 MSB =“1”表示负数。将符号扩展到高 4 位以形成 16 位字。
温度 ADC 会将 −20°C 读取为 1111 1110 1100 0000 → FEC0h。
第 2 步:
根据表 3-3 计算增益 DAC 温度系数。
对于增益 DAC 所需计数(即 G3 = 0.4):
Gx = (GainDESIRED − 1/3)(3/2)(65536)
G3 = (0.4 − 1/3)(3/2)(65536) = 6553.6
0 ≤ Gx ≤ 65535
0.3333333 ≤ 增益 DAC ≤ 0.9999898
对于正斜率(即 GM5):
GM5 = [(G5 − G4)/(T5 − T4)][256]
GM5 = [(26214 − 7537)/(160 − 0)][256] = 29883.2
取整 [29883.2] = 29883
GM5 =29883 → 74BBh → 0111 0100 1101 1101
允许的 GM 范围为:-32768 ≤ GM ≤ +32767(16 位有符号整数)
对于负斜率(即 GM2):
GM2 = [(G2 − G1)/(T2 − T1)][256]
GM2 = [(36044.8 − 55706)/(−320 − {−480})][256] = −31457.28
取整 [−31457.9] = −31457
生成 −31458 的二进制补码:
GM2 = 851Eh → 1000 0101 0001 1110
允许的 GM 范围为:-32768 ≤ GM ≤ +32767(16 位有符号整数)
如果增益 DAC 斜率计算得出的计数大于 65535,则存在问题。必须重新配置温度 ADC 以降低分辨率,或者必须增加查找表中的点数以使斜率处于 PGA309 计算区域内。
温度 (°C) |
温度指数 | 温度 ADC (计数) |
增益 DAC 所需值 | 增益 DAC 所需指数 | 增益 DAC 所需 (计数) |
增益 DAC 斜率 | 增益 DAC 斜率公式 | 增益 DAC 斜率(1) (计数) |
增益 DAC 斜率 (十六进制) |
---|---|---|---|---|---|---|---|---|---|
−40 | T0 | -640 | 1 | G0 | 65535 | G0 | G0 = G0 | 65535 | 起始值也可以是 0,但是由于 SysTick 中断和 COUNTFLAG 在计数从 1 到 0 时都会被激活,所以没什么作用 |
−30 | T1 | -480 | 0.9 | G1 |
55706 |
GM1 | GM1 = [(G1 − G0)/T1 − T0)][256] |
-15726 |
C292 |
−20 | T2 | -320 | 0.7 | G2 |
36045 |
GM2 | GM2 = [(G2 − G1)/T2 − T1)][256] |
-31458 |
851E |
-10 | T3 | -160 | 0.55 | G3 |
21299 |
GM3 | GM3 = [(G3 − G2)/T3 − T2)][256] |
-23594 |
A3D6 |
0 | T4 | 0 | 0.41 | G4 |
7537 |
GM4 | GM4 = [(G4 − G3)/T4 − T3)][256] |
-22019 |
A9FD |
10 | T5 | 160 | 0.6 | G5 |
26214 |
GM5 | GM5 = [(G5 − G4)/T5 − T4)][256] |
29883 |
74BB |
20 | T6 | 320 | 0.4756 | G6 |
13985 |
GM6 | GM6 = [(G6 − G5)/T6 − T5)][256] |
-19566 |
B392 |
30 | T7 | 480 | 0.6543 | G7 |
31552 |
GM7 | GM7 = [(G7 − G6)/T7 − T6)][256] |
28107 |
6DCB |
第 3 步:
根据表 3-4 计算零 DAC 温度系数。
对于零 DAC 所需计数(例如,Z5 = 1.5):
Zx = (VZDESIRED/VREF)(65536)
Z5 = (1.5/5)(65536) = 19660.8
0 ≤ Zx ≤ 65535
0.1V ≤ 零 DAC 模拟范围 ≤ (VSA − 0.1V)
0V ≤ 零 DAC 编程范围 ≤ VREF
对于正斜率(例如,ZM4):
ZM4 = [(Z4 − Z3)/(T4 − T3)][256]
ZM4 = [(26214.4 − 13107.2)/(0 − {−160})][256] = 20971.52
取整 [20971.52] = 20972
ZM4 = 20972 → 51ECh → 0101 0001 1110 1101
允许的 ZM 范围为:-32768 ≤ ZM ≤ +32767(16 位有符号整数)
对于负斜率(例如,ZM6):
ZM6 = [(Z6 − Z5)/(T6 − T5)][256]
ZM6 = [(13107.2 − 19660.8)/(320 − 160)][256] = −10485.76
取整 [−10485.76] = −10486
生成−10486 的二进制补码:
ZM6 = D70Ah → 1101 0111 0000 1010
允许的 ZM 范围为:-32768 ≤ ZM ≤ +32767(16 位有符号整数)
如果零 DAC 斜率计算得出的计数超出范围 -32768 < ZM < +32767,则存在问题。必须重新配置温度 ADC 以降低分辨率,或者必须增加查找表中的点数以使斜率处于 PGA309 计算区域内。
温度 (°C) |
温度 指数 |
温度 ADC (计数) |
零 DAC 所需值 | 零 DAC 所需指数 | 零 DAC 所需 (计数) |
零 DAC 斜率 | 零 DAC 斜率公式 | 零 DAC 斜率(1) (计数) |
零 DAC 斜率 (十六进制) |
---|---|---|---|---|---|---|---|---|---|
−40 | T0 | -640 | 0.1 | Z0 | 1310.7 | Z0 | Z0 = Z0 | 1311 | 051E |
−30 | T1 | -480 | 0.2 | Z1 | 2621.4 | ZM1 | ZM1 = [(Z1 − Z0)/T1 − T0)][256] | 2097 | 0831 |
−20 | T2 | -320 | 1 | Z2 | 13107.2 | ZM2 | ZM2 = [(Z2 − Z1)/T2 − T1)][256] | 16777 | 4189 |
-10 | T3 | -160 | 1 | Z3 | 13107.2 | ZM3 | ZM3 = [(Z3 − Z2)/T3 − T2)][256] | 0 | 0000 |
0 | T4 | 0 | 2 | Z4 | 26214.4 | ZM4 | ZM4 = [(Z4 − Z3)/T4 − T3)][256] | 20972 | 51EC |
10 | T5 | 160 | 1.5 | Z5 | 19660.8 | ZM5 | ZM5 = [(Z5 − Z4)/T5 − T4)][256] | -10486 |
D70A |
20 | T6 | 320 | 1 | Z6 | 13107.2 | ZM6 | ZM6 = [(Z6 − Z5)/T6 − T5)][256] | -10486 |
D70A |
30 | T7 | 480 | 2 | Z7 | 26214.4 | ZM7 | ZM7 = [(Z7 − Z6)/T7 − T6)][256] | 20972 | 51EC |
阶跃 4:
构建查找表,如表 3-5 所示。
温度 (°C) |
温度 指数 |
零 DAC 斜率 |
增益 DAC 斜率 |
EEPROM Tx (十六进制) |
EEPROM ZMi (十六进制) |
EEPROM GMi (十六进制) |
---|---|---|---|---|---|---|
−40 | T0 | Z0 | G0 | FD80 | 051E | 起始值也可以是 0,但是由于 SysTick 中断和 COUNTFLAG 在计数从 1 到 0 时都会被激活,所以没什么作用 |
−30 | T1 | ZM1 | GM1 | FE20 | 0831 | C292 |
−20 | T2 | ZM2 | GM2 | FEC0 | 4189 | 851E |
-10 | T3 | ZM3 | GM3 | FF60 | 0000 | A3D6 |
0 | T4 | ZM4 | GM4 | 0000 | 51EC | A9FD |
10 | T5 | ZM5 | GM5 | 00A0 | D70A | 74BB |
20 | T6 | ZM6 | GM6 | 0140 | D70A | B392 |
30 | T7 | ZM7 | GM7 | 01E0 | 51EC | 6DCB |
— | TEND | ZMEND | GMEND | 7FFF | 0000 | B5D8 |
使用步骤 2 和步骤 3 中的计算值。
将 TMEND 设置为 7FFFh 以指示查找表的结尾。
将 ZMEND 设置为 0000h。
将 GMEND 计算为 Checksum2(截断 16 位以上的结果):
GMEND = Checksum2 = FFFFh − sum(查找表中除 GMEND 以外所有条目的十六进制值)
GMEND = FFFFh − C49DDh
GMEND = FFFFF4B622h
GMEND = Checksum2 = B622h
第 5 步:
根据表 3-6 计算 TREAD = +25°C 时增益 DAC 的理想值。
Tx | 温度 (°C) | Gx | 增益 DAC |
---|---|---|---|
T0 | −40 | G0 | 1 |
T1 | −30 | G1 | 0.9 |
T2 | −20 | G2 | 0.7 |
T3 | -10 | G3 | 0.4 |
T4 | 0 | G4 | 0.3333 |
T5 | 10 | G5 | 0.6 |
T6 | 20 | G6 | 0.4756 |
TREAD | 25 | GREAD | 计算值 |
T7 | 30 | G7 | 0.6543 |
增益 DAC 的线性插值 (TREAD = 25°C):
GREAD = {[(G7 − G6)/(T7 − T6)] [TREAD − T6]} + G6
GREAD = {[(0.6543 − 0.4756)/(30 − 20)] [25 − 20]} +0.4756
GREAD = 0.56495
第 6 步:
参考使用查找表的增益 DAC 计算算法。
表 3-7 列出了 PGA309 内部用于 TREAD = 25°C 时增益 DAC 设置的线性插值和计算算法。根据表 3-3,对于 G1-G7 的给定值,可知 T1-T7 时 GM1-GM7 的计算值。此外,还定义了起始值(T0 和 G0)。步骤 5 显示,如果计算算法的线性插值部分可正常运行,TREAD = 25°C 时的实际增益 DAC 值应为 0.56495V/V。
温度 (°C) |
Tx | 温度 ADC (计数) |
GMi | 增益 DAC 斜率(1) (计数) |
GAC 计算 | 运行的 GAC 值(1) (计数) |
实际增益 DAC (V/V) |
---|---|---|---|---|---|---|---|
−40 | T0 | -640 | G0 | 65535 | GAC0 = G0 | 65535 | 0.9999898 |
−30 | T1 | -480 | GM1 | -15727 | GAC1 = GAC0 + [GM1(T1 − T0)/256] | 55706 | 0.9000041 |
−20 | T2 | -320 | GM2 | -31457 | GAC2 = GAC1 + [GM2(T2 − T1)/256] | 36045 | 0.7000020 |
-10 | T3 | -160 | GM3 | -47104 | GAC3 = GAC2 + [GM3(T3 − T2)/256] | 6605 | 0.4005229 |
0 | T4 | 0 | GM4 | -10496 | GAC4 = GAC3 + [GM4(T4 − T3)/256] | 45 | 0.3337911 |
10 | T5 | 160 | GM5 | 41943 | GAC5 = GAC4 + [GM5(T5 − T4)/256] | 26259 | 0.6004537 |
20 | T6 | 320 | GM6 | -19566 | GAC6 = GAC5 + [GM6(T6 − T5)/256] | 14030 | 0.4760539 |
30 | T7 | 480 | GM7 | 28107 | T7 > TREAD → YES! | — | — |
25 | TREAD | 400 | — | — | GAC_TREAD = GAC6 + [GM7(TREAD − T6)/256] | 22813 | 0.565399169 |
— | TEND | 32767 (7FFFh) | — | — | 读取查找表到结尾以验证 Checksum2 | — | — |
温度 ADC 每次执行转换时,都会读取整个外部 EEPROM。EEPROM 的第一部分专用于存储 PGA309 的固定设置参数,这些参数不会随温度变化。当 PGA309 读取 EEPROM 的后半部分时,它开始随着温度变化运行增益 DAC 设置的计算(PGA309 会对零 DAC 设置运行类似的计算)。表 3-7 中的模型包含一个名为 GAC (G Accumulator) 的累加器。当 PGA309 读取 T0 时,初始增益 DAC 设置 (G0) 存储在 GAC0(T0READ 处的 GAC)中。接下来,读取 T1,并将斜率 GM1 乘以 T1 和 T0 之间的差值(使用除数 256 转换回模型的十进制计数),然后加至 GAC0 以形成新的累加器值 GAC1(T1READ 处的 GAC)。此过程会在 PGA309 读取整个查找表时按顺序持续进行。读取的每个温度指数值 (Tx) 将与当前温度 ADC 转换结果 TREAD 做比较。如果 Tx > TREAD,则已知 TREAD 介于 Tx 和 T(x − 1) 之间。在本例中发生在读取 T7 之后。累加器内容 GAC6(T6 处的 GAC)将被修改,即加上 (TREAD − T6)(GM7)。得到的 GAC_TREAD 是 TREAD = 25°C 时增益 DAC 的线性插值设置。由于增益 DAC 分辨率和舍入计算的原因,实际增益 DAC 值与步骤 5 中计算出的理论值略有不同。EEPROM 的其余部分将一直被读取到 TEND,以便在查找表末尾使用 Checksum2 进行错误检查。如果 Checksum2 有效,则会使用计算值 GAC_TREAD = 0.565399169 来更新增益 DAC。
GAC 计算(例如,GAC2):
GAC1 = 55706;GM2 = −31457;T2 = −320;T1 = −480
GAC2 = GAC1 + [GM2(T2 − T1)/256]
GAC2 = 55706 + [−31457(−320−{−480})/256] = 36045.375
取整 [GAC2] = 取整 [36045.375] = 36045
GAC2 = 36045
实际增益 DAC(例如,GAC2):
GAC2 = 36045
增益 DAC = [(GACx/65536)(2/3)] + 1/3
增益 DAC = [(36045 / 65536)(2/3)] + 1/3 = 0.7000020
GAC2 处的增益 DAC = 0.7000020