Миландр

Ключевым подразделением нашей компании является Центр Проектирования интегральных микросхем
Текущее время: 2017-дек-15 13:22

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 19 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: Встроенный датчик температуры
СообщениеДобавлено: 2015-ноя-25 20:34 
Не в сети
Аватара пользователя

Зарегистрирован: 2011-авг-21 18:55
Сообщения: 229
Offtop - А можно ли для 1986ВЕ9х допустим сделать 10 замеров на одном канале АЦП с записью через DMA в буфер, потом чтобы автоматически АЦП переключился на другой канал, опять записал 10 замеров и так далее до последнего требуемого канала, а потом выработал прерывание DMA или АЦП по завершению всех замеров?

_________________
Hack the Planet!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Встроенный датчик температуры
СообщениеДобавлено: 2016-июл-07 16:41 
Не в сети

Зарегистрирован: 2014-дек-12 11:03
Сообщения: 11
sguwenka писал(а):
а вот про размер "громадной ошибки" можно поподробнее? 5 градусов? 10? 20? Ну хоть один раз цифры приведите. Каждый сам решит, приемлема ли в его проекта такая погрешность или нет.


Так все-таки какую максимальную ошибку можно ожидать без калибровки?

А датчиком температуры в 1986ВЕ1Т можно пользоваться без калибровки или там такие же проблемы с точностью?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Встроенный датчик температуры
СообщениеДобавлено: 2016-июл-07 17:11 
Не в сети

Зарегистрирован: 2011-сен-05 12:12
Сообщения: 169
Откуда: Саратов
И еще о датчике температуры. Он сильно искажает показания в момент переключения канала АЦП, поэтому если АЦП используется не только для измерения температуры - надо отбрасывать 2 (возможно, и более, если измерение на большой скорости) отсчета температуры после переключения с измерения входного напряжения.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Встроенный датчик температуры
СообщениеДобавлено: 2016-сен-02 18:27 
Не в сети

Зарегистрирован: 2016-янв-29 17:53
Сообщения: 54
Какой рабочий диапазон у датчика? А если АЦП1 мне нужен и для других нужд, все время нужно перенастраивать?

Открыть пример кода
Код:
#define FACTORY_ADC_TEMP25      1700      // ADC value = 1700 @ 25C = 1.36996V - from milandr demo project
#define FACTORY_VTEMP25         1.36996   // Зачем нам нужно?
#define FACTORY_ADC_AVG_SLOPE      6      // ADC delta value @ 1C, from milandr demo project
#define FACTORY_AVG_SLOPE      0.004835   // Зачем нам нужно?
#define FACTORY_TEMP25            25
// Правильные ли настройки?
void ADCTemp_Config(void)
{
   ADC_InitTypeDef sADC;
   ADCx_InitTypeDef sADCx;
     /* ADC Configuration */
  /* Reset all ADC settings */
  ADC_DeInit();
  ADC_StructInit(&sADC);

  sADC.ADC_SynchronousMode      = ADC_SyncMode_Independent;
  sADC.ADC_StartDelay           = 0;
  sADC.ADC_TempSensor           = ADC_TEMP_SENSOR_Enable;
  sADC.ADC_TempSensorAmplifier  = ADC_TEMP_SENSOR_AMPLIFIER_Enable;
  sADC.ADC_TempSensorConversion = ADC_TEMP_SENSOR_CONVERSION_Enable;
  sADC.ADC_IntVRefConversion    = ADC_VREF_CONVERSION_Disable;
  sADC.ADC_IntVRefTrimming      = 1;
  ADC_Init (&sADC);

  /* ADC1 Configuration */
  ADCx_StructInit (&sADCx);
  sADCx.ADC_ClockSource      = ADC_CLOCK_SOURCE_CPU;
  sADCx.ADC_SamplingMode     = ADC_SAMPLING_MODE_CICLIC_CONV;
  sADCx.ADC_ChannelSwitching = ADC_CH_SWITCHING_Disable;
  sADCx.ADC_ChannelNumber    = ADC_CH_TEMP_SENSOR;
  sADCx.ADC_Channels         = 0;
  sADCx.ADC_LevelControl     = ADC_LEVEL_CONTROL_Disable;
  sADCx.ADC_LowLevel         = 0;
  sADCx.ADC_HighLevel        = 0;
  sADCx.ADC_VRefSource       = ADC_VREF_SOURCE_INTERNAL;
  sADCx.ADC_IntVRefSource    = ADC_INT_VREF_SOURCE_INEXACT;
  sADCx.ADC_Prescaler        = ADC_CLK_div_512;
  sADCx.ADC_DelayGo          = 7;
  ADC1_Init (&sADCx);

  /* Enable ADC1 EOCIF and AWOIFEN interupts */
  ADC1_ITConfig((ADCx_IT_END_OF_CONVERSION  | ADCx_IT_OUT_OF_RANGE), DISABLE);

  /* ADC1 enable */
  ADC1_Cmd (ENABLE);
}
int16_t GetTemp(void)
{
   uint16_t adc_value;
   ADC1_Start();
   while(1)
   {
      if(ADC1_GetFlagStatus(ADCx_FLAG_END_OF_CONVERSION))
         break;
   }
   adc_value = (uint16_t)ADC1_GetResult();
   return ((adc_value - FACTORY_ADC_TEMP25)/FACTORY_ADC_AVG_SLOPE + FACTORY_TEMP25);
}
Закрыть


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 19 ]  На страницу Пред.  1, 2

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7


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

Найти:
Перейти:  
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB