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

CS5463 -  convertendo os valores dos registradores  ( continuação - Sexto Formato) :

Esse  tipo de registrador do Chip CS5463 é somente usado para a medição de Temperatura. 

6.1.14 Temperature Register ( T )
Address: 19

5) Fórmula de conversão :

             -128,0 <=  Temperatura  < 128,0  ( isto é, o valor mínimo é -128,0  e o valor máximo é 128,0 ) 

O Bit MSB vale - ( 2^7 ) isto é - 128 .  

Os outros bits, até o bit 2^0 correspondem a parte inteira da Temperatura. 

 HexToDec(Value Hexadecimal)

E os bits 2^-1 até 2^-16 correspondem a parte flutuante (fracionária) .  

[ 1 / (2^16 - 1) ]  x  HexToDec(Value Hexadecimal)

Para conferir o cálculo da Temperatura montei esse planilha. Mas ainda não sei porque, esta dando um erro de 15 micro graus Celsius. Ainda não sei se isso é normal . Veja alguns cálculos na planilha. 

Já montei o sketch para esse cálculo. Esta no meu PC em casa. Depois eu enviarei. 

Anexei a planilha CS5463 Registradores formato 6 .xls

Anexos

CS5463 - Sketch conversão do registrador do Sexto Formato :

Esse é o sketch para a medição de Temperatura.
Anecei o arquivo : CS5463_REG6.ino

6.1.14 Temperature Register ( T )
Address: 19


[code] // CS5463 Register calculations - Register Format 6 // Arduino Nano - IDE 1.6.7
// Gustavo Murta - 29/jul/2016

// CS5463 Register format 6
// two's complement notation -128.0 <= Decimal Value < 128.0
// Value decimal = {[ 1 / ( 2^16 - 1) ] x HexToDec ( Value Hexadecimal)} - MSB

// 6.1.14 Temperature Register ( T )
// Address: 19

float CS5463_Temperature = 0;
float Example, Example1, Example2, Example3, Example4, Example5;
long HexaValue;
float HexaFloat;
long MSB_Mask = 0x800000; // MSB bit equals One

long H_Byte; // High Byte
byte M_Byte; // Middle Byte
byte L_Byte; // Low Byte

void setup()
{
Serial.begin(9600);
Serial.println ("Examples - CS5463 Register Format 6 - Temperature");
Serial.println ();

Example1 = 0x000000 ; // Converts 0x000000 to 0.000000
Example2 = 0x9BFFFF ; // Converts 0x9BFFFF to 28.000000
Example3 = 0xFFF000 ; // Converts 0xFFF000 to 127.937515 NOK LSB ?
Example4 = 0xFF0000 ; // Converts 0xFF0000 to 31.000000
Example5 = 0xFFFFFF ; // Converts 0x7FFFFF to 128.000000


Example = Example1 ;
Print_Temperature();

Example = Example2 ;
Print_Temperature();

Example = Example3 ;
Print_Temperature();

Example = Example4 ;
Print_Temperature();

Example = Example5 ;
Print_Temperature();
}

void Print_Temperature()
{
HexaValue = Example; // converts float value in long
String StringHexa = String(HexaValue,HEX); // converts Hexa to String

H_Byte = HexaValue >> 16;
HexaFloat = HexaValue & 0x00FFFF ;

if ((HexaValue & MSB_Mask) == 0) // Verifying if MSB Bit equals Zero
{
CS5463_Temperature = H_Byte + (HexaFloat/65535) ; // two's complement notation ( 2^16 - 1) = 65535
}
else // if MSB Bit equals One ( - 128)
{
H_Byte = H_Byte - 128 ; // Remove MSB Bit
CS5463_Temperature = (H_Byte + (HexaFloat/65535)) - 128 ; // {[1/(2^16 - 1)] x HexToDec(Value Hexadecimal)}
}

Serial.print (StringHexa); // Prints Hexadecimal String
Serial.print (" = ");
Serial.println (CS5463_Temperature,6) ; // Prints Decimal Value with six digits after decimal point
}

void loop()
{
}
[/code]

Anexos

CS5463 -  convertendo os valores dos registradores  ( continuação - Sétimo Formato) :

Esse  tipo de registrador do Chip CS5463 é somente usado para ajuste do Ganho de Temperatura . 

Esse registrador é muito parecido com o Registrador formato 6. As diferenças estão nos Bits MSB e LSB , 

6.2.3 Temperature Gain Register ( TGain )
Address: 2

7) Fórmula de conversão :

           0 <=  Ganho de Temperatura  < 128,0  ( isto é, o valor mínimo é 0  e o valor máximo é 128,0 ) 

Os bits de 2^6 até o  bit 2^0 correspondem a parte inteira da Temperatura. 

 HexToDec(Value Hexadecimal)

E os bits 2^-1 até 2^-17 correspondem a parte flutuante (fracionária) .  

[ 1 / (2^17 - 1) ]  x  HexToDec(Value Hexadecimal)

Para conferir o cálculo do Ganho de Temperatura  montei mais uma planilha.

O  erro de 15 micro graus Celsius continua e acho que é devido à um erro precisão de calculo (na divisão). 

CS5463 - Sketch conversão do registrador do Sétimo Formato :

Esse é o sketch para ajuste do Ganho  de Temperatura. 

6.2.3 Temperature Gain Register ( TGain )
Address: 2


Anexei o arquivo : CS5463_REG7.ino e a planilha CS5463 Registradores formato 7 .xlsx

[code]
// CS5463 Register calculations - Register Format 7
// Arduino Nano - IDE 1.6.7
// Gustavo Murta - 05/ago/2016

// CS5463 Register format 7
// two's complement notation 0 <= Decimal Value < 128.0
// Value inteiro = HexToDec ( Value Hexadecimal)}
// Value decimal = {[ 1 / ( 2^17 - 1) ] x HexToDec ( Value Hexadecimal)}

// 6.2.3 TempGain Gain Register ( TGain )
// Address: 2

double CS5463_TempGain = 0;
double Example, Example1, Example2, Example3, Example4, Example5;
long HexaValue;
double HexaFloat;

long H_Byte; // High Byte
byte M_Byte; // Middle Byte
byte L_Byte; // Low Byte

void setup()
{
Serial.begin(9600);
Serial.println ("Examples - CS5463 Register Format 7 - Temperature Gain");
Serial.println ();

Example1 = 0x000000 ; // Converts 0x000000 to 0.000000
Example2 = 0x2F03C3 ; // Converts 0x2F03C3 to 23.5073471
Example3 = 0x54A05E ; // Converts 0x54A05E to 42,3132172 (Fahrenheit scale)
Example4 = 0xC80000 ; // Converts 0xC80000 to 100.0000000
Example5 = 0xFFFFFF ; // Converts 0xFFFFFF to 128.0000000

Example = Example1 ;
Print_Temp_Gain();

Example = Example2 ;
Print_Temp_Gain();

Example = Example3 ;
Print_Temp_Gain();

Example = Example4 ;
Print_Temp_Gain();

Example = Example5 ;
Print_Temp_Gain();
}

void Print_Temp_Gain()
{
HexaValue = Example; // converts float value in long
String StringHexa = String(HexaValue,HEX); // converts Hexa to String

H_Byte = HexaValue >> 17;
HexaFloat = HexaValue & 0x01FFFF ;

CS5463_TempGain = H_Byte + (HexaFloat/131071) ; // two's complement notation ( 2^17 - 1) = 131071

Serial.print (StringHexa); // Prints Hexadecimal String
Serial.print (" = ");
Serial.println (CS5463_TempGain,7) ; // Prints Decimal Value with seven digits after decimal point
}

void loop()
{
}
[/code]

 

Anexos

Boa tarde Senhores!

Gostaria de fazer também alguns testes.

Achei excelente as contribuições de todos.

A minha ideia é criar um circuito/equipamento que faça as medições de energia e disponibilize os dados em nuvem (telemetria).

Já realizei a importação do CS5463, mas acredito que demore um pouco pra chegar.

Alguém por acaso tem algumas unidades pra vender?

Obrigado.

Rodrigo boa tarde, 

Sabe criar uma biblioteca para Arduino ?

Vamos precisar de uma. Senão o programa ficará imenso ! 

Eu não tenho chip para vender ou doar. 

penso que esta seria uma excelente contrinuição

Estou tentando criar um biblio ... batendo na trave ... mas, vamos todos tenta !!!

projeto avançando

Bom dia Allan David, poste por favor o que já conseguiu fazer. 

Com a ajuda de todos, fica mais fácil.

Abraços 

Gustavo 

Obrigado José Gustavo!

Não tenho muita habilidade com a criação da biblioteca não, mas estou começando a criar alguma coisa.

Vou postando os avanços para debatermos as duvidas que forem surgindo.

Mais uma vez, muito obrigado.

Bom dia,

Rodrigo, infelizmente só estou trabalhando com um, quando comprei adquiri apenas 3 unidades pois não acreditei muito no CI, doei um pra um amigo, queimei outro e estou trabalhando com um, já encomendei outros mais ainda deve demorar.

Obrigado pelo retorno Alan!

Eu também comprei algumas unidades pelo Aliexpress, mas demora uma eternidade pra chegar.

Alguém quer dividir o frete de uma compra na mouser? Chega bem rápido.

O problema é o custo do frete $35

Se vc tivesse falado um pouco antes comprei alguns pelo Aliexpress mesmo.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço