Решил попробовать встроенный датчик температуры в STM32F0. Был крайне разочарован. Нет, я прочитал конечно что он не точный, но что бы так. В общем в помещении 20, по расчету получается 13. Хотя должно быть больше 20, чип же греется.
while (1) /* Infinite loop */ { while ((ADC1->ISR & ADC_ISR_EOC) == 0); /* Wait end of conversion */ temperature_C = ComputeTemperature((int32_t) ADC1->DR); ......
/** * @brief This function computes the temperature from the temperature sensor measure * The computation uses the following formula : * Temp = (Vsense - V30)/Avg_Slope + 30 * Avg_Slope = (V110 - V30) / (110 - 30) * V30 = Vsense @30°C (calibrated in factory @3.3V) * V110 = Vsense @110°C (calibrated in factory @3.3V) * VDD_APPLI/VDD_CALIB coefficient allows to adapt the measured value * according to the application board power supply versus the * factory calibration power supply. * @param measure is the a voltage measured from the temperature sensor (can have been filtered) * @retval returns the computed temperature */ int32_t ComputeTemperature(uint32_t measure) { int32_t temperature;
temperature = ((measure * VDD_APPLI / VDD_CALIB) - (int32_t) *TEMP30_CAL_ADDR ) ; temperature = temperature * (int32_t)(110 - 30); temperature = temperature / (int32_t)(*TEMP110_CAL_ADDR - *TEMP30_CAL_ADDR); temperature = temperature + 30; return(temperature); }
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
И ни одна из формул не показывает даже приблизительно нормальные значения. Настрою левыми коэффициентами правильные 30 градусов на выходе, нагреваю феном до 60 градусов и показывает около 40. Питание 3.3V. На выходе нужна temperature*10.
// Эта функция вычисляет температуру от измерения датчика температуры. Вычисление использует следующую формулу: // V30 = Vsense@30 °C (откалиброван на заводе @3.3V) // V110 = Vsense@110 °C (откалиброван на заводе @3.3V) // Avg_Slope = (V110-V30)/(110-30) // Temp = (Vsense-V30)/Avg_Slope+30 // VDD_APPLI/VDD_CALIB - коэффициент позволяет адаптировать измеренное значение // в соответствии с приложенным к плате источником питания по сравнению с заводской калибровкой питания. // Мерой является напряжение измеряется от датчика температуры (может быть отфильтрован). Возвращает расчетную температуру.
Заголовок сообщения: Re: Встроенный в STM32F0 датчик температуры
Добавлено: Пн июл 04, 2016 11:33:01
Первый раз сказал Мяу!
Зарегистрирован: Чт май 05, 2011 15:35:36 Сообщений: 26
Рейтинг сообщения:0
А почему бы не прибегнуть к табличному точечно-калиброванному методу получения температуры?
1) Ну скажем вешается к контроллеру 18B20 + драйверо-софтец к нему + UART выдача данных на PC. По UARTу передаются парные данные температуры от 18B20 и внутренней мерилкой.
2) Тогда поместив платку в кулек + инертную среду типа банка с песком отправляется в морозилку скажем. Достигнув некой отрицательной температуры, достаем банку и ставим на стол, подключаем к PC и гоним данные датчиков логируя их в виде файла.
3) Данные получены, теперь импортируем данные в EXCEL таблицу, теперь можно и графики лицезреть и коэффициенты (ФАКТИЧЕСКИЕ!) выводить и таблицу зашивать в МК пусть и с шагом в один градус, а промежуточные если надо то аппроксимацией между точками получать, как вариант...
4) "Прогнав", таким образом несколько чипов, софта и его видов можно реально судить о точности и "плывучести" термодатчика. Учитывать Ref или нет как и сколько - это уже дело третье.
Слишком большие сложности. Внутренний термодатчик обеспечивает лишь приблизительную точность и калибровать его особого смысла нет. Стал МК греться чуть больше или чуть больше стал греться соседний с МК чип и поплыла вся калибровка к едрене фене. Как правильно считывать данные с термодатчика, есть в снайпетах для 030-й серии.
Заголовок сообщения: Re: Встроенный в STM32F0 датчик температуры
Добавлено: Вт июл 05, 2016 11:12:11
Первый раз сказал Мяу!
Зарегистрирован: Чт май 05, 2011 15:35:36 Сообщений: 26
Рейтинг сообщения:0
Цитата:
Стал МК греться чуть больше или чуть больше стал греться соседний с МК чип и поплыла вся калибровка к едрене фене.
никакой логики в сказанном нет. На то он и внутренний чтобы внутри измерять, к калибровке отношения не имеет! Калибровка + таблица дает четкое понимание с некой точностью КАКУЮ именно температуру на кристалле имеет чип: 35? 20? 12?.... градусов. Потом калибровка уменьшает такую вещь, как нелинейность датчика, т.е. его несовершенство. Значительно уменьшаются вычислительные вещи по получению "готового" измерения (величины в чистом виде). Если ставится цель сделать ДЕШЁВЫЙ показометр лучше чем вариант - совсем плохо, то этот вариант самое то!
Если ставится цель сделать ДЕШЁВЫЙ показометр лучше чем вариант - совсем плохо, то этот вариант самое то!
У меня была другая проблема - нехватка портов. 20-ти ножечный контроллер используется в ШИМ-контроллере для электролизера. Схема стоит под капотом автомобиля - в жару там возможно 100 градусов (пока не проверял). Нужно было сделать простую защиту - выключение на время при достижении, скажем 90 градусов.
Плюнул я на этот внутренний термодатчик и решил проблему с помощью LM35. К схеме подключен блютуз модуль, который отправлял данные на телефон и принимал данные с телефона. Пришлось отказаться от приема данных с телефона (функция особо не нужная). Вот так и решил проблему.
STM32F030F4P6. Прошу отозваться, если кому удавалось считать температуру с Temperature Sensor Channel Именно с этого микроконтроллера, 20-ножечное убожество.
Есть подозрение, что на этой версии МК канал АЦП выпилен, т.к. измерение всегда возвращает 0xFFF. Это вряд-ли ошибка в коде, т.к. тот же код на STM32F072RBT6 работает корректно.
Есть подозрение, что на этой версии МК канал АЦП выпилен, т.к. измерение всегда возвращает 0xFFF. Это вряд-ли ошибка в коде, т.к. тот же код на STM32F072RBT6 работает корректно.
Сам и отвечу. После устранения ошибки температура читается. Другое дело, что она показывает не температуру окружающей среды, а температуру кристалла микроконтроллера. И если в сторону увеличения температуры термометр еще как-то адекватно показывает, то, при помещении его в холодильник, он этого практически не замечает.
Теперь про причину, почему мне не удавалось считать значение АЦП. Отладочная плата одновременно была подключена к отладчику ST-Link и к преобразователю USB-UART. Питание 3.3В также подано и с отладчика и с преобразователя (чего нельзя делать категорически). Как я понял, это и привело к тому, что АЦП работал некорректно. Возможно, усугубила ситуацию некорректная разводка аналогового питания МК.
Читатель, ты пришел сюда не просто так, надеюсь, тебе это поможет в поиске своей ошибки.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 26
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения