На этом занятии мы подробнее разберемся с аналоговыми и цифровыми сигналами.
Как известно, цифровой сигнал может иметь только два значения: низкий и высокий
уровень. Если совсем упростить, то высокий уровень - это наличие напряжения
(например, 5 вольт), а низкий уровень - его отсутствие (например, 0 вольт).
Аналоговый же сигнал, в отличии от цифрового, может принимать не только значение
высокого или низкого уровня, но и любое значение из этого диапазона
(от 0в до 5в, например значение 1,2в или 3,68в).
Цифровой сигнал, в отличии от аналогового, более помехозащищенный, над ним можно
производить довольно сложные преобразования и его проще передавать. Например,
когда-то музыка записывалась на виниловые диски. Это были аналоговые устройства,
достаточно простая система позволяла записывать и воспроизводить звук с хорошим
качество. Но проблема была в том, что диски очень быстро изнашивались и
повреждались, что приводил к появлению различных шумов и тресков, избавиться
от которых уже было практически невозможно. Появление компакт-дисков CD и DVD
позволило решить эту проблему. Например, музыка, которую мы слушаем и которая
является аналоговым сигналом, с помощью специального устройства, которое
называется аналого-цифровым преобразователем (АЦП), преобразуется в цифровой
сигнал, затем передается или записывается на компакт-диск или любой цифровой
носитель, а когда нам опять понадобится музыка, мы преобразуем наш цифровой
сигнал назад, в аналоговый, с помощью цифро-аналогового преобразователя (ЦАП).
В робототехнике АЦП являются важной составляющей, так как большинство датчиков -
аналоговые. Конструктивно, АЦП может находиться в одном корпусе с
микропроцессором или микроконтроллером, как в случае Arduino Uno. Но АЦП может
быть в виде отдельной микросхемы, например MCP3008:
Аналого-цифровое преобразование заключается в преобразовании информации,
содержащейся в аналоговом сигнале, в цифровой код. Другими словами, нам
нужно закодировать аналоговый сигнал, присвоить каждому значению аналогового
сигнала некоторый цифровой код.
Одной из основных характеристик АЦП является диапазоном входного напряжения -
это область возможных значений напряжения, которое мы можем подать на вход АЦП.
У каждого АЦП есть какой-то свой диапазон входных напряжений, который он может
преобразовать в цифровой код. Поэтому необходимо сначала согласовать
оцифровываемое напряжение с диапазоном АЦП, например усилив сигнал, если он
слишком слабый, или наоборот уменьшить уровень сигнала, если он слишком большой.
Это не только убережет АЦП от выхода из строя, но и увеличит точность
преобразования.
Дело в том, что аналоговый сигнал может принимать бесконечное количество
значений, и конечно присвоить каждому аналоговому значению цифровой код
на практике невозможно. Поэтому, АЦП всегда преобразует аналоговый сигнал
в цифровой с некоторой погрешностью.
Рассмотрим, как работает АЦП. Например, нам нужно преобразовать аналоговый
сигнал, которые меняется во времени, принимая значения от 0 вольт до 4 вольт.
Если у нас только один цифровой разряд (один провод), мы можем преобразовать
наш сигнал следующим образом:
На рисунке, аналоговый сигнал обозначен синим цветом, а цифровой сигнал -
красным. Так как у нас один разряд, то цифровой сигнал может принять только
два значения: 0 или 1. При этом, аналоговому сигналу, напряжением от
0 до 2 вольт будет соответствовать цифровое значение 0, а аналоговому сигналу
напряжением от 2 до 4 вольт - значение 1. Такое преобразование будет не очень
точным. Попробуем увеличить число разрядов до 2:
Видно, что теперь цифровой сигнал более точно повторяет аналоговый, так как
теперь он может принимать четыре значения: 00, 01, 10, 11. А точность
увеличилась до 1 вольта. А что если добавить еще один разряд?
Теперь цифровой сигнал еще более точно повторяет аналоговый! Цифровой сигнал
теперь может принимать 8 значений.
Разность между двумя соседними значениями межкодовых переходов называется
шагом квантования, в данном случае шаг квантования - 0,5 вольта.
Мы и дальше можем увеличивать число разрядов, и соответственно снижать шаг
квантования. Для 4 разрядов цифровой сигнал будет иметь уже 16 значений, для
5 разрядов - 32 значения, для 6 разрядов - 64, для 7 - 128, для 8 - 256, для
9 - 512, для 10 - 1024 и так далее. Количество разрядов называется разрешением
преобразователя. У встроенного в Arduino АЦП - десять разрядов.
Выше мы не учли еще один момент. Дело в том, что АЦП требуется некоторое время,
чтобы провести квантование сигнала и его кодирование. Квантование представляет
собой округление аналоговой величины до ближайшего уровня квантования.
Давайте рассмотрим как это выглядит на практике:
На графике показан не только шаг квантования, но время dt, которое требуется
для квантования сигнала. Очевидно, что чем меньше время квантования (или
в более общем смысле - время дискретизации), тем выше качество преобразования,
тем более точно мы сможем оцифровать сигнал. На практике еще часто пользуются
понятием частота частота выбюорки (или частота дискретизации) - количество
выборок в единицу времени, и чем она выше, тем выше качество преобразования.
В цифровом виде, аналоговый сигнал, показанный на рисунке, в цифровом виде
можно записать так:
010 101 111 101 001 000 011 110 101 100 010 011 110
Контроллер Arduino имеет несколько аналоговых входов, например Arduino Nano
содержит 8 аналоговых входов (А0 - А7), а Arduino Uno 6 входов (А0 - А5).
В качестве опорного напряжения можно выбрать внутренней опорное напряжение
1.1 В, а так же внешнее и в качестве опорного источника может быть напряжение
питания микроконтроллера 5 В.
Напряжение поданное на вход АЦП должно находится в границах заданного
диапазона, то есть от 0 В до напряжения опорного источника. Напряжение
поданное на вход АЦП будет оцифровано и представлено в виде цифрового значения
в диапазоне от 0 до 1023 (10 разрядов - 1024 значения).
При работе с Arduino IDE используется стандартная функция analogRead(), которая
позволяет считывает значение с указанного аналогового входа. Считывание
значение с аналогового входа занимает примерно 100 микросекунд (0.0001 сек), то
есть максимальная частота считывания приблизительно 10000 раз в секунду.