Stm32와 can 통신 관련 문의드립니다!

안녕하십니까, 선배님들께 질문드립니다.

현재 EV 자작자동차 대회와 자율주행차 대회를 준비하면서 처음으로 전기시스템과 CAN 통신 설계를 공부하고 있습니다. 작년에는 Arduino Mega를 활용해 UART 방식으로 차량을 제어했지만, 올해는 STM32로 MCU를 변경하고 차량의 모든 통신을 CAN 통신으로 구현하려고 합니다.
STM32와 CAN 통신이 처음이라 몇 가지 궁금한 점이 있어 여쭤보고자 합니다.

  1. STM32 업로드 방식 학습
    STM32를 사용하는 과정에서 MATLAB의 Embedded Coder와 Simulink를 활용해 코드를 작성하고 업로드할 수 있다는 내용을 확인했습니다. Simulink 모델링을 통해 STM32에 프로세서 최적화 코드를 업로드하는 과정을 어떻게 공부하셨는지 궁금합니다. 혹시 관련 자료나 학습 방법이 있다면 조언 부탁드립니다.

  2. CAN 통신에서의 MCU 사용 개수
    현재 CAN 통신 예제를 따라 Master 1개와 Slave 2개 구조로 연습 중입니다. 이 과정에서 MCU와 CAN 트랜시버를 각각 3개씩 사용 중인데, 실제 차량에서도 이런 방식으로 여러 개의 MCU를 사용하는지 궁금합니다. 더 효율적인 방법이 있다면 조언 부탁드립니다.

  3. STM32 제품 추천
    현재 STM32-NUCLEO-F446RE를 사용할 계획입니다. ST-LINK가 내장되어 있어 편리하고 성능도 괜찮다고 들었는데, STM32F407VET6 같은 다른 제품도 많이 사용하는 것을 보았습니다. CAN 통신과 차량 제어를 목표로 할 때 더 적합한 제품이 있다면 추천 부탁드립니다.

읽어주셔서 감사합니다. 작은 조언이라도 큰 도움이 될 것 같습니다.

  1. 제가 매트랩에 별로 친숙하지 않아서 좀 찾아봤는데요. Simulink는 그래픽 기반 코드 작성 도구고, Embedded Coder는 매트랩 코드를 C/C++로 트랜스파일하는 도구인 것 같네요.

    저는 원래 컴퓨터 하는 사람이라 그냥 처음부터 C로 작성해서, 매트랩같은 하이레벨 인터프리터 코드를 MCU에서 돌려본 적이 없습니다. MicroPython이라고 파이썬 코드를 STM32에서 돌리는 프레임워크가 있다는건 본 적이 있네요.

    조금 찾아보니 https://kr.mathworks.com/videos/series/getting-started-with-stm32-nucleo-boards-using-simulink.html 같은 동영상 가이드가 몇 개 보이는데, 여기에 관해서는 제가 해본 적이 없어서 별 도움을 드리기가 힘들 것 같네요.

    그런데 아두이노를 사용해본 적이 있으시면 아두이노로 하시는 것도 나쁘지 않을 것 같습니다. 메가에 SPI로 연결해서 사용 가능한 MCP2515 CAN 통신 모듈이 있습니다.

    STM32를 사용해보고 싶으신 거라면 아두이노 플랫폼 그대로 STM 보드에 코드 올릴 수 있는 stm32duino 라는게 널리 쓰이고 자료도 꽤 많은 편입니다.

  2. 먼저 CAN에는 Master-Slave 개념이 없습니다. 일반적으로 버스 트래픽을 통제하는 장치를 마스터라고 부르고, 이런 통신 방식에서 슬레이브는 먼저 통신을 시작할 수 없습니다. CAN 메시지를 쏘는 장치를 마스터, 받는 장치를 슬레이브라고 표현하신 것 같은데, CAN 버스에 연결된 모든 노드는 언제든지 송/수신이 둘 다 가능합니다.

    말씀하신 것처럼 CAN에서는 모든 노드에게 TTL 신호를 만들어내는 MCU와, 이걸 차동 신호로 변환하는 트랜시버가 모두 필요합니다. 간단한 센서같은 것들은 IC가 회로 수준에서 CAN 메시지를 만들고 차동신호로 바로 쏠 수 있도록 만들 수도 있을 것 같은데요, 제가 자동차 업계가 아니라 잘 모르겠네요.

  3. 저는 그냥 필요한 것들 다 있고, 핀 많고 SD카드 슬롯이 기본으로 달린 개발보드 중에 적당히 싼 중국산 보드 찾다 보니 stm32f407 보드를 사용한 건데요. 뉴클레오 보드들이 비싸고 약간 부피가 있는 편이라 그렇지 사용하기엔 편하긴 합니다.

좋은 답변 정말 감사합니다.
먼저 CAN 통신에 대해 제가 잘못 알고 있던 부분들을 바로잡아 주셔서 큰 도움이 되었습니다. CAN 프로토콜의 특성을 다시 배우게 되었고, 이를 계기로 CAN 통신의 기본 개념부터 다시 공부해야겠다고 느꼈습니다.

또한, STM32의 업로드 방법에 대해 막막한 부분이 있었는데, 아두이노 방식으로도 업로드할 수 있다는 점을 알게 되어 큰 도움이 되었습니다. 이전에 Arduino를 사용한 경험이 있어서, 이 방법을 활용하면 좀 더 수월하게 접근할 수 있을 것 같습니다.

이번 답변 덕분에 CAN 통신과 STM32를 앞으로 어떻게 공부하고 적용해야 할지 방향을 잡을 수 있었습니다. 다시 한번 감사드립니다!