Sensor de Tensão.

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Sensor de Tensão.

Mensagempor nectar » 12 Jun 2011 19:37

Olá pessoal,

Sou novo por aqui e esse forum ja me ajudou em muita coisa, gostaria primeiramente de agradecer a os usuarios de luz que estão de plantão ai sempre tentando ajudar os que ainda estão a procura dela(da luz), kkkk, brincadeira.

Bom...Estou fazendo um circuito que reconheça se tem tensão na tomada, é bem simples e só serve para me dizer se tem ou não tem tensão. Pra que? circuito triway, iria fazer um rele ligado ao pic ligar e desligar a luz, mas não queria tirar essa função do interruptor manual tambem. Acontece que funcionaria com os dois, o problema é que não consigo ver pelo pic quando a luz ta ligada, pois, se eu ligar o relé e desligar o interruptor, para o pic a luz vai ta ligada mas o interruptor deixa a mesma desligada. Espero que eu tenha conseguido me explicar, risos.

Achei na internet alguns circuitos e optei por um transformador sem trafo com ponte de diodos e zener, nele, tenho a saida de 5v quando o circuito está ligado e 3.2 quando ta desligado(Desce para zero muito devagar e mesmo com o resistor continua descendo devagar, então estipulei esse nivel de tensão(3.2) como sendo o de desligado, pois, vai funcionar instantaneamente sem eu precisar que o resistor consuma a carga do capacitor).

Fiz tudo certo, o circuito realmente entrega os 5v, até mais um pouco, 5.16, e mando isso para a entrada analogica do pic. Então o Pic vai ver, se tiver mais de 3.8 é pq a luz ta lgada, else, vcs ja sabem.

É só isso!.

Qual o problema?

O pic ta travando quando eu coloco a referencia analogica(o fio do transformador sem trafo).

Minha ligação ta ligando o positivo na entrada analogica e o negativo junto com o negativo da fonte que alimenta o pic no protoboard.

Talvez o erro esteja no codigo. Vcs podem analisar para mim?



Código: Selecionar todos

void main()
{
   Long Int tensao;
   float temporario;
   setup_adc_ports(AN0|VSS_VDD);
   setup_adc(ADC_CLOCK_INTERNAL);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_wdt(WDT_OFF);
   setup_timer_0(RTCC_INTERNAL);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   
   delay_ms(2000);

while(true) {
output_high (pin_D1); //isso aqui é só para eu ver que ele ainda não travou
delay_ms(1000);        //isso aqui é só para eu ver que ele ainda não travou
SET_ADC_CHANNEL(0);

delay_ms(10);

tensao = READ_ADC(7);

temporario = tensao * 0.0048828125;

if(temporario<=3.2)
         {
         output_low(PIN_D0);
         delay_ms(2000);
         }
if(temporario>3.2)
         {
         output_high (pin_D0);
         delay_ms(2000);
         }
output_low (pin_D1);
delay_ms(1000);

}

 

}


Espero contar com a ajuda de vocês,

Obrigado!

Nectar.
nectar
Bit
 
Mensagens: 7
Registrado em: 04 Jun 2011 20:16

Mensagempor nectar » 12 Jun 2011 19:39

Desculpe, não coloquei o .h

Código: Selecionar todos
#include <18F4550.h>
#device adc=10
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES WDT128                   //Watch Dog Timer uses 1:128 Postscale
#FUSES INTRC_IO                 //Internal RC Osc, no CLKOUT
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOBROWNOUT               //No brownout reset
#FUSES BORV20                   //Brownout reset at 2.0V
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOCPD                    //No EE protection
#FUSES STVREN                   //Stack full/underflow will cause reset
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOWRT                    //Program memory not write protected
#FUSES NOWRTD                   //Data EEPROM not write protected
#FUSES IESO                     //Internal External Switch Over mode enabled
#FUSES FCMEN                    //Fail-safe clock monitor enabled
#FUSES PBADEN                   //PORTB pins are configured as analog input channels on RESET
#FUSES NOWRTC                   //configuration not registers write protected
#FUSES NOWRTB                   //Boot block not write protected
#FUSES NOEBTR                   //Memory not protected from table reads
#FUSES NOEBTRB                  //Boot block not protected from table reads
#FUSES NOCPB                    //No Boot Block code protection
#FUSES NOMCLR                   //Master Clear pin used for I/O
#FUSES LPT1OSC                  //Timer1 configured for low-power operation
#FUSES NOXINST                  //Extended set extension and Indexed Addressing mode disabled (Legacy mode)
#FUSES PLL1                     //No PLL PreScaler
#FUSES CPUDIV1                  //No System Clock Postscaler
#FUSES USBDIV                   //USB clock source comes from PLL divide by 2
#FUSES VREGEN                   //USB voltage regulator enabled
#FUSES ICPRT                    //ICPRT enabled

#use delay(clock=8000000)
#use rs232(baud=19200,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
nectar
Bit
 
Mensagens: 7
Registrado em: 04 Jun 2011 20:16

Mensagempor andre_luis » 12 Jun 2011 20:43

Apesar de voce ter programado o Brownout reset pra apenas 2.0V, experimente desativar temporariamente esta opção para saber se o resset está vindo daí.

Se possível, também apresenta o circuito aqui.

+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor nectar » 13 Jun 2011 02:37

Mas eu serei ele como desligado, ou seja, apesar de tA em 2v ele nao vai deserde pois tA desativado... O circuito eu teria que fazer todo digital, mas n tem muito mistério, é a ponte de diodo com o zener para 5,1 e os dois capacitores, um na entrada da tensao alternada e outro na saída do circuito já em corrente continua. Já medi tbm, da os 5.16v e a onda esta ok tbm... A ligação eu fiz colocando o positivo do transformador que descrevi acima no AN0 e o negativo no negativo do protoboard onde ponho os fios do transformador que liga o pic(outro transformador)...na saída d0 e d1 liguei leds e o resto tA descrito aí no codigo que fiz em ccs...


Minha única duvida e pq o pic tA travando quando ligo a entrada analógica no an0...

Agradeço a atenção.
nectar
Bit
 
Mensagens: 7
Registrado em: 04 Jun 2011 20:16

Mensagempor nectar » 13 Jun 2011 04:13

Ahh desculpe, esqueci outro detalhe relevante, apesar de está no codigo mas vale a pena dizer, Estou usando o clock interno do pic, no caso o 18f4550, em 8mhz...Na montagem dele no protoboard não usei nenhum clock externo para nada...tudo com o interno, que por sinal até agora me atende bem, não entendo porque algumas pessoas pedem para usar o externo, pelo menos no meu caso e nas minhas aplicações estou bastante satisfeito com o interno do proprio pic.
nectar
Bit
 
Mensagens: 7
Registrado em: 04 Jun 2011 20:16

Mensagempor EDSONCAN » 13 Jun 2011 08:28

EDSONCAN
Word
 
Mensagens: 876
Registrado em: 11 Out 2006 14:11

Mensagempor rona123 » 13 Jun 2011 08:44

Como vc está tratando a entrada analogica? Divisor de tensão com proteções?

Ajuda mostrar o hardware! Pode estar por ai!
[]'s rona123
rona123
Byte
 
Mensagens: 214
Registrado em: 07 Mai 2009 20:01

Mensagempor ÁgioFelipe » 13 Jun 2011 09:21

Pelo que entendi vc quer somente detectar a presença ou não de tensão da rede, pq usar entrada analógica?
Já precisei de um circuio assim, perguntei aqui no fórum inclusive, bolei o circuito e depois postei, dá uma procurada.
ÁgioFelipe
Word
 
Mensagens: 626
Registrado em: 27 Out 2006 20:04

Mensagempor nectar » 13 Jun 2011 18:25

ÁgioFelipe escreveu:Pelo que entendi vc quer somente detectar a presença ou não de tensão da rede, pq usar entrada analógica?
Já precisei de um circuio assim, perguntei aqui no fórum inclusive, bolei o circuito e depois postei, dá uma procurada.


Opa ÁgioFelipe, realmente, quero só detectar a presença de tensão, porem se eu usar a entrada digital, qualquer valor de tensão na entrada do pic será considerada como nivel de tensão alto, então eu teria que esperar o circuito retificador ficar em 0 para que o pic reconhecesse que o sinal logico mudou para zero, isso ia demorar muito, o capacitor do circuito demora muito pra descarregar, mesmo usando um resistor graaande junto a ele.





Como vc está tratando a entrada analogica? Divisor de tensão com proteções?

Ajuda mostrar o hardware! Pode estar por ai!
[]'s rona123


Vou colocar a imagem do retificador aqui, talvez ajude realmente...Vale lembrar que a saida dele entrega os 5.16v bem estaveis, não muda...e a forma de onda tbm, completamente linear.

Imagem



http://ww1.microchip.com/downloads/en/AppNotes/91094A.pdf

Isso ajuda?

Edson


Olá Edson, ajudou bastante, mas não para o sensor de tensão, acabei que vou modificar outro circuito meu com a ajuda do pdf, risos, obrigado!.
nectar
Bit
 
Mensagens: 7
Registrado em: 04 Jun 2011 20:16

Mensagempor andre_luis » 13 Jun 2011 18:58

nectar escreveu:...Minha única duvida e pq o pic tA travando quando ligo a entrada analógica no an0...


Então...

A sugestão que fiz pode estar relacionada á causa do problema.
Apesar da referencia do Brownout reset ser interna ao microcontrolador, de algum modo pode estar ressetando.
Se voce desativar essa opção, terá ao menos a certeza se resseou por esse motivo.

+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor nectar » 13 Jun 2011 19:52

andre_teprom escreveu:
nectar escreveu:...Minha única duvida e pq o pic tA travando quando ligo a entrada analógica no an0...


Então...

A sugestão que fiz pode estar relacionada á causa do problema.
Apesar da referencia do Brownout reset ser interna ao microcontrolador, de algum modo pode estar ressetando.
Se voce desativar essa opção, terá ao menos a certeza se resseou por esse motivo.

+++


Tenho uma boa e uma má noticia.

Descobri que ele tava resetando porque estava acima da tensão, 5.16 ele considera um pouco acima e não parte de jeito maneira, ja resolvi...

O problema agora é que queimou a porta an0, não sei se foi azar ou se eu to fazendo m****...mas agora na an1 ta tudo funcionando direitinho, só to com medo dela queimar tambem, alguma solucão pra isso?

Obrigado pela ajuda ai galera...acredito que esse topic ainda será util pra alguem como eu que esta tentando de alguma forma aprender a usar essa coisinha preta desgraçada...

:)

Abraço!
nectar
Bit
 
Mensagens: 7
Registrado em: 04 Jun 2011 20:16

Mensagempor nectar » 13 Jun 2011 20:31

Percebi agora que isso acontece na hora de ligar na tomada e quando gera um arvo voltaico entre a tomada e o plug o pic fica travado...alguem tem ideia do motivo pra isso? alguma solucão?

O pic só trava quando abre o arco na hora que eu to ligando, se eu ligar lisinho funciona que é uma beleza.
nectar
Bit
 
Mensagens: 7
Registrado em: 04 Jun 2011 20:16

Mensagempor andre_luis » 13 Jun 2011 20:56

nectar,

Agora que eu percebi que seu circuito não possui resistencia em série, que é comum em fontes sem trafo.
Acredito que uma sobretensão esteja casando todo esse problema.

Utilize um osciloscópio na função memória para detectar esse transiente.

+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor rona123 » 13 Jun 2011 21:33

nectar

vc pode acrecentar uma proteção com 2 diodos ligados adequadamente a VDD e VSS de forma a limitar a variação da tensão vista pela entrada analogica ANx. Tambem é conveniente colocar um resistor antes desses diodos e a entrada para limitar a corrente e protege-la.

Veja se já não existe proteção equivalente no datasheet. Talvez so falte o resistor
Editado pela última vez por rona123 em 14 Jun 2011 07:03, em um total de 1 vez.
rona123
Byte
 
Mensagens: 214
Registrado em: 07 Mai 2009 20:01

Mensagempor ÁgioFelipe » 13 Jun 2011 21:56

E que tal usar esse circuito aqui:
Imagem

Uploaded with ImageShack.us[/img]


if(Energia==0)
banbanban;
ÁgioFelipe
Word
 
Mensagens: 626
Registrado em: 27 Out 2006 20:04


Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

cron

x