Миландр

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

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




Начать новую тему Ответить на тему  [ Сообщений: 12 ] 
Автор Сообщение
 Заголовок сообщения: вопрос по АЦП
СообщениеДобавлено: 2014-дек-12 10:47 
Не в сети

Зарегистрирован: 2014-ноя-17 08:47
Сообщения: 103
Здравствуйте уважаемые разработчики
в 3 ревизии контроллера кажется стоит 2 ревизия АЦП в ней добавился регистр ADC1_TRIM,
но в документации не написано как им пользоваться; с 6 полем все ясно, а вот с полем 1-5 непонятно
попробую раскинуть мысли... есть у нас идеальное напряжение опорное 3.3 вольта например(просто цифра)
мы настраиваем АЦП на измерение опорного напряжения получили результат, в TS_TRIM мы должны видимо записать какой-то коэффициент, но что конкретно это должно быть непонятно(отношение? разность? или что-то еще?)
ну соответственно вопрос что нужно записывать в поле TS_TRIM, и как это вычислить.

еще вопрос при измерении нескольких внешних каналов и обоих внутренних можно ли в настройках АЦП сразу указать все настройки для внутренних каналов или их нужно включать только когда происходит измерение внутренних каналов?(внутренние каналы VREF и TEMP_SENSOR)
и нужно ли при переходе от внутренних каналов к внешним сбрасывать настройки для внутренних каналов?

нашел тут картинку по подстройке в АЦП 1 ревизии ... получается мы мерим опорное напряжение переводим в вольты и согласно полученным вольтам пишем значение в TS_TRIM?
и вообще можно ли эту картинку применять для 2 ревизии АЦП?

немного все проясняется... то есть если нам нужен диапазон измерений от 1.2 до 1.195в мы выбираем опорное напряжение от датчика температуры, а в регистр ADC1_TRIM пишем какое напряжение нам точно нужно по таблице из 1 ревизии АЦП (можно ли ее применять ко 2 ревизии непонятно) так?
а тогда получается что мы не может измерять значения в диапазоне от 0 до 3.3 вольт то есть для этого диапазона нам нужно снова перейти на неточный источник опорного напряжения(которому соответствуют ноги AUcc и AGND) или можно включить выходной усилитель и подогнать 1.23в к 3.3в?
а если нам нужно совсем расширить диапазон или сделать его сдвинутым мы используем внешнее опорное напряжение от каналов 0 и 1?

в общем у меня получилось следующее: если мерить опорное напряжение с помощью опоры основанной на опорном напряжении бит 17 в CFG2 то измеренное напряжение постоянно скачет, а если брать "неточное опорное напряжение" то скачки практически прекращаются ... кстати получается внутреннее опорное напряжение (1.23) как то переделывается в 3.3
так что получается нет особой разницы что использовать ... непонят в общем вещь наверное какая-то тривиальная... вписывание любых чисел от 0 до 0x1F в значение ADC_TRIM ни к каким изменениям внутреннего точного источника не приводит (по таблице из 1 ревизии я тоже пробежался) вот кстати мой проект может я в нем что-то не так делаю?


Вложения:
project_9.rar [249.63 КБ]
Скачиваний: 185
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: вопрос по АЦП
СообщениеДобавлено: 2015-фев-17 09:46 
Не в сети
Аватара пользователя

Зарегистрирован: 2015-фев-04 12:21
Сообщения: 7
Откуда: Зеленоград
rubygoblin писал(а):
в 3 ревизии контроллера кажется стоит 2 ревизия АЦП в ней добавился регистр ADC1_TRIM
Действительно, читаешь оба описания АЦП первой и второй ревизии - как играешь в игру "Найди десять отличий".
Вопрос к разработчикам: нельзя где-то жирным шрифтом указать про отличия одной ревизии от другой, а не копировать текст с теми же самыми грамматическими ошибками?
Вы бы хоть проверку орфографии при создании документа включали бы. Читаешь: одна ошибка на другой.
Сорри за лирическое отступление..


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: вопрос по АЦП
СообщениеДобавлено: 2015-фев-17 12:55 
Не в сети

Зарегистрирован: 2009-май-29 16:09
Сообщения: 590
Откуда: АО "ПКК Миландр"
TS_TRIM это подстройка опорного напряжения датчика температуры, на внутренний неточный источник тока АЦП TS_TRIM никак не влияет. Для работы АЦП всегда нужен источник тока, который у него собственный либо он может использовать источник 1.2 В от датчика при этом на шкалу входного напряжения АЦП это никак не влияет. В первой ревизии аналогом TS_TRIM был TR но разрядность его была меньше, сейчас разрядность TS_TRIM больше поэтому и точность подстройки лучше, но подстраивать им можно только источник тока от датчика температуры. 1.2 В можно подстроить один раз оцифровав прецизионное аналоговое напряжение и само напряжение 1.2 В от источника. Затем обычной пропорцией найти ошибку и её занести в TS_TRIM.
(1.2+ошибка) В - код1
прецизионное напряжение - код 2
Графика соответствия между ошибкой в вольтах и кодом TS_TRIM не снималась, можете с этим поэкспериментировать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: вопрос по АЦП
СообщениеДобавлено: 2015-фев-17 14:59 
Не в сети
Аватара пользователя

Зарегистрирован: 2015-фев-04 12:21
Сообщения: 7
Откуда: Зеленоград
Читаю в документации (стр. 263): "Время зарядки внутренней емкости задается битами DelayGo[2:0] определяется в тактах CPU_CLK, независимо от того на какой частоте ADC_CLK или CPU_CLK идет само преобразование." Далее Таблица 296 – Время заряда внутренней емкости АЦП и время преобразования: Общее время TS заряда емкости АЦП перед началом преобразования DelayGo[2:0] = 0000 TS = 4 x CLK + 1 x CPU_CLK
Вопрос: что есть CLK?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: вопрос по АЦП
СообщениеДобавлено: 2015-мар-20 11:23 
Не в сети

Зарегистрирован: 2014-ноя-17 08:47
Сообщения: 103
приветствую уважаемых разработчиков

хочу попросить Вас рассказать о параметрах температурного датчика(просмотрел разделы документации по АЦП и справочные материалы не нашел...)
а) интересует примерно-реальный диапазон температур +- и точный теоретический диапазон измеряемых температур +-;
б) характеристика я так понял линейная, то есть по 2 точкам можно построить характеристику датчика между минимальной и максимальной точкой или предел измерений упрется в дискретный 0 или 0хFFFF, тут все так?
в) есть ли разница в датчиках при выборе разных корпусов ну там пластиковый и керамический?
г) есть ли разница в датчиках от приемки 1 или 5?
д) и еще если у меня несколько каналов нужно обработать + датчик температуры; я могу выставить бит SEL_TS и не трогать его или нужно выставлять только, когда выбран канал 31, а потом сбросить?

нашел некоторые ответы:
б) датчик использует узкую полосу примерно от 1100dec(~-60) до 2300dec(~125) при измерении АЦП, так что теоретический диапазон от ~-250 до ~460
еще раз формула( значение в цельсиях = (значение из АЦП - 1700) /6 + 25)
1700 - некое значение при 25 градусах
6 -чувствительность АЦП градус/дискрет, кажется
25 - видимо смещение
д) я выставлял все данные для обработки датчика температуры при инициализации и мерил 2 канала 0 и 31 и вроде бы все работало, так что видимо можно


Последний раз редактировалось rubygoblin 2015-мар-26 09:48, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: вопрос по АЦП
СообщениеДобавлено: 2015-мар-23 11:04 
Не в сети

Зарегистрирован: 2014-ноя-17 08:47
Сообщения: 103
Здравствуйте уважаемые разработчики

в модуле ADC есть регистр статуса, а в этом регистре есть бит под номером 0 (Flg REG OVERWRITE)
вопрос: влияет ли его установка на работу АЦП или это только для уведомления затирки предыдущего измерения нужно?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: вопрос по АЦП
СообщениеДобавлено: 2015-апр-02 09:38 
Не в сети

Зарегистрирован: 2014-ноя-17 08:47
Сообщения: 103
Здравствуйте уважаемые разработчики

Хочу уточнить некоторые детали по АЦП
1)регистр MDR_ADC1_CFG поля битов delay_ADC для 1986ВЕ1Т и 1986ВЕ9х называются одинаково и располагаются тоже,
эти биты получаются настраивают паузу между переключением АЦП или как ? ведь в 1986ВЕ1Т одно АЦП ???
ответ: (я измерял с помощью битового поля MDR_ADC1_CFG, в который задаешь канал) при установке максимального значения время измерения не меняется
2)регистр MDR_ADC1_CFG поля битов Delay_Go для 1986ВЕ1Т и 1986ВЕ9х называются одинаково и располагаются тоже,
эти биты получаются настраивают паузу между переключением каналов одного АЦП при последовательном переборе, а если измеряется 1 канал
пауза будет добавляться?
ответ: (я измерял с помощью битового поля MDR_ADC1_CFG, в который задаешь канал) при установке максимального значения время измерения меняется, качество примерно одинаковое
3) скорее всего я что-то не понимаю, а может ли одна из этих пауз вставляться между измерениями, при измерении 1 канала АЦП?
ответ: все и так ясно...
4) такой вопрос: если для изменения канала в MDR_ADC1_CFG приходится выключать АЦП,
можно ли избежать выключение используя регистр CHSEL и манипулировать сменой канала например битом cfg_REG_SAMPLE?
то есть АЦП все время включено... надо замерить ---> cfg_REG_SAMPLE = 1, надо сменить cfg_REG_SAMPLE = 0, смена канала, cfg_REG_SAMPLE = 1...
возможно ли так?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: вопрос по АЦП
СообщениеДобавлено: 2016-окт-12 11:48 
Не в сети

Зарегистрирован: 2014-апр-14 15:08
Сообщения: 31
Откуда: Москва
Всем привет!

Из спецификации на контроллер 1986ВЕ1Т имеем (стр. 241):
«Последовательное преобразование значения датчика температуры и источника опорного напряжения могут выполняться только в режиме последовательного преобразования ОДНОГО канала».

Я в регистре выбора каналов перебора ADC1_CHSEL, назначаю для перебора ВСЕ каналы, а именно:
Код:
  ADC1_CHSEL  = (1u<<0)|(1u<<1)|(1u<<2)|(1u<<3)|(1u<<4)|(1u<<5)|(1u<<6)|(1u<<7)  // внешние каналы ADC0...ADC7
                   | (1u<<30)  // внутренний каналы номер 30 - опорное напряжение
                   | (1u<<31); // внутренний каналы номер 31 - встроенный датчик температуры

И у меня вроде все работает верно. Т.е. все каналы поочередно перебираются и оцифрованные значения соответствуют напряжениям на этих каналах.
Поэтому, либо информация из спецификации устарела, либо я чего то не замечаю ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: вопрос по АЦП
СообщениеДобавлено: 2018-янв-06 10:49 
Не в сети

Зарегистрирован: 2016-июн-21 21:35
Сообщения: 26
Доброе вермя суток. Задам свой вопрос про АЦП тут. Я правильно понял что у мк есть вход ADCx_REF- при подключении его к положительному опорному напряжению 1.8В я могу мерить сигнал от -1.8В до 1.8В? если да, то нужно подключать внешний источник опорного напряжения?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: вопрос по АЦП
СообщениеДобавлено: 2018-янв-06 19:01 
Не в сети

Зарегистрирован: 2009-сен-21 12:39
Сообщения: 479
milander писал(а):
я могу мерить сигнал от -1.8В до 1.8В?

Нет, конечно :(. Диапазон измерений АЦП от ADC_REF- (0...U_CCA-2,4В) до ADC_REF+ (2,4В...U_CCA), см."Спецификацию/Параметры АЦП"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: вопрос по АЦП
СообщениеДобавлено: 2018-май-21 15:17 
Не в сети

Зарегистрирован: 2016-июн-21 21:35
Сообщения: 26
Никак не задалось у меня с эти процессорм. АЦП работает не понятно. Вход PD9
Код:
void GPIOConfigure(void) {
   PORT_InitTypeDef PORT_InitStructure;
   ADC_InitTypeDef sADC;
   ADCx_InitTypeDef sADCx;
   
   RST_CLK_PCLKcmd(RST_CLK_PCLK_PORTD | RST_CLK_PCLK_ADC, ENABLE);

   /*
      АЦП
   */
   PORT_InitStructure.PORT_Pin = PORT_Pin_9;
   PORT_InitStructure.PORT_OE = PORT_OE_IN;
   PORT_InitStructure.PORT_MODE = PORT_MODE_ANALOG;
   PORT_Init(MDR_PORTD, &PORT_InitStructure);
   
   RST_CLK_ADCclkSelection(RST_CLK_ADCclkCPU_C1);
   RST_CLK_ADCclkPrescaler(RST_CLK_ADCclkDIV2);
   // Enable clock ADC
   RST_CLK_ADCclkEnable(ENABLE);
   
   sADC.ADC_StartDelay = 0; // задержка включения АЦП от начала работы = 0
   sADC.ADC_IntVRefTrimming = 1; //подстройка опорного напряжения
   ADC_Init (&sADC); //инициализировать АЦП с заданными параметрами
   
   /* настройка каналаADC1 АЦП */
   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_ADC2;//номер канала
   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);
   ADC1_Cmd (ENABLE); //включить канал ADC1
   
   ADC1_ITConfig(ADCx_IT_END_OF_CONVERSION, ENABLE);
   /* Enable ADC IRQ */
   NVIC_EnableIRQ(ADC_IRQn);

}


void ADC_IRQHandler(void) {   
   result = ADC1_GetResult();
}


При напряжении 0 на входе result=131072, а при напряжении 3,2 В result=135167. 400 значений это явно не 12 бит или что то я не понимаю или что то не так?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: вопрос по АЦП
СообщениеДобавлено: 2018-май-21 16:29 
Не в сети

Зарегистрирован: 2017-апр-26 14:51
Сообщения: 159
Откуда: ПКК "Миландр"
АЦП 12-битный [11..0], в старшей части указывается номер канала [20..16]. Итого:
131072 = 0х20000 , где 2 - это канал, а 0x000 - это значения сигнала на канале 2.
135167 = 0х20FFF , где 2 - это канал, а 0xFFF - это значения сигнала на канале 2.

_________________
Отдел технической поддержки support@milandr.ru


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 12 ] 

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


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

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


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

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