La régulation de courant globale avec l'Arduino, se fait les doigts dans le nez, ici je régule par la G2 avec le régulateur de ce post.
voici le code:
Code:
int currentPin = A0; // Pin de mesure, courant nominal à environ 2.5V
int regPin = 5; // Sortie sur le régulateur shunt ci-dessus
int nominalCurrent = 512; // Courant nominal (4.7mV/unités)
float regLoopGain = 0.03; // Gain du régulateur
int regAverageCount = 100; // Temps de réaction du régulateur, le temps minimum, dépend du temps de boucle. Les mesures sont moyenées pendant ce temps
// Internal use
long regCurrentSum = 0;
int regLoopCount = 0;
float regCurrentAverage;
float regOutput = 0;
void loop()
{
// Somme les courants pendant regAverageCount
regCurrentSum += analogRead(currentPin);
regLoopCount++;
// Effectue la moyenne au bout de regAverageCount boucles
if (regLoopCount > regAverageCount)
{
regCurrentAverage = regCurrentSum / regLoopCount;
regLoopCount = 0;
regCurrentSum = 0;
// Régulation
regOutput += regLoopGain * (nominalCurrent - regCurrentAverage);
regOutput = constrain(regOutput, 0, 255);
analogWrite(regPin, regOutput);
}
delay(1);
}
La ligne qui régule est:
regOutput += regLoopGain * (nominalCurrent - regCurrentAverage);
+= est la dérivée
gain * différence est la proportionelle
Finalement, c'était pas bien sorcier.
Serge