This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

MCF8315A: MCF8315A Controlling 14 pole pair motor at between 0.5 and 2 revs per minute

Part Number: MCF8315A
Other Parts Discussed in Thread: MCT8316Z, MCT8315Z,

Tool/software:

I have an application that requires that I rotate a 1kg load at between 0.5 and 2 revs per minute.

I have selected a Cubemars motor the GL60KV25 data sheet attached.

When I attempt to run the motor slowly I can get a staple speed down to 60RPM but when I go lower the speed is not stable could you advise me on how to approach this problem?

  • {
    "signature":"oneui-register-data",
    "data":[
    [
    {
    "idx":0,
    "id":"ISD_CONFIG",
    "value":"0x20738C20"
    },
    {
    "idx":1,
    "id":"REV_DRIVE_CONFIG",
    "value":"0xA8200000"
    },
    {
    "idx":2,
    "id":"MOTOR_STARTUP1",
    "value":"0x4B464D44"
    },
    {
    "idx":3,
    "id":"MOTOR_STARTUP2",
    "value":"0xA296600C"
    },
    {
    "idx":4,
    "id":"CLOSED_LOOP1",
    "value":"0x8D340254"
    },
    {
    "idx":5,
    "id":"CLOSED_LOOP2",
    "value":"0x0000CABF"
    },
    {
    "idx":6,
    "id":"CLOSED_LOOP3",
    "value":"0x5F26582B"
    },
    {
    "idx":7,
    "id":"CLOSED_LOOP4",
    "value":"0x484C801E"
    },
    {
    "idx":8,
    "id":"SPEED_PROFILES1",
    "value":"0x00000000"
    },
    {
    "idx":9,
    "id":"SPEED_PROFILES2",
    "value":"0x00000000"
    },
    {
    "idx":10,
    "id":"SPEED_PROFILES3",
    "value":"0x00000000"
    },
    {
    "idx":11,
    "id":"SPEED_PROFILES4",
    "value":"0x800D0000"
    },
    {
    "idx":12,
    "id":"SPEED_PROFILES5",
    "value":"0x00000000"
    },
    {
    "idx":13,
    "id":"SPEED_PROFILES6",
    "value":"0x00000000"
    }
    ],
    [
    {
    "idx":0,
    "id":"FAULT_CONFIG1",
    "value":"0xF5381106"
    },
    {
    "idx":1,
    "id":"FAULT_CONFIG2",
    "value":"0xF9100888"
    }
    ],
    [
    {
    "idx":0,
    "id":"INT_ALGO_1",
    "value":"0xA4334075"
    },
    {
    "idx":1,
    "id":"INT_ALGO_2",
    "value":"0x000001A7"
    }
    ],
    [
    {
    "idx":0,
    "id":"PIN_CONFIG",
    "value":"0x00000002"
    },
    {
    "idx":1,
    "id":"DEVICE_CONFIG1",
    "value":"0x00101462"
    },
    {
    "idx":2,
    "id":"DEVICE_CONFIG2",
    "value":"0xC000F00F"
    },
    {
    "idx":3,
    "id":"PERI_CONFIG1",
    "value":"0x41C05F00"
    },
    {
    "idx":4,
    "id":"GD_CONFIG1",
    "value":"0x9C450100"
    },
    {
    "idx":5,
    "id":"GD_CONFIG2",
    "value":"0x80200000"
    }
    ],
    [
    {
    "idx":0,
    "id":"GATE_DRIVER_FAULT_STATUS",
    "value":"0x00000000"
    },
    {
    "idx":1,
    "id":"CONTROLLER_FAULT_STATUS",
    "value":"0x00000000"
    }
    ],
    [
    {
    "idx":0,
    "id":"ALGO_STATUS",
    "value":"0x0000FDE4"
    },
    {
    "idx":1,
    "id":"MTR_PARAMS",
    "value":"0x00000000"
    },
    {
    "idx":2,
    "id":"ALGO_STATUS_MPET",
    "value":"0x04000000"
    }
    ],
    [
    {
    "idx":0,
    "id":"ALGO_CTRL1",
    "value":"0x20000000"
    }
    ],
    [
    {
    "idx":0,
    "id":"ALGO_DEBUG1",
    "value":"0xC0A30000"
    },
    {
    "idx":1,
    "id":"ALGO_DEBUG2",
    "value":"0x00000000"
    },
    {
    "idx":2,
    "id":"CURRENT_PI",
    "value":"0x03280164"
    },
    {
    "idx":3,
    "id":"SPEED_PI",
    "value":"0x03470247"
    },
    {
    "idx":4,
    "id":"DAC_1",
    "value":"0x00000000"
    },
    {
    "idx":5,
    "id":"DAC_2",
    "value":"0x00000000"
    }
    ],
    [
    {
    "idx":0,
    "id":"ALGORITHM_STATE",
    "value":"0x00120007"
    },
    {
    "idx":1,
    "id":"FG_SPEED_FDBK",
    "value":"0x7FFFFFFF"
    },
    {
    "idx":2,
    "id":"BUS_CURRENT",
    "value":"0x00000000"
    },
    {
    "idx":3,
    "id":"PHASE_CURRENT_A",
    "value":"0x05900000"
    },
    {
    "idx":4,
    "id":"PHASE_CURRENT_B",
    "value":"0xFD780000"
    },
    {
    "idx":5,
    "id":"PHASE_CURRENT_C",
    "value":"0xFE5C0000"
    },
    {
    "idx":6,
    "id":"CSA_GAIN_FEEDBACK",
    "value":"0x00010003"
    },
    {
    "idx":7,
    "id":"VOLTAGE_GAIN_FEEDBACK",
    "value":"0x00000001"
    },
    {
    "idx":8,
    "id":"VM_VOLTAGE",
    "value":"0x03418000"
    },
    {
    "idx":9,
    "id":"PHASE_VOLTAGE_VA",
    "value":"0x00000000"
    },
    {
    "idx":10,
    "id":"PHASE_VOLTAGE_VB",
    "value":"0x00000000"
    },
    {
    "idx":11,
    "id":"PHASE_VOLTAGE_VC",
    "value":"0x00000000"
    },
    {
    "idx":12,
    "id":"SIN_COMMUTATION_ANGLE",
    "value":"0xF8000000"
    },
    {
    "idx":13,
    "id":"COS_COMMUTATION_ANGLE",
    "value":"0x00000000"
    },
    {
    "idx":14,
    "id":"IALPHA",
    "value":"0x04A00000"
    },
    {
    "idx":15,
    "id":"IBETA",
    "value":"0x00000000"
    },
    {
    "idx":16,
    "id":"VALPHA",
    "value":"0x00775365"
    },
    {
    "idx":17,
    "id":"VBETA",
    "value":"0x00000000"
    },
    {
    "idx":18,
    "id":"ID",
    "value":"0xFFF224C3"
    },
    {
    "idx":19,
    "id":"IQ",
    "value":"0x05580000"
    },
    {
    "idx":20,
    "id":"VD",
    "value":"0xFFFF2D2D"
    },
    {
    "idx":21,
    "id":"VQ",
    "value":"0x00000000"
    },
    {
    "idx":22,
    "id":"IQ_REF_ROTOR_ALIGN",
    "value":"0x00000000"
    },
    {
    "idx":23,
    "id":"SPEED_REF_OPEN_LOOP",
    "value":"0x00000000"
    },
    {
    "idx":24,
    "id":"IQ_REF_OPEN_LOOP",
    "value":"0x00000000"
    },
    {
    "idx":25,
    "id":"SPEED_REF_CLOSED_LOOP",
    "value":"0x00000000"
    },
    {
    "idx":26,
    "id":"ID_REF_CLOSED_LOOP",
    "value":"0x00000000"
    },
    {
    "idx":27,
    "id":"IQ_REF_CLOSED_LOOP",
    "value":"0x00000000"
    },
    {
    "idx":28,
    "id":"ISD_STATE",
    "value":"0x00000000"
    },
    {
    "idx":29,
    "id":"ISD_SPEED",
    "value":"0x00000000"
    },
    {
    "idx":30,
    "id":"IPD_STATE",
    "value":"0x00000000"
    },
    {
    "idx":31,
    "id":"IPD_ANGLE",
    "value":"0x00000000"
    },
    {
    "idx":32,
    "id":"ED",
    "value":"0x000FD1A3"
    },
    {
    "idx":33,
    "id":"EQ",
    "value":"0x0005AEFE"
    },
    {
    "idx":34,
    "id":"SPEED_FDBK",
    "value":"0x037F1848"
    },
    {
    "idx":35,
    "id":"THETA_EST",
    "value":"0xFEF142C9"
    }
    ],
    [
    {
    "idx":0
    }
    ]
    ]
    }

  • This is the json file, where I can get a speed of about 6rpm but the speed is unstable and does not respond to the I2C speed input

  • Hi John,

    Unfortunately, you are running into the limit of sensorless BLDC commutation algorithm. Due to the closed loop estimator's reliance on using BEMF to estimate motor position and speed, when the motor doesn't generate sufficient BEMF at very low speeds, the FOC algorithm would not be able to continue to commutate accurately, and the motor will likely stall.

    Typically, this device is able to reliably support low speeds down to around 10% of the motor's rated max speed. Anything lower will risk running into insufficient BEMF and motor stalling or losing sync from the commutation.

    For extremely low speed or position control applications, I would recommend selecting a motor driver that uses sensored commutation (such as the MCT8316Z or MCT8315Z which support hall sensor inputs). If sensorless commutation algorithm is a requirement, then I would suggest utilizing an external gear box / gear reducer (or select a motor with built-in internal gear box) to reduce the motor speed.

    Regards,
    Eric C.

  • I do have a 2048 count quadrature encoder on the motor, if I use that presumably I will need to close the speed loop in an external microcontroller.  If I do that, would you expect the gains on the current loop to need to stay at zero?

  • Hi John,

    In general, I would leave the MCF8315A's current loop Kp and Ki registers to zero and let the device's algorithm determine the gains automatically during run-time. The device is quite good at determining reliable current loop Kp and Ki values.

    And yes, you would need to process the encoder with an external microcontroller and use it to control speed or position. However, this doesn't eliminate the device's built-in sensorless algorithm's limitation at low speed operation.

    Regards,
    Eric C.