Controlador de Fator de Potência

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Mensagempor RAguiar » 30 Jan 2011 09:49

Olá pessoal!

Seguinte, até o momento consegui fazer o seguinte, um conjunto de AMPOP amplifica e gera uma onda quadra para o zero cross de corrente e o mesmo para o zero cross de tensão, aplico à uma AND que por sua vez gera um terceiro sinal, sendo que o tempo em que fica em nivel logico 1 representa a defasagem...

...pois bem, estou tentanto medir o tempo em que o pulso fica em 1, mas o valor apresentado no display oscila e não tem nada à ver com o tempo em 1 (500uS)...

...já li umas 3 apostilas sobre o modulo CCP em C, as tres mostram o codigo abaixo, mas não dá certo, já fiz umas alterações, mas dá na mesma, valores estranhos e aleatórios são exibidos...

/*
-----------------------------------------------------
Projeto......: programando microcontrolador pic
Descrição....: captura a largura de um pulso no pino RB3
-----------------------------------------------------
*/
#include <16F877a.h>
#FUSES NOWDT,XT,PUT,NOPROTECT,BROWNOUT,NOLVP,NOCPD
#use fast_io(a)
#use fast_io(b)
#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_B2,rcv=PIN_B1,bits=8)
#include "lcd.c"
//
#byte Rb = 0x06
#define trisb 0b00001010 // 1 input
//
#bit capturou = 0x0C.2 //CCP1IF - ver capítulo 3.12
#bit interrupcao = 0x8C.2 //CCP1IE
//
void main(){
int16 tempo;
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
//captura pulso ascendente
setup_ccp1(CCP_CAPTURE_RE);
//
Set_tris_b( trisb ); //direção dos bits do portB
Rb = 0; //zera todos os bits
While( true ){
capturou = 0; //zera flag de captura

interrupcao= 0; //zera flag de interrupção
set_timer1(0); //zera o timer1 , incremento a cada 1us.
while( ! capturou ); //executa enquanto não capturou
tempo = ccp_1;//houve um evento em RB3 capturou o tempo


lcd_init();
lcd_putc ("\f");
printf (lcd_putc, "Tempo = %lu\r\n", tempo);
//printf(tempo (us) = %2X\n\r, tempo); //envia ao PC
delay_ms(200);
}
}

tentei esse:

#include <16f877a.h>
#use delay (clock=4000000)
#fuses XT, NOWDT, NOPUT, NOPROTECT, BROWNOUT
#byte porta = 0x05
#byte portb = 0x06
#use fast_io (a)
#use fast_io (b)
#byte porta = 0x05
#byte portb = 0x06
#byte Rb = 0x06
#define trisb 0b00001010 // 1 input
//
#bit capturou = 0x0C.2 // CCP1IE
#bit interrupcao = 0x8C.2 //CCP1IE
//
#include "lcd.c"

int16 tempo, tempo2, tempo3;
void main()

{

set_tris_a(0x00);
set_tris_b(0x00);
porta = 0x00;
portb = 0x00;


lcd_init();
lcd_putc("\fAGUARDE");
lcd_putc("\nINICIALIZANDO");


delay_ms (1000);
lcd_init();

setup_timer_0 (RTCC_INTERNAL | RTCC_DIV_1);
setup_timer_1 (T1_INTERNAL | T1_DIV_BY_1);
setup_timer_2 (T2_DISABLED, 0, 1);
setup_comparator (NC_NC_NC_NC);
setup_vref (FALSE); //captura pulso ascendente
setup_ccp1 (CCP_CAPTURE_RE);
setup_ccp2 (CCP_CAPTURE_FE);

Set_tris_b (trisb); //direção dos bits do port B
Rb = 0; //zera todos os bits

While (true)
{
capturou = 0; //zera flag de captura
interrupcao = 0; //zera flag de interrupção
set_timer1 (0); //zera o timer1, icremento a cada 1us


//while ( ! capturou );//executa enquanto não capturou
//{
//output_high (pin_d1);
//delay_ms (500);
//output_low (pin_d1);
//delay_ms (500);
//}

tempo = ccp_1 ; //houve um evento em RC2 capturou o tempo
tempo2 = ccp_2;
tempo3 = (ccp_1 - ccp_2);
delay_us (10);

lcd_init();
printf (lcd_putc, "Tempo = %lu\r\n", tempo3 );
delay_ms (100);
}


reset_cpu();
}

e esse exibe 530, e um valor alto alternadamente...
RAguiar
Byte
 
Mensagens: 164
Registrado em: 17 Jun 2010 12:52
Localização: Louveira/SP

Mensagempor RAguiar » 13 Fev 2011 14:47

Olá pessoal, as coisas estão indo muito bem por aqui...até o momento...

...a parte de captura do sinal, combinação com AMPOP's e AND apenas simulei no proteus e funfou...
...a parte em que o PIC lê o tempo da porta AND e calcula o FP e mostra no display funfou muito bem (não usei modulo CCP).Com outro pic, gerei uma onda quadrada e fiz diversos testes e o segundo PIC leu o sinal e calculou direitinho...(se bem que tive problema com conta de dividir, tipo 5/2= 2.5, mas ele mostra 2 e resto 1...mas consegui fazer outro tipo de formula que usar a divisão, mas com multiplicação junto e deu certo).

...agora estarei passando á parte dos AMPOP's e AND simulados no proteus, vou comprar os componentes, TC e por na pratica e tentar gerar a onda quadrada conforme na simulação.

Tanto o hardware, quanto o soft que acabei desenvolvendo acabou não sendo nada à ver com as idéias iniciais, acabou sendo mais simples...(pensando como uma máquina ficou mais facil gerar a logica).

Futuramente posto o bagulho em funcionamento.

Flw.
RAguiar
Byte
 
Mensagens: 164
Registrado em: 17 Jun 2010 12:52
Localização: Louveira/SP

Mensagempor RAguiar » 03 Mar 2011 16:02

Ola pessoal.

Quem poder der uma luz agradeço...

...comprei um LM725 para amplificar o sinal do TC, mas só aparece ruído na saída...to mexendo aqui pra tentar chegar em algo.

preciso amplificar 1mV para pelo menos 1V...para poder passar à etapa seguinte...

Flw
RAguiar
Byte
 
Mensagens: 164
Registrado em: 17 Jun 2010 12:52
Localização: Louveira/SP

Mensagempor andre_luis » 03 Mar 2011 16:35

RAguiar escreveu:...comprei um LM725 para amplificar o sinal do TC, mas só aparece ruído na saída...
Flw


Colocou filtro capacitivo para eliminar spikes ?

+++
"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 RAguiar » 03 Mar 2011 16:43

andre_teprom escreveu:
RAguiar escreveu:...comprei um LM725 para amplificar o sinal do TC, mas só aparece ruído na saída...
Flw


Colocou filtro capacitivo para eliminar spikes ?

+++


Mesmo com um passa baixa na saída não resolveu...montei da mesma forma que no datasheet...
...já no multsim funfou...
RAguiar
Byte
 
Mensagens: 164
Registrado em: 17 Jun 2010 12:52
Localização: Louveira/SP

Mensagempor RAguiar » 20 Mar 2011 10:44

Olá pessoal

...consegui por meio do LM725 amplificar o sinal de entrada, 10mV senoidal, saída 5VCC, o ampop me dá na saída uma onda quadrada que acompanha a senoide nas passagens por zero, porém notei que no ampop, não tendo sinal na entrada, fica com a saída em 2.5V contínuo, quando injeto o sinal na entrada, a saida vira uma onda quadra, porém o nível baixo não fica em zero absouto conforme o GND do osciloscopio, é como se os 2.5V fossem o GND pelo AMPOP, resulmindo o nível baixo da onda quadrada, não está realmente em 0V...

http://www.engenhariaeletrotecnica.com/ ... olador.htm

O que posso fazer?
RAguiar
Byte
 
Mensagens: 164
Registrado em: 17 Jun 2010 12:52
Localização: Louveira/SP

Mensagempor RAguiar » 22 Abr 2011 08:58

Bom dia.

Estive pesquisando na net e encontrei o LV25P da LEM, é um transdutor de tensão, daria certo para o meu projeto para medir tensões...porém não achei lojas virtuais para comprá-lo ou média de preços...alguém dá uma dica?

...outra coisa, pesquisei mas não consegui uma resposta para: será que ele reflete a senoide no lado secundário ou é uma tensão DC, ou seja serve apenas para medição de tensão e não para análise da senoide...

...estou analisando entre usar este Transdutor e um Trafo comum de 400VCA de entrada por 5VCA de saída...por que pretendo medir tensões de 100VCA à 380VCA...

...estive pensando em usar resistores divisivos, mas é mais perigoso e mais facil de se queimar o prototipo.

Obrigado.
RAguiar
Byte
 
Mensagens: 164
Registrado em: 17 Jun 2010 12:52
Localização: Louveira/SP

Mensagempor xultz » 22 Abr 2011 10:19

Aguiar, quem representa a LEM no Brasil é a AMDS4 (http://www.amds4.com.br/), já comprei com eles várias vezes porque já usei produtos LEM em muitos projetos que fiz.
O LV25P mede a tensão por meio de corrente: é como se ele fosse um transformador, você limita a corrente no primário com um resistor, e na saída tem uma corrente proporcional à da entrada. Por isso, precisa colocar também um resistor na saída para que essa corrente gere uma tensão que será usada pelo teu circuito.
Uma vantagem enorme de usar LEM é que ele não defasa em quase nada o sinal da entrada da saída, ou seja, se você colocar uma senóide na entrada, tem uma senóide equivalente na saída, ambos cruzando juntinhos pelo zero.
Você pode fazer o mesmo com um trafo, mas é chato de achar trafo com qualidade. Se pegar desses que tem no mercado, veja a forma de onda na saída e fique com medo, ela sai absurdamente distorcida, porque eles usam ferro ruim no núcleo. Tudo vai depender de que margem de custo você pode trabalhar no teu projeto. Se por exemplo você usar um LV25P com um LA25 prá medir a tensão e a corrente, você vai estar usando sensores filé e não se preocupa em nada com esse detalhe, só se preocupa com a automação. Mas se precisa se preocupar com custo, aí você pode medir a tensão com divisor resistivo e corrente com shunt. Tudo depende do fator grana.
98% das vezes estou certo, e não estou nem aí pros outros 3%.
Avatar do usuário
xultz
Dword
 
Mensagens: 3001
Registrado em: 13 Out 2006 18:41
Localização: Curitiba

Mensagempor Silvio51 » 22 Abr 2011 10:48

Amigo RAguiar.... pára de sofrer... usa um chip dedicado para isso: CS5460A. Com ele você resolve 99,9999998% dos teus problemas para este projeto. Já projetei um medidor/controlador multigrandezas com este CI. Ele trabalha prativamente sozinho e já deixa em endereços de memórias (automaticamente) os valores que tu precisa: Fp, Vrms, Irms, Etotal, Einstantânea, etc...
Silvio51
Byte
 
Mensagens: 383
Registrado em: 02 Nov 2006 14:04
Localização: Brasil

Mensagempor RAguiar » 22 Abr 2011 11:49

Silvio51 escreveu:Amigo RAguiar.... pára de sofrer... usa um chip dedicado para isso: CS5460A. Com ele você resolve 99,9999998% dos teus problemas para este projeto. Já projetei um medidor/controlador multigrandezas com este CI. Ele trabalha prativamente sozinho e já deixa em endereços de memórias (automaticamente) os valores que tu precisa: Fp, Vrms, Irms, Etotal, Einstantânea, etc...


Hum, legal. obrigado pela dica.
...onde encontro ele para comprar?1 unidade para prototipo.
RAguiar
Byte
 
Mensagens: 164
Registrado em: 17 Jun 2010 12:52
Localização: Louveira/SP

Mensagempor Djalma Toledo Rodrigues » 22 Abr 2011 14:30

RAguiar escreveu:
Silvio51 escreveu:Hum, legal. obrigado pela dica.
...onde encontro ele para comprar?1 unidade para prototipo.

Sugestão: Duas no mínimo

DJ
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22

Mensagempor RAguiar » 22 Abr 2011 20:12

RAguiar escreveu:
Silvio51 escreveu:Amigo RAguiar.... pára de sofrer... usa um chip dedicado para isso: CS5460A. Com ele você resolve 99,9999998% dos teus problemas para este projeto. Já projetei um medidor/controlador multigrandezas com este CI. Ele trabalha prativamente sozinho e já deixa em endereços de memórias (automaticamente) os valores que tu precisa: Fp, Vrms, Irms, Etotal, Einstantânea, etc...


Hum, legal. obrigado pela dica.
...onde encontro ele para comprar?1 unidade para prototipo.


encontrei aqui:
http://pt.farnell.com/jsp/search/altsSu ... ku=1859797
RAguiar
Byte
 
Mensagens: 164
Registrado em: 17 Jun 2010 12:52
Localização: Louveira/SP

Mensagempor RAguiar » 15 Mai 2011 12:41

mas que mer... heim!, consegui aqui acondicionar a onda quadrada de tensão e da corrente, somei os dois e obtive um terceiro sinal que varia de tempo conforme o FP da carga, tava quase no orgas... de aplicar o sinal no pic para ver no que dava, tava quase lá quando daí PUF!, queimei PIC e display por falta de atenção, só por que liguei a alimentação do PIC invertida...vai eu comprar os negocio de novo! preju de 40 conto.fora outros 2 16f877a que já invalidei :twisted:
RAguiar
Byte
 
Mensagens: 164
Registrado em: 17 Jun 2010 12:52
Localização: Louveira/SP

Mensagempor RAguiar » 05 Jun 2011 19:20

Fala pessoal.

Seguinte, to tentando calibrar o soft no pic para medir o FP...um estagio do programa mede o tempo em microsegundos e mostra no display, porém o valor mostrado para o semi-ciclo da senoide foi de 7555uS...mas pelos calculos deveria ser 8333uS...

...estou na duvida se o pic esta medindo o tempo corretamente, pois, com outro PIC criei diversas ondas quadradas com tempos conhecidos e o PIC mediu os tempos corretamente, mas ao medir os semi-ciclos da senoide dá 7555uS...

...é com base nesse tempo lido que o pic calcula o FP e mostra no display.

detalhe: rede 60Hz

outra coisa, preciso de uma carga resistiva perfeita para calibrar o soft...já percebi que o FP de uma lampada incandescente é bem divergente de um Ferro de Passar roupa, apesar de ambos serem puramente resistivos...que tipo de carga será que usam para calibrarem instrumento do tipo?
Paciência é tudo.
RAguiar
Byte
 
Mensagens: 164
Registrado em: 17 Jun 2010 12:52
Localização: Louveira/SP

Mensagempor andre_luis » 05 Jun 2011 20:11

RAguiar escreveu:...o valor mostrado para o semi-ciclo da senoide foi de 7555uS...mas pelos calculos deveria ser 8333uS...


Se voce está medindo a largura de cada pulso, essa pode ser a razão do problema.
Repare que o circuito de detecção de semiciclos possui uma região ( próximo do zero-crossing da senoide ) que ainda não é capaz de saturar o comparador.

Tente aplicar um ganho maior para o circuito de detecção da senóide, ou mudar o algorítimo para considerar a perda de informação dessa fase do ciclo.


+++
"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

AnteriorPróximo

Voltar para PIC

Quem está online

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

x