Единственно могу сказать, да работает, но разница, да же при сравнении 12 реальных бит с 12-13 виртуальными (при 10 битном АЦП) ощутима, чувствуется. Это еще не хватает хорошей нагрузки с кучей пульсаций.
Но, как говорят, за неимением лучшего, сойдет и так. Но, лучше иметь 12 реальных бит, чем 12 виртуальных.
Куда тебе этот шаг нужен? Для морального самоудовлетворения?
Да и шаг в 0.001В, пиши формулу, максимум у меня 33В, подстраивайся, выдам я тебе этот шаг.
Dimon456 писал(а):при делении на 8 он отбрасывает 3 младших бита, которые несут информацию.
да, сумма 64 выборок дает 6 дополнительных бит.
но согласно теории оверсемплинга только 3 бита из 6 несут полезную (правильную) информацию.
с другой стороны, и ты прав - 3 младших бита тоже несут информацию, информацию о среднем значении.
и если поделить на 64, особенно с плавающей точкой, то получим достаточно правильное среднее значение.
веше я говорил, то делаю сумму 1000 выборок.
1000 мало отличается от 1024, и можно по этой теории считать, что я имею +5 бит.
но несмотря на мою тутошнюю защиту оверсемплинга, теория остается теорией. и не факт, что у меня на выходе импульсного блока питания имеется именно такой шум, который требует эта теория.
потому я и взял внешний АЦП, который аппаратно дает 15 бит.
но в своей теме я оставил устаревшую версию с внутренним АЦП для желающих собрать более простое устройство.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Starichok51 писал(а):и не факт, что у меня на выходе импульсного блока питания имеется именно такой шум, который требует эта теория.
Я что-то не дошел еще до этого, надо отписаться в вашей теме, я то же использую импульсный источник питания, на той плате я испарил ключевые транзисторы, и переделал другую плату, плата Linkworld на АТ2005, только последняя заменена на ТЛ, именно по вашей схеме.
Там много шума не надо, у меня при АЦП 12 бит шумят 3 младших разряда, а это примерно 20мВ шума.
Причина шума вот в этомСпойлер
это на ножке АЦПэто возникает при переключении каналов мультиплексора АЦП, к примеру, на одном канале у вас 2 вольта, а на другом - 0 вольт. Если сканировать один канал, такого не будет.
Я все тесты проводил при напряжении всего 5 вольт и без нагрузки. Если добавить хорошую нагрузку, думаю в шумах утонем.
можешь не париться, просто поставь на выход цапа делитель 1:10 и меряй
хотя... замечено - на малых значениях входного сигнала, соизмеримых с шумом, оверсемплинг подламывается
Эх slav0n, берем 64-битную переменную, складываем туды 256 выборок, сдвигаем на 3 бита, и получаем 15 бит, а далее где-то вот так 33000*15бит/32768.
Или так, берем 64-битную переменную, складываем туды 512 выборок, сдвигаем на 4 бита, и получаем 15 бит, а далее где-то вот так 33000*15бит/32768.
Последний раз редактировалось Dimon456 Вс авг 15, 2021 22:07:50, всего редактировалось 1 раз.
Starichok51 писал(а):это в каком месте снята картинка?
Я делал в соответствии с этой статьей, и картинки от туда, свои картинки я не делал, но они соответствуют, поставил после делителя напряжения буферный ОУ (на усилителе тока у вас и так ОУ стоит) и rc-цепь 220 Ом и 10нФ.
Вот, к примеру, с генератора начального кода CVAVRСпойлер
// Read the AD conversion result
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | ADC_VREF_TYPE;
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=(1<<ADSC);
// Wait for the AD conversion to complete
while ((ADCSRA & (1<<ADIF))==0);
ADCSRA|=(1<<ADIF);
return ADCW;
}
они предлагают делать задержку после переключения входов мультиплексора в 10мкс, возможно на успокоение этого процесса.
Задержка в 10мкс работает на 8/16/32 может еще каких мегах, на 8L этого мало.
На 48/168/328 этого то же мало.
На stm32 АЦП работает в DMA кольцевом режиме, последовательно сканируется 2 канала, так как сигнал постоянный (это не переменная или какая-то гармоническая), по этому я не отслеживаю в каком моменте у меня DMA находится, половинка и полный, я просто в любой момент беру из буфера DMA и считываю данные АЦП.
Dimon456 писал(а):Эх slav0n, берем 64-битную переменную, складываем туды 256 выборок, сдвигаем на 3 бита, и получаем 15 бит, а далее где-то вот так 33000*15бит/32768.
Или так, берем 64-битную переменную, складываем туды 512 выборок, сдвигаем на 4 бита, и получаем 15 бит, а далее где-то вот так 33000*15бит/32768
эх, Dimon456, неправильно.
256 это +4 бита,
а для разгона 12 бит до 15 надо делать так:
Добавлено after 3 hours 20 minutes 25 seconds:
а что касается твоей "ФОРМУЛЫ" - 33000/32768
так это банальный коэффициент пропорциональности
для float вообще до лампочки что в числителе 0.33 или 330000
все равно на вход ацп не подашь больше 3.3
Dimon456, почитал статью, спасибо за ссылку.
я паузу перед запуском измерения не делаю. я даже не знал, что ее нужно делать.
я думаю, что искажения, вызванные конденсатором на входе АЦП по напряжению, у меня не имеют значения, так как в проекте с внутренним АЦП по напряжению я оставляю всего 300 единиц (30,0В), а это всего 9 бит.
выше я писал, что оставляю 16 бит среднего значения измеренного сигнала. и при обрезании до 9 бит искажения тоже отрежутся.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Dimon456 писал(а):Что такое х? И за чем делить на x? Сдвига мало?
это усреднение, я уже писал:[uquote="slav0n",url="/forum/viewtopic.php?p=4075175#p4075175"]кстати, множитель 4^N выборок удобно брать из весов разрядов (2, 4, 8, 16...)
тогда децимацию и усреднение можно делать одновременно одним сдвигом[/uquote]также его можно брать и произвольным,
а еще на этот х можно умножить знаменатель твоей "формулы", убрав из return
slav0n, мы наверное на разных волнах с тобой находимся.
Еще раз, при АЦП 10бит: берем 64-битную переменную, складываем туды 256 выборок, 1023*256=261888 , о да же в 32 бита влазит
сдвигаем на 3 бита, 261888>>3=32736
и получаем 15 бит,
а далее где-то вот так 33000*15бит/32768. 33.000*32736/32738 = 32.997 с точностью до тысячной вольта.
Где неправильно?