[태그:] I2C

  • DRV10983 FG 기능과 전류·토크 측정: MotorCurrent 레지스터와 데이터시트 리비전 주의사항

    텍사스 인스트루먼트(TI)의 DRV10983은 12V~24V 시스템을 위한 3상 센서리스(Sensorless) BLDC 모터 드라이버 IC로, 외장 홀 센서 없이 모터를 정현파 구동한다. 드라이버 제어 및 상태 진단을 구현할 때 회전 속도 피드백을 위한 FG(Frequency Generator) 핀과 부하 토크 추정을 위한 전류 센싱 방식의 선정은 핵심 설계 요소다.


    1. DRV10983 FG 신호의 동작 원리와 RPM 계측 메커니즘

    DRV10983의 FG(Frequency Generator) 핀은 모터 로터의 전기적 회전 주기에 동기화된 디지털 펄스를 출력하여 실시간 회전수 계측, 폐루프(Closed-Loop) 속도 제어, 모터 구속(Stall/Lock) 감지 인터럽트 소스로 활용된다.

    Open-Drain 인터페이스 회로

    FG 핀의 내부 출력단은 오픈 드레인(Open-Drain) N채널 MOSFET 구조다. 내부 풀업 저항이 내장되어 있지 않으므로 신호 라인을 로직 하이(High)로 견인하기 위해 반드시 외부에 풀업 저항(\(R_{PU}\))을 실장해야 한다.

    풀업 저항의 전원 레일은 구동 MCU의 I/O 로직 레벨(+3.3V 또는 +5V)에 연결하며, 권장 저항값은 \(4.7\text{ k}\Omega \sim 10\text{ k}\Omega\) 범위다. 저항값이 지나치게 크면 PCB 부하 커패시턴스로 인해 구형파의 상승 시간(Rise Time)이 지연되어 고속 회전 시 펄스 왜곡이 발생하며, 반대로 너무 작으면 로우(Low) 상태에서 불필요한 싱크 전류 소모가 증가한다.

    DRV10983 FG 오픈드레인 출력과 풀업 저항 및 MCU Input Capture 연결 회로도
    DRV10983 FG Open-Drain 출력단과 MCU Input Capture 핀 간 풀업 저항 인터페이스 회로도

    주파수와 RPM 변환 수식

    FG 핀에서 출력되는 구형파의 주파수(\(f_{FG}\))는 모터의 기계적 회전수(RPM), 모터 로터의 극수(Poles, \(P\)), 그리고 DRV10983 내부 FGcycle 레지스터 설정 계수(\(K_{FG}\))에 비례한다.

    \[f_{FG} = \left( \frac{\text{RPM} \times P}{120} \right) \times K_{FG}\]

    MCU 타이머의 인풋 캡처(Input Capture) 인터럽트를 통해 측정된 \(f_{FG}\)로부터 실제 모터 회전수를 역산하는 공식은 다음과 같다:

    \[\text{RPM} = \frac{120 \times f_{FG}}{P \times K_{FG}}\]
    • \(P\): 모터 극수 (Pole 수, 예: 8극 모터의 경우 \(P=8\))
    • \(K_{FG}\): FGcycle 레지스터 설정에 따른 출력 펄스 배율 계수 (기본 1회전당 전기각 펄스 수 제어)
    8극 모터에서 RPM에 따른 DRV10983 FG 출력 주파수 그래프
    8극 모터, K_FG=1 조건의 RPM–FG 주파수 관계. 수식으로 계산한 값입니다.

    8극(\(P=8\)) 모터에서 \(K_{FG}=1\)로 설정한 경우, 기계각 1회전당 4개의 전기적 사이클이 생성되므로 \(2,000\text{ RPM}\) 구동 시 FG 주파수는 정확히 \(133.3\text{ Hz}\)로 출력된다.


    2. FG 신호의 토크 추정 한계와 상전류 계측의 필수성

    모터 제어 펌웨어 설계 시 FG 핀의 주파수나 듀티비 변화를 모니터링하여 부하 토크(Torque)를 추정하려는 혼선이 자주 발생한다. 하지만 정상 상태(Steady-State)에서 FG 신호 단독으로는 모터 부하 토크를 판별할 수 없다.

    속도와 토크의 물리적 분리

    FG 출력 신호는 순수하게 로터의 전기각 위치 변위율, 즉 기계적 속도 정보만을 제공한다. 모터 드라이버가 속도 폐루프 제어를 수행하여 \(2,000\text{ RPM}\)을 일정하게 유지하고 있다면, 부하가 전혀 걸리지 않은 무부하 상태와 정격 부하가 걸린 고부하 상태 모두에서 FG 핀의 출력 주파수는 동일하게 \(133.3\text{ Hz}\)다.

    과도 상태(Transient State)에서 급격한 부하 투입으로 속도 강하(Dip)가 발생할 때 일시적인 주파수 저하를 관측할 수는 있으나, 속도 루프가 정상 상태로 복귀하면 주파수는 다시 목표 RPM 값으로 수렴하므로 정상적인 부하 토크의 크기를 특정할 수 없다.

    토크 산출을 위한 상전류(\(I_{phase}\)) 필수 조건

    영구자석 동기 및 BLDC 모터의 전자기적 토크(\(T\))는 모터의 토크 상수(\(K_t\))와 고정자 권선에 흐르는 유효 상전류(\(I_{phase}\))의 곱에 직접 비례한다:

    \[T = K_t \times I_{phase}\]

    동일한 회전수를 유지하더라도 부하 토크가 증가하면 역기전력(BEMF)을 이겨내고 토크를 발생시키기 위해 드라이버가 인가 전압 듀티를 높이며, 이에 따라 모터 권선 전류(\(I_{phase}\))가 비례하여 상승한다. 따라서 모터의 출력 토크와 부하 상태를 정량적으로 계측하기 위해서는 상전류 또는 DC 링크 버스 전류 데이터를 반드시 확보해야 한다.


    3. 데이터시트 리비전 트랩: 2014 Rev vs 2020 Rev H의 MotorCurrent 사양 변화

    DRV10983의 전류 측정 기능을 검토할 때 가장 주의해야 할 하드웨어 엔지니어링 리스크는 참조하는 데이터시트 리비전(Revision)에 따른 사양 누락 문제다.

    항목 2014년 초기 데이터시트 (Rev. C 등) 2020년 5월 개정 데이터시트 (Rev. H)
    0x17 레지스터 누락 또는 Reserved 표기 MotorCurrent1 (전류 상위 비트) 공식 명시
    0x18 레지스터 누락 또는 Reserved 표기 MotorCurrent2 (전류 하위 비트) 공식 명시
    11비트 전류 수식 미제공 (I2C 전류 모니터링 불가로 오판 유도) \(11\text{비트}\) 조건 분기 변환 공식 수록
    개정 이력 (Rev History) “Added MotorCurrent1 and MotorCurrent2 to Register Map” 명시

    2014년 초기 데이터시트를 열람하거나 비공식 아카이브에 미러링된 구버전 PDF를 참조할 경우, 레지스터 맵 상에서 0x17 및 0x18 주소가 ‘Reserved’로 비어 있어 “DRV10983은 내부 전류 모니터링을 지원하지 않으므로 무조건 외부에 션트 저항과 센스 앰프 회로를 추가해야 한다”는 잘못된 결론을 내리기 쉽다.

    그러나 2020년 5월 개정된 공식 Rev H 데이터시트에서는 내부 ADC를 거쳐 산출되는 11비트 MotorCurrent[10:0] 데이터 레지스터 사양이 공식 확정되었다. 따라서 하드웨어 설계자는 반드시 최신 Rev H 사양을 기준으로 레지스터 맵을 확인해야 한다.


    4. MotorCurrent 레지스터 판독과 변환 수식 및 펌웨어 구현 주의점

    DRV10983은 내부 센싱 회로와 ADC를 통해 모터 피크 전류를 연산하고, 그 결과를 11비트 디지털 값 MotorCurrent[10:0]으로 MotorCurrent1(0x17) 및 MotorCurrent2(0x18) 레지스터에 저장한다.

    조건 분기형(Piecewise) 전류 변환 공식

    11비트 원시 코드(MotorCurrent[10:0], 범위: \(0 \sim 2047\))로부터 실제 모터 전류(단위: A)를 계산하는 공식은 1023 코드를 경계로 하는 조건 분기 구조를 가진다:

    1. \(\text{MotorCurrent}[10:0] \ge 1023\) 인 경우: \[\text{Current (A)} = \frac{3 \times (\text{MotorCurrent}[10:0] – 1023)}{512}\]

    2. \(\text{MotorCurrent}[10:0] < 1023\) 인 경우: \[\text{Current (A)} = \frac{3 \times \text{MotorCurrent}[10:0]}{512}\]

    DRV10983 MotorCurrent 코드의 조건 분기 전류 변환 곡선
    MotorCurrent 11비트 코드의 조건 분기 변환과 1022/1023 경계의 불연속. 수식으로 계산한 값입니다.

    0A 부근 노이즈 튐 현상과 펌웨어 필터링

    이 변환 공식의 구조적 취약점은 코드 1023 부근에서 나타난다. 무부하 또는 정지 상태에서 실제 전류가 0A에 가까울 때, 내부 연산 오프셋 기준점인 1023 부근에서 ADC의 1 LSB 단위 미소 노이즈가 발생하면 치명적인 연산 불연속성이 발생한다:

    • 코드가 \(1023\)일 때: \(3 \times (1023 – 1023) / 512 = 0.0\text{ A}\)
    • 코드가 노이즈로 인해 \(1022\)로 1 LSB 하강할 때: 조건 분기(2)가 적용되어 \(3 \times 1022 / 512 \approx 5.988\text{ A}\)

    즉, 무부하 구동 중 미소 노이즈에 의해 전류 계산값이 \(0\text{ A}\)에서 순식간에 약 \(6\text{ A}\)로 튀는 현상이 발생한다. 이를 방치하면 과전류 오진단, 속도-토크 루프 발진, 잘못된 부하 구속 판정이 초래된다.

    따라서 펌웨어 구현 시 다음 두 가지 처리 과정이 필수적이다: 1. 데드밴드(Dead-band) 처리: 1023 코드 기준 상하 일정 범위의 LSB 변동(예: 저전류 대역)을 0A로 클램핑 처리. 2. 저역 통과 필터(LPF): 단일 주기 샘플링 값을 즉시 사용하지 않고, 1차 IIR 디지털 저역 통과 필터 또는 이동 평균(Moving Average) 필터를 적용하여 고주파 스파이크를 제거.

    0x17 선행 2바이트 Burst Read 필수성

    11비트 전류 데이터는 MotorCurrent1(0x17, 상위 비트)과 MotorCurrent2(0x18, 하위 비트)의 2개 레지스터에 분할되어 저장된다.

    I2C 통신으로 이 값을 읽을 때, 반드시 0x17 번지부터 시작하여 2바이트 연속 읽기(Burst Read)를 수행해야 한다. DRV10983의 내부 레지스터 인터페이스는 마스터가 0x17 번지를 읽는 순간 0x18 번지의 하위 바이트 값을 내부 래치(Latch)에 고정하도록 설계되어 있다.

    만약 I2C 통신에서 0x17과 0x18을 개별 트랜잭션으로 나누어 읽거나 0x18을 먼저 읽게 되면, 상위 바이트와 하위 바이트를 읽는 사이에 모터 통전 타이밍이 바뀌어 데이터 불일치(Data Corruption)가 발생하게 된다.

    // 올바른 I2C 판독 구현 예시 (Burst Read)
    uint8_t raw_buf[2];
    int16_t motor_current_raw;
    float calculated_current_A;
    
    // 0x17 레지스터부터 2바이트 연속 리드 (하위 바이트 래치 보장)
    I2C_BurstRead(DRV10983_I2C_ADDR, 0x17, raw_buf, 2);
    
    // 11비트 데이터 결합: MotorCurrent1(0x17)[2:0] 상위 3비트 + MotorCurrent2(0x18)[7:0] 하위 8비트
    motor_current_raw = ((uint16_t)(raw_buf[0] & 0x07) << 8) | raw_buf[1];
    
    // 조건 분기 변환 및 데드밴드 적용
    if (motor_current_raw >= 1023) {
        calculated_current_A = 3.0f * (float)(motor_current_raw - 1023) / 512.0f;
    } else {
        calculated_current_A = 3.0f * (float)motor_current_raw / 512.0f;
    }
    

    5. 센싱 아키텍처 비교: 내장 I2C MotorCurrent vs 외부 Shunt 센싱

    모터 제어 시스템을 구성할 때, 토크 모니터링을 내부 MotorCurrent 레지스터로 구현할 것인지, 아니면 외부 션트 저항과 전류 센스 앰프(CSA) 회로를 추가할 것인지는 시스템 요구사항에 따라 결정해야 한다.

    비교 항목 내장 I2C MotorCurrent 방식 외부 Shunt + CSA (Current Sense Amp) 방식
    추가 부품 (BOM) 불필요 (드라이버 내부 회로 활용) 션트 저항, 전류 센스 앰프, 수동 필터 소자 필요
    PCB 실장 면적 최소 (추가 패턴 불필요) 증가 (션트 발열 분산 및 켈빈 배선 면적 요구)
    샘플링 대역폭 낮음 (I2C 버스 폴링 주기: 수십~수백 Hz) 높음 (MCU 내부 ADC 직접 샘플링: 수십~수백 kHz)
    측정 정밀도 보통 (내부 ADC 분해능 및 1023 불연속 노이즈 존재) 높음 (정밀 저항 오차 및 저노이즈 차동 증폭)
    주요 적합 용도 단순 과부하 감시, 구속 검출, 팬/펌프 상태 모니터링 고속 폐루프 토크 제어, 정밀 외란 억제, 고성능 서보 루프
    • 내장 I2C 방식 선정 기준: 모터의 토크 제어가 주 목적이 아니라 과부하에 의한 셧다운 보호, 필터 막힘 감지, 정성적 부하 수준 판단이 목적인 경우 권장된다. 추가 비용과 기판 면적 없이 펌웨어 알고리즘만으로 구현 가능하다.
    • 외부 션트 센싱 선정 기준: 수 밀리초(ms) 단위 이하의 빠른 부하 응답 제어가 필요하거나, 고정밀 토크 리플 억제 및 과도 전류 보호가 요구되는 산업용 기구부 제어의 경우 필수적으로 채택해야 한다.