You are on page 1of 1

const int channelPinA = 2;

int PWM = 3;

double error;
double U;
float U1 = 0;
double ref = 1000;
int PPR = 2;
volatile int ISRCounter = 0;
unsigned int pulsos = 0;
unsigned long Time = 0;
unsigned int RPM = 0;

void setup()
{
pinMode(channelPinA, INPUT_PULLUP);

pinMode(PWM, OUTPUT); //Pin para la salida PWM del control

Serial.begin(9600);
attachInterrupt(digitalPinToInterrupt(channelPinA), doEncode, CHANGE);
Time = millis();

void loop()
{
if(millis() - Time >= 1000)
{
pulsos = ISRCounter/PPR;
RPM = (pulsos/2)*30;

Serial.print("Pulsos por segundo:");


Serial.println(pulsos);

Serial.print("Revoluciones por minuto:");


Serial.println(RPM);
//se reestablecen los valores
ISRCounter = 0;
pulsos = 0;
Time = millis();

error = abs(ref - RPM);


Serial.println(error);
U = ref;
Serial.println(U);
U1 = (U * 255)/ RPM;
Serial.println(U1);
analogWrite(PWM,U1);
}
}
void doEncode()
{
ISRCounter++;
}

You might also like