Sunteți pe pagina 1din 4

int analogPin = A3; int incomingByte = 0; // para el byte leido //int V_ref = 0; //double error_actual = 0; // double error_anterior = 0; //double

V_meas = 0; /////////// int Kp=1; //constante proporcional double Ki=4545.45; //constante integral double parte_P = Kp+Ki; double parte_I = -(Kp); double parte_I_anterior; //constante proporcional double referencia; double lectura = 0; double error = 0; double salida; // int Kp = 1; //Kp = R2/R1 = 2.2K/2.2K // double Ki = 4545.45;//Ki = 1/(R1*C) = 1/(2.2k*0.0000001) // double k1 = Kp + Ki;//Coeficiente 1 Funcion PI // double k2 = -(Kp); //Coeficiente 2 Funcion PI float cicloTrabajo = 0; //ms // double u = 0; //Funcion voltaje entregado por el PI int V_ADC = 0; //int aux = 0; void setup(){ // TCCR0A=0x03; // FAST PWM // TCCR0B=0x02; // CLK/1 Serial.begin(9600); // pinMode(6, OUTPUT); // TCCR1A=0xA1;//correr los relojes enternos a 20Khz //TCCR1B=0x01;// clk/1 //OCR1A=250; //Modificar frecuencia PWM //Setting Divisor Frequency//0x01 1 31250//0x02 8 3906.25//0x03 64 488.28125 // 0x04 256 122.0703125 //0x05 1024 30.517578125 //TCCR1B = TCCR1B & 0b11111000 | <setting>; //Configuro el PWM a 30 kHz. TCCR1B=TCCR1B & 0b11111000 | 0x01; } void loop(){ //Lectura y escritura del dato del ADC V_ADC = analogRead(analogPin); //Lectura de la referencia if (Serial.available() > 0) { // lee el byte entrante: incomingByte = Serial.read()-48;//48 //incomingByte = Serial.read()-48; Serial.print("Valor Ingresado: "); Serial.println(incomingByte, DEC); if(incomingByte==1){ Serial.println("Referencia 1V"); Serial.println("Valor En La Carga 5V");

} else {if(incomingByte==2){ Serial.println("Referencia 1.2V"); Serial.println("Valor En La Carga 6V"); } else {if(incomingByte==3){ Serial.println("Referencia 1.4V"); Serial.println("Valor En La Carga 7V"); } else {if(incomingByte==4){ Serial.println("Referencia 1.6V"); Serial.println("Valor En La Carga 8V"); } else {if(incomingByte==5){ Serial.println("Referencia 1.8V"); Serial.println("Valor En La Carga 9V"); } else {if(incomingByte==6){ Serial.println("Referencia 2V"); Serial.println("Valor En La Carga 10V"); } else { Serial.println("No valido..........................."); }}}}}}} //PI /* lectura=read_adc(); //Leer ADC error= referencia- lectura; parte_P= error * Kp; parte_I=error * Ki; salida = parte_P + parte_I; parte_I_anterior = parte_I; */ referencia = incomingByte; lectura = V_ADC*2; //Leer ADC error= referencia - lectura; parte_P= error * Kp; parte_I=error * Ki; salida = parte_P + parte_I; parte_I_anterior = parte_I; // digitalWrite(6,PID); //imprimo los valores deseados Serial.print(",Vol carga......"); Serial.print(salida); Serial.print(" ERROR.......... "); Serial.println(error); Serial.println(" parte I anterir.........."); Serial.println(parte_I_anterior); // V_ref = incomingByte;

//V_meas = V_ADC*2; // error_actual = V_ref - V_meas; // u = u + k1*error_actual + k2*error_anterior; //Funcion del PI // error_anterior = error_actual; //PWM cicloTrabajo = salida*25; analogWrite(6, cicloTrabajo); Serial.println(" ciclotrabajo........."); Serial.println(cicloTrabajo); delay(50); } ********************************ardilla*****************************

double double double double double double double double

e, e1, e2, u=0, u1, UMAX=252.5, UMIN=2.5; senPin=A2; //seleccionar entrada analogica pin 2 outPin=5; y; //donde capturo el valor sensado kp=2, ki=0.1; // donde k1=kp+k , k2=-(kp+2kd) y k3=kd k1=kp+ki; k2=-kp, k3=0; setpoint=0.1, setp2;

void setup(){ TCCR0A=0x03; // FAST PWM TCCR0B=0x02; // CLK/1 Serial.begin(9600); } void serialEvent() { //Serial.println("entra el setpoint mono qliao"); while (Serial.available()) { //Obtiene el nuevo dato serial setpoint= (int)Serial.read()-48; } } void loop() { setp2=(255*setpoint)/10; //V_referencia=(255*incomingByte)/10; escalado para tra bajar en 0-255 //e2=e1; // actualiza la variable de error ante-anterior y=(analogRead(senPin)/4)*2.5; //lee la variable del sensor en el canal anlogo dig ita e=setp2-y; u=u1+k1*e+k2*e1+k3*e2; // algortimo del PID discreto //if (u>UMAX){u=252.5;} // limita rango del DAC

//if (u<UMIN){u=2.5;} Serial.println(y); //Serial.println(y); analogWrite(outPin,u); // escribe en sistema digital anlogo. e1=e; //actualiza la variable de error anterior u1=u; }

S-ar putea să vă placă și