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: 11388

Anexos

Responder esta

Respostas a este tópico

Boa tarde pessoal,

Estou avançando com o projeto, não estou trabalhando ainda em uma biblioteca, se der tempo vou tentar criar uma, estou me concentrando em fazer funcionar tudo o que pretendo. Gravei um vídeo de como está funcionando, não liguei os capacitores mas já dá pra ter uma ideia.

Coloquei um RTC para criar um log com as leituras, data e hora, gravando um txt em um cartão SD, mas estou tendo problemas para gravar no SD. Quando conecto o módulo as leituras ficam zeradas ou oscilando e não cria o txt.

Criei um segundo arquivo apenas fazendo as leituras e gravando no SD ai funcionou normalmente consegui o log, porém quando junto tudo em um código só dá problema.

Esta é a função que grava no SD:

int grava_log(){

digitalWrite(CS, LOW);

File dataFile = SD.open("Leituras.txt", FILE_WRITE);

if (dataFile){
  dataFile.print(Tensao*M_Tensao);
  dataFile.print("V      ");
  dataFile.print(Corrente*M_Corrente);
  dataFile.print("A      ");
  dataFile.print(P_Real*M_P_Real);
  dataFile.print("W      ");
  dataFile.print(FP*M_FP);
  dataFile.print("    ");
  dataFile.print(rtc.getMonthStr());
  dataFile.print("    ");
  dataFile.print(rtc.getTimeStr());
  dataFile.print("    ");

    if (b1==1){
      dataFile.print("B1 ");
    }
    else if (b1==0){
      dataFile.print("   ");
    }

    if (b2==1){
      dataFile.print("B2 ");
    }
    else if (b2==0){
      dataFile.print("   ");
    }

    if (b3==1){
      dataFile.println("B3 ");
    }
    else if (b3==0){
      dataFile.println("   ");
    }

  dataFile.close();
  cartao=1;
  digitalWrite(CS, HIGH);
  }

else{
  cartao=0;
  digitalWrite(CS, HIGH);
}

}

Se alguém tiver uma ideia do que pode estar causando esta instabilidade agradeço a ajuda.

https://www.youtube.com/watch?v=r4p3yK-uMcI&feature=youtu.be

Anexos

Boa tarde Alan, tudo bem?

Você não informou qual o RTC e nem qual display LCD esta usando. Mas analisando o seu Sketch, dá para perceber que esta usando um RTC DS1307 e um Display LCD I2C. Ambos usam a interface I2C e não deveriam interferir no circuito. Não recomendo que use o RTS DS1307 pois esse relógio é bem impreciso. 

http://labdegaragem.com/forum/topics/ajuda-rtc-ds1307

Minha sugestão - use um DS3231 :

Esse Data logger é bem interessante !

https://edwardmallon.wordpress.com/2014/10/07/the-diy-data-logger-v...

Já o SD Card usa também a interface SPI. Não use esse cabo extenso para conectar o módulo do SD Card ! Conecte-o diretamente na sua placa principal, pois a comunicação SPI poderá estar sofrendo interferência. E mais , esta usando resistores de pullup na interface SPI ?? 

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

Fez essas conexões, não é mesmo ?

int PINO_CS = 10;   CS5463
int CS = 9;               SD Card 

Qual modulo SD Card esta usando ?

E mais ! Alimentou o modulo com 3,3V ? A interface SPI do Modulo SD tem que ser convertida para a interface SPI 5V ! Pode usar também um conversor logico . 

Olá José, boa noite,

Bom o RTC que estou usando é o modelo TinyRTC com conexão I2C, não prestei atenção na precisão vou verificar e depois posto aqui.

http://www.embarcados.com.br/modulo-tiny-rtc-i2c-parte-1/

Já o gravador na verdade é de MicroSD é um modelo da catalex esse aqui:

http://www.usinainfo.com.br/modulos-para-arduino/sd-card-arduino-le...

Ele já trabalha com 5V, mas eu realmente não coloquei o pullup vou experimentar, e reduzir o cabo também, vou ter que deixar um pedaço de cabo porque estou montando em uma caixa e o módulo fica na tampa da caixa para o usuário colocar o cartão sem abrir.

Legal esse modulo SD Card da Catalex - já possui o chip de conversão de níveis lógicos !

pensamos muito parecidos ...

RTC, datalogger e etc ...

enfim ...

da uma olhada no biblioteca softserial ... vc pode expandir o numero de porta de tx/rx e ter vários shields. Nota: Perderá quantidade de porta disponível.

Boa tarde pessoal, coloquei o resistor de pullup e tirei o cabo longo mas não resolveu nada, quando gravo o código completo e conecto o SD as leituras param. Já quando carrego um código que só faz as leituras e grava no SD (Sem display e RTC) ele cria o arquivo de texto e grava porém os valores estão meio loucos. Pensei em diminuir a quantidade de gravações tipo gravar as leituras a cada 30 segundos por exemplo.

117.62V       4.62A       1876.15W       0.79         x00:00:85        00:00:85
117.62V       98.60A       405.00W       0.02         x00:00:85        00:00:85
75.75V       4.62A       1876.15W       0.02         x00:00:85        00:00:85
75.75V       98.60A       1876.15W       0.02         x00:00:85        00:00:85
117.62V       98.60A       1876.15W       0.79         x00:00:85        00:00:85
75.75V       98.60A       1876.15W       0.02         x00:00:85        00:00:85
75.75V       98.60A       405.00W       0.02         x00:00:85        00:00:85
75.75V       98.60A       1876.15W       0.79         x00:00:85        00:00:85
117.62V       4.62A       1876.15W       0.79         x00:00:85        00:00:85
117.62V       4.62A       1876.15W       0.79         x00:00:85        00:00:85
117.62V       98.60A       405.00W       0.02         x00:00:85        00:00:85
75.75V       98.60A       405.00W       0.02         x00:00:85        00:00:85
117.62V       98.60A       1876.15W       0.02         x00:00:85        00:00:85
117.62V       98.60A       405.00W       0.02         x00:00:85        00:00:85
75.75V       98.60A       1876.15W       0.02         x00:00:85        00:00:85
75.75V       4.62A       1876.15W       0.02         x00:00:85        00:00:85
117.62V       98.60A       405.00W       0.02         x00:00:85        00:00:85
75.75V       98.60A       405.00W       0.79         x00:00:85        00:00:85

Obs.: Observei o RTC e parece ser razoavelmente preciso, eu acertei ele no sábado pela manhã e agora segunda a tarde não atrasou nem um minuto, os segundos eu não tinha acertado tão precisamente então não posso falar.

" quando gravo o código completo e conecto o SD as leituras param" 

Isso quer dizer que o SD Card esta inferindo, não é ?

Meça o pino CS do SD Card, para ter certeza que ele não esta ativando o SPI Bus (barramento) 

Será que o conversor de sinal lógico esta interferindo ? Tem osciloscópio , meça os pinos SPI. 

Boa tarde,

Essa semana foi corrida, só consegui ver hj, fiz algumas leituras com o osciloscópio nos pinos SPI o CS parece que está normal, não há sobreposição da onda, ou seja, só um slave está ativando por vez, nas imagens a onda verde é o gravador SD e a amarela o CS5463 mas ainda não está funcionando não cria o arquivo txt.

Passei o dia tentando hoje fazer funcionar, consegui evoluir um pouco.

1º Mudei um pouco o código, passei a colocar o controle o pino CS do gravador na própria função que inicia o SD;

int CS = 9;

.

.

.

SD.begin(CS);

2º Diminui a quantidade de gravações para uma a cada 10 segundos;

  tempoatual1 = millis();
  if((tempoatual1-temposalvo1)>=10000){
  grava_log();
  }

Descobri que é o display que está influenciando, carreguei o mesmo código, sem o display estar conectado consegui gravar o txt com as leituras corretas:

112.18V       5.56A       533.08W       0.90         September        19:12:03
112.21V       5.57A       533.08W       0.90         September        19:12:13
111.84V       5.54A       529.62W       0.90         September        19:12:23
112.11V       5.56A       533.08W       0.90         September        19:12:33
111.82V       5.55A       529.62W       0.90         September        19:12:43

Já quando conecto o display as leituras ficam completamente bagunçadas:

139.48V       156.36A       -8653.84W       -0.15         September        19:16:29
151.49V       166.92A       20547.69W       0.90         September        19:16:39
150.31V       123.76A       10813.84W       0.90         September        19:16:49
151.97V       167.28A       -5406.92W       0.90         September        19:16:59
138.85V       82.46A       34611.92W       0.90         September        19:17:09

Vou conferir a ligação, pra ver se tem algum curto ou ligação errada mas acho que não, o modelo que estou usando é o QC2004A com módulo I2C.

Bom dia Alan, boas evoluções no projeto !

Meça a tensão 5V , pois pode ser que com o display ativo haja uma queda de tensão. 

Pois o display usa a interface I2C e não deveria atrapalhar a interface SPI. 

Perai !!! Estava revendo as formas de onda e acho que tem algo errado na forma de onda SDO com o cartão SD conectado ! Veja que o sinal esta com nível lógico muito baixo ! 

Por que isso ? Tem algo errado ai !

Achei um erro na placa, percebi que liguei o vcc do display no pino 14 do CS, acredito que esteja influenciando vou modificar e testar.

Putz, tá errado mesmo ! Quando liga o display , o VCC do CS5463 vai baixar e ele vai ficar doidão ! Qual é o valor desse resistor ? 10 ohms ?

E os pinos estão trocados também !  O 14 com o 3 ! 

VA+ pino 14 

VD+ pino 3 

A tensão de alimentação analógica ( VA+) tem que ser maior que  a tensão de alimentação Digital (VD+). Esta assim no Datasheet. Não sei porque. 

Mas faça assim !

Depois que corrigir os erros, meça com o scope o pino SDO novamente. 

Ele esta com sinal incompatível !

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço