Escolar Documentos
Profissional Documentos
Cultura Documentos
G ( s )=
4.45e8 s
350 s+1
K p=
1.2350
=52.5
8
Ti=2( 8 )=16
Td=0.58=4
C ( s )=52.5 (1+
C ( s )=52.5+
1
+4 s)
16 s
3.28125
+210 s
s
C ( s )=1.3621(1+
1
+ 4 .5227 s)
274 .605 s
2
0.0049602+1.3621 s+ 6.1605 s
C ( s )=
s
SIMULACIN EN PROTEUS
CDIGO IMPLEMENTADO
/*
* PID_TEMP.c
#include <avr/io.h>
#include <avr/interrupt.h> // libreria para
interrupciones
#include "lcd.h"
#include "avr_compiler.h"
#include <avr/delay.h>
void iniciomicro(void);
void adpid(void);
int pid,angulo;
unsigned char text[16];
int main(void)
{
iniciomicro();
TCNT0=0;
lcd_init();
lcd_gotorc(1,1);
lcd_puts("\40\40\40PROCESANDO\40\40\40");
lcd_gotorc(2,1);
lcd_puts("\76\76\76\76\76\76\76\76\76\76\76\76
\76\76\76\76");
_delay_ms(100);
lcd_gotorc(2,1);
lcd_puts("\40\40\40\40\40\40\40\40\40\40\40\40
\40\40\40\40");
_delay_ms(100);
lcd_gotorc(2,1);
lcd_puts("N");
_delay_ms(10);
lcd_gotorc(1,14);
lcd_puts("D");
_delay_ms(10);
lcd_gotorc(1,15);
lcd_puts("U");
_delay_ms(10);
lcd_gotorc(1,16);
lcd_puts("S");
_delay_ms(10);
_delay_ms(10);
lcd_gotorc(2,7);
lcd_puts("EPN");
_delay_ms(100);
lcd_gotorc(1,1);
lcd_puts("\40CONTROL PID DE\40");
lcd_gotorc(2,4);
lcd_puts("TEMPERATURA");
_delay_ms(100);
while (1)
{
lcd_puts("\76\76\76\76\76\76\76\76\76\76\76\76
\76\76\76\76");
_delay_ms(100);
lcd_gotorc(2,1);
lcd_puts("\40\40\40\40\40\40\40\40\40\40\40\40
\40\40\40\40");
_delay_ms(100);
lcd_gotorc(2,1);
lcd_puts("\76\76\76\76\76\76\76\76\76\76\76\76
\76\76\76\76");
_delay_ms(10);
lcd_clear();
lcd_gotorc(1,1);
lcd_puts("L");
_delay_ms(10);
lcd_gotorc(1,2);
lcd_puts("A");
lcd_gotorc(1,3);
lcd_puts("B");
_delay_ms(10);
lcd_gotorc(1,4);
lcd_puts(".");
_delay_ms(10);
lcd_gotorc(1,5);
lcd_puts(" ");
_delay_ms(10);
lcd_gotorc(1,6);
lcd_puts("I");
_delay_ms(10);
lcd_gotorc(1,7);
lcd_puts("N");
_delay_ms(10);
lcd_gotorc(1,8);
lcd_puts("S");
_delay_ms(10);
lcd_gotorc(1,9);
lcd_puts("T");
_delay_ms(10);
lcd_gotorc(1,10);
lcd_puts("R");
_delay_ms(10);
lcd_gotorc(1,11);
lcd_puts(" ");
_delay_ms(10);
lcd_gotorc(1,12);
lcd_puts("I");
_delay_ms(10);
lcd_gotorc(1,13);
DDRB=0xFF;
EICRA=0b00000011;
EIMSK=EIFR=0b00000001;
TCCR0A=0b00000010;
TCCR0B=0b00000100;
TIMSK0=0b00000010;
sei();
}
void adpid(void)
{
ADMUX=0b01000000;
ADCSRA=0b11000011;
ALFA\40");
lcd_gotorc(1,1);
lcd_puts("\40CAMBIO DE
lcd_gotorc(2,1);
lcd_puts("A.Disp \340=");
sprintf(text,"%d",angulo);
adpid();
angulo=pid*(0.000976562)*(255);
dtostrf(angulo*0.7058823529,6,2,text);
lcd_puts(text);
lcd_puts("\337");
OCR0A=angulo;
}
}
void iniciomicro(void)
{
DDRA=0xFE;
DIDR0=0b00000001;
DDRD=0x00;
PORTD=0xFF;
DDRC=0xFF;
PORTC=0x00;
ADCSRA |= (1<<ADSC);
// wait until conversion complete ADSC=0 -> Complete
while (ADCSRA & (1<<ADSC));
// Get ADC the Result
pid= ADCW;
}
ISR(INT0_vect)
{
TCNT0=0;
PORTC=0;
}
ISR(TIMER0_COMPA_vect)
{
PORTC=0b00000001;
}
DIAGRAMA DE FLUJO
3.5.
REFERENCIAS