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

Wszystko o co chcesz zapytać na temat mikrokontrolerów ARM firmy STMicroelectronics: problemy z pisaniem programu, problemy sprzętowe, niejasności w DS czy AN itp.
StaryAnoda

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

Postautor: StaryAnoda » niedziela 23 paź 2016, 14:12

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);

Awatar użytkownika
Antystatyczny
Geek
Geek
Posty: 1168
Rejestracja: czwartek 03 wrz 2015, 22:02

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

Postautor: Antystatyczny » niedziela 23 paź 2016, 14:29

a dlaczego dzielisz przez 4095 zamiast przez 4096?
"The true sign of intelligence is not knowledge but imagination" Albert Einstein.

StaryAnoda

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

Postautor: StaryAnoda » niedziela 23 paź 2016, 14:40

Faktycznie już naniosłem poprawki w swoim kodzie.

Awatar użytkownika
Antystatyczny
Geek
Geek
Posty: 1168
Rejestracja: czwartek 03 wrz 2015, 22:02

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

Postautor: Antystatyczny » niedziela 23 paź 2016, 15:52

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ą.
"The true sign of intelligence is not knowledge but imagination" Albert Einstein.


Wróć do „ARM STMicroelectronics”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 3 gości