Hi all,
I am essentially working on a research project in a lab where we would like to synchronize multiple Brushless DC motors or offset their phases (30 degrees offset, perfectly synchronized, etc.). Therefore, we are attempting to control a BLDC motor by powering the 3 coils in the proper sequence with a set time delay between each phase. The proper way to control a BLDC motor is to either sense the back EMF or use Hall Effect sensors to determine the position of the rotor and energize the next coil at the perfect time. In our case, this is not an option because having sensors determine when to energize the next coil would take away the ability to precisely control the motor's rotation or know its exact position.
Our current approach is this: Using an Arduino Mega 2560 and a circuit assembled according to the schematic below (without the IGBT/MOSFET drivers), we have Arduino code which uses the six-phase commutation sequence shown in the second image. Instead of waiting for a sensor to trigger the next phase, we have each phase occur after a set time delay that can be altered in the code. For example, I can set the time delay to 900 microseconds, so that each phase in the sequence stays on for 900 microseconds before switching to the next. Using this approach, we have successfully gotten the motor to rotate, but are facing two main problems:
1) The motor requires a "kick" to begin rotation. Meaning that I have to spin it by hand and then it continues rotation based on the powering of the coils; if left on its own to start, it usually just twitches or moves erratically.
2) The motor only reaches about 10% of its rated RPM. The datasheet estimates about 10K RPM with no load (motor is a 980 KV BLDC) but we have only obtained about 1100 RPM. This is more confusing because increasing the voltage (i.e. from 6 to 12V) and reducing the time delay to compensate for the expected increase in speed from the higher voltage (higher voltage to the coils should make them snap from one to the next faster, so the time delay must be decreased) does not increase RPM whatsoever. It just makes the electric noise from the motor louder, and the vibration of the motor intensifies.
Is there any advice you have or any additional info that would help? If there is anything I have left out, please let me know. Also, if there are viable alternatives to achieving our goal of precisely controlling a motor's rotation, please let me know.
Schematic for BLDC control
**broken link removed**
Sequence to energize coils of BLDC
I am essentially working on a research project in a lab where we would like to synchronize multiple Brushless DC motors or offset their phases (30 degrees offset, perfectly synchronized, etc.). Therefore, we are attempting to control a BLDC motor by powering the 3 coils in the proper sequence with a set time delay between each phase. The proper way to control a BLDC motor is to either sense the back EMF or use Hall Effect sensors to determine the position of the rotor and energize the next coil at the perfect time. In our case, this is not an option because having sensors determine when to energize the next coil would take away the ability to precisely control the motor's rotation or know its exact position.
Our current approach is this: Using an Arduino Mega 2560 and a circuit assembled according to the schematic below (without the IGBT/MOSFET drivers), we have Arduino code which uses the six-phase commutation sequence shown in the second image. Instead of waiting for a sensor to trigger the next phase, we have each phase occur after a set time delay that can be altered in the code. For example, I can set the time delay to 900 microseconds, so that each phase in the sequence stays on for 900 microseconds before switching to the next. Using this approach, we have successfully gotten the motor to rotate, but are facing two main problems:
1) The motor requires a "kick" to begin rotation. Meaning that I have to spin it by hand and then it continues rotation based on the powering of the coils; if left on its own to start, it usually just twitches or moves erratically.
2) The motor only reaches about 10% of its rated RPM. The datasheet estimates about 10K RPM with no load (motor is a 980 KV BLDC) but we have only obtained about 1100 RPM. This is more confusing because increasing the voltage (i.e. from 6 to 12V) and reducing the time delay to compensate for the expected increase in speed from the higher voltage (higher voltage to the coils should make them snap from one to the next faster, so the time delay must be decreased) does not increase RPM whatsoever. It just makes the electric noise from the motor louder, and the vibration of the motor intensifies.
Is there any advice you have or any additional info that would help? If there is anything I have left out, please let me know. Also, if there are viable alternatives to achieving our goal of precisely controlling a motor's rotation, please let me know.
Schematic for BLDC control
**broken link removed**
Sequence to energize coils of BLDC