Skip to content

Hanyangsaja/AT-EX_firmware

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 

Repository files navigation

motor_uart_can_bridge

English version

STM32F746 기반 UART-CAN 브리지 펌웨어입니다. 컴퓨터에서 받은 6개 모터 명령을 CAN 명령 프레임으로 변환해 각 모터로 보내고, 모터에서 받은 피드백은 필요한 값만 모아 경량 UART 메시지로 컴퓨터에 전달합니다.

동작 개요

  • 컴퓨터와 보드는 USART3로 통신합니다.
  • 보드와 모터는 CAN1으로 통신합니다.
  • uart_to_can 태스크는 UART DMA로 받은 명령을 CAN 메시지로 변환해 모터에 전송합니다.
  • can_to_uart 태스크는 CAN으로 받은 모터 피드백을 모아 UART DMA로 컴퓨터에 전송합니다.
  • 현재 설정은 MOTOR_NUM = 6이므로 모터 6개를 대상으로 합니다.

통신 설정

UART

  • 포트: USART3
  • Baud rate: 1,000,000
  • 데이터 비트: 8 bit
  • Stop bit: 1
  • Parity: none
  • RX: DMA circular
  • TX: DMA normal

CAN

  • 포트: CAN1
  • 모드: normal
  • 필터: 모든 표준 ID 수신
  • RX interrupt: CAN_IT_RX_FIFO0_MSG_PENDING
  • 모터 CAN ID: 1부터 6까지 사용

컴퓨터 -> 보드 -> 모터

컴퓨터는 UART로 6개 모터의 경량 명령 프레임을 보냅니다. 보드는 프레임 헤더와 모터 개수를 확인한 뒤, 모터별 데이터를 CAN 8바이트 명령으로 변환합니다.

현재 MOTOR_NUM = 6, DATA_SIZE = 4이므로 UART 수신 프레임 크기는 28바이트입니다.

Byte 내용
0 0xFF header
1 모터 개수 (6)
2-25 모터별 4바이트 명령 데이터
26 reserved
27 0xFC tail

모터별 4바이트 명령 데이터는 다음 순서입니다.

Offset 내용
0 position high 8 bit
1 position low 8 bit
2 effort high 4 bit
3 effort low 8 bit

보드는 각 모터 명령을 다음 CAN 명령 프레임으로 변환합니다.

CAN byte 내용
0 position high 8 bit
1 position low 8 bit
2 velocity high 8 bit (0x7FF 고정값의 상위부)
3 velocity low 4 bit + kp high 4 bit
4 kp low 8 bit
5 kd high 8 bit
6 kd low 4 bit + effort high 4 bit
7 effort low 8 bit

제어 게인은 effort 값에 따라 다르게 설정됩니다.

  • effort가 0x7FF이면 kp = 0x000, kd = 0x000
  • 그 외에는 kp = 0x333, kd = 0xFFF
  • velocity는 0x7FF로 고정됩니다.

모터 -> 보드 -> 컴퓨터

모터에서 CAN 피드백이 들어오면 보드는 모터 ID별로 피드백을 모읍니다. 모든 모터 피드백이 모이면 전체 피드백 프레임을 UART DMA로 컴퓨터에 전송합니다.

현재 UART 송신 프레임 크기도 28바이트입니다.

Byte 내용
0 0xFF header
1 모터 개수 (6)
2-25 모터별 4바이트 피드백 데이터
26 0xFF
27 0xFC tail

모터별 피드백 데이터는 수신된 CAN 버퍼에서 다음 위치를 사용합니다.

  • 모터 ID: can_rx_buffer[0]
  • position: can_rx_buffer[1], can_rx_buffer[2]
  • velocity: can_rx_buffer[3], can_rx_buffer[4]

TX DMA 전송 중에는 uart_tx_flag로 중복 전송을 막고, UART TX 완료 콜백에서 다시 송신 가능 상태로 전환합니다.

초기화 순서

uart_to_can 태스크 시작 시 다음 순서로 주변장치와 모터를 준비합니다.

  1. CAN 필터 설정
  2. CAN RX FIFO0 인터럽트 활성화
  3. CAN 시작
  4. 각 모터에 MotorExit, MotorZero, MotorInit 순서로 초기화 명령 전송
  5. UART DMA 수신 시작

주요 파일

  • motor_uart_can_bridge/Core/Src/freertos.c: FreeRTOS 태스크, UART-CAN 변환 로직, DMA/CAN 콜백
  • motor_uart_can_bridge/Core/Src/can.c: CAN1 설정
  • motor_uart_can_bridge/Core/Src/usart.c: USART3 및 DMA 설정

About

2025년 한양대학교 ERICA 로봇공학과 캡스톤 디자인 DRAFT팀의 AT-EX 로봇을 위한 펌웨어 코드

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages