Ir ao conteúdo
  • Cadastre-se

Controle de temperatura com PIC16F877a


dakkonsq

Posts recomendados

Oi pessoal, é o seguinte:

Estou tentando desenvolver um controle de temperatura, onde quero controlar a velocidade de um cooler baseado na temperatura de um LM35 utilizando um PIC16F877A

Com a referência a partir de 25º C, e calculando um erro em cima disso p/ acionar o fan..

o problema é que não sei exatamente como começar, nem do que eu preciso!

Uma referencia deste tipo?

25ºC - 30% da velocidade máxima do fan

30ºC - 100% da velocidade máxima do fan

E como ficaria o código?

Meu professor é daqueles que mandam se virar.. rs.. já estou pesquisando o dia inteiro, porém não achei um código/exemplo que pudesse me ajudar a começar pelo menos...

Estou utilizando o PIC Wizard p/ compilar (linguagem C)

Obrigado desde já!

Link para o comentário
Compartilhar em outros sites

Ok, estou trabalhando com isto:

2W4Bw.png

Código:

#include "D:\!!Aulas\Semestre 7\Microcontroladores\Trabalho PWM FAN\algoritmo\main.h"
#include <LCD.C>
#FUSES NOWDT //No Watch Dog Timer
#FUSES HS //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES NOPUT //No Power Up Timer
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection
#FUSES NOWRT //Program memory not write protected
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOPROTECT //Code not protected from reading
#use delay(clock=4000000)

void main() {
int16 read;
int pwm=0;
float temp;

setup_adc_ports(AN0);
setup_adc(ADC_CLOCK_DIV_64);
setup_psp ( PSP_DISABLED );
setup_spi ( SPI_SS_DISABLED );
setup_timer_0 ( RTCC_INTERNAL | RTCC_DIV_1 );
setup_timer_1 ( T1_DISABLED );
setup_timer_2 ( T2_DIV_BY_16 , 255 , 1 );
setup_ccp1 ( CCP_PWM );
set_pwm1_duty (0);
setup_comparator ( NC_NC_NC_NC );
setup_vref ( FALSE );
lcd_init();

while(true){
set_adc_channel(0); //Habilita canal 0
delay_ms(200); //Wait
read=read_adc(); //Lê canal 0
temp=(5*read*100/1023); //Conversão para tensão e temperatura.
set_pwm1_duty (pwm);
if(temp>=20)
pwm=(temp*8.5);
else
pwm=0;

//------------controle temp--------//
if(temp>=20){
printf(lcd_putc, "\fTemp=%1.0f\nFAN ON ", temp);
output_low(PIN_B2);
output_high(PIN_B1);


}
else{
printf(lcd_putc, "\fTemp=%1.0f\nFAN OFF ", temp);
output_low(PIN_B1);
output_high(PIN_B2);
}
}
}

Utilizei alguns exemplos que achei por aqui e um exemplo que o professor disponibilizou, o problema é que o que foi me passado pelo professor é MUITO diferente do que estou vendo aqui, e não estou sabendo adicionar os algoritmos pra botar esse PWM pra funcionar, não sei o que estou fazendo errado, o pwm está incrementando sozinho.. e não conforme a temperatura..

Obrigado..

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!