caracteristique programme en boucle ouverte precedentLa routine d'interruption dure que 250 micro seconde, la boucle du programme principal qui scrute l'action de boutons poussoirs est de 13micros et le temps d'affichage de toutes les données est de 11ms. Donc, on peut améliorer la période d'échantillonnage donc la rapidité de la régulation du courant.
L'Arduino permet de faire l'instrumentation de la trottinette donc de connaitre la puissance, la consommation en A.h et W.h, de mesurer la vitesse, de connaitre la consommation en fonction des W.h/km, de mesurer la température du moteur et d'avoir une sécurité de fonctionnement.
Mais pour l'instant nous allons voir comment limiter le courant
4. Programme en boucle fermé, commande à courant limitéla periode d'echantillonnage passera à 0.01seconde (routine d'interruption)
si le courant est inferieur à la valeur desirée, alors la le rapport cyclique peut etre augmenté ou diminué jusqu'a la valeur desirée qui est la consigne.
par contre si le courant moteur est superieur à la valeur de limitation, il y a une diminution rapide du rapport cyclique.
pour ne pas avoir de depassement de la valeur du rapport cyclique celui si sera saturé à 254 maximum et à la valeur minimum 6.
if (Imoteur<4000) // pas de limitation de courant à (20A*10)*20=4000
{if (consigne>Rcy) {Rcy=Rcy+1;} // rampe de de la Pwm +1*0.01seconde integrateur pur
if (consigne<Rcy && Rcy!=0) {Rcy=Rcy-1;} //la decrementation est faite seulement pour la poignée d'acceleration ou avec BP2
if ( Rcy>254) {Rcy=254;} //limitation du rapport cyclique
analogWrite(PWM10,Rcy); //frequence 32kHz timer2}
}
if (Imoteur>4000) { Rcy=Rcy-5; //pas de filtrage du courant, pour etre plus rapide
if ( Rcy<6) {Rcy=5;} //rcy n'est pas signé, ni la PWM donc Rcy minimun ne doit pas etre inferieur à 6
analogWrite(PWM10,Rcy); //frequence 32kHz timer2}
}
5. Programme en boucle fermé, commande à courant limité avec poignée d'accélérationUne poignée d'accélération fournit une tension 0.8V lorsqu'elle n'est pas actionnée et une tension 4.5V lorsque la poignée est à fond.
A la place d'utiliser des boutons poussoirs pour augmenter ou diminuer la consigne de vitesse, une poignée d'accélération sera donc utilisée
Upoignee=analogRead(A3); //la relation en Upoignée et la consigne qui correspondra au rapport cyclique correspond à
if (Upoignee>100) { consigne=(Upoignee/2); //0=a*200+b et 255=a*800+b
consigne= consigne-100;
}
else { consigne=0; }
if (Upoignee<100) { consigne=0; } //redondance
6. Programme mesure température et sécurité du moteur avec la mesure courantLa mesure de température extérieure peut être facilement effectuée par le composant LM35 qui fournit 0.01V par degrés Celsius
temperature=analogRead(A2); //lm35 0.01V/°C
temperature=temperature/2; //coefficient de mesure de temperature
lcd.setCursor(5,2);
lcd.print(" ");
lcd.setCursor(5,2);
lcd.print(temperature); // affichage en °C
lcd.setCursor(9,2); // effacement de l'affichage secu
lcd.print(" ");
if (temperature>80 ) {lcd.setCursor(9,2); // si temperature extern moteur est superieur à 80°C
lcd.print("secuT");
Rcy=0;}
De plus, une sécurité thermique par la mesure du courant moteur sera ajoutée.
si le courant de limitation est superieur à 10s alors le moteur ne sera plus alimenté pendant 30s.
un affichage "secu" sur l'afficheur LCD sera indiqué.
Cette securité permet de couper le moteur lors de pente trop importante et lors du blocage du moteur mais il faudrait rajouter la mesure de la vitesse dans ce dernier cas
if (timesecurite>=10000 ) {flagarret=1;
// si courant de limitation pour un courant de plus de 10s
timerepos=0;
consigne=0;
Rcy=0;
timesecurite=0;} // alors arret moteur pendant un temps d'arret
if (flagarret==1 ) {lcd.setCursor(9,2); // si courant de limitation pour un courant de plus de 20s
lcd.print("secU"); } // alors arret moteur pendant 60 un temps d'arret et affichage
if (timerepos>=30000 && flagarret==1) {flagarret=0;
lcd.setCursor(9,2); // apres un temps de repos ici de 30s
lcd.print(" "); }
on peut observer l'affichage si la temperature est superieure à 80°C

Une sécurité thermique par la mesure du courant moteur (relais thermique numérique) qui permet de connaitre l'image de la température interne du moteur serait idéale. Mais pour cela, il faut bien connaitre le modelé thermique du moteur.
7. Programme mesure de la capacité énergétique de la batterieLa capacité énergétique d'une batterie est en A.H, nous afficherons la valeur en mA.H pour avoir une grande précision. La capacité sera en A.Seconde dans l'equation suivante. Donc pour avoir en mA.H, il faudra divisé par la capacité par3600.
Capacité(A.s)
n=I*Te+C
n-1 avec Te=0.01s et I multiplié par 10
Donc dans la routine d'interruption
capacity=ImoteurF+capacity ;
et dans l'affichage
lcd.setCursor(0,3); //affichage de la capacité energetique
lcd.print("C mA.h=");
capacity1=capacity/(18000); //18000=3600*5 5=>coefficient mesure courant
lcd.print(capacity1);
pour verifier mettre un courant de 10A avec une resitance ajustable et au bout de 30s, la capacité devra etre de 83mA.H
8. Bilan puissance et modélisation avec SIMULINKLa modélisation permet de bien comprendre le véhicule et sa commande. De plus, il est possible de compiler la partie régulation directement en programme Arduino à partir de la simulation sous Simulink. Mais il ne sera pas possible de simuler l'instrumentation avec l'afficheur LCD.
Sur la figure suivante, on peut observer la simulation de la programmation du hacheur avec la limitation de courant avec Simulink. Sur la figure suivante, l'encadrée en vert montre la commande du rapport cyclique pour faire varier la vitesse et l'encadrée en rouge la limitation du courant. Le correcteur de la régulation est ici un simple intégrateur mais il est possible d'effectuer une multitude de commande.

Sur la figure precedente, on peut observer que le courant est bien limité à 25A de 2s à 9.5s. Puis, le courant atteint 10.8A en régime établi de vitesse à 22.5km/h. les dynamiques sont similaires aux essais effectués.
Avec une pente de 5%, le rapport cyclique n'atteint tout juste 100% comme on peut l'observer sur la figure suivante. La vitesse atteindra péniblement 19km/h avec un courant de 24A et une puissance moteur de 580W.
Voir l'article : Etude de trottinettes électriques 100W et 500W (Arduino),
9. Premiere conclusion Il est facile de commander un moteur DC de 500W avec un Arduino et quelques composants
Donc de réparer nombreuses trottinettes qui sont en moteur DC.
mais il faut quelques connaissances (automatique, moteur) pour savoir gérer correctement le moteur et limiter son courant pour ne pas l'endomagerl'affichage de la vitesse, la distance, de l'heure de fonctionnement pour connaitre les Watt.heure/km pourra etre aussi réalisé avec un menu 2.
le programme .ino en fichier attaché, mais il n'est pas possible de mettre un fichier attaché .dns de ISIS labcenter electronic ?c'est quoi ce forum !
il serait souhaitable que le compilateur puisse generer le.cof pour pouvoir debugger dans isis et tester le programme ligne par ligne....Arduino doit encore faire beaucoup d'effort pour etre au meme niveau que d'autre microcrontoleur