Ir ao conteúdo
  • Cadastre-se

Agnaldo Pavan

Membro Júnior
  • Posts

    1
  • Cadastrado em

  • Última visita

Reputação

0
  1. Gostaria de solicitar a ajuda de vocês com um codigo estou utilizando o mikroC e simulando no protheus. Qual seria minha ideia estou com um codigo para o controle de rotação PWM e RPM mais hoje para aumentar o a rotação eo Duty Cycle preciso de um potenciométrico queria a ajuda de voce para melhorar esse codigo para determinar uma rotação o PIC executar esse controle caso alguma coisa trave o motor automaticamente o PIC aumenta o Duty Cycle .. E o PIC que estou usando é 18F4520.. Sengue o Codigo: // VARIAVEIS GLOBAIS unsigned char ucTexto[10]; // Matriz para armazenamento de texto. unsigned char ucPorcentagem; // Armazena a porcentagem do PWM. unsigned int iLeituraAD = 0; // Define variável para armazenamento da leitura AD. unsigned int iReg_timer1; // Armazena o RPM. unsigned int pulsos = 0; unsigned int setpoint(); int y = 0; // Declaração de variável global // CONFIGURAÇÃO DOS PINOS DO LCD. sbit LCD_RS at RE2_bit; sbit LCD_EN at RE1_bit; sbit LCD_D7 at RD7_bit; sbit LCD_D6 at RD6_bit; sbit LCD_D5 at RD5_bit; sbit LCD_D4 at RD4_bit; // DIREÇÃO DOS PINOS. sbit LCD_RS_Direction at TRISE2_bit; sbit LCD_EN_Direction at TRISE1_bit; sbit LCD_D7_Direction at TRISD7_bit; sbit LCD_D6_Direction at TRISD6_bit; sbit LCD_D5_Direction at TRISD5_bit; sbit LCD_D4_Direction at TRISD4_bit; void interrupt(){ if (INTCON.TMR0IF == 1){ // Se o flag de estouro do TIMER0 for igual a 1, então PORTB.RB0 = ~PORTB.RB0; // Inverte o estado do PORTB.RB0. TMR0L = 0XDC; // Carrega valores de contagem TMR0H = 0XB; // Carrega valores de contagem INTCON.TMR0IF = 0; // Seta T0IE, apaga flag de entouro do TIMER0 iReg_timer1 = (TMR1L*600/8); // Pega valor lido do timer1 e multiplica por 600 para saber rotação por minuto. // e divide por 7 pois a ventoinha para dar uma volta completa realiza 7 pulsos. TMR1L = 0; // Limpa contador. } } void Erro(){ } void main(){ TRISB = 0; TRISD = 0; TRISC.RC0 = 1; TRISC.RC2 = 0; TRISE = 0; PORTB = 0; // Configuração das interrupções INTCON.GIEH = 1; // Habilita as interrupções e a interrupção de alta prioridade. INTCON.GIEL = 1; // Habilita as interrupções e a interrupção de baixa prioridade RCON.IPEN = 1; // Configura 2 niveis de interrupção. // Timer 0 INTCON.TMR0IF = 0; INTCON2.TMR0IP = 1; INTCON.TMR0IE = 1; //temporização de 100 milisegundos T0CON = 0B10000101; TMR0L = 0XDC; TMR0H = 0XB; INTCON.TMR0IF = 0; // Timer 1 para modo contador de pulsos externos T1CON = 0B10000011; TMR1L = 0; TMR1H = 0; PIR1.TMR1IF = 0; ADCON0 = 0b00000001; . ADCON1 = 0b00001110; ADCON2 = 0b10111110; // Config. LCD no modo 4 bits Lcd_Init(); Lcd_Cmd(_LCD_CLEAR); Lcd_Cmd(_LCD_CURSOR_OFF); Lcd_Out(1, 1, "Duty Cycle: %"); . PWM1_Init(5000); PWM1_Set_Duty(255); PWM1_Start(); // if (setpoint < 1000); while(1){ // Aqui Definimos Uma Condição Sempre Verdadeira Como Parametro, Portanto Todo O Bloco Será Repetido Indefinidamente. iLeituraAD= ADC_Read(0); iLeituraAD=(iLeituraAD*0.24); ] PWM1_Set_Duty(iLeituraAD); iLeituraAD=(iLeituraAD*0.41); WordToStr(iLeituraAD, ucTexto); Lcd_Out(1,11,ucTexto); WordToStr(iReg_timer1, ucTexto); Lcd_Out(2,1,ucTexto); Lcd_Out_CP(" RPM"); Delay_10us; } }

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!