
hello friends, nice to meet you again.
I've been studying this for more than a year.
i want to make a bldc controller to start a motorcycle engine, where the power source from a 12 volt battery is input into the bldc driver and then input to the 3 phase stator of the motorcycle which will turn the crankshaft and start the engine.
on several types of motorcycles in my area (Indonesia), they have this feature embedded in the ECU.
after I did a lot of experimenting, when the no-load position (removed the stator and magnet from the motorcycle, and tested it on the floor) it can rotate and is quite fast in my opinion. but when given a load (stator and magnets are applied back to the motorcycle) it can't rotate, or sometimes it just moves a few degrees and then stops.
can someone give me some input on this case.
information :
- stator diameter 117 cm
- wire diameter 1 mm
- 12 magnets & 18 poles
- I forgot the number of rolls
- the type of winding pattern is double star (there are 2 wires in each phase)
- load: 300cc motorcycle engine
type or paste code here
void setup() {
// INPUT DIGITAL SENSOR A
pinMode(3, INPUT);
// INPUT DIGITAL SENSOR B
pinMode(4, INPUT);
// INPUT DIGITAL SENSOR C
pinMode(5, INPUT);
// OUTPUT DIGITAL PHASE 1 (-)
pinMode(6, OUTPUT);
// OUTPUT DIGITAL PHASE 2 (-)
pinMode(7, OUTPUT);
// OUTPUT DIGITAL PHASE 3 (-)
pinMode(8, OUTPUT);
// OUTPUT PWM PHASE 1 (+)
pinMode(9, OUTPUT);
// OUTPUT PWM PHASE 2 (+)
pinMode(10, OUTPUT);
// OUTPUT PWM PHASE 3 (+)
pinMode(11, OUTPUT);
}
void loop() {
TCCR1B = (TCCR1B & 0b11111000) | 2; //frequensi 3.9kHz
TCCR2B = (TCCR2B & 0b11111000) | 2; // frequensi 3.9kHz
//step pengaman
if (digitalRead(3)==HIGH){
if (digitalRead(4)==HIGH){
if (digitalRead(5)==HIGH){
digitalWrite(6,LOW);
digitalWrite(7,LOW);
digitalWrite(8,LOW);
analogWrite(9,0);
analogWrite(10,0);
analogWrite(11,0);}}}
//step pengaman
if (digitalRead(3)==LOW){
if (digitalRead(4)==LOW){
if (digitalRead(5)==LOW){
digitalWrite(6,LOW);
digitalWrite(7,LOW);
digitalWrite(8,LOW);
analogWrite(9,0);
analogWrite(10,0);
analogWrite(11,0);}}}
//step1 (0)(-)(+) MAJU
if (digitalRead(3)==HIGH){
if (digitalRead(4)==LOW){
if (digitalRead(5)==LOW){
digitalWrite(6,LOW);
digitalWrite(7,HIGH);
digitalWrite(8,LOW);
analogWrite(9,0);
analogWrite(10,0);
analogWrite(11,250);}}}
//step2 (+)(-)(0) MAJU
if (digitalRead(3)==HIGH){
if (digitalRead(4)==LOW){
if (digitalRead(5)==HIGH){
digitalWrite(6,LOW);
digitalWrite(7,HIGH);
digitalWrite(8,LOW);
analogWrite(9,250);
analogWrite(10,0);
analogWrite(11,0);}}}
//step3 (+)(0)(-) MAJU
if (digitalRead(3)==LOW){
if (digitalRead(4)==LOW){
if (digitalRead(5)==HIGH){
digitalWrite(6,LOW);
digitalWrite(7,LOW);
digitalWrite(8,HIGH);
analogWrite(9,250);
analogWrite(10,0);
analogWrite(11,0);}}}
//step4 (0)(+)(-) MAJU
if (digitalRead(3)==LOW){
if (digitalRead(4)==HIGH){
if (digitalRead(5)==HIGH){
digitalWrite(6,LOW);
digitalWrite(7,LOW);
digitalWrite(8,HIGH);
analogWrite(9,0);
analogWrite(10,250);
analogWrite(11,0);}}}
//step5 (-)(+)(0) MAJU
if (digitalRead(3)==LOW){
if (digitalRead(4)==HIGH){
if (digitalRead(5)==LOW){
digitalWrite(6,HIGH);
digitalWrite(7,LOW);
digitalWrite(8,LOW);
analogWrite(9,0);
analogWrite(10,250);
analogWrite(11,0);}}}
//step6 (-)(0)(+) MAJU
if (digitalRead(3)==HIGH){
if (digitalRead(4)==HIGH){
if (digitalRead(5)==LOW){
digitalWrite(6,HIGH);
digitalWrite(7,LOW);
digitalWrite(8,LOW);
analogWrite(9,0);
analogWrite(10,0);
analogWrite(11,250);}}}
}// loop ends