3 Phase BLDC 24 with peak current 2.5A driver suggestions

Hello,

I hope this message finds you well.

I am seeking assistance in controlling a 3-phase BLDC motor with a nominal current of 1.4A and a peak of 2-2.5A at 24V. I attempted to control it using a TMC6200 breakout board, but unfortunately, I was unsuccessful.

Could you recommend a breakout board capable of effectively controlling this BLDC motor? Ideally, the configuration should be straightforward, utilizing only PWM control. I've encountered difficulties with SPI mode or standalone operation.

I prioritize the quality of the driver over its price. My primary concern is achieving smooth movement. Any suggestions you have would be greatly appreciated.

Thank you for your time and assistance.

You do not give any information that will allow suggestions. Any smooth movement is entirely a function of your software, not the breakout board.
What board failed?

You probably made one or more mistakes. For help, post a link to the breakout board, the motor and the motor power supply, along with a wiring diagram and description of what went wrong.

Hello, thanks for your reply.
Here are the sources.

And here is my code.

#include "Arduino.h"
#include <SimpleFOC.h>
#include "SimpleFOCDrivers.h"
#include "drivers/tmc6200/TMC6200.hpp"

// Pin Definitions
#define UH 3
#define VH 5
#define WH 6
#define nCS 10
#define DRV_EN 9
#define FAULT 2

// Motor instance
BLDCMotor motor = BLDCMotor(15);

// TMC6200 driver instance for 3-PWM operation
TMC6200Driver3PWM driver = TMC6200Driver3PWM(UH, VH, WH, nCS, DRV_EN);

void setup() {
    // Initialize serial communication
    Serial.begin(115200);
    SPI.begin();
    
    // Initialize motor
    motor.linkDriver(&driver);
    motor.controller = MotionControlType::velocity_openloop;

    // Set up pins for 3-PWM control
    pinMode(UH, OUTPUT);
    pinMode(VH, OUTPUT);
    pinMode(WH, OUTPUT);
    digitalWrite(UH, HIGH);
    digitalWrite(VH, HIGH);
    digitalWrite(WH, HIGH);

    // Initialize SimpleFOC
    motor.init();

    // Set velocity setpoint
    motor.target = 20.0; // RPM

    // Align sensor and start FOC
    motor.initFOC();

    // Set driver options
    driver.setCurrentSenseGain(TMC6200_AmplificationGain::_5);
    driver.setCurrentSenseAmplifierState(true); // Ensure current sensing is on
    driver.setDriverStrength(TMC6200_DRVStrength::Strong);

    // Validate SPI connection
    if(driver.getInputs().VERSION != TMC6200_VERSION) {
        // Something is wrong with the SPI connection
        Serial.println("SPI connection issue");
    }

    // Attach fault interrupt
    attachInterrupt(digitalPinToInterrupt(FAULT), handleFault, RISING);
}

void loop() {
    // Execute control loop
    motor.loopFOC();

    motor.move();
}

void handleFault() {
    // Handle faults here
    TMC6200GStatus status = driver.getStatus();
    // Print fault status
    Serial.println("Fault detected:");
    Serial.print("U shorted: "); Serial.println(status.hasUShorted());
    Serial.print("V shorted: "); Serial.println(status.hasVShorted());
    Serial.print("W shorted: "); Serial.println(status.hasWShorted());
    // Clear fault by cycling DRV_EN
    digitalWrite(DRV_EN, LOW);
    delayMicroseconds(100);
    digitalWrite(DRV_EN, HIGH);
}

But something is not working. It is impossible for me to enable the movement.

I have tried in 6PWM but still not working. I have tried and in Standalone or SPI mode. So just SPI pins MOSI MISO SCK CSN but still not working.

"Not working" is not useful information.

Please post the a wiring diagram. Hand drawn is preferred. State what you expected to happen, and what happened instead.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.