STM32F1 CAN

모옹·2023년 4월 27일
0

STM32F10

목록 보기
1/1

사용 MCU: Nucleo-STM32F103RB
사용 IDE: STM32CubeIDE

CAN

개요

  • 차량 내에서 호스트 컴퓨터 없이 마이크로 콘트롤러나 장치들이 서로 통신하기 위해 설계된 통신 규격

  • 1993년에 처음 ISO 11898 국제 표준으로 제정

특징

  • non-host bus 방식의 message-oriented 프로토콜
  • OBD-II (차량 진단용 통신 표준의 5대 프로토콜) 中 1
  • 높은 신뢰성 고온, 충격, 노이즈 같은 외부 요인에 강함
  • 반이중 통신 방식 (Half Duplex) ⇒ 짧은 메시지 교환하는 고속 응용 시스템 적합
  • Multi Master 구조
  • 최대 1Mbps 통신 속도
  • 최대 8byte 통신 데이터 수
  • 통신 프로토콜 / 에러 처리를 하드웨어적으로 처리
  • 다수의 장치(Standard: 11bit, Extended 29bit ID구분)간 통신 가능
  • Twist pair wire와 차동신호를 사용하여 노이즈 환경에 강함
  • 비용이 경제적

non-host bus 방식

  • 통신 회선을 Master 장치가 관장하여 전반적인 통신을 제어하는 것이 아닌 회선망에 연결된 모든 단말 장치가 통신 회선을 점유하고 데이터 송신을 수행하는 방식
  • 통신 회선에 실려진 데이터는 회선망에 연결된 모든 단말 장치에 Broadcast

message-oriented 프로토콜

message oriented protocolstream oriented protocol
예시UDPTCP
속도전송 속도 빠름전송 속도 느림
응용데이터 손실보다 속도 중요 → 오디오, 비디오 전송에 적합속도보다 데이터 손실이 중요 → 이메일 시스템에 적합
송신 형태message라고 불리는 연속되지 않은 패킷의 형태로 송신됨데이터가 특정 구조 없이 송신됨
연결데이터가 셋팅 없이 전송 connectionless연결지향적 connection oriented
신뢰성신뢰 불가능한 전송신뢰 가능한 전송
재전송재전송 X손실 데이터 자동적으로 재전송
overheadLOW overheadHIGH overhead

OBD-II (On-Board Diagnostics II)

  • OBD (On-Board Diagnostics) 차의 상태를 진단하고 결과를 알려주는 장치, 발전하여 OBD-II라는 표준 진단 시스템으로 진화
  • 차량의 배출가스 진단과 고장 정보를 하나의 기기로 모든 차량에서 검색할 수 있고, 안전 및 샤시의 고장 정보 확인과 검색이 가능하여 자동차의 소유자와 수리 기술자가 고장을 더 빨리 파악하고 접근하게 함

데이터 전송

1. 우성(dominant) 비트와 열성(recessive) 비트

  • 우성(dominant) 비트 : 논리 비트 값 0 , 전기 신호 값 LOW
  • 열성(recessive) 비트 : 논리 비트 값 1 , 전기 신호 값 HIGH

2. 프레임 충돌 관리

  • 실시간 우선순위 기반
  • 우성 비트가 경쟁에서 우위
  • 낮은 CAN ID(우성 비트가 많은)를 가진 프레임이 지연 없이 먼저 전송
  • 높은 CAN ID를 갖는 프레임은 우성 메시지의 전송 후 6비트 전송 시간을 추가로 기다린 후 자동 재전송
  • 예시 (프레임이 11비트 ID를 갖는 CAN 네트워크)

프레임 충돌 예시.PNG

  1. 노드 ID 15(00000001111)와 16(00000010000)이 동작, 두 노드가 동시에 메시지 전송 상황
  2. 시작 비트(Start bit) 전송 후, 10번 비트부터 5번 비트까지 충돌 없이 전송 (bit 같아서)
  3. 4번 비트 전송 시, 노드 16은 1 (열성 비트) 전송하고, 노드 15는 0 (우성 비트) 전송 ⇒ “충돌”
  4. 노드 15 (경쟁에서 이긴 노드)는 다음 비트 계속 전송
  5. 노드 16 (경쟁에서 진 노드)은 1 전송했으나, 0을 네트워크에서 읽어서 충돌 감지 ⇒ 나머지 메시지 전송 X

3. 전송 속도

  • 40m 이하 반경에서 1Mbps까지 전송
  • 500m 이하 반경에서 125kbps까지 전송
  • CAN FD 표준 - 노드 ID 전송 후의 데이터 부분을 노드 ID 전송 속도의 10배 가량 전송 가능

프레임 구조

베이스 프레임 형식

베이스 프레임.PNG

  • CANHCAHL 신호는 차동 방식
  • 논리 0 : CANL 0V / 논리 1 : CANL 2.5V
  • dominant, 우성 상태 (CANH - CANL ≥ 0.9V) ⇒ CANL 0V 논리 0
  • recessive, 열성 상태 (CANH - CANL < 0.5V) ⇒ CANL 중간 전압 (VCC/2) 논리 1

차동 방식 (differential-mode signal)

  • 차동 모드 (Differential Mode) 두 신호의 차이로써 나타나는 신호 형태
  • 차동 모드 신호 전송 방식 (Differential signaling) 서로 반대되는 극성을 갖는 2개의 도선을 이용한 전송 방식, 주로 차 신호에 의해 정보를 전송하는 방식을 일컬음 차동 방식.PNG
  • 차 신호 Vdiff=VA(t)VB(t)V_{diff} = V_A(t) - V_B(t)
  • 합 신호 Vcomm=VA(t)+VB(t)2V_{comm} = \frac{V_A(t) + V_B(t)}{2}
  • 개별 신호
    • VA=Vcomm(t)+12Vdiff(t)V_A = V_{comm}(t) + \frac{1}{2}V_{diff}(t)
    • VB=Vcomm(t)12Vdiff(t)V_B = V_{comm}(t) - \frac{1}{2}V_{diff}(t)
  • 특징
    • 전기적 잡음/왜곡 영향 감소
    • 최대 전압 스윙 증가
    • 간단한 바이어스 구성 및 높은 선형성
    • 대략 2배의 소자 필요, 공급 DC 전력 증가

프로토콜

  • ISO 11898:2003 표준에서 Standard 11bit 식별자를 사용하여 125kbps ~ 1Mbps의 통신 속도를 제공합니다.

    이 표준은 나중에 Extended 29bit 식별자로 수정되었습니다.

  • Standard 11bit: 2^11, 2048개의 메세지 식별자

  • Extended 29bit: 2^29, 536,870,912개의 메세지 식별자

Standard CAN: 11-bit 식별자 Bit Fields

SOF11-bitIdentifierRTRIDEr0DLC0~8 bytes DataCRCACKEOFIFS
프레임의 시작 비트메세지의 우선순위를 설정하는 11bit 식별자, 값이 낮을수록 우선 순위가 높다다른 노드로부터 정보가 필요할 때 정의다른 노드로부터 정보가 필요할 때 정의. (Data Frame: 0, Remote Frame:1)CAN 식별자 타입 정의 (Standard: 0, Extended: 1)Reserved bit송신하는 데이터의 byte 수로 4bit송신 데이터로 최대 8byte16bit checksum (15bit + 1bit 구분기호), 오류 감지를 위한 비트프레임 끝interframe space: 7bit

Extended CAN: 29-bit 식별자 Bit Fields

SOF 11-bit
Identifier SRR IDE 18-bit
Identifier RTR r1 r0 DLC 0~8 bytes Data CRC ACK EOF IFS
SRR(substitute remote request): Extension format의 자리를 표시

IDE(identifier extension): 더 많은 식별자 비트가 뒤따른다는 것을 나타냄

r1: Reserved bit

Transceiver

CAN 통신을 하기 위해서는 MCU에 CAN 핀이 있더라도 별도의 Transceiver를 달아주어야 합니다.

그 이유는 CAN 통신은 CANH와 CANL 라인으로 차동 신호로 통신을 하는데

MCU의 신호를 차동신호로, 차동 신호를 MCU가 받아들일 수 있는 디지털 신호로 변환시켜주는 역할을 하기 때문입니다. 또 정전기(ESD)같은 왜란에 의해 Transceiver가 데미지를 입어 MCU가 손상되는 것을 막아주는 역할이 될 수 있습니다.

SN65HVD230 : STM용 CAN모듈로, 120옴 임피던스 저항이 추가된 모듈이며 최대 1Mbps까지 사용 가능
SN65HVD230

종단저항

또 CANH와 CANL 양 종단에 120옴 정도의 저항을 달아주어야 합니다(거리가 가까우면 달아주지 않아도 괜찮다고 하기도 하는것 같습니다.) 120옴을 달아주어야 하는 이유는 신호 왜곡을 보호하기 위한 임피던스 매칭을 위해 ISO 11898 표준으로 정의했기 때문입니다.


회로

STM32F1 Datasheet

STM32의 CAN제어 핀은 USB D+, D-핀과 공용으로 쓰기 때문에 USB를 사용한다면 다른핀으로 맵핑해야 된다.

다행이 remap기능이 있어 (PA11, PA12), (PB8, BP9), (PD0, PD1)에 할당이 가능하다.

PB8 : CAN_RX
PB9 : CAN_TX

CAN  Pinout setting

> 예제코드
AFIO->MAPR   &= 0xFFFF9FFF;  // reset CAN remap
AFIO->MAPR   |= 0x00004000;  // set CAN remap, use PB8, PB9

HCLK 클럭을 64로 설정했을 때, APB1의 클럭 = 32MHz
STM Clock Configuration

HCLK

  • STM32 마이크로컨트롤러의 시스템 클럭
  • 다른 클럭 신호들의 기본 클럭 속도를 결정
  • 시스템 성능과 전력 소비에 매우 중요한 역할

APB1

  • STM32 마이크로컨트롤러의 주변기기 버스에서 사용되는 클럭
  • 다양한 주변장치들과 통신할 때 사용
  • STM32 마이크로컨트롤러는 보통 2개의 주변기기 버스를 가지며, APB1 클럭은 그 중 하나
  • 주로 낮은 속도의 주변기기들을 위해 사용 ex) UART, SPI, I2C, CAN

Can을 활성화 하고 각 파라미터에 대해 알아보겠습니다.

Quanta 설정

Time Quanta in Bit Segment는 CAN(Controller Area Network) 프로토콜에서 사용되는 개념 중 하나입니다.
Prescaler 통신의 속도를 설정, (1/APB1 Prescaler = Time Quantum, 1/42M 16 = 380ns)
Bit Time 전체 비트 전송 시간을 의미, Tbit로 표기
Time Quanta 여러 구간(segment)로 나누어지는 Bit time의 길이
Synchronization Segment(Sync_Seg) 1 Time Quantum 길이, 다양한 버스 노드를 동기화에 사용
Propagation Time Segment(Prop_Seg) CAN 네트워크 내에서 물리적 지연 시간을 보상에 사용
Phase Buffer Segment 1(Phase_Seg1) 에지 위상 오류를 보상하는 데 사용
Phase Buffer Segment 2(Phase_Seg2) 에지 위상 오류를 보상하는 데 사용

Bit Time은 Sync Segment, Propagation Segment, Phase Segment 1, Phase Segment 2, SJW(Synchronization Jump Width) 구간으로 나뉘어진다.

Time Quanta in Bit Segment의 길이는 Bit Time에서의 데이터 전송 구간에 대한 시간을 결정
Time Quanta in Bit Segment는 CAN 프로토콜의 송수신 속도를 결정하는 중요한 요소 중 하나이며, 이 값은 CAN 컨트롤러의 설정 값에 따라 결정된다.


CAN Bit Time Calculation (can-wiki.info)

Baud Rate Configuration

사용MCU = ST Microelectronics bxCAN
Rate = APB1의 32 입력
Sample-Point 입력: 50~90%, (CANopen와 DeviceNet에서는 일반적으로 87.5%, ARINC 825에서는 75% 사용)
SJW = 1

Baud Rate : IDE상에서 Time Quanta in Bit Segment 값을 적당히 조절하며 적당한 값이 나오는 것으로 채택했다.

CAN Quanta setting

NVIC에서 CAN interrupt 체크
NVIC setting


참조
https://nexp.tistory.com/578
https://jeonhj.tistory.com/47

0개의 댓글