Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту


 
Опции темы

STM32F407 и встроенный термодатчик (ADC1)

Непрочитано 02.10.2014, 15:08  
STM32F4
Частый гость
 
Регистрация: 04.12.2012
Сообщений: 38
Сказал спасибо: 25
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
STM32F4 на пути к лучшему
Вопрос STM32F407 и встроенный термодатчик (ADC1)

Всем привет) Наверняка уже была такая тема, но найти я не смог.
Подскажите что ни так я делаю! Вроде бы все по DS: настроил АЦП1 на 16-й канал, включил термодатчик и считаю по указанной формуле! вроде бы все просто, но у меня получаются какие-то немыслимые значения(
из АЦП приходят значения от 1020 до 1098, ну а при расчете по формуле получаю отрицательные значения(


PHP код:
//********************ADC1**CH16********************  *******
    RCC-›APB2ENR    |= RCC_APB2ENR_ADC1EN;
    ADC1-›CR1        |= ADC_CR1_DISCEN;                /*!‹Discontinuous mode on regular channels */
    ADC1-›CR1        |= ADC_CR1_SCAN;                //Scan mode enabled
    ADC-›CCR        |=ADC_CCR_TSVREFE;                //включаем термодатчик
    ADC1-›SQR3         |=16;                            //16-й канал
    ADC1-›SMPR1        |=ADC_SMPR1_SMP16;                //111: 480 cycles
    ADC1-›CR2         |=ADC_CR2_EXTEN_0;                //Trigger detection on the rising edge
    ADC1-›CR2         |=ADC_CR2_CONT;
    ADC1-›CR2         |=ADC_CR2_ADON;
    ADC1-›CR2         |=ADC_CR2_SWSTART;
    
//////////////КОНСТАНТЫ ИЗ DS ///////////////
    float V_25 = 0.76;            //Вольт
    float Slope =0.0025; //2.5e-3;    //Вольт
    float Vref = 3.3;            //Вольт

    while(1)
    {
        ADC1-›CR2         |=ADC_CR2_SWSTART;
        while (!(ADC1-›SR & ADC_SR_EOC));
        data= ADC1-›DR;
       float V_sense = data*Vref/4096.0;                //преобразование попугаев в вольты
       float temp3 = (V_25 - V_sense)/Slope + 25.0;        //вычисление температуры
       
    

    }
} 
Реклама:
STM32F4 вне форума  
Непрочитано 02.10.2014, 15:33  
Yurkin2014
Заблокирован
 
Регистрация: 21.01.2014
Сообщений: 589
Сказал спасибо: 7
Сказали Спасибо 267 раз(а) в 206 сообщении(ях)
Yurkin2014 на пути к лучшему
По умолчанию Re: STM32F407 и встроенный термодатчик (ADC1)

Вам нужно взять другое значение для float V_25, типовое 0.76В Вам не годится.
В дейташите сказано, что выходное напряжение датчика температуры сдвинуто от чипа к чипу, и сдвиг может достигать 45 градусов.
Вам нужно проградуировать Ваш собственный чип. Измерить выходное напряжение при известной температуре, например при +20 в комнате, и вычислить своё собственное значение для float V_20. Потом использовать это значение в формуле
float temp3 = (V_20 - V_sense)/Slope + 20.0;
Yurkin2014 вне форума  
Сказали "Спасибо" Yurkin2014
STM32F4 (02.10.2014)
Непрочитано 02.10.2014, 16:04  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,821
Сказал спасибо: 919
Сказали Спасибо 4,289 раз(а) в 2,570 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: STM32F407 и встроенный термодатчик (ADC1)

Пустое это занятие. Измеряет длину хвоста сферического коня в вакууме.
Easyrider83 вне форума  
Непрочитано 02.10.2014, 16:27  
STM32F4
Частый гость
 
Регистрация: 04.12.2012
Сообщений: 38
Сказал спасибо: 25
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
STM32F4 на пути к лучшему
По умолчанию Re: STM32F407 и встроенный термодатчик (ADC1)

Сообщение от Yurkin2014 Посмотреть сообщение
Вам нужно взять другое значение для float V_25, типовое 0.76В Вам не годится.
В дейташите сказано, что выходное напряжение датчика температуры сдвинуто от чипа к чипу, и сдвиг может достигать 45 градусов.
Вам нужно проградуировать Ваш собственный чип. Измерить выходное напряжение при известной температуре, например при +20 в комнате, и вычислить своё собственное значение для float V_20. Потом использовать это значение в формуле
float temp3 = (V_20 - V_sense)/Slope + 20.0;
Спасибо, за совет) Я то откалибровал , но значения скачат до 10 градусов(
STM32F4 вне форума  
Непрочитано 02.10.2014, 16:28  
STM32F4
Частый гость
 
Регистрация: 04.12.2012
Сообщений: 38
Сказал спасибо: 25
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
STM32F4 на пути к лучшему
По умолчанию Re: STM32F407 и встроенный термодатчик (ADC1)

Сообщение от Easyrider83 Посмотреть сообщение
Пустое это занятие. Измеряет длину хвоста сферического коня в вакууме.
Согласен, занятие не оч перспективное!Но начальство приказало - изучить и выжать все из этого датчика xD
STM32F4 вне форума  
Непрочитано 02.10.2014, 17:14  
Yurkin2014
Заблокирован
 
Регистрация: 21.01.2014
Сообщений: 589
Сказал спасибо: 7
Сказали Спасибо 267 раз(а) в 206 сообщении(ях)
Yurkin2014 на пути к лучшему
По умолчанию Re: STM32F407 и встроенный термодатчик (ADC1)

Что-то не так в Ваших измерениях.
Я запустил на своём STM32F4 Дискавери измерения датчика температуры. Провёл 1000 измерений, получил значения АЦП стабильные от 1054 до 1056. В комнате воздух 27 градусов. При моём питании 2.95В пересчет даёт напряжение датчика 0.76В, типа 2 градуса сдвиг от типового.
Yurkin2014 вне форума  
Непрочитано 03.10.2014, 10:08  
STM32F4
Частый гость
 
Регистрация: 04.12.2012
Сообщений: 38
Сказал спасибо: 25
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
STM32F4 на пути к лучшему
По умолчанию Re: STM32F407 и встроенный термодатчик (ADC1)

Сообщение от Yurkin2014 Посмотреть сообщение
Что-то не так в Ваших измерениях.
Я запустил на своём STM32F4 Дискавери измерения датчика температуры. Провёл 1000 измерений, получил значения АЦП стабильные от 1054 до 1056. В комнате воздух 27 градусов. При моём питании 2.95В пересчет даёт напряжение датчика 0.76В, типа 2 градуса сдвиг от типового.
хм, интересно! Вы можете показать настройку ацп ? она отличается от моей ?
STM32F4 вне форума  
Непрочитано 03.10.2014, 10:19  
ForcePoint
Почётный гражданин KAZUS.RUN
 
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 7,457
Сказал спасибо: 3,225
Сказали Спасибо 3,511 раз(а) в 2,392 сообщении(ях)
ForcePoint на пути к лучшему
По умолчанию Re: STM32F407 и встроенный термодатчик (ADC1)

Сообщение от STM32F4 Посмотреть сообщение
но значения скачат до 10 градусов
Сообщение от Yurkin2014 Посмотреть сообщение
Провёл 1000 измерений, получил значения АЦП стабильные от 1054 до 1056.
Измерения подряд или разовые? Между измерениями проц спит или нет? Термодатчик ATtiny45 вполне отчётливо показывал рост температуры (проц спит, если читать раз в 1..2 минуты - температура ниже, если поставить серию - есть рост и стабилизация на новом уровне).
ForcePoint вне форума  
Непрочитано 03.10.2014, 10:31  
STM32F4
Частый гость
 
Регистрация: 04.12.2012
Сообщений: 38
Сказал спасибо: 25
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
STM32F4 на пути к лучшему
По умолчанию Re: STM32F407 и встроенный термодатчик (ADC1)

Сообщение от ForcePoint Посмотреть сообщение
Измерения подряд или разовые? Между измерениями проц спит или нет? Термодатчик ATtiny45 вполне отчётливо показывал рост температуры (проц спит, если читать раз в 1..2 минуты - температура ниже, если поставить серию - есть рост и стабилизация на новом уровне).
Я измеряю не по таймеру, один раз в секунду! запуск непрерывного измерения ничего не меняет!
STM32F4 вне форума  
Непрочитано 03.10.2014, 12:13  
Yurkin2014
Заблокирован
 
Регистрация: 21.01.2014
Сообщений: 589
Сказал спасибо: 7
Сказали Спасибо 267 раз(а) в 206 сообщении(ях)
Yurkin2014 на пути к лучшему
По умолчанию Re: STM32F407 и встроенный термодатчик (ADC1)

Сообщение от STM32F4 Посмотреть сообщение
Вы можете показать настройку ацп ? она отличается от моей ?
Настройки такие: частота клоков АЦП 24МГц, одиночное измерение, скана нет, старт по таймеру2, частота таймера 100кГц
PHP код:
 /* ADC Common Init **************************************************  ********/
  ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;
  ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div2;
  ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled;
  ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_9Cycles;
  ADC_CommonInit(&ADC_CommonInitStructure);

  /* ADC1 Init **************************************************  **************/
  ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
  ADC_InitStructure.ADC_ScanConvMode = DISABLE;
  ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
  ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_Rising;
  ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T2_TRGO;
  ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
  ADC_InitStructure.ADC_NbrOfConversion = 1;
  ADC_Init(ADC1, &ADC_InitStructure);

  /* ADC1 regular channel configuration *************************************/
  ADC_RegularChannelConfig(ADC1, ADC_Channel_TempSensor, 1, ADC_SampleTime_144Cycles);

  /* Enable ADC1 */
  ADC_Cmd(ADC1, ENABLE);
  ADC_TempSensorVrefintCmd( ENABLE); 
Сегодня прохладнее, получил 500 точек подряд, то есть пачка измерений через 10мкс, всего 5мс на 500 точек. Разброс от 1038 до 1040.
Миниатюры:
Нажмите на изображение для увеличения
Название: kazus_STM32F4_Temp.png
Просмотров: 59
Размер:	13.3 Кб
ID:	70109  

Последний раз редактировалось Yurkin2014; 03.10.2014 в 12:27.
Yurkin2014 вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 06:51.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.