ATmega + 12bit ADC

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
Starichok51
Модератор
Сообщения: 19039
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Re: ATmega + 12bit ADC

Сообщение Starichok51 »

1000 потому, что это система реального времени, и все действия синхронизированы таймером.
таймер у меня работает по 1 мс. 1000 прерываний таймера - 1 секунда.
а вы оба приводили текст на Си, где вообще нет привязки к реальному времени - "тупое" непрерывное суммирование в цикле.

большая болтанка была вчера, с разогретым ноутбуком.
сегодня с утра включил, и о чудо - с холодным ноутом болтанки почти нет. даже первые секунды сумма вообще не изменялась и долго стояло 247000.
потом, с прогревом, начались колебания суммы, и первое время легко укладывались в +/-16 единиц.
сейчас, когда это пишу, примерно через 1 час после включения, большая болтанка суммы опять началась.
и если судить по первым минутам, пока ноут не нагрелся, оверсемплинг прекрасно работает.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Аватара пользователя
slav0n
Опытный кот
Сообщения: 882
Зарегистрирован: Ср дек 01, 2010 00:38:15
Откуда: Харьков
Контактная информация:

Re: ATmega + 12bit ADC

Сообщение slav0n »

Starichok51 писал(а):это система реального времени, и все действия синхронизированы таймером.
таймер у меня работает по 1 мс. 1000 прерываний таймера - 1 секунда.
это получается АЦП работает на частоте 1кГц, а ведь может >50кГц

Добавлено after 1 hour 20 minutes:
Starichok51 писал(а):о чудо - с холодным ноутом болтанки почти нет. даже первые секунды сумма вообще не изменялась и долго стояло 247000
и кстати, если болтанки голой суммы без сдвига вообще нет, то и не будет вообще никакого оверсемплинга
ohmycode!
primuss3.com
Аватара пользователя
Starichok51
Модератор
Сообщения: 19039
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Re: ATmega + 12bit ADC

Сообщение Starichok51 »

тактовая частота АЦП у меня 125 кГц.
а запуск измерений идет через 1 мс.
ну да, если нет болтанки полной суммы, значит и нет шума, необходимого для оверсемплинга.
а на стабильное число 247000 я сам сначала испугался, думал что МК завис. но потом смотрю, началось изменяться.
сначала появилось 246999, потом постепенно стало понижаться с прогревом ноута.
а если через некоторое время появляется болтанка, то что это означает?
или это то, что появился шум, или это просто постоянный дрейф напряжения питания, которое я измеряю?
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Re: ATmega + 12bit ADC

Сообщение Dimon456 »

Увеличение частоты АЦП ведет еще к большей болтанке.
У меня текущая частота АЦП 18мкс, режим АЦП 10 бит.
Вот видео 1024 выборки, без СС (среднее скользыщее)
Спойлер
Следующее видео 32768 выборки, без СС
Спойлер
Аватара пользователя
slav0n
Опытный кот
Сообщения: 882
Зарегистрирован: Ср дек 01, 2010 00:38:15
Откуда: Харьков
Контактная информация:

Re: ATmega + 12bit ADC

Сообщение slav0n »

Starichok51 писал(а):стабильное число 247000
это просто явный перегруз ацп и все
ohmycode!
primuss3.com
Аватара пользователя
Starichok51
Модератор
Сообщения: 19039
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Re: ATmega + 12bit ADC

Сообщение Starichok51 »

для полной проверки подключил вход напряжения к опорному напряжению.
полная сумма стоит мертво, с тремя нулями (1000 выборок), то есть, на опоре нет никакого шума и никакого дрейфа. следовательно вся эта болтанка идет с юсб порта ноута.
и что там такая хреновая стабилизация по 5 Вольтам?
какой, на хрен перегруз?
247 единиц сложено 1000 раз, получается 247000.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Аватара пользователя
slav0n
Опытный кот
Сообщения: 882
Зарегистрирован: Ср дек 01, 2010 00:38:15
Откуда: Харьков
Контактная информация:

Re: ATmega + 12bit ADC

Сообщение slav0n »

Starichok51 писал(а):247 единиц сложено 1000 раз, получается 247000.
5 вольт дает 247 единиц
это типа максимально на входе 20 вольт
ohmycode!
primuss3.com
Аватара пользователя
Starichok51
Модератор
Сообщения: 19039
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Re: ATmega + 12bit ADC

Сообщение Starichok51 »

да, входной делитель и величина опорного напряжения у меня дают калибровку на 20,54 Вольта.
брату я переделываю БП без перемотки силового трансформатора. поэтому максимальное напряжение на выходе БП выбрано 20 Вольт.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Аватара пользователя
slav0n
Опытный кот
Сообщения: 882
Зарегистрирован: Ср дек 01, 2010 00:38:15
Откуда: Харьков
Контактная информация:

Re: ATmega + 12bit ADC

Сообщение slav0n »

ладно, это все детали, а пока я вам нарисовал вот такую картинку, слегка приоткрывающую, на мой взгляд, занавес над теорией

Изображение
Вложения
noise.jpg
(43.13 КБ) 390 скачиваний
ohmycode!
primuss3.com
Аватара пользователя
Starichok51
Модератор
Сообщения: 19039
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Re: ATmega + 12bit ADC

Сообщение Starichok51 »

ничего не понял из твоей картинки.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Аватара пользователя
COKPOWEHEU
Говорящий с текстолитом
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Re: ATmega + 12bit ADC

Сообщение COKPOWEHEU »

Набросал тут по-быстрому модель оверсамплинга в виде электронной таблицы
Вложения
oversampling.zip
(62.49 КБ) 226 скачиваний
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Re: ATmega + 12bit ADC

Сообщение Dimon456 »

Starichok51 писал(а):1000 потому, что это система реального времени, и все действия синхронизированы таймером.
таймер у меня работает по 1 мс. 1000 прерываний таймера - 1 секунда.
а вы оба приводили текст на Си, где вообще нет привязки к реальному времени - "тупое" непрерывное суммирование в цикле.
Если речь идет про Атмегу, то примерно так
Спойлер// ADC Clock frequency: 125,000 kHz
// ADC Auto Trigger Source: Free Running

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

volatile uint16_t sum_u;
volatile uint16_t sum_i;
// ADC interrupt service routine
// with auto input scanning
ISR(ADC_vect) 
{
static uint8_t count = 0;
static uint16_t adc_data[2]={0,0};

// Read the AD conversion result
adc_data[count%2] += ADCW;

	if (count++ > ((63*2)))  { 
		count = 0;
		sum_u = adc_data[0]; adc_data[0]=0;
		sum_i = adc_data[1]; adc_data[1]=0;
	}

// Select next ADC input
ADMUX=(0 | ADC_VREF_TYPE) + count%2;

// Delay needed for the stabilization of the ADC input voltage
_delay_us(10);

// Start the AD conversion
ADCSRA|=(1<<ADSC);

}
Аватара пользователя
slav0n
Опытный кот
Сообщения: 882
Зарегистрирован: Ср дек 01, 2010 00:38:15
Откуда: Харьков
Контактная информация:

Re: ATmega + 12bit ADC

Сообщение slav0n »

Starichok51 писал(а):ничего не понял из твоей картинки
это пока только набросок...
ohmycode!
primuss3.com
Аватара пользователя
Starichok51
Модератор
Сообщения: 19039
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Re: ATmega + 12bit ADC

Сообщение Starichok51 »

Dimon456, а смотришь ты эти суммы с какой периодичностью?
АЦП на преобразование тратит 13 своих тактов. один такт равен 8 мкс. итого 104 мкс.
128 преобразований в непрерывном режиме займет 128 * 104 = 13312 мкс.
ну, плюс накладные расходы в самом прерывании от АЦП.
итого около 14 мс.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Re: ATmega + 12bit ADC

Сообщение Dimon456 »

Starichok51 писал(а):а смотришь ты эти суммы с какой периодичностью?
все зависит от количества отсчетов, к примеру:
на 32768 отсчета на каждый канал, а их два, мне требуется 18мкс * 32768 * 2 = 1,18 секунды.

Добавляешь флаг в прерывание, а в основном коде проверяешь этот флаг
Спойлер

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

volatile bool ain_status;

		if(ain_status) {
			ain_status = 0;

			  u_izm = sum_u >> 3;	// это просто пример
			  i_izm = sum_i >> 3;
		}
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: ATmega + 12bit ADC

Сообщение Alexeyslav »

при этом я измерял тупо собственное питание 5 Вольт, которое взято (временно) от юсб порта ноутбука.
и прямо сейчас у меня работает тестовая прошивка, и я уже более 1 часа слежу за болтанкой полной суммы.
и в течение длительного времени разброс суммы достигал более 200. но это можно предположить плохую временнУю стабильность напряжения питания.
Нашел что измерять.... USB в ноуте получается от импульсного преобразователя, там шумность на ВЧ дайбоже... а у вас АЦП работает всего 1000выб/сек - на вход надо поставить ФНЧ минимум на 500Гц т.к. на входе АЦП не должно быть составляющих выше частоты найквиста. Всё бы сошло с рук если бы шум от преобразователя был бы белым, он помог бы в оверсемплинге, но шум там не белый и даже не симметричный и сильно зависит от работы всех подсистем ноута. В итоге получается то что вы видите: из-за сложной природы шума и наложения многих частот, из-за стробоскопического эффекта АЦП не защищённого НЧ фильтром по входу у вас появляется "виртуальный мусор" в измеренных данных в том числе и низкочастотный, который не успевает усредняться даже большими выборками.
Аватара пользователя
slav0n
Опытный кот
Сообщения: 882
Зарегистрирован: Ср дек 01, 2010 00:38:15
Откуда: Харьков
Контактная информация:

Re: ATmega + 12bit ADC

Сообщение slav0n »

Starichok51 писал(а):итого около 14 мс.
умножаем на 2 канала и на 8 (1024 семпла) = примерно 4 герца
нормально
ohmycode!
primuss3.com
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: ATmega + 12bit ADC

Сообщение Alexeyslav »

Для сокращения "оконного" сглаживания в одной конструкции я делал интересный ход: первый этап это простая сумма - т.е. берём 8 измерений, суммируем получаем значение, берем следующие 8 измерений суммируем, получаем значение и потом эти итоговые суммы проходят через оконное усреднение в 32 ячейки. По качеству получается эквивалент усредняющего окна на 256 выборок. А памяти используется 80 байт(40 16-битных чисел).
Аватара пользователя
slav0n
Опытный кот
Сообщения: 882
Зарегистрирован: Ср дек 01, 2010 00:38:15
Откуда: Харьков
Контактная информация:

Re: ATmega + 12bit ADC

Сообщение slav0n »

здесь это не подходит, здесь надо накапливать шум
ohmycode!
primuss3.com
Аватара пользователя
Starichok51
Модератор
Сообщения: 19039
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Re: ATmega + 12bit ADC

Сообщение Starichok51 »

Dimon456, я спрашивал про код для АТмеги.
мне не интересно, как там у тебя на стм с 32768 отсчетами.
и в моих проектах есть секундомер. и мне важна работа в реальном времени с периодичностью ровно 1 секунда.
именно поэтому у меня измерения идут через 1 мс, 1000 раз за 1 секунду.
какое-то произвольное время работы АЦП меня не интересует.
slav0n писал(а):умножаем на 2 канала и на 8 (1024 семпла) = примерно 4 герца
это ты не в "ту степь" попал я считал по коду от Dimon456 для АТмеги.
Alexeyslav писал(а):на вход надо поставить ФНЧ минимум на 500Гц
на входе стоит у меня фильтр - делитель 51к-10к и параллельно 10к конденсатор 220 нФ. то есть, постоянная времени около 2 мс, что соответствует предлагаемым тобой 500 Гц.
Alexeyslav писал(а):USB в ноуте получается от импульсного преобразователя, там шумность на ВЧ дайбоже
этот мой цифровой модуль тоже будет стоять в импульсном БП, и измерять напряжение и ток.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Ответить

Вернуться в «AVR»