mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-25 20:37:33 +00:00
Fix supply voltage: apply PCB voltage dividers and read correct ADC source
Protocol Appendix A documents only the ADC reference voltage constant; the PCB voltage divider must also be applied (from Thetis source): - Boards 1-3 (Hermes/Angelia): ×(4.7+0.82)/0.82 ≈ 6.73, Vref=3.3V - Board 5 (Orion MkII): ×(22+1)/1.1 ≈ 20.9, Vref=5.0V For board type 5, supply voltage is measured via UserADC0 (bytes 57-58), not the supply_volts field (bytes 49-50), matching Thetis behaviour. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
+10
-6
@@ -440,13 +440,17 @@ end;
|
||||
|
||||
function ADCToSupplyVolts(RawADC: Word; BoardType: Integer): Double;
|
||||
begin
|
||||
// Board 0 (Atlas) has no supply voltage measurement (protocol: "not Atlas bus systems")
|
||||
// Boards 1,2,3 (Hermes/Angelia): V = ADC/4095 * 3.3 (Appendix A)
|
||||
// Boards 4,5 (Orion): V = ADC/4095 * 5.0 (Appendix A)
|
||||
// Protocol Appendix A gives the ADC reference voltage only.
|
||||
// The PCB voltage divider (from Thetis source) must also be applied.
|
||||
// Board 0 (Atlas): no supply voltage measurement.
|
||||
// Boards 1,2,3 (Hermes/Angelia): Vref=3.3V, PCB divider R1=4.7kΩ/R2=0.82kΩ.
|
||||
// Board 5 (Orion MkII): Vref=5.0V, PCB divider R1=22kΩ/R2=1.1kΩ.
|
||||
// NOTE: for board 5 caller must pass UserADC0, not supply_volts bytes.
|
||||
// Board 4 (Orion) and others: not available (return -1).
|
||||
case BoardType of
|
||||
1, 2, 3: Result := (RawADC / 4095.0) * 3.3;
|
||||
4, 5: Result := (RawADC / 4095.0) * 5.0;
|
||||
else Result := -1.0; // not documented or not applicable
|
||||
1, 2, 3: Result := (RawADC / 4095.0) * 3.3 * ((4.7 + 0.82) / 0.82);
|
||||
5: Result := (RawADC / 4095.0) * 5.0 * ((22.0 + 1.0) / 1.1);
|
||||
else Result := -1.0;
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user