Contrôler la vitesse d'un moteur 220v

Bien le bonjour.
J'expose mon souci, je souhaite contrôler la vitesse d'un moteur 220v via un potentiomètre et un capteur à effet hall.
J'ai, sur un nano, un potentiomètre sur la pin A0 qui sert à indiquer la vitesse à laquelle le moteur doit tourner, en pin D8 j'ai la sortie vers un optocoupleur, sur la pin D2 j'ai l'entrée du gradateur et sur la pin D3 l'entrée du capteur à effet hall.
Mon but est que si je demande 2500 RPM via le potentiomètre le moteur va grimper à cette vitesse et le capteur va faire en sorte que le moteur reste à cette vitesse.
Actuellement j'ai fait le gradateur et le capteur mais je n'arrive pas à allier les deux pour contrôler le moteur.
Auriez vous une manière de faire ???
Merci.
Voici le code actuel qui fonctionne mais séparément.

#include <LiquidCrystal_I2C.h>
int C = 20, L = 2;
LiquidCrystal_I2C lcd(0x27, C, L);
/* COMPTE TOURS */
float value = 0;
float rev = 0;
int rpm;
int oldtime = 0;
int time;
void isr()
{
  rev++;
}
/* ************ */
#define triac_gate   8
#define pot         A0
bool ZC = 0;
uint16_t alpha, alpha1;

void setup()
{
  lcd.begin(C, L);
  pinMode(triac_gate, OUTPUT);
  digitalWrite(triac_gate, LOW);
  attachInterrupt(0, ZC_detect, CHANGE); // PIN 2 GRADATEUR
  attachInterrupt(1, isr, RISING); // PIN 3 COMPTE-TOURS
}

void ZC_detect()
{
  ZC = 1;
}

void loop()
{
  Cpt();
  Gra();
}
// COMPTE-TOURS
void Cpt()
{
  delay(1000);
  detachInterrupt(1);           //detaches the interrupt
  time = millis() - oldtime;    //finds the time
  rpm = (rev / time) * 1010;   //calculates rpm
  oldtime = millis();           //saves the current time
  rev = 0;
  lcd.setCursor(0, 1); lcd.print("MOTEUR "); lcd.print(rpm); lcd.print(" RPM"); lcd.print("   ");
  attachInterrupt(1, isr, RISING);
}
// GRADATEUR
void Gra()
{
  if ( ZC)
  {
    if (alpha < 9500)
    {
      delayMicroseconds(alpha);
      digitalWrite(triac_gate, HIGH);
      delayMicroseconds(200);
      digitalWrite(triac_gate, LOW);
    }
    ZC = 0;
    alpha = ( 1023 - analogRead(pot) ) * 9.287;
    alpha1 = ( analogRead(pot) ) * 9.287;
    lcd.setCursor(0, 0); lcd.print("VALEUR "); lcd.print(alpha1); lcd.print(" RPM"); lcd.print("   ");
  }
}

Une petite demande qui n'a rien à voir avec mon souci, est il possible de placer un signature en fin de sujet, je n'ai rien trouvé dans le profil qui le permette.

Si le moteur est un vrai moteur alternatif, synchrone ou asynchrone, il n'est pas possible de faire varier sa vitesse qui est liée aux 50 Hz du réseau et au nombre de pôles du moteur.

Si le moteur est un moteur hybride, il serait bon de donner les références du moteur.

Bonjour.
C'est un moteur classique à cage d'écureuil et condensateur.
Sur le plan j'ai montré le gradateur qui fonctionne bien mais je n'arrive pas à synchroniser le capteur avec le potentiomètre, c'est juste ça que je n'arrive pas à faire.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.