Olá, amigos!

Sou novo no fórum e bem iniciante nos assuntos que envolvem eletrônica e programação.

Estou tentando construir um de sistema de aquisição para medir temperatura no processo de usinagem. Basicamente a medição é feita por meio de um sinal de tensão que é gerado na operação,  baseado no efeito Seebeck (como nos termopares). A partir da obtenção do sinal de tensão eu converto no valor de temperatura por meio de uma equação T(V). Ou seja, a temperatura é função dessa tensão gerada no sistema. Esse sinal é bem baixo, varia até cerca de 10 mV.

Consegui construir o o sistema baseado em um trabalho que encontrei por aqui, um caso de estudo da repetibilidade de medição de temperatura de um termopar. Segue o link:

(http://labdegaragem.com/forum/topics/repetibilidade-de-medi-o-de-te...)


No meu caso, o ponto principal é que o valor do sinal de tensão de entrada seja o mais próximo do valor que o programa imprime. Como o sinal é muito baixo, utilizei o HX711 para amplificar e converter o sinal analógico.

Usei o mesmo escopo do trabalho do link anterior, mas tentei fazer uma espécie de calibração do sistema, usei uma fonte de tensão DC aplicando diferentes tensões na entrada do sistema (na faixa de 0 até aproximadamente 15 mV) e fui vendo o que o programa imprimia.

Fiz de forma bem empírica mesmo, observei que uma das linhas do código faz uma espécie de conversão, dividindo a tensão que é lida pela função LoadCell.geData() por uma constante de 4250. Quando mudava esse valor, observava que o erro entre a tensão aplicada no sistema pela fonte e a tensão que o programa me dava mudava conforme eu alterava essa constante. Repeti esse procedimento algumas vezes alterando o valor da constante.Consegui o melhor resultado usando a constante de 4185. Parte do código é apresentada abaixo:


void loop()
{
 LoadCell.update();                                       // atualiza a balança

 if (millis() > t + 250)                                      // contagem de tempo 250  milisegundos
 {
   float i = LoadCell.getData();                      // faz a leitura da tensão
   float v = LoadCell.getCalFactor();             // faz a leitura do  fator de calibração
   Serial.print("Tensão no Termopar: ");        // imprime mensagem
   Serial.print((i / 4250), 3);                           // divide o valor por 4250 com 3 casas decimais
   Serial.print("      Fator de ganho ");           // imprime mensagem
   Serial.println(v);
   t = millis();                                                 // atualiza o tempo
 }


Até então, meu sistema consegue medir bem os valores de tensão. A minha dúvida é sobre o que vem a ser essa constante, qual a função do termo 4250 no código, e por que ao alterar o valor para 4185 eu obtenho resultados melhores.

Utilizei a mesma metodologia que o Heitor (do link anterior) adotou para a construção, mesmocircuito apresentado na imagem. A calibração foi uma ideia que tive pra me certificar de que não estava obtendo valores muito diferentes da tensão de entrada.

Decidi compartilhar a minha dúvida com vocês na esperança de encontrar alguma resposta. O lab de garagem já tem me ajudado bastante desde que decidi me aventurar nesse projeto. Agradeço demais aos que puderem contribuir de alguma forma.

Exibições: 1048

Responder esta

Respostas a este tópico

Boa noite, 

Achei esse diagrama muito parecido com o meu. Depois descobri que era meu.KKKK

Olá, José Gustavo!

Exatamente! kkkkkkk

Foi com base nele, através de uma contribuição sua presente link que postei no tópico, que consegui tocar meu projeto. 

Já aproveito pra agradecer e pedir desculpas por não ter referenciado. 

Vamos por partes, para eu me lembrar da função desse fator divisor de 4250. 

Datasheet do HX711:

https://cdn.sparkfun.com/datasheets/Sensors/ForceFlex/hx711_english...

conversor ADC tem precisão de 24 bits

Biblioteca HX711:

https://github.com/bogde/HX711

LoadCell.setCalFactor(128.0);                     // fator de calibração = 128 (ganho do canal A)

 Serial.print((i / 4250), 3);                             // divide o valor por 4250 com 3 casas decimais

Esse tutorial foi revisado por mim:

Balança digital com Arduino e célula Strain Gauge – Revisada

https://blog.eletrogate.com/balanca-digital-com-arduino-aprenda-a-u...

Na verdade, a biblioteca usada é a HX711_ADC

https://github.com/olkal/HX711_ADC

Corrigindo informações, baseando-me no diagrama da SparkFun :

https://cdn.sparkfun.com/assets/f/5/5/b/c/SparkFun_HX711_Load_Cell.pdf

VBG = 1,25 V 

AVDD = VBG(R1+R2)/R2 = 1,25V ((20K +8,2K) / 8,2K)

AVDD = 1,25V x 3,4390 = 4,298 V

Fiz uma montagem parcial agora e medi 4,294 V em AVDD.

Bom dia Edmilson,

Me desculpe o engano, acho que estou muito cansado.

Troquei o ganho do amplificador do valor de 128 por 180!  Eu apaguei o post para não confundi-lo. 

Além do mais, o datasheet não explica em detalhes como é feito o processo de conversão.

Essas são as minhas suposições:

Se a tensão sobre o sensor é de 10 mV, a tensão de entrada do ADC do HX711 será amplificada por 128 (fator de ganho). 

 Vadc = 1280 mV. 

O canal A mede tensões entre +- 20 mV, e o ganho é de 128. 

O conversor ADC tem 24 bits => 2 elevado a 24 = 16777216 

23 bits para o sinal positivo e 23 bits para o sinal negativo

para a tensão máxima de (0,020 x 128)  = 2,56V (positiva ou negativa) 

 2 elevado a 23 = 8388608

   2,56 V / 8388608 =  0,000000305175 V = 305,175 nanoVolts (bit menos significativo) 

Supondo que na entrada do sensor do HX711 seja de 1 mV:

  • a tensão será amplificada por 128,
  • Portanto, a tensão de entrada do ADC será de 128 mV,
  • Sabendo-se que o valor menos significativo (resolução) do ADC é de 305,175 nanoVolts,
  • Considerando a unidade base de Volts, 0,128 V / 0,000000305175 V = 419431,
  • Esse será o valor absoluto da medição do ADC para 1 mV = 419431

Agora terei que analisar a Biblioteca, para ver como ela faz as medições...

Quase chegando à explicação final. 

https://github.com/olkal/HX711_ADC

Um detalhe, a Biblioteca foi atualizada. Recomendo que atualize-a também. 

A versão que eu usei era a 1.01. A versão mais atual é a 1.1.5.

Não se esqueça de reinicializar a IDE, após a atualização.

https://github.com/olkal/HX711_ADC

( OBS: nos exemplos, os pinos usados no Arduino são diferentes - D4 e D5) 

Não estudei a fundo a Biblioteca, mas se você retirar o divisor dessa linha do programa :

Serial.print((i), 3);   

Vai perceber que a medição é feita em miliVolts  ! 

Por isso, o fator divisor ideal é 4194,31 para que a medição seja feita em Volts:

(OBS - esse valor muda de acordo com a tensão de referência do seu módulo)

No exemplo de 1 mV :

Se não usar o fator divisor, a medição será 4,194 aproximadamente

4,194 / 4194 = 0,001 ! 

Um pouco complicado para entender. 

Concorda com as minhas explicações?

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço