Strona 1 z 1

[F429I][MCP9700]Czy dobrze liczę temperaturę

: niedziela 23 paź 2016, 14:12
autor: StaryAnoda
Hej

Mam pytanie posiadam zestaw Discovery F429i raz czujnik temperatury MCP9700.
Czy może ktoś potwierdzić czy w dobry sposób obliczam temperaturę ?
Czy podpowiecie mi jak zmniejszyć wahania odczytów temperatury.
Czujnik TC77 wskazuję temperaturę 20.5, natomiast MCP waha się w zakresie od 23-29.

Kod: Zaznacz cały

if (HAL_ADC_PollForConversion(&hadc1, 10) == HAL_OK)
      {
      PomiarADC = HAL_ADC_GetValue(&hadc1);
      Vsense = ((3.0/ 4095.0) * PomiarADC) - 0.5;
      Vsense = Vsense / 0.01;                  
      HAL_ADC_Start(&hadc1);
      }
      sprintf(Bufor1, "MCP9700: %.1f", Vsense);

Re: [F429I][MCP9700]Czy dobrze liczę temperaturę

: niedziela 23 paź 2016, 14:29
autor: Antystatyczny
a dlaczego dzielisz przez 4095 zamiast przez 4096?

Re: [F429I][MCP9700]Czy dobrze liczę temperaturę

: niedziela 23 paź 2016, 14:40
autor: StaryAnoda
Faktycznie już naniosłem poprawki w swoim kodzie.

Re: [F429I][MCP9700]Czy dobrze liczę temperaturę

: niedziela 23 paź 2016, 15:52
autor: Antystatyczny
Poza tym staraj się najpierw mnożyć, a potem dzielić (o ile to możliwe). U Ciebie można by zrobić tak:

Kod: Zaznacz cały


Vsense = (double) (PomiarADC * 3 / 4096) - 0.5;
Vsense *= 100;


Nie bez znaczenia jest również przeprowadzenie procedury kalibracji. Nie wiem, jak to jest w przypadku F429, ale np. w L152 siedzą w pamięci Flash dane kalibracyjne, a w dokumentacji układu zamieszczona jest procedura kalibracyjna. Tor zasilania płytek Nucleo i Discovery też nie jest jakoś super filtrowany, więc odczyty mogą się troszkę wahać. Do uśredniania można zastosować prosty filtr dolnoprzepustowy (cyfrowy) lub stablicować kilka wyników, a następnie wyciągać z nich średnią.