Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: stm8l discovery температурный сенсор
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры
Kalyan
Добрый вечер! Я хочю поиграться с температурным сенсоросм что встроен в stm8l discovery плату. В рефмануале написано что на заводе измеряно выходное напряжение с этого датчика с розрешением АЦП 12 бит и сохранено по адресу TS_Factory_CONV_V90 (один байт, а старшая часть =6). В даташите на контроллер нашел вот этот адрес TS_Factory_CONV_V90=0х4910. В самом отладчике посмотрел да и считывал тоже, но данные по этому адресу =0хFF. В рефмануале также написано что таким же способом измеряно и внутренне опрорное напряжение и тоже сохранено по адресу VREFINT_Factory_CONV=0х4911. У меня это значение тоже равняется 0хFF. У всех так? или я может чт-то с памятью перепутал. Мне что-то не верится чтоб эти велечины были одинаковые. значения с памяти считывал вот так:
Код
#define  VREFINT (* (char *) 0x4911)  
u16 temp_=VREFINT;
Artem_Petrik
наверно volatile char нужно. даже volatile int.
Kalyan
Цитата
наверно volatile char нужно. даже volatile int.


Делал и так. Все равно 0хFFFF.
Artem_Petrik
Вчитался, все же volaile char, сохранен только младший байт. т.е. читать правильней так:
Код
u16 temp_=0x600 | VREFINT;

Для проверки стоит листинг посмореть, во что оно там компилится.
В эррате по этому поводу ничего нет, так что должно работать. Жаль проверить не на чем, одни stm8s-ки.
Kalyan
Код
Вчитался, все же volaile char, сохранен только младший байт. т.е. читать правильней так

На сколько я понял по этому адресу и есть только один байт. а старшая часть равняется 3. Тоесть мне нужно только один байт.
Kalyan
Померял температуру датчиком. АЦП использовал 12 бит. Получил значение 0х2А1. Если перещитать в напряжене то это гдето 0,6 В. В рефмануале приводится формула по которой щитать : Т[C]=(VSENSE/AvgSlope)-273.15. и AvgSlope должно быть в V/°K но в даташите на контроллер дается число 1,62 в мВ/С. И тогда получается 600/1,62=370. wacko.gif
всетаки наверное 1,62 это в мВ/К
отнимаю 370-273=97 С wacko.gif в принципе тоже многовато.

Реально ли такое значение или я ошибся в формуле? всетаки написано что датчик меряет тампературу устройства. Интересно этот датчик как переферия контроллера или на плате установлен? Но всеже 100 градусов мне не верится.. ((
Dejmos
Сейчас посмотрел на своей 8L - да, там в памяти одни FF'ы.
Вообще в даташите сказано что там результат работы ADC, не надо ли его запустить сначала?
Kalyan
Код
Вообще в даташите сказано что там результат работы ADC, не надо ли его запустить сначала?

Вы имеете ввиду сконфигурировать на измерение температурного канала, запустить преобразование и посмотреть в пямять?
Все равно там FF остаются.
Вы пробовали пользоваться этим датчиком? Сколько он вам показывает при комнатной-летней температуре? А то у меня получилось около 100 градусов! sad.gif
Dejmos
Не пробовал, только сейчас заинтересовался. Переписал функцию измерения VRef из примера IAR для STM8L (Просто заменил каналы VRef на TempSensor), ADC_GetConversionValue дает 677. Для нынешней комнатной температуры - вполне может быть. (если формула не та или не так поняли. Проще будет с двумя значениями температуры измерить и посмотреть, но мне сейчас греть и охлаждать лень как-то).
А даташит сейчас посмотрел, на 0х4910 - это же вроде Factory conversion registers, т.е. не результат, а просто калибровочные данные?
Kalyan
Код
ADC_GetConversionValue дает 677. Для нынешней комнатной температуры - вполне может быть.


(677*3,6)/4096=0,6

(600/1,62)-273.15=97 С ???
Dejmos
Мдя, туплю уже.
Ну что пока можно сказать - видимо на заводе эти камни никто не измерял, соответственно придется мерять самим по паре известных температур.
Kalyan
Я эксперементировал с временем выборки. В даташите сказано что она должнеа быть 10 мкс. Я это считал так. Тактовая частота контроллера 16 МГц. 1/16=0.0625
10/0.0625=160. Тоесть это если делитель для АЦП не трогать то надо установить время выборки 160 тактов. Но здесь и получаются вот такие запредельные температуры.
Я поставил 16 циклов и температура вышла около 40 градусов, что в принципе более на правду похоже.

Как точно пощитать сколько надо циклов задать в настройках чтоб получить время выборки 10 мкс?
ZiB
Насколько я понял имеется один байт со значением TS_Factory_CONV_V90, предпологается, что старшая часть равна 0x03.
Данное значение получено при напряжении питания 3-+10мВ (опорном) и температуре 90-+5 градусов Цельсия.
У STM8L151K6 данное значение расположено по адресу 0x004911, в моем мк это значение равно 0x43.
Следовательн имеем 0x0343=835, что при указанном опорном около 0,611 В.
Если я правильно понял, то далее нам нужно получить второю точку, для этого необходимо получить значение при температуре 25 градусов Цельсия.
У меня получилось 0x26C=620, т.е. 0,498В (опорное у меня 3,29В).
Используя эти две точки, можно получить наклон и смещение характеристики, что должно повысить точность преобразования.
Dejmos
Тогда получается что 677 - вполне адекватное значение. Оно в итоге у меня и получалось при любом времени выборки.
Но, так как на 8LDiscovery по адресу 0x4911 находятся FF'ы (интересно почему), для расчета температуры придется измерять 2 точки.
ZiB
Возможно вы неправильно "читате" ?
Используйте утилиту для отладки STMStudio (http://www.st.com/internet/evalboard/product/251373.jsp).
Только не используйте её для мониторинга ОЗУ и Флеш-памяти ОДНОВРЕМЕННО! Дает сбой, я не уверен, что разработчики знают об ошибке.
Dejmos
ZiB, просматривал память IAR'ом - там ff'ы. В STMStudio завтра на работе могу посмотреть для проверки, но сомневаюсь что результаты будут отличаться sm.gif
ZiB
Я ИАР не использую и не сильно доверяю отладчикам )
STMStudio использует технологию при которой можно мониторить любую ячейку памяти МК без вмешателства в его работу (такая же фишка есть и в кортексах), очень удобно.
Ждем результата, очень интересно, т.к. я давно занимаюсь стм8 (уже наверное третий год) и планирую дальше с ними работать.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.