ATmega + 12bit ADC
- Starichok51
- Модератор
- Сообщения: 19039
- Зарегистрирован: Сб авг 14, 2010 15:05:51
- Откуда: г. Озерск, Челябинская обл.
Re: ATmega + 12bit ADC
1000 потому, что это система реального времени, и все действия синхронизированы таймером.
таймер у меня работает по 1 мс. 1000 прерываний таймера - 1 секунда.
а вы оба приводили текст на Си, где вообще нет привязки к реальному времени - "тупое" непрерывное суммирование в цикле.
большая болтанка была вчера, с разогретым ноутбуком.
сегодня с утра включил, и о чудо - с холодным ноутом болтанки почти нет. даже первые секунды сумма вообще не изменялась и долго стояло 247000.
потом, с прогревом, начались колебания суммы, и первое время легко укладывались в +/-16 единиц.
сейчас, когда это пишу, примерно через 1 час после включения, большая болтанка суммы опять началась.
и если судить по первым минутам, пока ноут не нагрелся, оверсемплинг прекрасно работает.
таймер у меня работает по 1 мс. 1000 прерываний таймера - 1 секунда.
а вы оба приводили текст на Си, где вообще нет привязки к реальному времени - "тупое" непрерывное суммирование в цикле.
большая болтанка была вчера, с разогретым ноутбуком.
сегодня с утра включил, и о чудо - с холодным ноутом болтанки почти нет. даже первые секунды сумма вообще не изменялась и долго стояло 247000.
потом, с прогревом, начались колебания суммы, и первое время легко укладывались в +/-16 единиц.
сейчас, когда это пишу, примерно через 1 час после включения, большая болтанка суммы опять началась.
и если судить по первым минутам, пока ноут не нагрелся, оверсемплинг прекрасно работает.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
- slav0n
- Опытный кот
- Сообщения: 882
- Зарегистрирован: Ср дек 01, 2010 00:38:15
- Откуда: Харьков
- Контактная информация:
Re: ATmega + 12bit ADC
это получается АЦП работает на частоте 1кГц, а ведь может >50кГцStarichok51 писал(а):это система реального времени, и все действия синхронизированы таймером.
таймер у меня работает по 1 мс. 1000 прерываний таймера - 1 секунда.
Добавлено after 1 hour 20 minutes:
и кстати, если болтанки голой суммы без сдвига вообще нет, то и не будет вообще никакого оверсемплингаStarichok51 писал(а):о чудо - с холодным ноутом болтанки почти нет. даже первые секунды сумма вообще не изменялась и долго стояло 247000
ohmycode!
primuss3.com
primuss3.com
- Starichok51
- Модератор
- Сообщения: 19039
- Зарегистрирован: Сб авг 14, 2010 15:05:51
- Откуда: г. Озерск, Челябинская обл.
Re: ATmega + 12bit ADC
тактовая частота АЦП у меня 125 кГц.
а запуск измерений идет через 1 мс.
ну да, если нет болтанки полной суммы, значит и нет шума, необходимого для оверсемплинга.
а на стабильное число 247000 я сам сначала испугался, думал что МК завис. но потом смотрю, началось изменяться.
сначала появилось 246999, потом постепенно стало понижаться с прогревом ноута.
а если через некоторое время появляется болтанка, то что это означает?
или это то, что появился шум, или это просто постоянный дрейф напряжения питания, которое я измеряю?
а запуск измерений идет через 1 мс.
ну да, если нет болтанки полной суммы, значит и нет шума, необходимого для оверсемплинга.
а на стабильное число 247000 я сам сначала испугался, думал что МК завис. но потом смотрю, началось изменяться.
сначала появилось 246999, потом постепенно стало понижаться с прогревом ноута.
а если через некоторое время появляется болтанка, то что это означает?
или это то, что появился шум, или это просто постоянный дрейф напряжения питания, которое я измеряю?
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Re: ATmega + 12bit ADC
Увеличение частоты АЦП ведет еще к большей болтанке.
У меня текущая частота АЦП 18мкс, режим АЦП 10 бит.
Вот видео 1024 выборки, без СС (среднее скользыщее)Следующее видео 32768 выборки, без СС
У меня текущая частота АЦП 18мкс, режим АЦП 10 бит.
Вот видео 1024 выборки, без СС (среднее скользыщее)
Спойлер
Спойлер
- slav0n
- Опытный кот
- Сообщения: 882
- Зарегистрирован: Ср дек 01, 2010 00:38:15
- Откуда: Харьков
- Контактная информация:
Re: ATmega + 12bit ADC
это просто явный перегруз ацп и всеStarichok51 писал(а):стабильное число 247000
ohmycode!
primuss3.com
primuss3.com
- Starichok51
- Модератор
- Сообщения: 19039
- Зарегистрирован: Сб авг 14, 2010 15:05:51
- Откуда: г. Озерск, Челябинская обл.
Re: ATmega + 12bit ADC
для полной проверки подключил вход напряжения к опорному напряжению.
полная сумма стоит мертво, с тремя нулями (1000 выборок), то есть, на опоре нет никакого шума и никакого дрейфа. следовательно вся эта болтанка идет с юсб порта ноута.
и что там такая хреновая стабилизация по 5 Вольтам?
какой, на хрен перегруз?
247 единиц сложено 1000 раз, получается 247000.
полная сумма стоит мертво, с тремя нулями (1000 выборок), то есть, на опоре нет никакого шума и никакого дрейфа. следовательно вся эта болтанка идет с юсб порта ноута.
и что там такая хреновая стабилизация по 5 Вольтам?
какой, на хрен перегруз?
247 единиц сложено 1000 раз, получается 247000.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
- slav0n
- Опытный кот
- Сообщения: 882
- Зарегистрирован: Ср дек 01, 2010 00:38:15
- Откуда: Харьков
- Контактная информация:
Re: ATmega + 12bit ADC
5 вольт дает 247 единицStarichok51 писал(а):247 единиц сложено 1000 раз, получается 247000.
это типа максимально на входе 20 вольт
ohmycode!
primuss3.com
primuss3.com
- Starichok51
- Модератор
- Сообщения: 19039
- Зарегистрирован: Сб авг 14, 2010 15:05:51
- Откуда: г. Озерск, Челябинская обл.
Re: ATmega + 12bit ADC
да, входной делитель и величина опорного напряжения у меня дают калибровку на 20,54 Вольта.
брату я переделываю БП без перемотки силового трансформатора. поэтому максимальное напряжение на выходе БП выбрано 20 Вольт.
брату я переделываю БП без перемотки силового трансформатора. поэтому максимальное напряжение на выходе БП выбрано 20 Вольт.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
- slav0n
- Опытный кот
- Сообщения: 882
- Зарегистрирован: Ср дек 01, 2010 00:38:15
- Откуда: Харьков
- Контактная информация:
Re: ATmega + 12bit ADC
ладно, это все детали, а пока я вам нарисовал вот такую картинку, слегка приоткрывающую, на мой взгляд, занавес над теорией

- Вложения
-
- noise.jpg
- (43.13 КБ) 390 скачиваний
ohmycode!
primuss3.com
primuss3.com
- Starichok51
- Модератор
- Сообщения: 19039
- Зарегистрирован: Сб авг 14, 2010 15:05:51
- Откуда: г. Озерск, Челябинская обл.
Re: ATmega + 12bit ADC
ничего не понял из твоей картинки.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
- COKPOWEHEU
- Говорящий с текстолитом
- Сообщения: 1525
- Зарегистрирован: Чт июн 10, 2010 20:11:19
Re: ATmega + 12bit ADC
Набросал тут по-быстрому модель оверсамплинга в виде электронной таблицы
- Вложения
-
- oversampling.zip
- (62.49 КБ) 226 скачиваний
Re: ATmega + 12bit ADC
Если речь идет про Атмегу, то примерно так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
это пока только набросок...Starichok51 писал(а):ничего не понял из твоей картинки
ohmycode!
primuss3.com
primuss3.com
- Starichok51
- Модератор
- Сообщения: 19039
- Зарегистрирован: Сб авг 14, 2010 15:05:51
- Откуда: г. Озерск, Челябинская обл.
Re: ATmega + 12bit ADC
Dimon456, а смотришь ты эти суммы с какой периодичностью?
АЦП на преобразование тратит 13 своих тактов. один такт равен 8 мкс. итого 104 мкс.
128 преобразований в непрерывном режиме займет 128 * 104 = 13312 мкс.
ну, плюс накладные расходы в самом прерывании от АЦП.
итого около 14 мс.
АЦП на преобразование тратит 13 своих тактов. один такт равен 8 мкс. итого 104 мкс.
128 преобразований в непрерывном режиме займет 128 * 104 = 13312 мкс.
ну, плюс накладные расходы в самом прерывании от АЦП.
итого около 14 мс.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Re: ATmega + 12bit ADC
все зависит от количества отсчетов, к примеру: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
Нашел что измерять.... USB в ноуте получается от импульсного преобразователя, там шумность на ВЧ дайбоже... а у вас АЦП работает всего 1000выб/сек - на вход надо поставить ФНЧ минимум на 500Гц т.к. на входе АЦП не должно быть составляющих выше частоты найквиста. Всё бы сошло с рук если бы шум от преобразователя был бы белым, он помог бы в оверсемплинге, но шум там не белый и даже не симметричный и сильно зависит от работы всех подсистем ноута. В итоге получается то что вы видите: из-за сложной природы шума и наложения многих частот, из-за стробоскопического эффекта АЦП не защищённого НЧ фильтром по входу у вас появляется "виртуальный мусор" в измеренных данных в том числе и низкочастотный, который не успевает усредняться даже большими выборками.при этом я измерял тупо собственное питание 5 Вольт, которое взято (временно) от юсб порта ноутбука.
и прямо сейчас у меня работает тестовая прошивка, и я уже более 1 часа слежу за болтанкой полной суммы.
и в течение длительного времени разброс суммы достигал более 200. но это можно предположить плохую временнУю стабильность напряжения питания.
- slav0n
- Опытный кот
- Сообщения: 882
- Зарегистрирован: Ср дек 01, 2010 00:38:15
- Откуда: Харьков
- Контактная информация:
Re: ATmega + 12bit ADC
умножаем на 2 канала и на 8 (1024 семпла) = примерно 4 герцаStarichok51 писал(а):итого около 14 мс.
нормально
ohmycode!
primuss3.com
primuss3.com
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: ATmega + 12bit ADC
Для сокращения "оконного" сглаживания в одной конструкции я делал интересный ход: первый этап это простая сумма - т.е. берём 8 измерений, суммируем получаем значение, берем следующие 8 измерений суммируем, получаем значение и потом эти итоговые суммы проходят через оконное усреднение в 32 ячейки. По качеству получается эквивалент усредняющего окна на 256 выборок. А памяти используется 80 байт(40 16-битных чисел).
- Starichok51
- Модератор
- Сообщения: 19039
- Зарегистрирован: Сб авг 14, 2010 15:05:51
- Откуда: г. Озерск, Челябинская обл.
Re: ATmega + 12bit ADC
Dimon456, я спрашивал про код для АТмеги.
мне не интересно, как там у тебя на стм с 32768 отсчетами.
и в моих проектах есть секундомер. и мне важна работа в реальном времени с периодичностью ровно 1 секунда.
именно поэтому у меня измерения идут через 1 мс, 1000 раз за 1 секунду.
какое-то произвольное время работы АЦП меня не интересует.
мне не интересно, как там у тебя на стм с 32768 отсчетами.
и в моих проектах есть секундомер. и мне важна работа в реальном времени с периодичностью ровно 1 секунда.
именно поэтому у меня измерения идут через 1 мс, 1000 раз за 1 секунду.
какое-то произвольное время работы АЦП меня не интересует.
это ты не в "ту степь" попал я считал по коду от Dimon456 для АТмеги.slav0n писал(а):умножаем на 2 канала и на 8 (1024 семпла) = примерно 4 герца
на входе стоит у меня фильтр - делитель 51к-10к и параллельно 10к конденсатор 220 нФ. то есть, постоянная времени около 2 мс, что соответствует предлагаемым тобой 500 Гц.Alexeyslav писал(а):на вход надо поставить ФНЧ минимум на 500Гц
этот мой цифровой модуль тоже будет стоять в импульсном БП, и измерять напряжение и ток.Alexeyslav писал(а):USB в ноуте получается от импульсного преобразователя, там шумность на ВЧ дайбоже
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.