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

Alan , boa noite. 

Fiz esse diagrama, baseando-me nos datasheets e aplication notes da CIRRUS. 

A parte de conexão do Arduino ( seção digital) eu fiz, baseando-me no programa CS5463_SPI_V5.0.ino,

O pino MODE deixei aterrado, pois é o modo normal.

Veja que tem um resistor no pino CS ( copiei da CIRRUS) . 

A saída -INT do CS5463 conectei-a no pino D02 do Arduino ( poderá ser util). 

Acho que ficou bonito. Favor conferir se as suas  ligações estão de acordo. 

A parte analógica, terei que estudar ainda para determinar os valores dos componentes. 

Para desenhar, usei o programa grátis https://www.expresspcb.com/

Olá José Gustavo, estou usando o circuito abaixo, também deixei aterrado o pino MODE, já o pino INT liguei no VCC, no momento não vejo utilidade para ele, o pino INT pelo que entendi do datasheet é configurado pelo registrador CONFIG nos bits IMODE e IINV como deixei esses bits como 00 o pino INT será ativo em nível baixo, (por isso liguei no vcc para ele não ser ativo acidentalmente por flutuação).

Quanto ao resistor no pino CS não achei isso no datasheet, pode por favor citar onde tem a indicação do uso deste resistor?

O pino reset apesar de eu não ter ligado ao arduino acho que futuramente pode ser útil caso seja necessário implementar no código alguma rotina para reset por hardware no CS, apesar de também ser possível fazer isso enviando três comandos SYNC1 seguido de um SYNC0, o que já está sendo feito no código.

Estou no momento escrevendo um código baseado no CS5463_SPI_V5.0.ino para atender as minhas necessidades retirando o que não vou usar, quando estiver pronto posto aqui, só que estou com uma dúvida nesta parte do código, não entendi o que está sendo feito nesta parte do código:

 digitalWrite(CS, LOW);     
 SPI.transfer(START_CONTINOUS);
 digitalWrite(CS, HIGH);

Se você conseguir entender me explica por gentileza.

Alan o pino INT é saída, se você ligar diretamente no VCC, então pode danificar esse pino, em ultimo caso danificar até mesmo o CI, pois assim irá provocar um curto-circuito interno no chip.

Deixe o pino INT flutuando.

Mesmo assim se você não quiser deixar flutuando, coloque um resistor em série ligado ao VCC, mas isso é desnecessário.

Tem razão Flávio, tinha entendido errado o datasheet, realmente é uma saída, já alterei isso deixei o pino desconectado mesmo.

Como o nosso amigo Flávio já lhe alertou, o pino INT é uma saída e não pode conecta-lo diretamente no VD+ e nem  no GND. 

O resistor no pino CS , eu encontrei no exemplo de montagem com um ATtiny2313 :(figura 22) 

https://www.cirrus.com/en/pubs/rdDatasheet/CRD5463PM_RD2.pdf

Recomendo que conecte o pino -Reset na porta D09 do Arduino, pois assim terá o controle da reinicialização do Chip ( vide o exemplo do forum do Arduino).

 digitalWrite(CS, LOW);     
 SPI.transfer(START_CONTINOUS);
 digitalWrite(CS, HIGH);

O pino - CS é usado na comunicação SPI . Quando ele  esta no sinal baixo (low), a interface SPI é ativada. 

Seu diagrama esta incorreto ! As portas E1, E2 e E3 devem estar conectadas no +VD e não no terra (GND) . Veja o meu diagrama. 

A parte analógica não estudei ainda...

Ok, vou fazer essas mudanças. Mas a parte do código que não entendi é a segunda linha

SPI.transfer(START_CONTINOUS);

Tentei tirar ela do código mas não funcionou, só fez a primeira leitura e depois parou de atualizar.

Segue o código que eu estou escrevendo. As leituras ainda estão variando muito, não sei o motivo.

Leituras que obtive:

Tensao: 12964.00
Tensao: 12964.00
Tensao: 14012.00
Tensao: 14918.00
Tensao: 14982.00
Tensao: 15930.00
Tensao: 15890.00
Tensao: 16028.00
Tensao: 16260.00
Tensao: 15714.00
Tensao: 16132.00
Tensao: 15602.00
Tensao: 15550.00
Tensao: 14106.00
Tensao: 13220.00
Tensao: 12702.00
Tensao: 13100.00
Tensao: 11864.00
Tensao: 12796.00
Tensao: 13392.00
Tensao: 12440.00
Tensao: 11688.00
Tensao: 6788.00
Tensao: 13122.00
Tensao: 19956.00
Tensao: 21780.00
Tensao: 22612.00
Tensao: -2552.00
Tensao: 24684.00
Tensao: 15824.00
Tensao: -31112.00
Tensao: 13516.00
Tensao: 15316.00
Tensao: 15348.00
Tensao: 17262.00
Tensao: 17030.00
Tensao: 16986.00
Tensao: 17306.00

Anexos

Bom dia, 

Sobre SPI continuos encontrei isso :

https://en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus#Mode_...

Uma interface periférica de série na fila (QSPI) é um tipo de controlador de SPI que usa uma fila de dados para transferir dados entre o barramento SPI. [10] Ele tem um modo wrap-around que permite transferências contínuas de e para a fila com atenção apenas intermitente da CPU. Consequentemente, os periféricos aparecem à CPU como dispositivos paralelos de memória mapeada. Este recurso é útil em aplicações como controle de um conversor A / D. Outras características programáveis em QSPI são seleciona chip e comprimento de transferência / atraso.

queued serial peripheral interface (QSPI) is a type of SPI controller that uses a data queue to transfer data across the SPI bus.[10] It has a wrap-around mode allowing continuous transfers to and from the queue with only intermittent attention from the CPU. Consequently, the peripherals appear to the CPU as memory-mapped parallel devices. This feature is useful in applications such as control of an A/D converter. Other programmable features in QSPI are chip selects and transfer length/delay.

5.16.1 Start Conversions

START_CONTINOUS = 0xE8,


Initiates acquiring measurements and calculating results. The device has two modes of acquisition.


C3 Modes of acquisition/measurement


0 = Perform a single computation cycle
1 = Perform continuous computation cycles

Esse comando inicializa os conversores ADC do Chip CS5463 no modo contínuo. 

Isto é, o conversores ficam trabalhando (fazendo as leituras) o tempo todo, sem parar. 

José Gustavo, estou tentando implementar esse sistema, gostaria de entender algumas coisas. Os LEDs conectados as saídas E1, E2 e E3, são para efetuar leituras por meio de sensores ópticos? Os pinos digitais do arduino que você conectou, D11 e D12, elas não deveriam estar trocadas entre si?! tipo, MOSI conectado ao SDO e MISO conectado ao SDI, entendeu? cara, adorei muito sua ajuda aqui no grupo, estou conseguindo entender bem o CS com a ajuda dessa galera, pois a Cirrus não facilitou muito... hahahaha

Boa noite Xará (invertido) ,

Concordo com você, que a Cirrus não simplificou nada na explicação sobre o Chip CS5463.

Tive que estudar e pesquisar um bocado.

Os leds E1, E2 e E3 são usados como indicadores de energia.

Essas saídas são configuráveis e podem gerar pulsos que podem ser convertidos em valores de medidas de energia. Creio que podem ser acoplados através de opto-acopladores. 

Você viu o diagrama que eu fiz logo acima ? O meu diagrama foi baseado em datasheets. 

E a comunicação SPI esta funcionando perfeitamente. Não confunda com comunicação serial UART., 

entendi, é verdade... valeu pelo esclarecimento... estudando aqui, já consegui o CI, inclusive um colega tem vários aqui, logo logo inicio os testes (dor de cabeça)... hahahaha 

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço