Считывание величины переменного напряжения
- Войдите на сайт для отправки комментариев
Чт, 12/10/2017 - 14:04
Ардуино считывает значение напряжения на аналоговом входе от 0 до 5 В и преобразовывает в код от 0 до 1023.
Время на преобразование 100 микросекунд.
Если это верно, то вопросы:
1. Можно ли подавать на аналоговый вход переменное напряжение?
2. Что будет, если я подам на аналоговый вход переменное напряжение?
Форма сигнала близкая к синусу.
Частота около 500Гц.
Амплитуда 10 вольт (условно положительный полупериод в пике 5 вольт и условно отрицательный полупериод в пике -5 вольт).
Я правильно понимаю, что ардуино просто не различит положительного и отрицательного напряжения, а будет выдавать значения по каждому полупериоду от 0 до 1023.
3. Есть ли возможность считывать величину напряжения быстрее (100 микросекунд - многовато) ?
Нет.
Выйдет дым (если поставите рядом правильно подключённый MQ2, то может светодиод загорится :)
Неправильно. См. выше.
Есть. За счёт уменьшения разрядности.
Спасибо за ответ.
favidu, если хотите работать с таким сигналом, перед подачей на Ардуино его следует:
1. Уменьшить в 2 раза (было: от -5В до +5В, стало: от -2.5В до +2.5В).
2. Добавить положительное смещение 2.5В (стало: от 0В до 5В).
Если Вы подадите на Ардуино сигнал без смещения, то в отрицательном полупериоде в зависимости от выходного сопротивления источника будет один из следующих вариантов:
- пойдет дым,
- Ардуино покажет 0.
Вот, примерно так, как Вам написал andriano я обрабатываю вот такой сигнал. Как видите, он в амплитуде ещё больше Вашего.
- Ардуино покажет 0.
Чего вполне достаточно. Если верны предположение что напряжение действительно синус и без постоянной составляющей (или симметричный относительно 0 сигнал), то потеря отрицательной полуволны - невелика потеря, т.к. положительная точно такая, только знак иной. Оцифрофывайте и измеряйте только положительную. Это сильнол проще по схемотехнике. Делителем ослабте чтоб не превышало опорное напряжение АЦП (тут варианты в зависимости от контролера есть разные от 1 до 5В), заодно и ток ограничится чтоб ардуино не задымилось. Все очень просто, но сейчас Вам насоветуют и ОУ и оптронов и схем смещения уровня )))
Любят у нас навешивать одну рухлядь на другую. Можно просто взять скоростной tru-diff АЦП, и подавать переменку без всяких хлопот прямо на вход (через делитель конечно). Например ads8887 - 18 бит, тру диф, 100 тыщ семплов в секунду.
8887 - недешёвая штуковина, однако...
Как ещё один вариант - RMS to DC converter, к примеру AD736, AD737.
Наверное стоит уточнить, что ТС пишет все же не о времени преобразования, а о времени выполнения analogRead() ?
Курим даташит, к примеру Атмега 328, время преобразования 13 тактов (иногда 25 :) ), такт 62,5 нС итого 812,5 нС.
При включении конвеера вполне можно оперировать и микросекундными таймингами.
Курим даташит, к примеру Атмега 328, время преобразования 13 тактов (иногда 25 :) ), такт 62,5 нС итого 812,5 нС.
Наверное, не в затяжку курили. Покурите ещё.
Курим даташит, к примеру Атмега 328, время преобразования 13 тактов (иногда 25 :) ), такт 62,5 нС итого 812,5 нС.
Наверное, не в затяжку курили. Покурите ещё.
Может быть снизойдете и просто конкретно укажете где вкралась ошибка? а то потерялси хрустальный шар куда-то...
AlexZZZ, Вас не насторожтли "ADC clock cycles"? Как бы сам термин намекает, что clock cycles бывают не только ADC, и что "CPU clock cycles" могут не совпадать с "ADC clock cycles".
Может быть снизойдете и просто конкретно укажете где вкралась ошибка? а то потерялси хрустальный шар куда-то...
Вы цитируете 4-ый абзац раздела 24.4 даташита.
"Может быть снизойдете и просто" прочитаете заодно и первый абзац этого раздела? "By default, the successive approximation circuitry requires an input clock frequency between 50kHz and 200kHz" и объясните откуда взялись 62,5 нс?
Курить надо полностью, до фильтра, а не бросать недокуренные окурки после первой же фразы.
Как дилетант в программировании и электротехнике, читая заведенную мною же тему, испытываю смешанные чувства. Средневековый человек высказался бы примерно так: "Полубоги говорят о вечном..." ))) .
Еще раз спасибо всем, лучше начну с зажигания поочереди диодиков.
Посыпая голову пеплом :)
Таки признаю, при просчете пропустил про такты самого АЦП.
Позволю от себя только заметить, что не всегда что-то не дописано именно из-за недокуренности, можно ведь просто упустить?
Совсем недавно использовал:
длительность выходит 52 мкС, все же равно можно говорить о микросекундах против сотен милисекунд?
Еще раз спасибо всем, лучше начну с зажигания поочереди диодиков.
Без шуток, очень верное решение! Но и оцифровка аналогового, если дальше analogRead не лезть - вполне по силам начинающего. Просто подайте ваш сигнал на цепочку из двух резисторов, см. рис2 тут - http://www.sxemotehnika.ru/delitel-napryazheniya.html. Делитель в три раза для начала подойдет. В лупе в сириал выводите значение analogRead и время micros. Возможно данных будет слишком много, сириал будет несправлятся, добавте делеи. Посмотрите что выходит, идеи должны будут появится.
ПС. На дискусию о максимальной скорости АЦП просто не обращайте внимания, там есть здравой зерно, но оно вам ненадо пока. Свои 100мксек вы получите и без этого.
длительность выходит 52 мкС, все же равно можно говорить о микросекундах против сотен милисекунд?
Не, ну говорить можно, но с оговоркой. Вы же настроили делитель на 250кГц (сам не проверял, у Вас так в комментарии написано), а даташит рекоммендует не вылезать за 200. При этом там же написано, что настраивать больше можно (я и 500 кГц настраивал), но за счёт потери точности, что у Вас и сделано. Когда не нужно 10 разрядов, а скорость нужна повыше - ради Бога никто не мешает. А вот если нужны все 10 разрядов, то при 16МГц контроллера допустимый делитель только 128, частота получается 125кГц, значит один такт = 1/125000 = 8 микросекнд, а 13 тактов - 8*13 = 104 микросекунды. Вот откуда сотни и взялись.
Я, кстати, писал об этом (повышенной частоте) ТС в первом же посте #1 (последняя строка)
Совсем недавно использовал:
длительность выходит 52 мкС, все же равно можно говорить о микросекундах против сотен милисекунд?
Вам нужно развивать внимательность, она у вас около ноля. Вот смотрите, про тактовую вы с подсказкой всё таки поняли, и в первой же фразе говорите о "сотнях миллисекунд", но речь шла про скорость отработки analogRead, которая 100 микросекунд.
Да, походу я тут лишку хватанул, и с собственной не внимательностью влетел... :(
Если даташит тяжело "курится", у Nick Gammon есть хорошая тема про АЦП (Ардуино).
А зачем Вам это - не написали, может решение сведется к детекторному приемнику типа RC (сопрот+кондер) ну и диод само собой разумеется.