KS0411 Keyestudio CAN-BUS Shield
Terminal Direnci
CAN BUS'ın normal çalışabilmesi için, CAN BUS'ın (CAN-H ve CAN-L) iki ucu terminal direncine bağlanmalıdır. Terminal direncinin direnci, iletişim kablosuyla aynı olmalıdır. Tipik değeri 120 ohm'dur. Ek olarak, parazit önleme ve veri iletişiminin güvenilirliğini güçlendirmek için veri yolu direnciyle eşleşebilir.
Not: Terminal direncini 2.54 mm aralıklı pin başlıklarına bağlayabiliriz, alternatif olarak SMD konumunda lehimleyebiliriz (veya 0603 SMD direnci).
120 ohm, kısa mesafeli direnç eşleşmesinin sonucudur, uzun mesafeye eklenirse sinyaller etkilenir , çünkü CAN'ın sürücü kapasitesi sınırlıdır. İletişim kablosunun uzunluğu 5km, Döngü hattının direnci(CANH + CANL) 250 ohm'a yakın, 120 ohm eklenirse, terminal alım noktasındaki alıcı-vericinin voltajı sadece 1V civarındadır. Gerilim genliğinin bu tür anti-paraziti son derece zayıftır, bu nedenle iletişim kararsız olacaktır.
Bu nedenle, uzun mesafeli iletişimde, sinyal genliğinin 1,2V'nin üzerinde olmasını sağlayabilen 300 ohm-500ohm terminal direnci eklemenizi öneririz.
Test Metodu
A. Lehim terminal direnci
Ardından, Shield'in normal çalışıp çalışmadığını 2 genişletme kartı ve 2 UNO R3 kartı aracılığıyla test etmek için iletişim kuruyoruz. Test etmeden önce, öncelikle aşağıda gösterildiği gibi 2 genişleme kartına bir terminal direnci bağlarız, terminal direnci 120 ohm'dur (0603 SMD direnci)
B. Test kodunu yükleyin 2 UNO R3 kartına ayrı ayrı iki test kodu yükleyin, biri sinyal göndermek için, diğeri sinyal almak içindir.
Sinyal gönderme kodu :
#include
#include
#include
#include
#include
void setup() {
Serial.begin(9600);
Serial.println("CAN Write - Testing transmission of CAN Bus messages");
delay(1000);
if(Canbus.init(CANSPEED_500))
//Initialise MCP2515 CAN controller at the specified speed
Serial.println("CAN Init ok");
else
Serial.println("Can't init CAN");
delay(1000);
}
void loop()
{
tCAN message;
message.id = 0x631; //formatted in HEX
message.header.rtr = 0;
message.header.length = 8; //formatted in DEC
message.data[0] = 0x40;
message.data[1] = 0x05;
message.data[2] = 0x30;
message.data[3] = 0xFF; //formatted in HEX
message.data[4] = 0x00;
message.data[5] = 0x40;
message.data[6] = 0x00;
message.data[7] = 0x00;
mcp2515_bit_modify(CANCTRL, (1<
Sinyal alma kodu :
#include
#include
#include
#include
#include
#include
#include
const int chipSelect = 9;
void setup() {
Serial.begin(9600); // For debug use
pinMode(chipSelect, OUTPUT);
Serial.println("CAN Read - Testing receival of CAN Bus message");
delay(1000);
if(Canbus.init(CANSPEED_500)) //Initialise MCP2515 CAN controller at the specified speed
Serial.println("CAN Init ok");
else
Serial.println("Can't init CAN");
delay(1000);
if (!SD.begin(chipSelect)) {
Serial.println("Card failed, or not present");
// don't do anything more:
return;
}
Serial.println("card initialized.");
}
void loop(){
tCAN message;
if (mcp2515_check_message())
{
if (mcp2515_get_message(&message))
{
//if(message.id == 0x620 and message.data[2] == 0xFF)
//uncomment when you want to filter
//{
Serial.print("ID: ");
Serial.print(message.id,HEX);
Serial.print(", ");
Serial.print("Data: ");
Serial.print(message.header.length,DEC);
for(int i=0;i
Not: 1. Test kodu 1.85 sürüm Arduino IDE ve üstü ile uyumludur, diğer sürüm% 100 uyumlu değildir. 2. Programlamayı yazmadan önce, Canbus klasörünü derleyici kurulum dizininin \ Arduino \ kütüphanelerine yerleştirmeniz gerekir, aksi takdirde derleme başarısız olur. Örneğin, C: \ Program Files \ Arduino \ libraries
C. Kablolama Yöntemi
Test kodunu 2 UNO R3 kartına yükledikten sonra, aşağıdaki yönteme göre test etmek için kablolayın.
Not: sinyalleri almak için kullanılan genişletme kartına bir SD kart bağlamanız gerekir
Test sonucu
A kartı için kablo ve besleme gücü, B kartını USB kabloları ile bilgisayara bağlayın, seri monitörü açın, baud hızını 9600'e ayarlayın, A kartı tarafından gönderilen bilgileri görebilirsiniz.