KAmod CAN TJA1051 (PL)
From Kamamilabs.com - Wiki

Opis
KAmod CAN TJA1051 - Moduł transceivera CAN z interfejsem logicznym do dowolnego kontrolera CAN
KAmod CAN TJA1051 zawiera transceiver CAN firmy NXP – TJA1051T/3, który umożliwia konwersję sygnałów pomiędzy magistralą CAN a dowolnym kontrolerem CAN. Moduł wyposażono w złącza sygnałowe oraz przełącznik pozwalający dołączyć rezystor terminujący 120 Ω pomiędzy liniami CAN_H i CAN_L, co ułatwia uruchamianie i testy w trybie internal loopback lub w pełnej magistrali CAN.

Podstawowe parametry
- zasilanie: 5 V
- Transceiver: NXP TJA1051T/3
- Obsługa magistrali CAN do 1 Mb/s
- Złącze wyjściowe: CAN_H, CAN_L
- Interfejs do mikrokontrolera: RXD, TXD
- Przełącznik włączający rezystor terminujący 120 Ω pomiędzy CAN_H i CAN_L
Wyposażenie standardowe
| Komponent | Opis |
|---|---|
| KAmod CAN TJA1051 |
|
Schemat elektryczny

Rozmieszczenie sygnałów na płytce
| Oznaczenie | Funkcja |
|---|---|
| VCC | Zasilanie 5 V, biegun dodatni |
| GND | Masa zasilania – biegun ujemny |
| CAN_TX | Wejście danych z kontrolera CAN |
| CAN_RX | Wyjście danych do kontrolera CAN |
| CAN_H | Linia CAN High |
| CAN_L | Linia CAN Low |
Rozmieszczenie poszczególnych sygnałów zostało opisane na dolnej i górnej stronie płytki modułu oraz na rysunku:

Interfejsy komunikacyjne
Transceiver TJA1051T wykorzystuje prosty interfejs cyfrowy TXD/RXD do komunikacji z kontrolerem CAN. Linia TXD służy do przekazywania bitów wysyłanych przez kontroler, natomiast linia RXD odzwierciedla stan magistrali CAN i jest przekazywana do kontrolera CAN. Nie jest to UART ani SPI – są to dedykowane sygnały logiczne CAN.
Wymiary
Wymiary płytki KAmod CAN TJA1051 to 32x19 mm. Na płytce znajdują się 2 otwory montażowe o średnicy 3,2 mm.

Program testowy
Program testowy został napisany w środowisku Arduino dla płytki Arduino Uno R4 WIFI. Moduł czujnika KAmod CAN TJA1051 został podłączony poprzez interfejs I2C.
#include <Arduino_CAN.h>
int counter = 0;
void setup() {
Serial.begin(115200);
while (!Serial);
// Inicjalizacja CAN z prędkością 500 kb/s
if (!CAN.begin(500000)) {
Serial.println("Inicjalizacja CAN nie powiodła się!");
while (1);
}
// Włączenie wewnętrznej pętli zwrotnej (loopback)
CAN.enableInternalLoopback();
Serial.println("CAN gotowy");
}
void loop() {
// Dane do wysłania: "Hello!"
uint8_t data[6] = {'H','e','l','l','o','!'};
// Tworzymy wiadomość CAN: id=0x123, długość=6 bajtów, wskaźnik na dane
CanMsg msg(0x123, 6, data);
// Wysyłamy wiadomość
CAN.write(msg);
Serial.print("Wiadomość wysłana ");
Serial.println(counter++);
delay(100);
// Odbieranie wiadomości z CAN (loopback)
while (CAN.available()) {
CanMsg rx = CAN.read();
Serial.print("Odebrano ID: 0x");
Serial.print(rx.id, HEX);
Serial.print(" Dane: ");
// Wyświetlamy wszystkie bajty danych
for (int i = 0; i < 6; i++) {
Serial.print((char)rx.data[i]);
}
Serial.println();
}
delay(2000); // przerwa między wysyłaniem kolejnych wiadomości
}