0 / 0 / 0
Регистрация: 28.11.2012
Сообщений: 138
1

Как рассчитать LC-фильтр для ADC?

13.12.2015, 04:34. Показов 5888. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Возможно элементарный вопрос, но быстрый поиск ответа вроде не дал.
В статье сказано, что для использования напряжения питания в качестве опорного, нужно применить LC фильтр. А какие номиналы L и C нужны?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.12.2015, 04:34
Ответы с готовыми решениями:

Как рассчитать фильтр жидкости?
Необходимо рассчитать фильтр для очистки дренажей раствора амина, а именно расчет процесса фильтрации и габаритов фильтра. Может есть ли у...

Как рассчитать маску для 50, 1000 узлов для настройки DHCP?
Всем привет. Нужно настроить DHCP сервер роутере Cisco. Необходимо создать 2 пула, на одном- 50 узлов, на другом 1000 узлов. ...

Как рассчитать среднее арифметическое для для двух столбцов которые на определенной строке
Вот допустим я выбрал первую строку в dgv, мне теперь нужно найти средние арифметическое между этими двумя столбцами.

10
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 1,946
13.12.2015, 05:40 2
берем DS на свой проц - раздел ADC - ADC Noise Canceler
0
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 4,224
13.12.2015, 12:15 3
Не возьмусь написать про все AVR, но в таких как атмега8, атмега328 в даташитах указываются номиналы 10мкгн и 0.1мкф

Важно понимать, что фильтр лишь уменьшает ошибку АЦП за счет уменьшения помех по питанию
Но ошибку из за нестабильного напряжения источника питания никуда не девает
Если напряжение источника будет плавать, будет плавать и точность измерений
В некоторых случаях можно делать калибровку напряжения VCC путем замера фактического напряжения выбрав в качестве канала в admux Vbg

Так же важно понимать, что питание АЦП совмещено с питанием всего порта C (если мы про такие как атмега8, атмега338 и многих других). Стало быть не нужно другие выводы этого порта нагружать чем то, что может дать помехи по питанию и повлияет на точность измерений

И еще, в даташитах рекомендуется для точности 10бит ставить частоту АЦП не выше 250кгц

Все это для точности
Если нужно делать замер грубо (например для аналогового подключения нескольких кнопок) то и без LC фильтра можно обойтись
0
0 / 0 / 0
Регистрация: 28.11.2012
Сообщений: 138
13.12.2015, 15:28 4
Благодарю.
Тогда еще один вопросик, я подключаю к ацп терморезистор, засовываю его в лед или в кипящую воду, по идее, показания ацп должны быть более-менее стабильны, гоню их в уарт и вижу дикий разброс показаний, буквально от 0х00 до 0х80 (или от 0х80 до 0хFF, в зависимости от измеряемой температуры). Мега8 запитана от юсб ноута через программатор, в нее подключен только терморезистор и, собственно, сам уарт, опорным напряжением выбрано напряжение питания. Должны ли показания так скакать или это именно по причине фигового опорного питания? С переменным резистором вместо термо тоже скачут, но в пределах 1-3 единиц. Показания забираю из регистра ADCH, как в примере Дихалта в вышеуказанной статье
0
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 1,946
13.12.2015, 15:45 5
Ну а теперь код
0
0 / 0 / 0
Регистрация: 28.11.2012
Сообщений: 138
13.12.2015, 16:11 6
Пардон
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
.include "m8def.yms"
.include "macro.asm"
.def temp   =   r16
.def temp1   =   r17
 
.equ    XTAL = 4000000
.equ    baudrate = 9600
.equ    bauddivider = XTAL/(16*baudrate)-1
 
.cseg
.org 0
rjmp   risit
.ORG 0x000c
RJMP   UD_OK
 
.org 0x000e
rjmp ADCC
 
risit:
ldi   r16,low(ROMEND)
out   SPL,temp
ldi r16,high(ROMEND)
out   SPH,temp
 
outi ddrb,0xff
outi ddrd,0xff
 
OUTI   ADCSRA,(1<<ADIM)|(1<<ADSC)|(3<<ADPS0)|(1<<ADPS1)|(1<<ADPS2)|(1<<ADFR)|(1<<ADIE)
OUTi   ADMUX,(1<<REFS0)|(0<<MUX1)|(1<<ADLAR)
 
uart_init:
outi    UBRRL,low(bauddivider)
outi    UBRRH,high(bauddivider)
outi    UCSRA, 0x00
OUTI   UCSRB, (1<<RXEN)|(1<<TXEN)|(1<<RXCIE)|(1<<TXCIE)|(0<<UDRIE)
sei
 
main:
rjmp main
 
ADCC:
IN temp, ADCH
out OCR2,temp
out UDR,temp
outi UCSRB, (1<<RXEN)|(1<<TXEN)|(1<<RXCIE)|(1<<TXCIE)|(1<<UDRIE)
reti
 
UD_OK:
outi UCSRB, (0<<UDRIE)|(1<<RXEN)|(1<<TXEN)|(1<<RXCIE)|(1<<TXCIE)
reti
0
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 4,224
13.12.2015, 16:59 7
Конденсатор на вывод AREF и землю подключили?

Питание от компьютера может быть весьма грязным
Во вторых для термистора рекомендую делать усреднение от серии измерений
Я обычно использую 32-64 замера, как раз хватает 16ти битного аккумулятора для суммирования 64х 10ти битных значений

Кстати в строке
Code
1
OUTI   ADCSRA,(1<<ADIM)|(1<<ADSC)|(3<<ADPS0)|(1<<ADPS1)|(1<<ADPS2)|(1<<ADFR)|(1<<ADIE)
У вас масло маслянное, когда вы 3 сдвигаете на ADPS0 то уже выставляете ADPS1 в единицу

Для точности надо использовать и ADCH и ADCL
0
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 1,946
13.12.2015, 17:06 8
Axill, ты же вроде не знал ASM. Скрывал?
0
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 1,946
13.12.2015, 17:27 9
Code
1
2
3
4
UD_OK:
out UDR,temp
outi UCSRB, (0<<UDRIE)|(1<<RXEN)|(1<<TXEN)|(1<<RXCIE)|(1<<TXCIE)
reti
Code
1
2
3
4
5
uart_init:
outi    UBRRL,low(bauddivider)
outi    UBRRH,high(bauddivider)
outi    UCSRA, 0x00
sei
Code
1
2
3
4
5
ADCC:
IN temp, ADCH
out OCR2,temp
outi UCSRB, (1<<RXEN)|(1<<TXEN)|(1<<RXCIE)|(1<<TXCIE)|(1<<UDRIE)
reti
Ну и добавить сохранение регистра макроса и SREG в прерывания!!!
0
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 4,224
13.12.2015, 19:17 10
Цитата Сообщение от YTYOUT
Axill, ты же вроде не знал ASM. Скрывал?
AVR не знаю, но читается не сложно)
Когда то писал на асме i8080 и x86
0
0 / 0 / 0
Регистрация: 28.11.2012
Сообщений: 138
13.12.2015, 20:55 11
Конденсатор на вывод AREF и землю подключили?
Да, подключен

Кстати в строке
Да, скопировал из статьи, не поправил, а потом добавлял вручную остальное. И думал, а что это ничё не меняется? :)

Ну и добавить сохранение регистра макроса и SREG в прерывания!!!
Ок, спасибо. Сейчас буду проверять
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.12.2015, 20:55
Помогаю со студенческими работами здесь

Режим OPM таймера для запуска ADC
Нужно запустить ADC 10 раз и положить полученные данные в буфер. Появилась идея использовать режим OPM таймера, для выработки 10 триггеров...

Как рассчитать тепловыделение для сервера
Как рассчитать тепловыделение для сервера? Допустим возьмем сервер SuperServer 6018R-WTR, максимальное рассеивающая возможность...

Как рассчитать константу для задержки?
Здравствуйте! Задание состоит в том, что бы на интерфейсе &quot;УМК ВЭФ&quot; на индикатор H1 выводить сколько секунд(максимум 15сек) зажата кнопка...

Как задать фильтр для SaveFileDialog?
Такоую ерунду нашел - в некоторых программах когда задают фильтр типа файлов есть допустим все изображения, в Alcohol - все поддерживаемые...

Как сделать фильтр для stringgrid
Добрый день. Пишу курсовую работы, а именно базу данных. Нужна помощь в создании фильтров при помощи элемента ComboBox. В самой таблице...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

Новые блоги и статьи
Сопоставление с образцом (Pattern Matching) в Python: Списки и словари
py-thonny 19.03.2025
Программисты любят, когда код говорит сам за себя. Представьте, что вы можете просмотреть структуру данных и мгновенно понять, что с ней делать — без сложных условий и вложенных проверок. Именно эту. . .
Работа с метаданными EXIF и JPEG в JavaScript
run.dev 19.03.2025
Работа с изображениями в веб-разработке нередко выходит за рамки простого отображения картинки. Современные задачи требуют глубокого понимания структуры файлов и умения манипулировать их внутренними. . .
Чеклист для Kubernetes в продакшене: Лучшие практики для SRE
Mr. Docker 19.03.2025
Когда сталкиваешься с запуском Kubernetes в продакшене, невольно задаешься вопросом: почему то, что так гладко работало в тестовой среде, вдруг начинает вызывать головную боль на боевых системах?. . .
Разработка продвинутого ИИ в Unity с использованием Behavior Graph
GameUnited 19.03.2025
В разработке игр искусственный интеллект персонажей часто становится тем элементом, который превращает хорошую игру в выдающуюся. До недавнего времени разработчикам под Unity приходилось либо писать. . .
Словари в Python: методы работы, оптимизация, сериализация
py-thonny 19.03.2025
Каждый хотя бы раз сталкивался с необходимостью хранить связанные данные, где важна не только сама информация, но и их взаимосвязь. В дебрях Python словари — это тот универсальный инструмент, который. . .
Реализация паттерна CQRS с Event Sourcing в PHP
Jason-Webb 19.03.2025
CQRS (Command Query Responsibility Segregation) — это архитектурный паттерн, который разделяет операции чтения и записи данных в приложении. Если вы столкнулись с ситуацией, когда ваше PHP-приложение. . .
std::span в C++: Подпредставлени­я и срезы
NullReferenced 18.03.2025
Если вы когда-нибудь работали с большими объемами данных в C++, то наверняка сталкивались с необходимостью манипулировать отдельными частями массивов или контейнеров. Традиционные подходы часто. . .
std::span в C++: Доступ к элементам и итерирование
NullReferenced 18.03.2025
В C++ каждый разработчик сталкивается с проблемой эффективного управления последовательностями данных. Представьте: вы работаете с массивом, передаете его в функцию, а затем в другую, и каждый раз. . .
Утечки памяти в C#
UnmanagedCoder 18.03.2025
Когда мы говорим о разработке приложений на C#, то часто успокаиваем себя мыслью, что сборщик мусора решит все наши проблемы с памятью. "Память управляется автоматически" — эта мантра прочно засела в. . .
std::span в C++: Введение в невладеющее представление
NullReferenced 18.03.2025
С появлением стандарта C++20 у нас появился новый инструмент — std::span, который представляет собой невладеющее представление для работы с последовательностями данных. std::span — это легковесный. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru