๐ ๊ณต๋ถํ๋ ์ง์ง์ํ์นด๋ ์ฒ์์ด์ง?
CAN (Controller Area Network) ์ด๋? with Arduino UNO R4 WIFI ๋ณธ๋ฌธ
CAN (Controller Area Network) ์ด๋? with Arduino UNO R4 WIFI
์ง์ง์ํ์นด 2023. 11. 30. 17:02<๋ณธ ๋ธ๋ก๊ทธ๋ LUFT-AQUILA ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํด์ ๊ณต๋ถํ๋ฉฐ ์์ฑํ์์ต๋๋ค :-)>
โญ CAN (Controller Area Network)
์ฐจ๋ ๋ด์์ ํธ์คํธ ์ปดํจํฐ ์์ด ๋ง์ดํฌ๋ก ์ปจํธ๋กค๋ฌ ์ฅ์น๋ค์ด ์๋ก ํต์ ํ๊ธฐ ์ํด ์ค๊ณ๋ ํ์ค ํต์ ๊ท๊ฒฉ
๋ฉ์์ง ๊ธฐ๋ฐ ํ๋กํ ์ฝ
๐ณ ํน์ง
1๏ธโฃ ์๋ฆฌ์ผ ํต์ ๊ธฐ๋ฐ, ๊ฐ์ ๋ฒ์ค๋ผ์ธ ํตํด ์ ์ก ๋ฐ ์์
2๏ธโฃ Multi-Master, ํต์ ๋ฒ์ค๋ฅผ ์ฌ๋ฌ ๋ ธ๋๋ค์ด ๊ณต์ ํ๋ค
3๏ธโฃ ๊ฐ๋จํ๊ณ ๋ ธ์ด์ฆ์ ๊ฐํ๋ค
twist pair ์ ์ฌ์ฉํ๋ฉฐ, CANH ์ CAHL ์ 2๊ฐ ์ ์ผ๋ก ํต์ ํ๋ค
4๏ธโฃ ID ๊ฐ ์ด์ฉํ ์ฐ์ ์์๋ฅผ ๋งค๊ธด๋ค
ECU ๋ ๊ณ ์ ํ ID ๋ฅผ ๊ฐ์ง๋ค
ID๊ฐ ๋ฎ์์๋ก ์ฐ์ ์์๊ฐ ๋๋ค
์ฃผ์๊ฐ ์๋ ID๋ก ๋ฉ์์ง๋ฅผ ๊ด๋ฆฌํ๋ค
๋๋จธ์ง๋ ๋ค์ bus cycle ์ ์ฌ์ ์กํ๋ค
5๏ธโฃ CSMA (Carrier Sense Multiple Access) & CS/CD
6๏ธโฃ ์ต๋ 8byte, ๋น๋๊ธฐ์ ์ง๋ ฌ, ์ฃผ์์ง์ X
7๏ธโฃ transceiver ์ ํตํด ์ฐจ๋์ ํธ๋ฅผ MCU ๊ฐ ์ดํด๊ฐ๋ ๋์งํธ ์ ํธ๋ก ๋ณ๊ฒฝํด์ค๋ค

8๏ธโฃ ์ ๋๋จ์ 120 ์ ํญ์ ์ฐ๊ฒฐํ๋ค

์ํผ๋์ค ๋งค์นญ์ํด ์ข ๋จ ์ ํญ์ ํ์์ด๋ค
9๏ธโฃ CAN ์ GND ๊ฐ ์๋ค

CANH์ CANL ์ ์์ฐจ๋ก ์ ํธ (์ฐจ๋ ์ ํธ) ๋ฅผ ๋ง๋ ๋ค
์ ์์ฐจ ์์ผ๋ฉด LOW
์ ์์ฐจ ์์ผ๋ฉด HIGH
๐ ๋ฐ์ดํฐ ํ๋

๐ณ CODE
์ฐธ๊ณ ๋ก ์ arduino ๋ arduino uno r4 wifi ์ด๋ค
can ํต์ ์ด ๋ด์ฅ๋์ด ์๋ค


// CAN_WRITE
//#include <R7FA2A1AB.h>
#include <Arduino_CAN.h>
/**************************************************************************************
* CONSTANTS
**************************************************************************************/
// ์บ ํต์ ์์ ์ก์ ๋๋ ๋ฉ์ธ์ง๋ ID๊ฐ ์์ผ๋ฉฐ, ์ต๋ 8๋ฐ์ดํธ์ ๋ฐ์ดํฐ
// ๋ฉ์ธ์ง๋ ๋ฒ์ค์ ์ฐ๊ฒฐ๋ ๋ชจ๋ ์ ์ด๊ธฐ์๊ฒ ์ ์ก
static uint32_t const CAN_ID = 0x23;
/**************************************************************************************
* SETUP/LOOP
**************************************************************************************/
void setup()
{
// TRNG
Serial.begin(115200);
while (!Serial)
{
}
// CAN ๋นํธ ์ ์ก๋ฅ ๊ณผ ์ด๊ธฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
// CAN ํธ๋์๋ฒ๊ฐ ์์ผ๋ฉด ๋ค๋ฅธ CAN ์ฅ์น์ ํต์ ํ ์ ์์! BR_125k (125000), BR_250k (250000), BR_500k(500000), BR_1000k (1000000) """
if (!CAN.begin(CanBitRate::BR_500k))
{
Serial.println("CAN.begin(...) failed.");
for (;;)
{
}
}
}
static uint32_t msg_cnt = 0;
void loop()
{
// ๋งค๋ฒ ์ฆ๊ฐํ๋ CAN ๋ฉ์์ง๋ฅผ ์์ฑ
/* Assemble a CAN message with the format of
* 0xCA 0xFE 0x00 0x00 [4 byte message counter]
*/
uint8_t const msg_data[] = {0xCA, 0xFE, 0, 0, 0, 0, 0, 0};
// ๋ณต์ฌ ๋ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ, ๋ณต์ฌํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์๋ ํฌ์ธํฐ, ๋ณต์ฌํ ๋ฐ์ดํฐ(๊ฐ)์ ๊ธธ์ด(๋ฐ์ดํธ ๋จ์)
memcpy((void *)(msg_data + 4), &msg_cnt, sizeof(msg_cnt));
// CAN ๋ฉ์์ง ๋ณด๋ผ ๊ฐ์ฒด(CanMsg) : CAN_ID, ํฌ๊ธฐ ๋ฐ ๋ฉ์์ง ๋ฐ์ดํฐ
CanMsg const msg(CanStandardId(CAN_ID), sizeof(msg_data), msg_data);
/* Transmit the CAN message, capture and display an
* error core in case of failure.
*/
// ๋ฉ์์ง๋ฅผ ๋ณด๋ด๊ธฐ
if (int const rc = CAN.write(msg); rc < 0)
{
Serial.print("CAN.write(...) failed with error code ");
Serial.println(rc);
for (;;)
{
}
}
/* Increase the message counter. */
msg_cnt++;
/* Only send one message per second. */
delay(1000);
}
/*
CANRead
Receive and read CAN Bus messages
See the full documentation here:
https://docs.arduino.cc/tutorials/uno-r4-wifi/can
*/
/**************************************************************************************
* INCLUDE
**************************************************************************************/
#include <Arduino_CAN.h>
/**************************************************************************************
* SETUP/LOOP
**************************************************************************************/
void setup()
{
Serial.begin(115200);
while (!Serial) { }
if (!CAN.begin(CanBitRate::BR_500k))
{
Serial.println("CAN.begin(...) failed.");
for (;;) {}
}
}
void loop()
{
// ๋ฐ์ดํฐ๊ฐ ์ฌ์ฉ ๊ฐ๋ฅํ์ง ํ์ธ
if (CAN.available())
{
// ๋ฉ์์ง๋ฅผ ์ฝ๊ธฐ
CanMsg const msg = CAN.read();
Serial.println(msg);
}
}


'๐ฉโ๐ป IoT (Embedded) > Arduino' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Floating(ํ๋กํ )๊ฐ ์ด๋? (0) | 2023.12.15 |
---|---|
ultrasonic sensor ๋ก ๋ชจ๋ํฐ๋ง ํ๊ธฐ with processing (1) | 2023.12.07 |
์ค์๊ฐ(Real Time) ์ด์์ฒด์ (OS) ์ RTOS์ FreeRTOS ์ฌ์ฉํด๋ณด๊ธฐ (0) | 2023.11.29 |
[UNO R4 WIFI example] Digital-to-Analog Converter (DAC) (0) | 2023.11.28 |
[UNO R4 WIFI example] Real-Time ClockRTCAlarm (0) | 2023.11.28 |