SlideShare une entreprise Scribd logo
1  sur  3
Télécharger pour lire hors ligne
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <delays.h>
#include <p18f452.h>
#pragma config OSC=HS
#pragma config OSCS=OFF
#pragma config WDT=OFF
#pragma config WDTPS=128
#pragma config LVP=OFF
#pragma config BOR=OFF//abaixo da tensão prog BORV reseta pic
#pragma config BORV=42 // 27 42 45 somente 27, reset inesperado pode curto circuitar
grupo(nunca aconteceu)
#pragma config PWRT=ON//power on reset delay
#pragma config CP0=ON
#pragma config CP1=ON
#pragma config CP2=ON
#pragma config CP3=ON
#pragma config CPB=ON
#pragma config CPD=ON
#pragma config WRT0=OFF
#pragma config WRT1=OFF
#pragma config WRT2=OFF
#pragma config WRT3=OFF
#pragma config WRTC=OFF
#pragma config WRTB=OFF
#pragma config WRTD=OFF
#pragma config EBTR0=OFF
#pragma config EBTR1=OFF
#pragma config EBTR2=OFF
#pragma config EBTR3=OFF
#pragma config EBTRB=OFF
#pragma config CCP2MUX=OFF
#pragma config STVR=OFF
////////////////////////////////////////////////////////////////////////////
#pragma udata banco1
//char nada1[96];
char stri1[30];//16
char stri2[30];//16
#pragma udata banco2
//char nada2[103];
unsigned char a;
unsigned int Valor_PWM;
unsigned int current_duty_1 = 0; // initial value for current_duty_1
unsigned int Media;
signed int erro1;
#pragma udata banco3
float Kp;
signed int correcao;
/*char nada3[255];
#pragma udata banco4
char nada4[255];
#pragma udata banco5
char nada5[55];
#pragma udata
char nada6[118];*/
////////////////////////////////////////////////////////////////////////////
void Wait(unsigned int B);
void lcd_escreve_duas_linhas();
void inicializa_saidas();
void lcd_ini();
void delay_10us(unsigned int numero);
void delay_ds(unsigned int atraso2);
void delay_ms(unsigned int atraso1);
void lcd_envia_nibble( char dado );
void lcd_envia_byte( char endereco, char dado );
void lcd_pos_xy( char x, char y);
void lcd_escreve( char c);
void grava_eeprom(unsigned int dado,unsigned int endereco);
unsigned int le_eeprom(unsigned int endereco);
void inicializa_entradas_analogicas();
unsigned int ADC_Read(unsigned int canal);
void inicializa_pwm_1();
void inicializa_timer_0();
void inicializa_timer_1();
void inicializa_timer_2();
void PWM1_Set_Duty(unsigned int potencia);
void lcd_escreve_uma_linha();
////////////////////////////////////////////////////////////////////////////
#include <p18f452.h>
#include <pinagem.h>
#include <lcd.h>
#include <atraso.h>
#include <bibliotecas.h>
////////////////////////////////////////////////////////////////////////////
1. void main(void)
2. {
3. inicializa_saidas();
4. inicializa_pwm_1();
5. inicializa_entradas_analogicas();
6. delay_ds(1);
7. lcd_ini();
8. delay_ds(1);
9. a=0; //INICIALIZA O LOOP DOS VALORES DE VELOCIDADE
10. loop:
11. if(a==20)Valor_PWM = 0;//VELOCIDADE 0; PWM 0
12. else if(a==40)Valor_PWM = 148;//VELOCIDADE 302; PWM 3,3
13. else if(a==60)Valor_PWM = 135;//VELOCIDADE 276; PWM 3,0
14. else if(a==80)Valor_PWM = 143;//VELOCIDADE 291; PWM 3,1
15. else if(a==100)Valor_PWM = 163;//VELOCIDADE 336; PWM 3,6
16. else if(a==120)Valor_PWM = 189;//VELOCIDADE 395; PWM 4,3
17. else if(a==140)Valor_PWM = 219;//VELOCIDADE 461; PWM 5,0
18. else if(a>=160)a=0;
19. a++;
20. //Valor_PWM = ADC_Read(1); UTILIZADO SOMENTE NA ETAPA INICIAL DO TRABALHO
PARA FIXAR UM VALOR DE PWM
21. Media = 0;//INICIALIZA A MÉDIA DOS VALORES DO TACÔMETRO
22. for(y=0;y<8;y++)Media = Media + ADC_Read(0);
23. Media/=8;
24. erro1 = Valor_PWM-Media; // CALCULA O ERRO EM RPM
25. Kp = ADC_Read(2);// AQUISIÇÃO DO VALOR DO KP
26. Kp/=512;
27. correcao=erro1*Kp;//INICIA A CORREÇÃO DO VALOR DE VELOCIDADE
28. if(((Valor_PWM-correcao)>=0))current_duty_1 = current_duty_1+correcao;
29. else current_duty_1=0;
//INICIA LÓGICA PARA GARANTIR QUE O VALOR DO CURRENTY_DUTY_1 FIQUE EM 255
OU ZERO
30. if((current_duty_1>255)&&(current_duty_1<1000))current_duty_1=255;//0
31. else if((current_duty_1>=1000))current_duty_1=0;//0
32. PWM1_Set_Duty(current_duty_1); //ALTERA O DUTY CYCLE
33. sprintf (stri1,"I:%3.0u O:%3.0u E%3.0d ",Media, Valor_PWM, erro1);
34. sprintf (stri2,"Co:%3.0d Dut:%3.0u ", correcao, current_duty_1);
35. lcd_escreve_duas_linhas();
36. delay_ds(5);
37. goto loop;
38. }
Observação: o programa é de autoria de André Cunha e João Nicolotte. As bibliotecas foram
fornecidas pelo Engenheiro Rodrigo Lacerda Taschetto.

Contenu connexe

En vedette

Financial inclusion in India
Financial inclusion in India Financial inclusion in India
Financial inclusion in India gurinder01
 
Financial inclusion ppt(1)
Financial inclusion ppt(1)Financial inclusion ppt(1)
Financial inclusion ppt(1)ckr579
 

En vedette (7)

Financial inclusion
Financial inclusionFinancial inclusion
Financial inclusion
 
Financial inclusion in India
Financial inclusion in India Financial inclusion in India
Financial inclusion in India
 
Snapshot of Digital India - September 2014
Snapshot of Digital India - September 2014Snapshot of Digital India - September 2014
Snapshot of Digital India - September 2014
 
Financial inclusion ppt(1)
Financial inclusion ppt(1)Financial inclusion ppt(1)
Financial inclusion ppt(1)
 
Financial inclusion
Financial inclusion Financial inclusion
Financial inclusion
 
Snapshot of Digital India- September 2015
Snapshot of Digital India- September 2015Snapshot of Digital India- September 2015
Snapshot of Digital India- September 2015
 
Snapshot of Digital India- March 2016
Snapshot of Digital India- March 2016Snapshot of Digital India- March 2016
Snapshot of Digital India- March 2016
 

Plus de Simuladorgeradoreolico (20)

Biblioteca Pinagem
Biblioteca PinagemBiblioteca Pinagem
Biblioteca Pinagem
 
Biblioteca PIC18F452
Biblioteca PIC18F452Biblioteca PIC18F452
Biblioteca PIC18F452
 
Biblioteca LCD
Biblioteca LCDBiblioteca LCD
Biblioteca LCD
 
Bibliotecas Complementares
Bibliotecas ComplementaresBibliotecas Complementares
Bibliotecas Complementares
 
Biblioteca Atraso
Biblioteca AtrasoBiblioteca Atraso
Biblioteca Atraso
 
Grupo 1 - Velocidades
Grupo 1 - VelocidadesGrupo 1 - Velocidades
Grupo 1 - Velocidades
 
Grupo 2 - Velocidades
Grupo 2 - VelocidadesGrupo 2 - Velocidades
Grupo 2 - Velocidades
 
Grupo 3 - Velocidades
Grupo 3 - VelocidadesGrupo 3 - Velocidades
Grupo 3 - Velocidades
 
Grupo 4 - Velocidades
Grupo 4 - VelocidadesGrupo 4 - Velocidades
Grupo 4 - Velocidades
 
Programa simulador de gerador eólico
Programa simulador de gerador eólicoPrograma simulador de gerador eólico
Programa simulador de gerador eólico
 
Bibliotecas complementares
Bibliotecas complementaresBibliotecas complementares
Bibliotecas complementares
 
PIC18F452
PIC18F452PIC18F452
PIC18F452
 
LCD
LCDLCD
LCD
 
Pinagem
PinagemPinagem
Pinagem
 
Atraso
AtrasoAtraso
Atraso
 
ANEXO A - Grupo 4
ANEXO A - Grupo 4ANEXO A - Grupo 4
ANEXO A - Grupo 4
 
ANEXO A - Grupo 3
ANEXO A - Grupo 3ANEXO A - Grupo 3
ANEXO A - Grupo 3
 
ANEXO A - Grupo 1
ANEXO A - Grupo 1ANEXO A - Grupo 1
ANEXO A - Grupo 1
 
ANEXO A - Grupo 2
ANEXO A - Grupo 2ANEXO A - Grupo 2
ANEXO A - Grupo 2
 
ANEXO A - Grupo 4
ANEXO A - Grupo 4ANEXO A - Grupo 4
ANEXO A - Grupo 4
 

Programa Simulador de Gerador Eólico

  • 1. #include <stdio.h> #include <stdlib.h> #include <string.h> #include <delays.h> #include <p18f452.h> #pragma config OSC=HS #pragma config OSCS=OFF #pragma config WDT=OFF #pragma config WDTPS=128 #pragma config LVP=OFF #pragma config BOR=OFF//abaixo da tensão prog BORV reseta pic #pragma config BORV=42 // 27 42 45 somente 27, reset inesperado pode curto circuitar grupo(nunca aconteceu) #pragma config PWRT=ON//power on reset delay #pragma config CP0=ON #pragma config CP1=ON #pragma config CP2=ON #pragma config CP3=ON #pragma config CPB=ON #pragma config CPD=ON #pragma config WRT0=OFF #pragma config WRT1=OFF #pragma config WRT2=OFF #pragma config WRT3=OFF #pragma config WRTC=OFF #pragma config WRTB=OFF #pragma config WRTD=OFF #pragma config EBTR0=OFF #pragma config EBTR1=OFF #pragma config EBTR2=OFF #pragma config EBTR3=OFF #pragma config EBTRB=OFF #pragma config CCP2MUX=OFF #pragma config STVR=OFF //////////////////////////////////////////////////////////////////////////// #pragma udata banco1 //char nada1[96]; char stri1[30];//16 char stri2[30];//16 #pragma udata banco2 //char nada2[103]; unsigned char a; unsigned int Valor_PWM; unsigned int current_duty_1 = 0; // initial value for current_duty_1 unsigned int Media;
  • 2. signed int erro1; #pragma udata banco3 float Kp; signed int correcao; /*char nada3[255]; #pragma udata banco4 char nada4[255]; #pragma udata banco5 char nada5[55]; #pragma udata char nada6[118];*/ //////////////////////////////////////////////////////////////////////////// void Wait(unsigned int B); void lcd_escreve_duas_linhas(); void inicializa_saidas(); void lcd_ini(); void delay_10us(unsigned int numero); void delay_ds(unsigned int atraso2); void delay_ms(unsigned int atraso1); void lcd_envia_nibble( char dado ); void lcd_envia_byte( char endereco, char dado ); void lcd_pos_xy( char x, char y); void lcd_escreve( char c); void grava_eeprom(unsigned int dado,unsigned int endereco); unsigned int le_eeprom(unsigned int endereco); void inicializa_entradas_analogicas(); unsigned int ADC_Read(unsigned int canal); void inicializa_pwm_1(); void inicializa_timer_0(); void inicializa_timer_1(); void inicializa_timer_2(); void PWM1_Set_Duty(unsigned int potencia); void lcd_escreve_uma_linha(); //////////////////////////////////////////////////////////////////////////// #include <p18f452.h> #include <pinagem.h> #include <lcd.h> #include <atraso.h> #include <bibliotecas.h> //////////////////////////////////////////////////////////////////////////// 1. void main(void) 2. { 3. inicializa_saidas(); 4. inicializa_pwm_1(); 5. inicializa_entradas_analogicas(); 6. delay_ds(1); 7. lcd_ini(); 8. delay_ds(1); 9. a=0; //INICIALIZA O LOOP DOS VALORES DE VELOCIDADE 10. loop: 11. if(a==20)Valor_PWM = 0;//VELOCIDADE 0; PWM 0 12. else if(a==40)Valor_PWM = 148;//VELOCIDADE 302; PWM 3,3 13. else if(a==60)Valor_PWM = 135;//VELOCIDADE 276; PWM 3,0 14. else if(a==80)Valor_PWM = 143;//VELOCIDADE 291; PWM 3,1
  • 3. 15. else if(a==100)Valor_PWM = 163;//VELOCIDADE 336; PWM 3,6 16. else if(a==120)Valor_PWM = 189;//VELOCIDADE 395; PWM 4,3 17. else if(a==140)Valor_PWM = 219;//VELOCIDADE 461; PWM 5,0 18. else if(a>=160)a=0; 19. a++; 20. //Valor_PWM = ADC_Read(1); UTILIZADO SOMENTE NA ETAPA INICIAL DO TRABALHO PARA FIXAR UM VALOR DE PWM 21. Media = 0;//INICIALIZA A MÉDIA DOS VALORES DO TACÔMETRO 22. for(y=0;y<8;y++)Media = Media + ADC_Read(0); 23. Media/=8; 24. erro1 = Valor_PWM-Media; // CALCULA O ERRO EM RPM 25. Kp = ADC_Read(2);// AQUISIÇÃO DO VALOR DO KP 26. Kp/=512; 27. correcao=erro1*Kp;//INICIA A CORREÇÃO DO VALOR DE VELOCIDADE 28. if(((Valor_PWM-correcao)>=0))current_duty_1 = current_duty_1+correcao; 29. else current_duty_1=0; //INICIA LÓGICA PARA GARANTIR QUE O VALOR DO CURRENTY_DUTY_1 FIQUE EM 255 OU ZERO 30. if((current_duty_1>255)&&(current_duty_1<1000))current_duty_1=255;//0 31. else if((current_duty_1>=1000))current_duty_1=0;//0 32. PWM1_Set_Duty(current_duty_1); //ALTERA O DUTY CYCLE 33. sprintf (stri1,"I:%3.0u O:%3.0u E%3.0d ",Media, Valor_PWM, erro1); 34. sprintf (stri2,"Co:%3.0d Dut:%3.0u ", correcao, current_duty_1); 35. lcd_escreve_duas_linhas(); 36. delay_ds(5); 37. goto loop; 38. } Observação: o programa é de autoria de André Cunha e João Nicolotte. As bibliotecas foram fornecidas pelo Engenheiro Rodrigo Lacerda Taschetto.