<CAN 속도의 중요성>
- CAN 버스에 연결된 통신 장치들은 모두 같은 속도여야 통신이 된다.
- 그렇기에, CAN 통신에 있어서 통신 속도는 매우 중요하다.
(CAN 통신에 있어서 가장 고려해야 하는 것은 ID와 통신 속도이다.)
<CAN 통신 속도 설정 개념>
- CAN 통신은 1비트 타임에 대한 설정을 하는 방식으로 통신 속도를 결정
- 1비트 타임을 여러 개의 가상의 “타임 퀀텀” 단위로 나눔
- 1비트 타임 동안 이 “타임 퀀텀”을 몇 개 배치할지 선택하여 1bit 당 전송 시간을 결정하면, 최종 통신 속도가 결정
<타임 퀀텀의 시간 단위>
- APB1 클럭을 Prescaler 만큼 나눠준게 1타임 퀀텀의 시간 단위가 된다.
- APB1 clock = 40MHz
- Prescaler = 5
- 40MHz / 5 = 8MHz
- 8MHz → 1초에 8000000 bit가 뛴다.
- 제일 작은 단위. 한 clock의 시간을 계산하려면 역으로 뒤집으면 된다. (아래처럼)
- 1타임 퀀텀의 시간 단위 = 5 / 40MHz = 0.125us
- 위의 0.125us는 통신의 가장 작은 단위이다.
(위의 방식은 내가 사용하는 GD보드에 해당하는 계산 방법이며, 다른 보드를 사용할 경우 해당 datasheet를 살펴보아야 한다.)
<CAN 속도 계산>
- CAN 정보 관련 함수 → MX_CAN1_Init()
-
SYNC_SEG → 1 타임 퀀텀 사용 (고정)
-
BIT SEGMENT 1 (BS1) → 13 타임 퀀텀 배정
-
BIT SEGMENT 2 (BS2) → 2 타임 퀀텀 배정
-
SYNC_SEG + BS1 + BS2 = 총 16개 타임 퀀텀. 1 타임 퀀텀 당 0.125us
-
total quantum → 0.125us * 16 = 2us (1 clock (bit) 뛰는데 들어가는 시간)
- 해당 값의 (2us) 속도를 계산하려면 뒤집어야 한다.
-
따라서 1 bit 당 2us 소요 (500kbps → 초당 500k bit)
-
SAMPLE POINT = (SYNC_SEG + BS1) / 전체 타임 퀀텀 = (1 + 13) / 16 = 62.5%
-
BaudRate (통신속도) = 500kbps
- baudrate → 통신속도 (1초에 몇 bit의 데이터를 전송하는지를 의미하는 단위가 bps 이다.)