CAN 인터페이스 및 주요 하드웨어
1. CAN 인터페이스 개요
CAN(Controller Area Network)은 자동차, 산업 자동화, 의료 기기 등 다양한 분야에서 널리 사용되는 통신 프로토콜입니다. 여러 개의 마이크로컨트롤러(MCU)나 임베디드 시스템이 하나의 네트워크를 통해 효율적으로 데이터를 교환할 수 있도록 설계되었습니다.
CAN 통신을 활용하려면 적절한 하드웨어 인터페이스가 필요합니다. 일반적으로 MCU에 내장된 CAN 모듈을 사용하거나, 외부 CAN 컨트롤러를 이용하여 CAN 네트워크와 연결할 수 있습니다. 또한, PC와 CAN 네트워크를 연결하기 위해 USB-to-CAN 어댑터를 사용할 수도 있습니다.
이 글에서는 CAN 인터페이스를 구성하는 주요 하드웨어에 대해 자세히 설명하겠습니다.
2. MCU 내장 CAN 모듈
많은 최신 MCU(Microcontroller Unit)는 CAN 통신 기능을 내장하고 있습니다. 대표적으로 STM32, ESP32와 같은 MCU가 CAN 컨트롤러를 포함하고 있으며, 별도의 외부 컨트롤러 없이 직접 CAN 버스를 제어할 수 있습니다.
2.1 STM32의 CAN 모듈
STM32 시리즈 중 일부는 내장 CAN 컨트롤러를 지원합니다. 예를 들어, STM32F103, STM32F407 등은 CAN 인터페이스를 제공합니다.
STM32에서 CAN 설정 방법
- 하드웨어 연결
- CAN_H와 CAN_L을 CAN 트랜시버(MCP2551, TJA1050 등)에 연결
- 트랜시버를 통해 물리적인 CAN 버스에 연결
- 펌웨어 설정 (예제 코드)
#include "stm32f1xx_hal.h"
CAN_HandleTypeDef hcan;
void CAN_Init(void) {
hcan.Instance = CAN1;
hcan.Init.Prescaler = 16;
hcan.Init.Mode = CAN_MODE_NORMAL;
hcan.Init.SyncJumpWidth = CAN_SJW_1TQ;
hcan.Init.TimeSeg1 = CAN_BS1_4TQ;
hcan.Init.TimeSeg2 = CAN_BS2_3TQ;
hcan.Init.AutoBusOff = ENABLE;
HAL_CAN_Init(&hcan);
}
- 데이터 송신 및 수신
- CAN 메시지를 송신하기 위해
HAL_CAN_AddTxMessage()
사용 - 수신된 메시지를 읽기 위해
HAL_CAN_GetRxMessage()
사용
- CAN 메시지를 송신하기 위해
2.2 ESP32의 CAN 모듈
ESP32는 기본적으로 CAN 컨트롤러를 내장하고 있으며, 추가적인 트랜시버 칩만 연결하면 CAN 네트워크를 사용할 수 있습니다.
ESP32에서 CAN 설정 방법
- 하드웨어 연결
- ESP32의 TX, RX 핀을 CAN 트랜시버(TJA1050 등)에 연결
- CAN_H와 CAN_L을 CAN 네트워크에 연결
- ESP-IDF를 사용한 코드 예제
#include "driver/twai.h"
void CAN_Init() {
twai_general_config_t g_config = TWAI_GENERAL_CONFIG_DEFAULT(GPIO_NUM_21, GPIO_NUM_22, TWAI_MODE_NORMAL);
twai_timing_config_t t_config = TWAI_TIMING_CONFIG_500KBITS();
twai_filter_config_t f_config = TWAI_FILTER_CONFIG_ACCEPT_ALL();
twai_driver_install(&g_config, &t_config, &f_config);
twai_start();
}
- 데이터 송신 및 수신
- CAN 메시지를 송신하기 위해
twai_transmit()
사용 - 수신된 메시지를 읽기 위해
twai_receive()
사용
- CAN 메시지를 송신하기 위해
3. 외부 CAN 컨트롤러 (MCP2515 + SPI)
일부 MCU는 CAN 컨트롤러를 내장하지 않고 있으며, 이러한 경우 외부 CAN 컨트롤러인 MCP2515을 SPI 인터페이스를 통해 연결하여 CAN 통신을 수행할 수 있습니다.
3.1 MCP2515 개요
MCP2515는 SPI 기반의 외부 CAN 컨트롤러로, 다음과 같은 특징을 가집니다.
- 최대 1Mbps의 CAN 속도 지원
- SPI(Serial Peripheral Interface) 통신을 통해 MCU와 연결
- CAN2.0A/B 프로토콜 지원
- 메시지 필터 및 마스크 기능 포함
3.2 하드웨어 연결
MCP2515을 사용하려면 CAN 트랜시버(TJA1050 또는 MCP2551)와 함께 사용해야 합니다. 기본적인 연결은 다음과 같습니다.
MCP2515 핀 | 연결 대상 |
---|---|
VCC | 5V |
GND | GND |
SCK | MCU의 SCK (SPI) |
SI | MCU의 MOSI (SPI) |
SO | MCU의 MISO (SPI) |
CS | MCU의 CS (SPI) |
INT | MCU의 인터럽트 핀 |
3.3 코드 예제 (Arduino + MCP2515)
#include <SPI.h>
#include <mcp_can.h>
MCP_CAN CAN(10); // CS 핀
void setup() {
Serial.begin(115200);
while (CAN.begin(MCP_ANY, CAN_500KBPS, MCP_16MHZ) != CAN_OK) {
Serial.println("CAN 초기화 실패");
delay(100);
}
Serial.println("CAN 초기화 완료");
}
void loop() {
byte data[8] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08};
CAN.sendMsgBuf(0x100, 0, 8, data);
delay(1000);
}
4. USB-to-CAN 어댑터
PC에서 CAN 네트워크를 모니터링하거나 제어하기 위해 USB-to-CAN 어댑터를 사용할 수 있습니다. 대표적인 USB-to-CAN 어댑터로는 다음과 같은 제품이 있습니다.
- PEAK-System PCAN-USB
- Kvaser USBcan
- Lawicel CANUSB
- Waveshare USB-CAN
4.1 사용 방법
- 드라이버 설치
- 제조사에서 제공하는 드라이버 및 소프트웨어를 설치
- CAN 통신 속도 설정
500Kbps
,250Kbps
등 네트워크 환경에 맞게 설정
- PC 소프트웨어 활용
- CAN 메시지를 실시간으로 모니터링
- 특정 메시지 송신 및 분석
4.2 PCAN-USB를 활용한 예제
candump can0 # CAN 버스 데이터 모니터링
cansend can0 123#DEADBEEF # CAN 메시지 전송
5. 결론
이 글에서는 CAN 통신을 위한 주요 하드웨어 옵션을 살펴보았습니다. MCU에 내장된 CAN 모듈을 사용하는 것이 가장 간단한 방법이지만, MCP2515과 같은 외부 컨트롤러를 활용하거나 USB-to-CAN 어댑터를 사용하면 보다 다양한 환경에서 CAN 네트워크를 구성할 수 있습니다.
각 하드웨어의 장단점을 이해하고, 프로젝트에 적합한 방법을 선택하여 CAN 네트워크를 효과적으로 구현하시기 바랍니다.
'CAN 통신' 카테고리의 다른 글
MCU에서 CAN 초기화 및 설정 (ESP32 기준) (0) | 2025.02.24 |
---|---|
CAN 드라이버 및 소프트웨어 스택 개요 (0) | 2025.02.23 |
CAN 통신의 전기적 특성 및 물리 계층 분석 (0) | 2025.02.21 |
CAN 하드웨어 구성 및 주요 요소 (0) | 2025.02.20 |
CAN 통신의 특징 및 장점 (0) | 2025.02.19 |