CAN/CAN Open

CANOpen STM32F429를 이용한 모터 제어 CiA 402 프로파일

임베디드 친구 2025. 8. 11. 20:06
728x90
반응형

CANOpen STM32F429를 이용한 모터 제어 CiA 402 프로파일

개요

본 장에서는 CANOpen 프로토콜을 활용하여 STM32F429 보드를 이용한 모터 제어 시스템을 구현하는 방법을 다룹니다. 특히, CiA 402 프로파일을 적용하여 서보 모터 및 스텝 모터 제어를 수행하는 방법을 설명합니다. 이를 통해 실전 프로젝트에서 CANOpen을 활용한 모터 제어 방법을 익힐 수 있습니다.

CiA 402 프로파일 개요

CiA 402는 CANOpen 프로토콜에서 서보 및 스텝 모터 제어를 위한 표준 프로파일입니다. 이 프로파일을 이용하면 다양한 벤더의 드라이버와 제어 시스템 간의 상호 운용성을 보장할 수 있습니다. 주요 기능은 다음과 같습니다.

  • 다양한 동작 모드 지원 (위치 제어, 속도 제어, 토크 제어)
  • 상태 머신을 통한 모터 제어
  • 표준화된 객체 사전 (Object Dictionary)
  • PDO 및 SDO 통신을 통한 데이터 전송

개발 환경 설정

STM32F429 보드에서 CANOpen을 활용한 모터 제어를 위해 아래와 같은 개발 환경을 구성합니다.

  1. 하드웨어

    • STM32F429 개발 보드
    • CAN 트랜시버 (MCP2551 등)
    • 서보 모터 또는 스텝 모터
    • 모터 드라이버 (CiA 402 지원)
    • 전원 공급 장치
  2. 소프트웨어

    • STM32CubeIDE
    • STM32 HAL 라이브러리
    • CANopenNode 또는 CANFestival 라이브러리
    • CiA 402 지원 펌웨어 코드

CiA 402 상태 머신 구현

CiA 402 상태 머신은 모터 제어를 위한 중요한 개념입니다. 기본 상태 흐름은 다음과 같습니다.

  1. Not Ready to Switch On: 초기 상태, 모터가 동작 준비되지 않음
  2. Switch On Disabled: 안전 모드, 모터 드라이버가 비활성화됨
  3. Ready to Switch On: 모터가 동작 가능하지만 아직 활성화되지 않음
  4. Switched On: 모터가 활성화되었지만 동작하지 않음
  5. Operation Enabled: 모터가 정상 동작 가능
  6. Fault: 오류 발생 시 상태 진입

STM32F429에서 CiA 402 상태 머신을 구현하기 위해서는 CANOpen의 SDO 및 PDO 통신을 활용하여 해당 상태 전환을 처리해야 합니다.

STM32F429에서 CiA 402 프로파일 적용

STM32F429에서 CiA 402 프로파일을 적용하는 주요 단계는 다음과 같습니다.

  1. CANOpen 스택 초기화

    CO_ReturnError_t err;
    err = CO_init(&CANmodule, NODE_ID, CAN_BITRATE);
    if (err != CO_ERROR_NO) {
        // 오류 처리
    }
  2. CiA 402 객체 사전 설정

    uint16_t controlWord = 0;
    CO_SDO_writeOD(&ODlist, 0x6040, 0, &controlWord, sizeof(controlWord));
  3. 상태 머신에 따른 제어 흐름 구현

    void motorControlTask(void) {
        uint16_t statusWord;
        CO_SDO_readOD(&ODlist, 0x6041, 0, &statusWord, sizeof(statusWord));
    
        if ((statusWord & 0x004F) == 0x0040) {  // Ready to Switch On
            controlWord = 0x0006;  // Switch On
        } else if ((statusWord & 0x006F) == 0x0021) {  // Switched On
            controlWord = 0x000F;  // Enable Operation
        }
    
        CO_SDO_writeOD(&ODlist, 0x6040, 0, &controlWord, sizeof(controlWord));
    }

실전 예제: 속도 제어 모드 적용

CiA 402에서 속도 제어 모드를 설정하려면 다음 단계를 수행합니다.

  1. 운전 모드 설정

    int8_t mode = 3;  // 속도 모드 (Velocity Mode)
    CO_SDO_writeOD(&ODlist, 0x6060, 0, &mode, sizeof(mode));
  2. 목표 속도 설정 및 전송

    int32_t targetVelocity = 5000;  // 단위: RPM
    CO_SDO_writeOD(&ODlist, 0x60FF, 0, &targetVelocity, sizeof(targetVelocity));
  3. 제어 워드 설정

    controlWord = 0x000F;  // Operation Enable
    CO_SDO_writeOD(&ODlist, 0x6040, 0, &controlWord, sizeof(controlWord));

결론

본 장에서는 STM32F429를 이용하여 CANOpen을 활용한 모터 제어 프로젝트를 진행하였습니다. 특히, CiA 402 프로파일을 적용하여 상태 머신 기반의 모터 제어 방법을 설명하였으며, 속도 제어 모드 예제를 통해 실제 구현 방법을 소개하였습니다. 본 프로젝트를 응용하여 다양한 모터 및 시스템에 CANOpen을 활용한 확장 개발이 가능합니다.

728x90
반응형