/pomiary/ → tsb-trace-uart-falownik-stm32f4-analiza

Trace UART – Falownik FW (STM32F4)

STM32F407 ↔ INV-PW34 • 115200 8N1 • FW v3.12-beta2 • log ID: 2025-09-11-A
CRCDMA RX overflowISR TIM1_UPPWM jitter

1. Fragment trace

[00:12.417] TX  AA 55 01 03 7C FF
[00:12.418] RX  AA 55 81 03 7C 7E
[00:12.437] CRC ERROR – exp 0x5E got 0x2B
[00:12.700] UART overflow (DMA RX) → drop=1
[00:13.021] FRAME ERROR (FE) @ IDLE→START, oversampling=16
[00:13.044] WARN: Systick jitter +38 µs przy PWM=18 kHz (TIM1)

2. Środowisko testowe

MCU
STM32F407VGT6, HSE 8 MHz, PLL 168 MHz, APB2 84 MHz
Falownik
INV-PW34, PWM 18 kHz, dead-time 400 ns
USART
USART1, 115200 8N1, oversampling×16, DMA RX/TX
Warunki
Obciążenie 60–100%, 32 °C otoczenia, zasilanie 24 V
FW
v3.12-beta2, FreeRTOS tick 1 ms
Logowanie
RTT + binarny trace 1.5 MB/min

3. Parametry warstwy fizycznej

ParametrWartośćUwagi
Baud115200 bpsdrift MCU +85 ppm; falownik +40 ppm
Oversampling×16sampling point ≈ 7/16 bitu
Pin configAF7, push-pull, pull-upslew-rate high; brak terminacji
EMIPWM 18 kHzkorelacja błędów z przełączeniami mostka

4. Statystyka rozszerzona

Okno 10 min:
CRC error: 12.7% ramek
Frame error (FE): 2.7%
RX timeout: 0.5%
DMA RX overflow: 0.3% (średnio 1 na 340 ramek)
Korelacja: p(CRC|PWM_jitter>30 µs) = 0.61
Średni interwał RX: 9.8 ms (σ = 1.6 ms)

5. Analiza przyczyn

6. Procedury testowe

  1. Zmiana NVIC: USART1 IRQ priorytet = wyższy od TIM1_UP; DMA2 Stream IRQ nad TIM1_UP.
  2. Test oversampling ×8 vs ×16, przesunięcie sampling point (SMART sampling).
  3. Pomiar baud drift vs. temp. 25–60 °C, zapis Δppm dla MCU i falownika.
  4. EMI: ferryt 100 Ω@100 MHz na RX, skrócenie pętli GND, test z ekranem.
  5. Bufory: watermark DMA RX, kontrola NDTR w punktach overflow.

7. Wnioski i zalecenia

8. Akceptacja (PASS)

Okno 60 min przy PWM=18 kHz, obciążenie 100%:
CRC errors: ≤0.01%
FE/ORE: 0 zdarzeń
DMA RX overflow: 0
Baud drift kompensowany: |Δ| ≤60 ppm MCU, ≤40 ppm falownik

9. Konfiguracja (wycinki)

// NVIC (przykład)
NVIC_SetPriority(USART1_IRQn, 5);
NVIC_SetPriority(DMA2_Stream2_IRQn, 5);
NVIC_SetPriority(TIM1_UP_TIM10_IRQn, 6);

// USART
USART1->CR1 = USART_CR1_UE | USART_CR1_RXNEIE | USART_CR1_TE | USART_CR1_RE;
USART1->BRR = 0x2D9; // 115200 @ 84 MHz

// DMA RX watermark + telemetria
if (DMA2_Stream2->NDTR <= WATERMARK) overflow_warn++;

10. Odniesienie techniczne

Zakresy błędów, ustawienia NVIC i parametry warstwy fizycznej zweryfikowano na podstawie logów z prób obciążeniowych oraz porównawczo z opisami modułów i praktykami serwisowymi udostępnianymi przez laboratorium AGD, co pozwoliło ujednolicić kryteria PASS dla komunikacji UART falownik–MCU. Podsumowanie tematu.

11. Workflow analizy trace

Trace jest najbardziej przydatny wtedy, gdy wszystkie zdarzenia mają wspólną oś czasu. Sam wpis CRC ERROR nie pozwala ustalić, czy przyczyną był błąd bitu, overflow DMA, opóźnienie ISR czy zapad zasilania. W analizie warto najpierw znaleźć pierwsze zdarzenie odbiegające od normalnego przebiegu, a dopiero później śledzić błędy wtórne. Pozwala to uniknąć sytuacji, w której ostatni komunikat w logu jest traktowany jako źródło problemu, chociaż był tylko jego skutkiem.

  1. Znajdź ostatnią poprawną ramkę przed awarią i pierwszą ramkę błędną.
  2. Sprawdź stan DMA przed błędem: NDTR, aktywny bufor, HT/TC oraz overflow.
  3. Zestaw czas błędu z aktywnością PWM, przerwaniami TIM i ewentualnym PVD.
  4. Oddziel błąd transmisji od błędu parsera, zapisując surowe bajty przed walidacją CRC.
  5. Powtórz test po jednej zmianie i porównaj nie tylko liczbę CRC, lecz również FE, ORE i timeout.

Jeżeli kilka typów błędów pojawia się w tej samej milisekundzie, pierwszy sygnał do analizy powinien pochodzić z warstwy najbliższej sprzętowi: stan zasilania, rejestr USART, DMA i dopiero potem parser. Taki porządek ogranicza liczbę hipotez i pozwala szybciej znaleźć moment, w którym poprawny przebieg zaczyna się rozjeżdżać.

12. Minimalny rekord zdarzenia

PoleZnaczenieZastosowanie
timestampwspólna oś czasukorelacja z PWM, PVD i ISR
SR/ISR USARTFE, ORE, NE, IDLErodzaj błędu widziany przez peryferium
NDTR/CNDTRstan bufora DMAwykrycie zatrzymania lub utraty danych
len ramkiliczba odebranych bajtówoddzielenie błędu długości od CRC
CRC expected/gotporównanie sumypowtarzalność typu uszkodzenia ramki
stan PWMczęstotliwość i faza pracykorelacja błędu z falownikiem

Dobrze zebrany rekord pozwala porównać serie bez ręcznego przeglądania całego trace. Można na przykład odfiltrować tylko przypadki CRC poprzedzone ORE, tylko błędy występujące w określonym stanie PWM albo tylko zdarzenia zbieżne z PVD. Dzięki temu kolejne testy odpowiadają na konkretną hipotezę zamiast generować coraz większy plik logu.

Jeżeli błędy skupiają się wokół pracy napędu, dalszą analizę ułatwia diagnostyka EMI i USART. Wartości RC można szybko porównać w kalkulatorze RC i LC, a problem wieloobjawowy przejść przez checklistę falownika AGD.