STM32 전동 드라이브 제어를 위한 CAN 인터페이스 구현: 기술 가이드
CAN 버스는 엄격한 내결함성 요구사항을 가진 임베디드 시스템의 통신에서 사실상 표준으로 남아 있습니다. 인기 있는 UART/I2C 인터페이스와 달리 CAN은 비파괴적 중재를 통한 하드웨어 충돌 처리와 함께 차동 데이터 전송을 제공합니다. STM32G431RB(IHM03 키트와 같은)를 기반으로 한 프로젝트의 경우 드라이버를 설계할 때 물리 계층과 데이터 링크 계층의 세부 사항을 고려하는 것이 중요합니다.
구현에 영향을 미치는 주요 기술 매개변수:
- 전송 속도: 125 kbit/s(저속)부터 1 Mbit/s(고속)까지
- 네트워크 토폴로지: 양 끝에 120 Ohm 종단 저항기를 사용한 선형
- 프레임 형식: 표준(11비트 ID) 또는 확장(29비트)
- 비트 스터핑: 5개의 동일 비트 시퀀스 후 자동 비트 삽입
STM32의 내장 CAN 컨트롤러(bxCAN)는 모든 작동 모드를 지원하지만 SJW, BS1, BS2와 같은 정밀한 타이밍 매개변수 설정이 필요합니다. 보드 레이트 프리스케일러 계산 오류는 높은 버스 부하 시 동기화 손실을 초래합니다.
STM32 모터 제어를 위한 CAN 인터페이스 설계
PMSM 제어 프로젝트 수정
기존 드라이브 제어 프로젝트에 CAN을 통합하기 위해 다음이 필요했습니다:
- 프로젝트에 STM32CubeMX의 CAN 라이브러리 추가
- RCC를 통해 CAN 주변 장치 클럭 구성
- 메시지 수신/전송을 위한 링 버퍼 구현
- CAN 프레임 처리를 메인 모터 제어 루프와 동기화
PWM 처리와 CAN 간의 시간 공유가 핵심입니다. FreeRTOS를 사용할 때 모터 제어 태스크보다 높고 안전 인터럽트보다 낮은 우선순위를 가진 별도의 태스크를 생성했습니다.
CAN 데이터베이스 구조
메시지 관리를 위해 DBC와 유사한 구조를 개발했습니다:
typedef struct {
uint32_t id;
uint8_t dlc;
void (*handler)(uint8_t*);
} can_msg_t;
const can_msg_t can_db[] = {
{0x123, 8, handle_motor_status},
{0x246, 4, handle_control_cmd},
// ... other messages
};
각 메시지는 디스패치 테이블을 통해 특정 핸들러 함수에 연결됩니다. 이는 모놀리식 switch-case를 피하고 새로운 프레임 유형 추가를 간소화합니다.
실제 구현 및 테스트
물리 계층 디버깅
초기 테스트 중 다음으로 인해 CRC 오류가 관찰되었습니다:
- 잘못된 종단기 배치(한 끝에만 설치)
- 버스 길이 초과(1 Mbit/s에서 40 m 초과)
- 차폐되지 않은 트위스티드 페어 사용
해결책:
- 선로 양 끝에 120 Ohm 종단기 설치
- 60 m 길이에 대해 속도를 500 kbit/s로 줄임
- 120 Ohm 임피던스의 차폐 케이블 사용
오실로스코프 분석으로 차동 신호의 정확성(CAN_H=3.5V, CAN_L=1.5V 우세 상태)이 확인되었습니다.
부하 테스트
80% 버스 부하에서 스트레스 테스트를 수행했습니다:
- 최대 처리량: 700 kbit/s(8바이트 프레임 이론 한계 — 750 kbit/s)
- 프레임 처리 지연: < 100 µs
- 오류율: 버스 길이 30 m까지 0
3개의 고우선순위 메시지(낮은 ID) 동시 전송 중 치명적 오류가 발생했습니다. CAN_RX 필터를 구성하고 필터 뱅크별로 메시지를 분리하여 해결했습니다.
주요 요점
- 버스 타이밍: 안정적인 고속 작동을 위해 BS1/BS2 정확한 계산이 중요
- 우선순위 중재: 낮은 ID가 우선 — 메시지 계층을 미리 계획
- 오류 처리: 오류 패시브 상태 도달 시 CAN 컨트롤러 리셋 메커니즘 구현
- EMC: 산업 환경에서 케이블 차폐와 양 끝 차폐 접지가 필수
- 테스트: 프로토콜 검증을 위해 CAN 분석기(예: PCAN-USB) 사용
STM32 전동 드라이브 제어 프로젝트에 CAN 인터페이스를 통합하려면 주변 장치의 하드웨어 기능과 프로토콜 세부 사항에 대한 깊은 이해가 필요합니다. 성공적인 구현은 IoT 플랫폼과 AI 분석으로의 잠재적 통합을 가진 분산 제어 시스템의 문을 엽니다.
— Editorial Team
아직 댓글이 없습니다.