Tag: Current Sensing

  • DRV10983 FG Function and Current/Torque Measurement: MotorCurrent Register and Datasheet Revision Considerations

    The DRV10983 from Texas Instruments (TI) targets 12V to 24V systems as a 3-phase sensorless BLDC motor driver IC, driving motors with sinusoidal excitation without external Hall sensors. When implementing driver control and status diagnostics, selecting the FG (Frequency Generator) pin for rotational speed feedback and the current sensing methodology for load torque estimation are key design considerations.


    1. Operating Principles of the DRV10983 FG Signal and RPM Measurement Mechanism

    The FG (Frequency Generator) pin of the DRV10983 outputs digital pulses synchronized with the electrical rotation period of the motor rotor, serving as an interrupt source for real-time RPM measurement, closed-loop speed control, and motor stall/lock detection.

    Open-Drain Interface Circuit

    The internal output stage of the FG pin features an open-drain N-channel MOSFET structure. Because no internal pull-up resistor is integrated, an external pull-up resistor (\(R_{PU}\)) must be populated to pull the signal line to a logic high.

    The supply rail for the pull-up resistor connects to the I/O logic level of the host MCU (+3.3V or +5V), with a recommended resistance range of \(4.7\text{ k}\Omega \sim 10\text{ k}\Omega\). If the resistance is excessively high, the PCB load capacitance delays the rise time of the square wave, causing pulse distortion at high rotational speeds; conversely, if it is too low, unnecessary sink current consumption increases in the low state.

    DRV10983 FG open-drain output, pull-up resistor, and MCU input capture interface schematic
    DRV10983 FG Open-Drain output stage and MCU Input Capture pin pull-up resistor interface schematic

    Frequency and RPM Conversion Formulas

    The frequency of the square wave output from the FG pin (\(f_{FG}\)) is proportional to the mechanical speed of the motor (RPM), the number of rotor poles (Poles, \(P\)), and the internal FGcycle register setting coefficient of the DRV10983 (\(K_{FG}\)).

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

    The formula for calculating the actual motor rotational speed back from \(f_{FG}\) measured via the MCU timer input capture interrupt is as follows:

    \[\text{RPM} = \frac{120 \times f_{FG}}{P \times K_{FG}}\]
    • \(P\): Motor pole count (number of poles; e.g., for an 8-pole motor, \(P=8\))
    • \(K_{FG}\): Output pulse scaling factor determined by the FGcycle register setting (controls electrical pulses per 1 revolution by default)
    Graph for an 8-pole motor showing DRV10983 FG output frequency versus RPM
    RPM–FG frequency relationship for an 8-pole motor with K_FG=1. Values calculated from formulas.

    For an 8-pole (\(P=8\)) motor configured with \(K_{FG}=1\), per 1 mechanical revolution, 4 electrical cycles are generated, so operating at \(2,000\text{ RPM}\) results in an FG frequency of exactly \(133.3\text{ Hz}\).


    2. Torque Estimation Limits of the FG Signal and the Necessity of Phase Current Sensing

    When designing motor control firmware, confusion often arises regarding estimating load torque by monitoring changes in the FG pin frequency or duty cycle. However, the FG signal alone cannot determine motor load torque in the steady-state.

    Physical Decoupling of Speed and Torque

    The FG output signal purely provides information on the rate of change of the rotor electrical position—that is, mechanical speed alone. If the motor driver performs closed-loop speed control to maintain \(2,000\text{ RPM}\) constant, the FG pin output frequency remains identically \(133.3\text{ Hz}\) in both an unloaded no-load condition and a heavily loaded rated-load condition.

    Although a temporary frequency drop can be observed during transient states when a sudden load step causes a speed dip, the frequency converges back to the target RPM once the speed loop restores steady-state, making it impossible to determine the magnitude of the steady-state load torque.

    Phase Current (\(I_{phase}\)) as an Essential Requirement for Torque Calculation

    The electromagnetic torque (\(T\)) of permanent magnet synchronous and BLDC motors is directly proportional to the product of the motor torque constant (\(K_t\)) and the active phase current (\(I_{phase}\)) flowing through the stator windings:

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

    Even when maintaining a constant speed, as the load torque increases, the driver increases the applied voltage duty cycle to overcome back-EMF and generate torque, causing the motor winding current (\(I_{phase}\)) to rise proportionally. Therefore, to quantitatively measure motor output torque and load conditions, phase current or DC-link bus current data must be obtained.


    3. Datasheet Revision Trap: MotorCurrent Specification Changes Between 2014 Rev and 2020 Rev H

    When evaluating the current measurement capability of the DRV10983, the most critical hardware engineering risk is the issue of missing specifications depending on which datasheet revision is referenced.

    Item Early 2014 Datasheet (Rev. C, etc.) 2020 Revised Datasheet, Month 5 (Rev. H)
    0x17 Register Omitted or marked as Reserved MotorCurrent1 (current upper bits) officially specified
    0x18 Register Omitted or marked as Reserved MotorCurrent2 (current lower bits) officially specified
    11-Bit Current Formula Not provided (misleading users into believing I2C current monitoring is unsupported) \(11\text{비트}\) piecewise conversion formula included
    Revision History (Rev History) “Added MotorCurrent1 and MotorCurrent2 to Register Map” explicitly stated

    When consulting the early 2014 datasheet or referencing legacy PDF copies mirrored on unofficial archives, the 0x17 and 0x18 addresses in the register map are empty and marked as “Reserved,” easily leading to the erroneous conclusion that “the DRV10983 does not support internal current monitoring, necessitating an external shunt resistor and current sense amplifier circuit.”

    However, in the official Rev H datasheet revised in 2020-5, the specifications for the 11-bit MotorCurrent[10:0] data registers derived through the internal ADC were officially established. Therefore, hardware designers must verify the register map based on the latest Rev H specifications.


    4. Reading the MotorCurrent Register, Conversion Formulas, and Firmware Implementation Considerations

    The DRV10983 calculates the motor peak current through internal sensing circuitry and an ADC, storing the result as an 11-bit digital value MotorCurrent[10:0] in the MotorCurrent1 (0x17) and MotorCurrent2 (0x18) registers.

    Piecewise Current Conversion Formula

    The formula for calculating the actual motor current (in A) from the 11-bit raw code (MotorCurrent[10:0], range: \(0 \sim 2047\)) features a piecewise structure bounded by code 1023:

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

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

    Piecewise current transfer curve of DRV10983 MotorCurrent code
    Piecewise conversion of the MotorCurrent 11-bit code and discontinuity at the 1022/1023 boundary. Values calculated from formulas.

    Noise Spikes Near 0A and Firmware Filtering

    The structural vulnerability of this conversion formula appears around code 1023. Under no-load or stopped conditions when the actual current is near 0A, around the internal calculation offset reference point of 1023, minute ADC noise on the order of 1 LSB causes a critical computational discontinuity:

    • When the code is \(1023\): \(3 \times (1023 – 1023) / 512 = 0.0\text{ A}\)
    • When noise causes the code to drop to \(1022\) by 1 LSB: Branch (2) applies, yielding \(3 \times 1022 / 512 \approx 5.988\text{ A}\)

    In other words, during no-load operation, minute noise causes the calculated current to instantly jump from \(0\text{ A}\) to approximately \(6\text{ A}\). Left unaddressed, this leads to false overcurrent faults, speed-torque loop oscillation, and erroneous motor lock/stall detection.

    Therefore, two processing stages are essential in firmware implementation: 1. Dead-band processing: Clamp LSB fluctuations within a specified range around code 1023 (e.g., in low-current regimes) to 0A. 2. Low-pass filter (LPF): Rather than using single-cycle sampled values directly, apply an 1-order IIR digital low-pass filter or a moving average filter to eliminate high-frequency spikes.

    Necessity of 0x17-Initiated 2-Byte Burst Read

    The 11-bit current data is stored across MotorCurrent1 (0x17, upper bits) and MotorCurrent2 (0x18, lower bits)—a total of 2 registers.

    When reading this value via I2C communication, one must start from address 0x17 and perform an 2-byte continuous burst read. The internal register interface of the DRV10983 is designed such that the moment the master reads address 0x17, the lower byte value at address 0x18 is locked into an internal latch.

    If I2C communication reads 0x17 and 0x18 in separate transactions or reads 0x18 first, the motor commutation timing may change between reading the upper and lower bytes, causing data corruption.

    // Example of correct I2C read implementation (Burst Read)
    uint8_t raw_buf[2];
    int16_t motor_current_raw;
    float calculated_current_A;
    
    // Continuous burst read from register 0x17 for 2 bytes (guarantees lower byte latching)
    I2C_BurstRead(DRV10983_I2C_ADDR, 0x17, raw_buf, 2);
    
    // Combine 11-bit data: MotorCurrent1(0x17)[2:0] upper 3 bits + MotorCurrent2(0x18)[7:0] lower 8 bits
    motor_current_raw = ((uint16_t)(raw_buf[0] & 0x07) << 8) | raw_buf[1];
    
    // Apply piecewise conversion and dead-band
    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. Sensing Architecture Comparison: Integrated I2C MotorCurrent vs. External Shunt Sensing

    When configuring a motor control system, deciding whether to implement torque monitoring using the internal MotorCurrent register or by adding an external shunt resistor and current sense amplifier (CSA) circuit depends on system requirements.

    Comparison Parameter Integrated I2C MotorCurrent Approach External Shunt + CSA (Current Sense Amp) Approach
    Additional Components (BOM) None (utilizes internal driver circuitry) Requires shunt resistor, current sense amplifier, and passive filter components
    PCB Footprint / Area Minimal (no additional routing required) Increased (requires area for shunt heat dissipation and Kelvin sensing traces)
    Sampling Bandwidth Low (I2C bus polling rate: tens to hundreds of Hz) High (direct MCU ADC sampling: tens to hundreds of kHz)
    Measurement Precision Moderate (limited by internal ADC resolution and presence of 1023 discontinuity noise) High (precision resistor tolerance and low-noise differential amplification)
    Primary Applications Simple overload monitoring, stall detection, fan/pump health monitoring High-speed closed-loop torque control, precise disturbance rejection, high-performance servo loops
    • Selection criteria for integrated I2C approach: Recommended when motor torque control is not the primary objective, but rather overload shutdown protection, filter clogging detection, or qualitative load level determination. It can be implemented entirely via firmware algorithms without additional BOM cost or board area.
    • Selection criteria for external shunt sensing: Essential for industrial mechanisms requiring fast load response control on the order of sub-milliseconds (ms), high-precision torque ripple suppression, or transient current protection.