Página 1 de 1

BIBLIOTECA MAX6675

MensagemEnviado: 07 Fev 2017 12:58
por Pask
Amigos, consegui no site da Mikroeletronika a biblioteca para utilização do CI MAX6675 com PIC's em um projeto de leitura de um sensor termopar tipo K ligado a este componente que se comunica com o PIC via serial (protocolo SPI). O que eu estou tentando fazer, é obter a leitura do termopar em questão e mostrar a leitura em 3 displays de leds de 7 segmentos. A parte referente aos displays e seu acionamento está funcionando perfeitamente. O que acontece é que a biblioteca parece conter algum erro ou falha por parte do autor, pois os números apresentados nos displays são totalmente aleatórios e sem significado nenhum. Segue o código fonte da biblioteca para você conferirem. Será que alguma coisa poderia ser feita? Já fiz várias alterações seguindo sugestões do Sr. Dusan da Mikroe, mas nada resolveu o problema. Alguém teria alguma sugestão neste caso? Segue a biblioteca:

cpp code
//============================================================================
// Library: MAX6675_Library.
// Author : Arezki YOUYOU
// Date:06/11/2015
// Microcontrollers : PIC12F, PIC16F, PIC18F
/*******************MAX6675********************************************/
//The MAX6675 library use the MAX6675 circuit to read the thermocouple and transform the
//temperature data in Celsius or Fahrenheit.

//============================================================================
// Contact me:
// e-mail: arezkiyouyou@gmail.com
//============================

extern sfr sbit MAX6675_SCK_Dir;
extern sfr sbit MAX6675_CS_Dir;
extern sfr sbit MAX6675_MISO_Dir;

extern sfr sbit MAX6675_CS;
extern sfr sbit MAX6675_MISO;
extern sfr sbit MAX6675_SCK;

void MAX6675_Init() {
MAX6675_SCK_Dir=0;
MAX6675_CS_Dir=0;
MAX6675_MISO_Dir=1;

MAX6675_CS=1;
}

char MAX6675_Read(){
int j=0;
char s=0;

for(j=7;j>0;j--){
MAX6675_SCK=0;
Delay_ms(1);
if(MAX6675_MISO){
s |= (1 << j);
}
MAX6675_SCK=1;
Delay_ms(1);
}

return s;
}

double MAX6675_Read_Celsius(){
unsigned int temp;
MAX6675_CS=0;
Delay_ms(1);
temp=MAX6675_Read();
temp<<=8;
temp|=MAX6675_Read();
MAX6675_CS=1;

if(temp& 0x04){
return -222;
}
temp>>=3;
return ((double)temp*0.25);
}
}

Re: BIBLIOTECA MAX6675

MensagemEnviado: 07 Fev 2017 20:54
por MOR_AL
Olá Pask! Tudo beem?

Eu fiz um Medidor de temperatura com o termopar do tipo K.
1 - Não usa o MAX6675. Até onde eu sei, ele não faz a compensação da curva de Temperatura X Tensão no termopar. Explico. A função Temperatura X Tensão no termopar não é linear e sim segue uma lei não linear (claro né?). Se você simplesmente usa um ganho para amplificar a baixa tensão gerada no termopar, para condicioná-lo entre, digamos, zero e cinco volts, para usar o CAD do uP, como no MAX6675, a tensão resultante vai ser correta em apenas três pontos. Isso entre zero graus e uns 1050ºC. O erro pode ser de até maior, caso deseje usá-lo em temperaturas maiores.
2 - Uso um operacional comum (OP07), mas no uP eu faço a compensação deste erro para, teoricamente, dentro de um grau até 1370ºC. Claro que se trabalhar até esta temperatura exige que o termopar possua fios com diâmetro maior que os comumente encostrados.
3 - Uso o LM35 para compensação da junta fria e não aquelas compensações com diodos etc.
4 - Uso a fonte de referência para o CAD do uP com o CI TL431, que fornece tensão de referência regulada e estabilizada. A do uP não é regulada.
5 - Uso a comunicação serial com o MAX232A para enviar os dados ao PC. Ele também gera as tensões positivas e negativas para alimentar o amplificador operacional OP07.
6 - Tem um buzzer que alerta se a temperatura sai fora do programado.
7 - Tem um relé para acionar uma carga, que gera calor.
8 - Tem uma programação para a temperatura.

Fiz ele em fevereiro de 2010, há sete anos e já não me lembro dos detalhes do que ele faz, mas acredito que devo ter tudo documentado.
Me lembro que não usei ponto flutuante e sim inteiro 16 bits e uma com 32 bits. Com isso pude reduzir bastante a programação.
Usei o PIC16F873A.

Bom!
Qualquer projeto que se faz, necessita de calibração, certo? O problema começa aí. Mesmo que você faça um projeto que considere todos estes detalhes apresentados, é necessário testá-lo e calibrá-lo.
Não tenho condições de testá-lo, já que, penso eu, seria necessário fundir alguns metais, com pureza (que desconheço), para aferi-lo. Estes metais fundem a temperaturas conhecidas, podendo ser comparado com o valor mostrado no LCD e assim calibrá-lo.

Dê uma olhada na página de um fórum co-irmão. Lá tem muita informação que considero importante, que talvez lhe seja útil.

http://www.forumnow.com.br/vip/mensagen ... 09&nrpag=2

MOR_AL

Re: BIBLIOTECA MAX6675

MensagemEnviado: 08 Fev 2017 08:15
por Pask
Caro Moral, o MAX6675 já tem a compensação da junta fria internamente e apresenta o resultado da leitura numa sequência de 12bits. Veja o datasheet anexo.

Re: BIBLIOTECA MAX6675

MensagemEnviado: 08 Fev 2017 08:29
por MOR_AL
Pask escreveu:Caro Moral, o MAX6675 já tem a compensação da junta fria internamente e apresenta o resultado da leitura numa sequência de 12bits. Veja o datasheet anexo.


Ok.
Mas de nada adianta a compensação da junta fria e os 12 bits, se o CI só dá o ganho, que é a tal função linear e o termopar (qualquer um deles) apresenta uma função não linear, que introduz erros entre a tensão produzida no termopar e a temperatura a que ele está submetido.
Veja no meu arquivo em pps, um pouco mais de detalhes.

http://www.4shared.com/office/WLBWwyoTb ... 2__2_.html

MOR_AL