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

Fiz as alterações mas continua com problema, agora ao conectar o SD todas as leituras ficam zeradas, mas agora cria o txt corretamente.

Medi os pinos 3 e 14 do CS com o SD e não mudou está próximo de 5V

medi os pinos SDO (verde) e SDI (amarelo).

Bom dia Alan. Na atual conjuntura, recomendo  que use um analisador lógico para descobrir o problema. Tem um ? Se não tiver pode tentar montar esse do meu tutorial

http://labdegaragem.com/profiles/blogs/tutorial-analisador-l-gico-c...

Pesquisei um pouco em sites internacionais e descobri que esse módulo tem histórico de incompatibilidade quando trabalha em conjunto com outros dispositivos SPI. Vou comprar outro módulo para cartão SD mesmo e fazer as ligações com resistores.

https://forum.arduino.cc/index.php?topic=360325.0

Alan, me parece que esta tendo problema ainda no pino MISO, não é ? 

Revendo um link, que eu já tinha lhe enviado, descobri que dependendo dos chips usados no SPI BUS, pode ser necessário o uso de um buffer no pino MISO. Talvez seja essa a sua solução :

http://www.dorkbotpdx.org/blog/paul/better_spi_bus_design_in_3_steps

Verify tri-state behavior on MISO: use a tri-state buffer chip if necessary. Veja o Device 2. 

Consegui resolver o problema do log trocando o shield do gravador SD, o módulo da catalex simplesmente não funciona junto com outro dispositivo SPI, ele tem um erro de projeto, isso foi o que achei em um fórum internacional, várias pessoas relataram isso.

Fiz a troca por um modelo SD mesmo:

Consegui gravar o logo perfeitamente com esse modelo, a única questão que ainda não entendi é que se eu conectar o cartão já com o sistema ligado ele não cria o arquivo preciso dar um reset pra começar a gravar.

Exemplo de um log que gravei:

122.00V      2.50A      310.43W      0.98    01.10.16    12:19:46       B2 B3
122.76V      1.54A      181.08W      0.93    01.10.16    12:19:56    B1 B2 B3
123.29V      1.55A      181.08W      0.94    01.10.16    12:20:06    B1 B2 B3
122.79V      1.54A      181.08W      0.93    01.10.16    12:20:16    B1 B2 B3
122.63V      1.54A      181.08W      0.93    01.10.16    12:20:26    B1 B2 B3
122.58V      1.54A      181.08W      0.93    01.10.16    12:20:36    B1 B2 B3
122.99V      2.41A      267.31W      0.89    01.10.16    12:20:47    B1 B2 B3
122.96V      1.84A      137.97W      0.60    01.10.16    12:20:57    B1 B2 B3
121.61V      2.48A      301.81W      0.97    01.10.16    12:21:07       B2 B3
121.61V      2.48A      301.81W      0.98    01.10.16    12:21:17       B2 B3
121.20V      2.45A      301.81W      0.98    01.10.16    12:21:27          B3
121.35V      2.46A      301.81W      0.98    01.10.16    12:21:37          B3
121.30V      2.82A      293.18W      0.84    01.10.16    12:21:47          B3
121.15V      3.10A      344.92W      0.89    01.10.16    12:21:57       B2 B3
121.66V      2.74A      344.92W      1.00    01.10.16    12:22:08       B2 B3
121.48V      4.48A      293.18W      0.53    01.10.16    12:22:18    B1 B2   
121.64V      2.76A      344.92W      0.98    01.10.16    12:22:28          B3
120.98V      3.97A      293.18W      0.59    01.10.16    12:22:38          B3
121.44V      3.73A      258.69W      0.55    01.10.16    12:22:48    B1 B2   
121.62V      2.20A      301.81W      1.00    01.10.16    12:22:58          B3
121.27V      3.69A      250.07W      0.55    01.10.16    12:23:08          B3
121.80V      2.36A      189.71W      0.65    01.10.16    12:23:18    B1 B2   
121.29V      1.60A      215.58W      1.00    01.10.16    12:23:28          B3
121.17V      2.21A      189.71W      0.71    01.10.16    12:23:39          B3
121.25V      2.59A      172.46W      0.55    01.10.16    12:23:49    B1 B2   
121.19V      1.64A      224.20W      1.00    01.10.16    12:23:59          B3
121.00V      3.06A      181.08W      0.49    01.10.16    12:24:09          B3
120.94V      3.03A      189.71W      0.50    01.10.16    12:24:19    B1 B2   
120.97V      1.73A      232.82W      1.00    01.10.16    12:24:29          B3
120.50V      3.62A      206.95W      0.47    01.10.16    12:24:39          B3
120.84V      3.85A      224.20W      0.47    01.10.16    12:24:49    B1 B2   
121.03V      2.12A      267.31W      1.00    01.10.16    12:25:00          B3
121.00V      3.43A      232.82W      0.55    01.10.16    12:25:10          B3
120.25V      2.94A      344.92W      0.94    01.10.16    12:25:20    B1    B3
120.11V      2.93A      344.92W      0.94    01.10.16    12:25:30    B1    B3
120.16V      2.93A      344.92W      0.94    01.10.16    12:25:40    B1    B3
120.79V      2.96A      344.92W      0.94    01.10.16    12:25:50    B1    B3
120.63V      2.95A      344.92W      0.94    01.10.16    12:26:00    B1    B3
120.60V      2.95A      344.92W      0.94    01.10.16    12:26:11    B1    B3

Ainda estou com 2 problemas para resolver, 1º o botão de reset da placa não está funcionando, coloquei um botão para resetar junto o CS5463 e o ATMEGA, mas quando reseto as leituras ficam todas zeradas, estou usando um esquema básico

Liguei o pino Reset do CS5463 no mesmo ponto onde está ligado o pino 1 do microcontrolador, coloquei também um capacitor 0,1uF ligado entre os pinos reset do microcontrolador e do CS e o GND. Fiz um teste para conferir se a tensão caia a zero quando pressiono o botão, com o microcontrolador conectado não está caindo apenas no CS vai a zero, sem o microcontrolador a tensão no pino cai a zero.

Outro problema é quando ao acionamento dos capacitores, estabeleci no código dois limites se o FP cai abaixo de 0,93 começa a acionar os capacitores e se subir acima de 0,98 começa retirar os capacitores. Estou usando 3 capacitores 70uF, 40uF e 15uF e o sistema combina os valores deles para elevar o FP.

Exemplo FP <0,93

15

40

40 + 15

70

70 + 15

70 + 40

70 + 40 + 15

O problema é que as vezes o FP está abaixo de 0,93 e ao colocar um capacitor apenas o FP fica maior que 0,98, aí o sistema retira o capacitor em seguida, porém aí o FP cai novamente abaixo de 0,93 e novamente coloca o capacitor, entra em um loop infinito realizando acionamentos desnecessários. Preciso criar alguma coisa que ele ao colocar um capacitor se o FP passar de 0,98 retire esse capacitor e mesmo que o FP caia abaixo de 0,93 não acione novamente.

Resolvi o reset, liguei o pino de reset do CS em um pino do controlador e coloquei uma rotina que joga o pino para nível 0 dentro da função setup, agora quando aperta o botão reset da placa ele reseta fisicamente apenas o microcontrolador e este por sua vez reseta o CS por código.

Ah bom, eu já tinha feito isso no meu diagrama ! Eu tinha comentado isso com você. 

Você não tinha se preocupado com o reset. 

No meu diagrama, o  pino de RESET do CS5463 esta ligado no pino D09 do Arduino.

http://labdegaragem.com/forum/topics/controlador-de-fp-com-arduino-...

Boa tarde, pessoal, voltei a ter problemas com o cartão SD, não consigo entender, funcionou várias vezes gravei o log perfeitamente, agora estou montando o projeto em uma bancada para a apresentação e parou de funcionar.

O módulo está ligado a placa e funciona normalmente, porém quando conecto o cartão SD na primeira gravação (está configurado para gravar a cada 10s) as leituras ficam desconfiguradas oscilando muito mesmo, o log até é gravado mas com os valores errados.

Acho que deve ser o pino MISO do módulo SD que está bagunçando, vou tentar colocar um buffer triestate, mas agora só segunda pra comprar um 74LS125.

Qual o modulo SD Card esta usando? Envie o link. 

Como fez as conexões ?

Estou usando este módulo http://blog.filipeflop.com/modulos/cartao-sd-com-arduino.html

As conexões fiz desta forma: 

Também experimentei ligar usando os divisores de tensão, como indicado no link acima, mas o resultado foi o mesmo. 

Quase tudo pronto, consegui fazer funcionar quase tudo que eu queria, a última coisa que estou tentando resolver é um problema com a lógica de acionamento dos bancos.
No meu protótipo estou trabalhando com 3 capacitores de valores diferentes (45, 25 e 10uF) e o sistema deve combinar os valores para achar a melhor configuração para que o FP sempre fique em 0,93 e 0,98.

A lógica de acionamento e desacionamento seria a seguinte:

FP<0,93
B1
B2
B1 + B2
B3
B1 + B3
B2 + B3
B1 + B2 + B3

FP>0,98
B2 + B3
B1 + B3
B3
B1 + B2
B2
B1

O problema é que em algumas condições entra em um loop infinito, quando o FP. Por exemplo FP em 0,92 com B3 e B2 ativos, aciona B3. Nesta situação o FP passa para 0,99 com B1, B2 e B3 ativos nestas condições a função desativa B3 e volta para a condição inicial.

   int aciona_bancos(){

  if((Corrente*M_Corrente<1)){ //sistema em vazio
  digitalWrite(b1, LOW);
  digitalWrite(b2, LOW);
  digitalWrite(b3, LOW);
  }
 
  else 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.92){
      liga_bancos();
   }

   if((FP)>0.98){
      desliga_bancos();
   }

   temposalvo = millis();
  }

--------------------------

    int liga_bancos(){

  if (digitalRead(b1)==LOW&&digitalRead(b2)==LOW&&digitalRead(b3)==LOW){
  digitalWrite(b1, HIGH);
  digitalWrite(b2, LOW);
  digitalWrite(b3, LOW);
  }

  else if (digitalRead(b1)==HIGH&&digitalRead(b2)==LOW&&digitalRead(b3)==LOW){
  digitalWrite(b1, LOW);
  digitalWrite(b2, HIGH);
  digitalWrite(b3, LOW);
  }

  else if (digitalRead(b1)==LOW&&digitalRead(b2)==HIGH&&digitalRead(b3)==LOW){
  digitalWrite(b1, HIGH);
  digitalWrite(b2, HIGH);
  digitalWrite(b3, LOW);
  }

  else if (digitalRead(b1)==HIGH&&digitalRead(b2)==HIGH&&digitalRead(b3)==LOW){
  digitalWrite(b1, LOW);
  digitalWrite(b2, LOW);
  digitalWrite(b3, HIGH);
  }

  else if (digitalRead(b1)==LOW&&digitalRead(b2)==LOW&&digitalRead(b3)==HIGH){
  digitalWrite(b1, HIGH);
  digitalWrite(b2, LOW);
  digitalWrite(b3, HIGH);
  }

  else if (digitalRead(b1)==HIGH&&digitalRead(b2)==LOW&&digitalRead(b3)==HIGH){
  digitalWrite(b1, LOW);
  digitalWrite(b2, HIGH);
  digitalWrite(b3, HIGH);
  }

  else if (digitalRead(b1)==LOW&&digitalRead(b2)==HIGH&&digitalRead(b3)==HIGH){
  digitalWrite(b1, HIGH);
  digitalWrite(b2, HIGH);
  digitalWrite(b3, HIGH);
  }
    }

    int desliga_bancos(){
   
  if (digitalRead(b1)==HIGH&&digitalRead(b2)==HIGH&&digitalRead(b3)==HIGH){
  digitalWrite(b1, LOW);
  digitalWrite(b2, HIGH);
  digitalWrite(b3, HIGH);
  }

  else if (digitalRead(b1)==LOW&&digitalRead(b2)==HIGH&&digitalRead(b3)==HIGH){
  digitalWrite(b1, HIGH);
  digitalWrite(b2, LOW);
  digitalWrite(b3, HIGH);
  }

  else if (digitalRead(b1)==HIGH&&digitalRead(b2)==LOW&&digitalRead(b3)==HIGH){
  digitalWrite(b1, LOW);
  digitalWrite(b2, LOW);
  digitalWrite(b3, HIGH);
  }

  else if (digitalRead(b1)==LOW&&digitalRead(b2)==LOW&&digitalRead(b3)==HIGH){
  digitalWrite(b1, HIGH);
  digitalWrite(b2, HIGH);
  digitalWrite(b3, LOW);
  }

  else if (digitalRead(b1)==HIGH&&digitalRead(b2)==HIGH&&digitalRead(b3)==LOW){
  digitalWrite(b1, LOW);
  digitalWrite(b2, HIGH);
  digitalWrite(b3, LOW);
  }

  else if (digitalRead(b1)==LOW&&digitalRead(b2)==HIGH&&digitalRead(b3)==LOW){
  digitalWrite(b1, HIGH);
  digitalWrite(b2, LOW);
  digitalWrite(b3, LOW);
  }

  else if (digitalRead(b1)==HIGH&&digitalRead(b2)==LOW&&digitalRead(b3)==LOW){
  digitalWrite(b1, LOW);
  digitalWrite(b2, LOW);
  digitalWrite(b3, LOW);
  } 
    }

Boa tarde Alan , 

O acionamento dos bancos não precisa de tempo para estabilizar ? 

Eu sugiro que insira um delay em cada acionamento ou desativação de bancos.

" O problema é que em algumas condições entra em um loop infinito, quando o FP. Por exemplo FP em 0,92 com B3 e B2 ativos, aciona B3. Nesta situação o FP passa para 0,99 com B1, B2 e B3 ativos nestas condições a função desativa B3 e volta para a condição inicial." 

O seu sistema não seria um corretor de fator de potência ? 

O sistema monitora o fator de potência e vai corrigindo através da realimentação. 

No exemplo citado acima, qual seria a condição ideal ? Você acha que ele deveria manter no 0,98 ?

https://pt.wikipedia.org/wiki/Controlador_proporcional_integral_der...

 

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço