Boa tarde,

Estou trabalhando em um TCC usando o CI CS5463 para medir o fator de potência e outras grandezas também, minha ideia é desenvolver um controlador de FP que acione bancos de capacitores, mas que seja um projeto aberto que possa ser montado facilmente, tendo em vista que os controladores comerciais são caríssimos.

Já montei o circuito com o CS e agora estou partindo para a comunicação SPI com o Arduino, preciso escrever em alguns registradores do CS e também ler alguns. Já li bastante coisa na internet sobre SPI e estou estudando o exemplo de código que vem na IDE do arduino mas ainda está um pouco difícil de entender a sintaxe do código.

Se alguém puder me dar uma ajuda ou sugerir algum material para eu estudar agradeceria bastante.

Exibições: 11356

Anexos

Responder esta

Respostas a este tópico

Boa tarde, José Gustavo, sim precisa de tempo, por isso tem a função millis, na função loop a função aciona_bancos só é chamada a cada 3 segundos. 

Eu entendo que manter o FP alto demais pode tornar o circuito capacitivo o que também não seria bom, minha intenção é que ele mantivesse o FP dentro da faixa de 0,93 a 0,97, caso passe de 0,97 ele deve ir retirando os capacitores do menor para o maior mesmo que o FP fique abaixo de 0,93. 

Eu mudei um pouco a função e melhorou, agora são poucas situações que está caindo em loop, como por exemplo neste caso: 

FP 0,50 - o sistema coloca o B1 e passa para 0,53

o sistema tira B1 e coloca B2 aí o sistema passa para 0,98, retira B2 e coloca B1 voltando ao estado inicial. 

Fiz algumas modificações na função e melhorou um pouco só algumas situações que estão caindo no loop.

Acho que vou deixar assim mesmo, afinal de contas o banco de capacitores em uma situação real precisaria ser dimensionado de acordo com o regime de funcionamento da instalação (poderia até ser aferido com o dataloger do próprio aparelho) e assim dividido os capacitores de forma a não entrar em loop.

Estou agora tentando entender só uma situação, quando o sistema está em vazio, B1 fica sempre ativo. 

int aciona_bancos(){

if((Corrente*M_Corrente<1)){ //sistema em vazio
digitalWrite(b1, LOW);
digitalWrite(b2, LOW);
digitalWrite(b3, LOW);
}

if((Corrente*M_Corrente>1)&&((FP)<0.20)&&(digitalRead(b1)==HIGH)&&(digitalRead(b2)==HIGH)&&(digitalRead(b3)==HIGH)){ //cargas removidas e bancos ativos, desativa os bancos
digitalWrite(b1, LOW);
digitalWrite(b2, LOW);
digitalWrite(b3, LOW);
}

if (FP>0.97){
FP_A=FP;
}

if(FP<0.93){
if(FP_A - FP>=0.15){
liga_bancos();

if(FP>0.97){
FP_A=FP;
desliga_bancos();
}

}
else{
if(FP>0.97){
desliga_bancos();
}

}

}

else{
if(FP>0.97){
desliga_bancos();
}
}

temposalvo = millis();
}

Estou agora tentando entender só uma situação, quando o sistema está em vazio, B1 fica sempre ativo. " 

Para identificar onde esta o erro, sugiro que dê um print em cada uma das rotinas , por exemplo:

if ((Corrente*M_Corrente<1))   //sistema em vazio

 { 
digitalWrite(b1, LOW);
digitalWrite(b2, LOW);
digitalWrite(b3, LOW);

Serial.println ( " Sistema vazio ") ; 
}

Assim conseguirá identificar qual situação esta provocando o erro. 

Consegui já resolver, arrumei de outra forma a função ativa bancos.

int aciona_bancos(){

if((Corrente*M_Corrente>1)){

if (FP>0.97){

FP_A=FP;

}

if(FP<0.93){

if(FP_A - FP>=0.15){

liga_bancos();

if(FP>0.97){

FP_A=FP;

desliga_bancos();

}

}

else{

if(FP>0.97){

desliga_bancos();

}

}

}

else{

if(FP>0.97){

desliga_bancos();

}

}

}

if((Corrente*M_Corrente>1)&&((FP)<0.20)&&(digitalRead(b1)==HIGH)&&(digitalRead

(b2)==HIGH)&&(digitalRead(b3)==HIGH)){

digitalWrite(b1, LOW);

digitalWrite(b2, LOW);

digitalWrite(b3, LOW);

}

temposalvo = millis();

}

Alan Lima boa noite, 

Achei esse chip bem interessante  - MCP3909 (medidor de energia) 

http://www.microchip.com/wwwproducts/en/MCP3909

Bem interessante, vou dar uma olhada nele depois, estou meio sem tempo agora por causa do final do período mas logo posto o meu trabalho, já apresentei na semana passada.

Parabéns Alan ! Legal demais. 

E como foi a avaliação da apresentação do seu projeto ? 

Graças a Deus e a ajuda sua e do fórum foi excelente, me deram nota máxima, assim que der eu posto o material final aqui e gravo um vídeo, montei uma bancada com alguns motores e levei para a apresentação junto com o controlador para demonstrar o funcionamento na prática.

Legal ! Muito bom !

Parabéns!

Bom dia,

Estou devendo um vídeo com o equipamento funcionando, mas vou fazer assim que possível, estou anexando o arquivo final do TCC.

Anexos

Hola Alan, você pode aprender a fazer o teste para obter algo semelhante e obter três meses que estão procurando meses para obter informações para copiar um código de registro (você aprende algo sobre C / C ++), mas se você está entendendo o que é lógico do 5463 .... como se dividir seu código ... (perdido por portugues, use o tradutor do Google.).

Ariel boa tarde, 

Esta difícil de entender o que deseja. 

Escreva na sua lingua e a gente traduz. Rs rs 

========================================

Ariel buenas tardes

Es difícil entender lo que quieres.

Escriba en su idioma y lo traduciremos. Rs rs  (Google translator) 

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço