2017-01-31 2 views
0

Я использую плату Numleo STM32F401RE для измерения температуры окружающей среды. После процесса выборки я получаю цифровое значение от ADC_CHANNEL_TEMPERATURE, и я хочу преобразовать это цифровое значение в C °. Я искал в Интернете для этого, и я нашел два различных метода:Правильная формула для расчета датчика температуры с использованием STMF401RE Nucleo?

Метод 1: Page 226 в http://www.st.com/content/ccc/resource/technical/document

Temp(degree) = (V_sense - V_25)/Avg_slope + 25 

Метод 2: Page 251 в http://www.st.com/content/ccc/resource/technical/document

Temp(degree) = (((110 - 30)*(TS_DATA - TS_CAL1))/(TS_CAL_2 - TS_CAL_1)) + 30 
Where: 
    - TS_CAL2: temperature sensor calibration value at 110 C° 
    - TS_CAL1: temperature sensor calibration value at 30 C° 
    - TS_DATA: temperature sensor output from ADC 

Это меня смущает, который одна из них является правильной формулой для вычисления температуры в С °. Хотя метод 1 из справочного руководства по STM32F401, результат температуры выглядит неправильно. Хотя метод 2 из справочного руководства по сериям STM32F0, он выглядит более разумным.

Все еще я не знаю, какую формулу следует применять при использовании платы Nucleo STM32F401RE?

+0

Из любопытства, что вы измеряете с помощью двух методов и что вы используете в качестве эталонной температуры? –

+0

Второе уравнение неверно, оно должно быть «80» или «110 - 30». –

+0

Привет, во втором уравнении была опечатка (исправлено). У меня есть печь, где я могу контролировать температуру. Я использовал температуру в помещении (20oC), -10oC, 60oC в качестве контрольных температур. Результаты, полученные мной из уравнения 2, более разумны для эталонных температур. – bienle

ответ

2

Способ 1 Temp(degree) = (V_sense - V_25)/Avg_slope + 25 - это упрощенная версия, где калибровка, по-видимому, выполняется путем предварительного измерения значения на 25 ° и назначения его на V_25. В этом контексте Avg_slope, вероятно, взято из таблицы данных, но это также может быть результатом некоторой калибровки.

Способ 2 Temp(degree) = (((110 - 30)*(TS_DATA - TS_CAL1))/(TS_CAL_2 - TS_CAL_1)) + 30 использует две калибровочные точки, при 30 ° и 110 °, и является более правильным. Обратите внимание, что также метод 1 может использовать две калибровочные точки (используемые для расчета среднего наклона). Кроме того, метод 2 позволит вам принимать ваши калибровочные точки в любом месте (предположительно, в том диапазоне, в котором вас больше интересует).

Оба метода, однако, страдают от нелинейности (если есть) датчика. Я полагаю, что присутствует некоторая нелинейность, потому что метод 1 говорит о «среднем наклоне». Если вам нужна большая точность, вы можете взять несколько точек калибровки и интерполировать между ними.

+0

Спасибо @linuxfan, теперь я получу лучшее понимание при расчете температурного датчика. – bienle

+1

@bienle Добро пожаловать. Как сказано в помощи этого сайта, вы должны принять ответ, а не поблагодарить ... :-) – linuxfan

+1

@bienle, есть важное замечание. STM32F0xx поставляется с калиброванными датчиками температуры: каждый MCU имеет значения TS_CAL1 и TS_CAL2, хранящиеся на фиксированных адресах во флэш-памяти. С помощью этого MCU вам нужно было только считывать значение из АЦП, считывать значения со вспышки и вычислять точную температуру. У вашего MCU нет калибровки, поэтому вам нужно сделать это перед обычным использованием. –

0

я в настоящее время с помощью микроконтроллера STM32 F030 c8t6 : вопрос: Каково TS_DATA = (АЦП Значение) * (Vdd/Vref) или TS_DATA = (АЦП Значение) датчик значение АЦП температуры, когда канал датчика температуры активирован?

Смежные вопросы