Interfejsy CAN i OBD

Dziś ponownie będziemy zajmować się przygotowaniem niezbędnego sprzętu. Tym razem jednak będzie to już część stanowiska testowego, a pierwszy fragment urządzenia. Zapewnienie komunikacji przez magistralę CAN oraz złącze diagnostyczne OBD jest jedną z najistotniejszych kwestii – dlatego tak wcześnie podejmujemy ten temat.

Magistrala CAN

Wybrany mikrokontroler STM32F407 posiada wbudowany kontroler magistrali CAN. Brakuje więc nam jedynie transceivera, który zamieni cyfrowe sygnały Tx i Rx na transmisję różnicową, zgodną z wymaganiami warstwy fizycznej CAN. Mój wybór padł na układy TJA1042 firmy NXP, głównie ze względu na niewielką obudowę SOIC-8 oraz tryb zmniejszonego poboru mocy. Potrzebujemy dwóch takich interfejsów: dla CANu silnika oraz komfortu. Schemat przykładowego połączenia wygląda następująco:

Linia CAN_STB zapewnia wyłączenie transceivera i przejście w tryb obniżonego poboru mocy. Celowo nie został dodany rezystor terminujący magistralę – ma to na celu możliwość zasymulowania przerwania magistrali i pracy w trybie jednoprzewodowym.

Diagnostyka OBD

Interfejs diagnostyczny również wymaga specjalizowanego układu, który przetłumaczy logikę cyfrową na sygnał zgodny ze standardem ISO9141. Często w ramach oszczędności w popularnych interfejsach OBD stosuje się układ złożony z kilku tranzystorów lub komparatora. Niestety jego parametry znacząco odbiegają od wymagań – stąd częste problemy z nawiązaniem stabilnego połączenia diagnostycznego w niektórych samochodach. Dlatego też zdecydowałem się wykorzystać dedykowany układ L9637. Wymaga on jedynie dwóch zewnętrznych elementów dyskretnych i spełnia wymagania ISO9141. Standardowa aplikacja wygląda następująco:

Należy pamiętać, iż stan wysoki na linii diagnostycznej K jest recesywny – wymusza go rezystor R3.

Uwagi praktyczne

Oba interfejsy wyposażone zostały w standardowe kondensatory odsprzęgające, po 100nF każdy. Poprawiają one stabilność napięcia zasilającego i filtrują zakłócenia powstające w wyniku pracy układów cyfrowych. Warto nadmienić, iż oba układy scalone są przystosowane do pracy w warunkach samochodowych – mają szeroki zakres dopuszczalnej temperatury pracy oraz dużą odporność na zakłócenia elektromagnetyczne.
Istotną kwestią, którą należy brać pod uwagę, jest różnica napięć zasilających interfejsy oraz procesor. Układy TJA1042 i L9637 wymagają do pracy napięcia 5V, STM32407 – 3.3V. Rozwiązaniem byłby więc konwerter napięć. Na szczęście układy STM32 pozwalają na podłączenie części wejść bezpośrednio do logiki 5V. Wyjścia cyfrowe nie stanowią problemu, gdyż stan wysoki standardu 3.3V mieści się w zakresie rozpoznawalnym również jako stan wysoki w standardzie TTL 5V. Mimo to, dobrą praktyką jest zastosowanie szeregowych rezystorów 100ohm zabezpieczających przed przepływem zbyt wysokiego prąd np. w przypadku uszkodzenia któregoś z interfejsów.

Tyle teorii – czas na praktykę. Zaprojektowałem prostą płytkę, która pozwala wygodnie podłączyć interfejsy z jednej strony do procesora, a z drugiej do naszego “samochodu na biurku“.

Jest to typowa płytka prototypowa czy mówiąc żargonem elektroników “breakout board” 🙂

Posted in Sto dni w kolorze.