Applications

  • Capteur de vitesse & sens de rotation (encodeur optique)
  • Capteur angulaire
  • Asservissement de l’angle
  • Commutateur électromécanique multipositions
  • Curseur/ Slider électronique
  • Potentiomètre électromécanique linéaire
  • Etc.

Principe de fonctionnement

Le tuto est une application directe de l’utilisation d’un encodeur rotatif comme potentiomètre linéaire numérique. En effet, l’encodeur permet d’ajuster l’intensité d’un laser d’une façon progressive et linéaire. L’objectif est d’incrémenter ou décrémenter la valeur du rapport cyclique d’un signal PWM sur  8-bits avec un pas constant. Le pas est défini par l’utilisateur dans le programme. La valeur du rapport cyclique peut varier entre 0 (0%) et 255(100%).

Voir le tuto pour plus de détails.

Code Arduino

#define clkPin    2
#define dtPin 3
#define swPin 4 // Bouton Poussoir (Reset)

#define outPWM 8
#define StepPWM 15
#define numPWM 255 // Niveaux PWM


int nReset=1;

void setup()
{
//Init
Serial.begin(19200);
pinMode(clkPin,INPUT);
pinMode(dtPin,INPUT);
pinMode(swPin,INPUT_PULLUP);

pinMode(outPWM,OUTPUT);
analogWrite(outPWM,0);
}

void loop()
{
// Lecture de l'encodeur
nReset=digitalRead(swPin);
int R=encodUpDown(clkPin, dtPin, numPWM, StepPWM, 200, nReset);

// Affichage (Test)
Serial.print(R); Serial.print("\t");
Serial.println(R);

// Mise à jour intensité
analogWrite(outPWM,R);
}

int encodUpDown(int clkpin, int dtpin, int rotmax,int stpwm, int delay_ms, int nrst)
{
static int rotVal = 0;
static bool clkState = LOW, clkLast = HIGH;

clkState = digitalRead(clkpin);
if ((clkLast == LOW) && (clkState == HIGH))
{
if (digitalRead(dtpin) == HIGH) // Down
{
rotVal-=stpwm;
if ( rotVal < 0) rotVal = 0;
}
else // Up
{
rotVal+=stpwm;
if ( rotVal >= rotmax)rotVal = rotmax;
}
delay(delay_ms);
}
clkLast = clkState;

// Init
if (nrst==0)
{
rotVal = 0;
clkState = LOW;
clkLast = HIGH;
}
return rotVal;
}
Click to rate this post!
[Total: 1 Average: 5]

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Retour en haut

You have successfully subscribed to the newsletter

There was an error while trying to send your request. Please try again.

FPGA | Arduino | Matlab | Cours will use the information you provide on this form to be in touch with you and to provide updates and marketing.