Страница 1 из 1

Нелинейность масштабного коэффициента SDADC на МК stm32f373

Добавлено: Пн июн 03, 2024 09:29:08
Дмитрий Бо
Добрый день!
Изучаю сигма дельта АЦП на МК stm32f373.
Настройки: 6МГц,режим single-ended zero reference, continuous mode, vddsd=3.3В, провожу калибровку, инициализацию итд. Для исследования АЦП использую калибратор, напряжение выставляю от 100мВ до 3В(с шагом 100мВ),делаю замеры по 30 сек.
Наблюдается значительная нелинейность масштабного коэффициента(СРЗНАЧ(кодАЦП)/Uкалибратора), особенно в районе нуля вольт(около 2%).
Кто нибудь сталкивался с подобным явлением?
Изображение

Re: Нелинейность масштабного коэффициента SDADC на МК stm32f

Добавлено: Вс июн 09, 2024 12:59:33
GARMIN
Допустимый диапазон входного напряжения соблюдается?
Встроенные операционники не R2R.

Re: Нелинейность масштабного коэффициента SDADC на МК stm32f

Добавлено: Пн июн 10, 2024 12:03:09
Дмитрий Бо
[uquote="GARMIN",url="/forum/viewtopic.php?p=4589207#p4589207"]Допустимый диапазон входного напряжения соблюдается?
Встроенные операционники не R2R.[/uquote]
В режиме single-ended zero reference диапазон входных напряжений согласно мануалу от Vrefsd-(у меня 0В)до Vrefsd+/gain(у меня 3.3В, gain=1).
Насчёт операционников - отступил от края диапазона 100мВ снизу и 300мВ сверху диапазона.

Re: Нелинейность масштабного коэффициента SDADC на МК stm32f

Добавлено: Вт июн 11, 2024 19:53:50
jcxz
[uquote="Дмитрий Бо",url="/forum/viewtopic.php?p=4586819#p4586819"]Наблюдается значительная нелинейность масштабного коэффициента(СРЗНАЧ(кодАЦП)/Uкалибратора), особенно в районе нуля вольт(около 2%).
Кто нибудь сталкивался с подобным явлением?[/uquote]Очень похоже на то, что выставили слишком малое значение времени предвыборки для АЦП. Не соответствующее сопротивлению измеряемой цепи. Вот и не успевает ёмкость заряжаться до нужного напряжения. Для теста попробуйте поставить максимальный sampling time.

Re: Нелинейность масштабного коэффициента SDADC на МК stm32f

Добавлено: Ср июн 12, 2024 16:06:31
GARMIN
[uquote="Дмитрий Бо",url="/forum/viewtopic.php?p=4589503#p4589503"]Насчёт операционников - отступил от края диапазона 100мВ снизу и 300мВ сверху диапазона.[/uquote]
И как? Есть результат?

Re: Нелинейность масштабного коэффициента SDADC на МК stm32f

Добавлено: Пн июн 17, 2024 10:34:11
Дмитрий Бо
[uquote="GARMIN",url="/forum/viewtopic.php?p=4590267#p4590267"][uquote="Дмитрий Бо",url="/forum/viewtopic.php?p=4589503#p4589503"]Насчёт операционников - отступил от края диапазона 100мВ снизу и 300мВ сверху диапазона.[/uquote]
И как? Есть результат?[/uquote]

Пока работаем в линейной области диапазона, жаль конечно терять больше трети точности на ровном месте.

Добавлено after 38 minutes 46 seconds:
[uquote="jcxz",url="/forum/viewtopic.php?p=4589996#p4589996"][uquote="Дмитрий Бо",url="/forum/viewtopic.php?p=4586819#p4586819"]Наблюдается значительная нелинейность масштабного коэффициента(СРЗНАЧ(кодАЦП)/Uкалибратора), особенно в районе нуля вольт(около 2%).
Кто нибудь сталкивался с подобным явлением?[/uquote]Очень похоже на то, что выставили слишком малое значение времени предвыборки для АЦП. Не соответствующее сопротивлению измеряемой цепи. Вот и не успевает ёмкость заряжаться до нужного напряжения. Для теста попробуйте поставить максимальный sampling time.[/uquote]
Сигнал "медленно меняющийся"(на самом деле вообще не меняется в процессе замера), длительность переходного процесса не учитывается. Т.Е. зарядится он до номинального напряжения за условные 100 замеров, а мы начнем снимать показания через условные 1000 замеров. Я попробую замедлить замеры, но пока не могу проверить весь диапазон, уже переделал схему с учётом диапазона от 1В до 3В.

Re: Нелинейность масштабного коэффициента SDADC на МК stm32f

Добавлено: Пн июн 17, 2024 15:25:30
es131245
У меня всё хорошо работает, но медленно.
И там нету "многоканальности"/сканирующий режим как у ADC

Код: Выделить всё


 __HAL_RCC_GPIOD_CLK_ENABLE();
 __HAL_RCC_SDADC1_CLK_ENABLE();

 pin.Pin=GPIO_PIN_8;
 pin.Mode=GPIO_MODE_ANALOG;
 pin.Pull=GPIO_NOPULL;
 HAL_GPIO_Init(GPIOD,&pin);

 adc1.Instance=SDADC1;
 adc1.Init.IdleLowPowerMode=SDADC_LOWPOWER_NONE;
 adc1.Init.FastConversionMode=SDADC_FAST_CONV_DISABLE;
 adc1.Init.SlowClockMode=SDADC_SLOW_CLOCK_DISABLE;
 adc1.Init.ReferenceVoltage=SDADC_VREF_EXT;
 if(HAL_SDADC_Init(&adc1)!=HAL_OK)Error_Handler();
 cfg.InputMode=SDADC_INPUT_MODE_SE_OFFSET;
 cfg.Gain=SDADC_GAIN_1_2;
 cfg.CommonMode=SDADC_COMMON_MODE_VSSA;
 cfg.Offset=0;
 if(HAL_SDADC_PrepareChannelConfig(&adc1,SDADC_CONF_INDEX_0,&cfg)!=HAL_OK)Error_Handler();
 if(HAL_SDADC_AssociateChannelConfig(&adc1,SDADC_CHANNEL_8,SDADC_CONF_INDEX_0)!=HAL_OK)Error_Handler();
 if(HAL_SDADC_InjectedConfigChannel(&adc1,SDADC_CHANNEL_8,SDADC_CONTINUOUS_CONV_OFF)!=HAL_OK)Error_Handler();
 if(HAL_SDADC_SelectInjectedTrigger(&adc1,SDADC_SOFTWARE_TRIGGER)!=HAL_OK)Error_Handler();
 //HAL_SDADC_CalibrationStart(&adc1,SDADC_CALIBRATION_SEQ_1);
 //HAL_SDADC_PollForCalibEvent(&adc1,HAL_MAX_DELAY);
 // один раз калибровать каждое устройство


 HAL_NVIC_SetPriority(SDADC1_IRQn,5,5);
 HAL_NVIC_EnableIRQ(SDADC1_IRQn);
 HAL_SDADC_InjectedStart_IT(&adc1);

void HAL_SDADC_InjectedConvCpltCallback(SDADC_HandleTypeDef*hadc){adcA[0]=HAL_SDADC_InjectedGetValue(hadc,(uint32_t*)&Ch);}
void SDADC1_IRQHandler(void){HAL_SDADC_IRQHandler(&adc1);}


Re: Нелинейность масштабного коэффициента SDADC на МК stm32f

Добавлено: Пн июн 17, 2024 17:01:40
jcxz
[uquote="Дмитрий Бо",url="/forum/viewtopic.php?p=4592053#p4592053"]Сигнал "медленно меняющийся"(на самом деле вообще не меняется в процессе замера), длительность переходного процесса не учитывается. Т.Е. зарядится он до номинального напряжения за условные 100 замеров, а мы начнем снимать показания через условные 1000 замеров.[/uquote]И что? Какая разница как он меняется?
Достаточно входному мультиплексору АЦП переключиться на измерение другого канала (с другим уровнем вх.сигнала), как сразу получите ошибку (при неверной длительности предвыборки). Если коммутация каналов происходит периодически - ошибка будет всегда. Величина её будет зависеть от разницы напряжений между каналами. Т.е. - если на одном канале вх.напряжение не меняется, а напряжение своего калибратора - меняете, то как раз и получится нелинейный график величины ошибки.

Re: Нелинейность масштабного коэффициента SDADC на МК stm32f

Добавлено: Пн июн 17, 2024 17:36:18
КРАМ
jcxz писал(а):Вот и не успевает ёмкость заряжаться до нужного напряжения.
[uquote="jcxz",url="/forum/viewtopic.php?p=4592151#p4592151"]сразу получите ошибку (при неверной длительности предвыборки)[/uquote]
О какой "предвыборке" вы говорите? Разговор идет не о 12-разрядном SAR ADC, а о 16-разрядном SDADC. Там нет никакого УВХ и соответственно емкости.

Re: Нелинейность масштабного коэффициента SDADC на МК stm32f

Добавлено: Пн июн 17, 2024 17:57:39
jcxz
[uquote="КРАМ",url="/forum/viewtopic.php?p=4592160#p4592160"]
jcxz писал(а):Вот и не успевает ёмкость заряжаться до нужного напряжения.
SDADC. Там нет никакого УВХ и соответственно емкости.[/uquote]Ну если нет ёмкости, значит проблема в чём-то другом.

Re: Нелинейность масштабного коэффициента SDADC на МК stm32f

Добавлено: Вт июн 18, 2024 10:57:35
Дмитрий Бо
es131245 писал(а): У меня всё хорошо работает, но медленно.
Подскажите, а какая частота подаётся на СДАЦП? Насколько медленно он работает? По коду вижу, что slow mode отключён.
Достаточно входному мультиплексору АЦП переключиться...
У меня используется пока один канал.

Re: Нелинейность масштабного коэффициента SDADC на МК stm32f

Добавлено: Вт июн 18, 2024 12:42:04
es131245
[uquote="Дмитрий Бо",url="/forum/viewtopic.php?p=4592376#p4592376"]Подскажите, а какая частота подаётся на СДАЦП? Насколько медленно он работает? По коду вижу, что slow mode отключён.
Достаточно входному мультиплексору АЦП переключиться...
У меня используется пока один канал.[/uquote]

Тактирование 6Мгц, а измерение выходило к 20-35мкСек при 1 канале.
20мкСек это ограничения аппаратные (an4207 стр 12).
Что бы не накидывать лишние микроСеки резал HAL, но выхлоп был мал.
В итоге перешел на ADC, шоб не ставить внешнюю АЦП

Внешнее мультиплексирование тоже только предстоит ещё