Comment programmer la protection d’un moteur numériquement ?
Dans cet article qui n’est pas encore fini, un modèle thermique simple est présenté pour un moteur synchrone roue de vélo. Il faut seulement 360 microsecondes pour le modèle 1 et 650micro seconde pour le modèle 2 alors que la période d’échantillonnage est de 1s.
En effet, avec la mesure du courant du moteur, il est possible d’estimer l’échauffement du bobinage interne sans capteur de température.
La programmation va se faire avec un Arduino nano avec dans un premier temps le modelé 1 de l’article suivant.
telechargeable ici
Le fichier isis de la simulation peut etre telechargeable sur ce lien
Le programme pour le modèle thermique niveau 1
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <TimerOne.h>
#include <SoftwareSerial.h>
#include <math.h>
#define led13 13
LiquidCrystal_I2C lcd(0x27, 20, 4); //A0, A1, A2 non shunter 20x4ligne
float I=0;
float kph=0; //kilometre per heure
float w=0; //vitesse angulaire (rad/s)
float tempestim=25; //temperature estimée
float tempestim1; //temperature estimée n-1
float Rmoteur=0.12;
float Perte=0; //perte(Watt)
float Capacore=140; //capacity thermal heat
float Ythecore=2; //admitance thermal heat=1/Rth
float timethcst=70; //time constant thermal = Capacore*Rthecore
bool flagtemp=0;
unsigned int T=25; //temperature reel
unsigned int Time=2500; // si temps trop long alors vitesse=0kph
unsigned int TO;
unsigned int minute=0;
unsigned int seconde=0;
void setup()
{ // initialise l'afficheur LCD
pinMode(led13, OUTPUT);
pinMode(3, OUTPUT);
Timer1.initialize(1000000); // initialize timer1, and set a 1 second period => 1000 000 pour 0.01s 10 000
Timer1.attachInterrupt(callback); // attaches callback() as a timer overflow interrupt
Serial.begin(9600);
attachInterrupt(0, interrup2, CHANGE);
lcd.init(); //et pas lcd begin comme cetraine biblio
lcd.display(); // activer l'affichage
lcd.backlight(); // allumer retroeclairage
TO = millis();
}//fin setup
void interrup2() // la fonction appelée par l'interruption externe n°0
{
Time=(millis()-TO); //mesure du temps
TO = millis();
}
// Interruptions tous les 1s fait par le timer1***********************************
void callback() {
seconde++;
//tempsPC++;
//if (digitalRead(led13)== 1) {digitalWrite(led13,LOW);} else {digitalWrite(led13,HIGH);}
//digitalWrite(led13,HIGH);
I=analogRead(A1); //mesure courant
I=(I-123)/8.15; //acs755 0.6V pour 0A et 2.6V pour 40A
if (tempestim>25) {Rmoteur=0.12+0.0005*(tempestim-25) ;} else {Rmoteur=0.12;}
Perte=Rmoteur*I*I; // perte cuivre, les pertes fer seront negligées
w=(kph*2*3.1416)/(3.6*2.01); //vitesse en rad/s 26 pouces rayon 320mm 50us à la place de 35us
Ythecore=w*0.01+2; //impedance en fonction
timethcst=Capacore/(Ythecore*1); //1 correspond à Te periode d'echantillon
tempestim1=tempestim;
tempestim=((Perte/Ythecore)+timethcst*tempestim1)/(1+timethcst);
//digitalWrite(led13,LOW);
// Serial.print(I); Serial.print(";"); Serial.print("\t");
Serial.print(tempestim);Serial.print("\t"); Serial.println(";");
}//callback
void loop()
{
lcd.setCursor(0,0); // (X,Y)
lcd.print(I,2); //duree 10ms
lcd.print("A ");
lcd.setCursor(8,0); // (X,Y)
lcd.print(Rmoteur,2); //duree 10ms
lcd.print((char)244);
lcd.print(" ");
if (Time>=2000) {kph=0; } else {kph=(2.010*1000*3.6)/Time; } //2010mm perimetre roue 26 pouces
lcd.setCursor(0,1); // (X,Y)
lcd.print(kph,1);
lcd.print("kph ");
lcd.setCursor(8,1); // (X,Y)
lcd.print(Perte,0);
lcd.print("W ");
if (seconde>59) {minute++;seconde=0; }
if (minute>59) {minute=0; }
lcd.setCursor(0,2);
lcd.print(minute);
lcd.print("m");
lcd.print(seconde);
lcd.print(" ");
T=analogRead(A2); //mesure temperature LM35
T=T/2;
lcd.setCursor(0,3);
lcd.print(T);
lcd.print((char)223);
lcd.print("C ");
lcd.setCursor(8,3);
lcd.print(tempestim,7);
lcd.print((char)223);
lcd.print("C ");
if (tempestim>150 && flagtemp==0) {flagtemp=1; tone(3, 440, 2000);} //sonnerie moteur atteint 150°C
if (tempestim<120 && flagtemp==1) {flagtemp=0;} //hysteresis
}//fin loop
Ce relais thermique pourrait être utilisé pour la trottinette électrique
Commande et instrumentation de trottinette électrique 500W avec Arduino méga
https://forum.arduino.cc/index.php?topic=473015.0