0004. Współczynniki AFE wyznaczane z odczytów już skalibrowanych¶
Stan: przyjęta · Data: 2026-09-26
Dotyczy: CanSensorHub.Tools.MpccAfeCal
Kontekst¶
Firmware MPCC przelicza napięcie na pinie ADC na napięcie wejściowe kanału według modelu
gdzie c0, c1, tc to parametry kalibracyjne kanału (CAL_ADCn_C0/C1/TC),
Tref — parametr CAL_ADC_TREF, a T — temperatura płytki z czujnika STS31.
Protokół węzła udostępnia wyłącznie wynik tego przeliczenia: READ_ADC
zwraca V w mV, a telemetria i READ_SENSOR — tę samą wartość. Napięcie na
pinie (V_pin) istnieje w firmware, ale nie jest wystawione na magistralę.
Wyznaczenie c0 i c1 wprost wymaga pary (V_pin, V_ref) w każdym
punkcie. Dostępna jest para (V, V_ref), przy czym V zależy od V_pin
liniowo przez bieżące współczynniki.
Rozważane warianty¶
A. Wystawienie V_pin przez firmware (nowa komenda albo argument
READ_ADC). Rozwiązanie bezpośrednie, lecz wymaga zmiany protokołu i firmware
węzła, a narzędzie przestaje działać z węzłami bez tej zmiany.
B. Przywrócenie współczynników domyślnych (c0 = 0, c1 nominalne,
tc = 0) przed pomiarem, a następnie odtworzenie V_pin = V / c1.
Wymaga dwukrotnego zapisu parametrów kalibracyjnych i pozostawia węzeł
w stanie nieskalibrowanym, jeśli procedura zostanie przerwana.
C. Złożenie korekcji. Dopasowanie prostej V_ref = a · V + b do
odczytów wykonanych przy bieżących współczynnikach i wyliczenie nowych
współczynników z warunku k · (c1' · V_pin + c0') = a · V + b dla każdego
V_pin:
Decyzja¶
Wariant C.
- Dopasowanie odbywa się w dziedzinie odczytów węzła:
x— średnia seriiREAD_ADC,y— średnia serii wzorca. Dla dwóch punktów prosta jest wyznaczona dokładnie, dla większej liczby — metodą najmniejszych kwadratów. kjest liczony ze średniej temperatury płytki w punktach kalibracji. Kanał ztc ≠ 0bez dostępnego odczytu temperatury nie jest kalibrowany.- Współczynnik
tcnie jest zmieniany. Jego wyznaczenie wymaga pomiarów w kilku temperaturach, czyli innego stanowiska i innego narzędzia (docs/adr/0002). - Nowe współczynniki są zaokrąglane do
floatprzed zapisem i przed porównaniem w odczycie zwrotnym — węzeł przechowuje je jako f32. - Punkty, w których napięcie na pinie (odtworzone z bieżących współczynników) przekracza 99 % pełnej skali ADC, są wyłączane z dopasowania i z oceny sprawdzenia. Na kanałach 0–3 napięcie wejściowe 5 V odpowiada pełnej skali (VDDA ≈ 3,0 V), stąd domyślna górna granica zakresu 4,8 V.
- Wynik jest odrzucany, jeśli residuum dopasowania (przy więcej niż dwóch punktach) przekracza tolerancję sprawdzenia. Model węzła jest liniowy, więc zakrzywienie charakterystyki — np. upływ zabezpieczenia na pinie ADC, zaobserwowany na kanałach 0–3 MPCC powyżej ~1,4 V na pinie — nie daje się skorygować, a nachylenie dopasowane do krzywej byłoby fałszywe.
- Wynik jest odrzucany, jeśli korekcja wzmocnienia przekracza 5 % albo korekcja przesunięcia 100 mV (wartości konfigurowalne). Korekcje tego rzędu wskazują na błąd połączeń, nie na tolerancję dzielnika.
Konsekwencje¶
- Firmware i protokół pozostają bez zmian; narzędzie działa z każdą wersją
firmware MPCC udostępniającą
READ_ADCi parametryCAL_ADCn_*. - Kalibracja jest poprawna niezależnie od stanu wyjściowego współczynników,
w tym po wcześniejszej kalibracji. Kolejne przebiegi zbiegają do tego samego
wyniku, a dopasowanie na węźle już skalibrowanym daje
a ≈ 1,b ≈ 0. - Rozdzielczość
READ_ADCwynosi 1 mV. Rozdzielczość poniżej 1 mV uzyskuje się z uśredniania wielu odczytów, w których szum toru ADC działa jak dither. Uśrednianie wymaga odstępu rund odczytu nie krótszego niż okres pomiaru węzła (MEASURE_PERIOD); krótszy odstęp powtarza tę samą próbkę i zaniża rozrzut.