ATmega + 12bit ADC

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

Сообщение Starichok51 »

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

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

Сообщение slav0n »

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

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

Сообщение Starichok51 »

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

Сообщение Dimon456 »

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

Сообщение slav0n »

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

Сообщение Starichok51 »

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

Сообщение slav0n »

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

Сообщение Starichok51 »

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

Сообщение slav0n »

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

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

Сообщение Starichok51 »

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

Сообщение COKPOWEHEU »

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

Сообщение 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);

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

Сообщение slav0n »

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

Сообщение Starichok51 »

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

Сообщение 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;
		}
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич

Сообщение Alexeyslav »

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

Сообщение slav0n »

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

Сообщение Alexeyslav »

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

Сообщение slav0n »

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

Сообщение Starichok51 »

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

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