Bonjour à tous,
me revoila
J'ai réussi à faire tourner mon moteur BLDC avec mon diver L6234.
Pour cela je crée 3 signaux analogique (avec des PWMs ) qui sont déphasées:
Les pwms sont crées grace à un tableau de 48 valeurs (correspondants à un sinus):
int pwmSin[]={511,444,379,315,256,200,150, 106,68,39,17,4,0,4,17,39,68,10 6,150,200,256,315,379,444,511, 578,643,707,767,822,872,916,95 4,983,1005,1018,1022,1018,1005 ,983,954,916,872,822,767,707,6 43,578,511
};
Dans mon µC j'ai crée une interruptions toutes les 100ms qui fait
currentStepA = currentStepA + increment;
currentStepB = currentStepB + increment;
currentStepC = currentStepC + increment;
analogWrite(motorPin1, pwmSin[currentStepA]);
analogWrite(motorPin2, pwmSin[currentStepB]);
analogWrite(motorPin3, pwmSin[currentStepC]);
en gros ca marche bien mon moteur tourne correctement dans un sens et dans l'autre en inversant incrément= 1 ou -1. Mais maintenant je me rend compte que la vitesse de mon moteur correspond à la fréquence de mon intéruption ce qui est assez génant car je souhaite faire un asservissement en position.
J'ai un accelerometre+gyroscope qui, une fois filtrée me renvoient un angle. En fonction de cet angle je veux faire une régulation PID mais je n'ai aucune idée de comment faire. Avec un moteur CC on peut appliquer une PWM=erreur*KP... mais la comme c'est la fréquence qui gere la vitesse, je suis PERDU
Merci de votre aide
-----