В прошлой части мы узнали, как настраивать осциллограф и проверять сигналы широтно-импульсной модуляции (ШИМ). В этой статье вы научитесь проверять сигналы управления сервоприводами, сигналы с ультразвукового дальномера, а также исследовать сигналы UART и шины I2C и проверять пульсации источника питания.
Исследуем сигналы управления сервоприводом
Сервопривод — одно из популярных в робототехнике устройств. Он управляется импульсами заданной длительности. Есть сервоприводы с ограниченным углом поворота вала от 0 до 180 градусов, а есть сервоприводы непрерывного вращения.
На рис. 1 слева показан довольно мощный сервопривод непрерывного вращения DS04-NFC, а справа — сервопривод с ограниченным углом поворота вала MG90S.
Стенд для проверки сервоприводов
Для питания сервоприводов, особенно мощных, нужен отдельный источник питания. Рабочее напряжение для MG90S и DS04-NFC должно находиться в пределах 4.8–6.6 В, при этом сервопривод MG90S может потреблять ток до 300 мА, а DS04-NFC — до 1 А.
Для DS04-NFC и MG90S питание подается на красный провод. Земля подключается для DS04-NFC к черному проводу, а для MG90S — к коричневому.
Один провод в сервоприводе используется для подачи управляющий импульсов. Для сервопривода DS04-NFC управляющий провод белого цвета, а для MG90S — оранжевый.
При сборке макета управляющий провод подключите к контакту P0 микрокомпьютера. Не забудьте также объединить землю micro:bit и внешнего источника питания сервопривода (рис. 2).
Частота управляющих импульсов должна быть равна 50 Гц. Однако не стоит подавать на сервопривод сигналы ШИМ, которые используются для управления скоростью вращения обычных двигателей. Дело в том, что длина управляющих импульсов для сервоприводов должна находиться в определенных пределах.
Здесь вместо ШИМ применяется модуляция длительностью импульса (PDM, Pulse Duration Modulation), или как ее еще называют, фазово-импульсная модуляция ФИМ (PPM, Pulse Position Modulation).
В описании на сервоприводы (даташиты) можно найти соответствие длительности управляющих импульсов и углу поворота вала сервопривода с ограниченным углом поворота.
Чтобы установить вал сервопривода MG90S и похожего на него SG90 в среднее положение (0 градусов) используйте импульсы длительностью 1.5 мс. Для поворота на 90 градусов нужна длительность 2 мс, а для поворота на угол -90 градусов — 1 мс.
Таким образом длительность управляющих импульсов должна находиться в пределах от 1 мс до 2 мс, а частота — 50 Гц.
Что касается сервопривода непрерывного вращения DS04-NFC, то изменяя длительность управляющих импульсов от 1 мс до 2 мс, можно менять направление и скорость вращения вала, а также полностью остановить вращение.
При длительности 1 мс вал сервопривода будет вращаться с полной скоростью в направлении против часовой стрелки, а при длительности 2 мс — с полной скоростью по часовой стрелке.
Импульсы 1.5 мс вызывают остановку вала. При этом используя промежуточные значения в интервале от 1 мс до 2 мс можно использовать для управления скоростью вращения вала.
Программа управления сервоприводами для micro:bit
На рис. 3 показана несложная программа управления сервоприводом microbit-servo.hex.
В этой программе используется расширение Servo, в котором есть простые блоки управления сервоприводом.
При запуске программа устанавливает угол поворота вала сервопривода, равным нулю. Далее кнопкой A можно задать угол, равный 30 градусам, кнопкой B — 90 градусам, а комбинацией кнопок A и B — 180 градусов.
Загрузите программу в micro:bit и наблюдайте за поведением вала сервопривода, нажимая кнопки. Если вал не поворачивается, проверьте напряжение источника питания сервопривода и правильность подключения.
Проверяем управляющий сигнал осциллографом
При сборке макета вы подключили вход осциллографа CH1 к контакту P0 микрокомпьютера, где программа формирует управляющий сигнал для сервопривода.
Используйте курсор, описанный выше, для измерения длительности управляющего импульса (рис. 4).
Итак, с помощью осциллографа вы можете контролировать длительность управляющих импульсов. Заметим, что в сервоприводе DS04-NFC предусмотрена возможность калибровки.
Установите длительность импульсов, равную 1.5 мс, а затем вращайте отверткой подстроечный резистор сервопривода, пока вал не остановится полностью. При этом длительность импульсов удобно контролировать осциллографом.
Данные UART на экране осциллографа
Микрокомпьютер micro:bit оборудован универсальным асинхронным приемопередатчиком UART (Universal Asynchronous Receiver-Transmitter). Он позволяет передавать данные по одной линии в различные устройства, например, в радиомодули, или в другие микрокомпьютеры, а также получать данные из этих устройств.
Соединяем через UART два micro:bit
Соберем отладочный стенд из двух микрокомпьютеров micro:bit, передающих друг другу данные через UART.
Контакты P0 и P1 одной платы micro:bit соедините с контактами P1 и P0 другой платы micro:bit, соответственно. Также соедините контакты GND этих плат, чтобы у них была общая земля. Канал CH1 осциллографа подключите к контакту P0 одного из микрокомпьютеров (рис. 5).
Загружаем программу обмена данными
Загрузите в оба микрокомпьютера одну и ту же программу microbit-microbit-uart.hex.
Сразу после запуска эта программа перенаправляет последовательный порт контроллера UART на линии P0 и P1 в блоке последовательный порт. Контакт P0 назначается для отправки данных, а контакт P1 — для приема данных.
Также задается максимально возможная скорость передачи 115200 бит/c, после чего устанавливаются размеры буферов приема и передачи данных.
Далее программа делает задержку на 100 мс, чтобы успела выполниться инициализация, а затем выводит на монитор micro:bit букву «U» (рис. 6).
Если теперь нажать на плате микрокомпьютера кнопку A или B, программа вызовет блок последовательный порт записать строку, передав ему в качестве параметра строку «7» или «0», соответственно. Перед отправкой на монитор выводится значок в виде крестика, а после завершения отправки — строка «U» (рис.7).
Также в программе имеется блок последовательный порт по получению данных с параметром новая строка(). Когда через UART приходят данные от другого микрокомпьютера, программа читает их из буфера блоком последовательный порт читать символы и показывает на мониторе. Далее на монитор выводится все та же строка «U».
Используем осциллограф для просмотра данных UART
Чтобы увидеть осциллограмму пакета данных UART, установите триггер для срабатывания по спадающему фронту канала CH1. Теперь, если нажать кнопку A или B на одном из микроконтроллеров, то на его контакте P0 появится пакет импульсов. При правильно настроенном триггере вы увидите начало пакета, в котором передается несколько байт данных (рис. 8).
Чтобы растянуть осциллограмму с данными UART, воспользуйтесь ручками POSITION и SEC/DIV в блоке HORIZONTAL. Каждый раз после изменения положения запускайте заново передачу данных для срабатывания триггера.
Передвигая пакет данных влево, а также изменяя масштаб по горизонтали ручками POSITION и SEC/DIV, вы сможете просмотреть весь пакет данных.
Но как понять, какие данные передаются в этом пакете?
В протоколе UART каждый байт данных передается отдельно. При этом сначала передается стартовый бит, потом 8 бит данных (начиная с младшего), затем стоповый бит и, возможно, бит четности.
По умолчанию UART, встроенный в micro:bit, не использует бит четности, поэтому для передачи одного байта данных будет отправлено 10 бит (рис. 9).
Младшие биты предаются первыми. На рис. 9 показана передача числа 0x30, что соответствует ASCII-коду символа «0».
Теоретически вы можете просмотреть подобным образом все передаваемые данные, однако это крайне неудобно и на практике обычно так не делают. Если вам нужно не только увидеть форму сигнала UART (либо другого протокола передачи данных), но и понять, какие данные передаются, то есть две возможности.
Во-первых, можно приобрести осциллограф со встроенным логическим анализатором, который умеет декодировать данные протоколов передачи данных. К сожалению, осциллограф Hantek MSO5202D этого делать не умеет.
Во-вторых, вы можете приобрести отдельный логический анализатор либо в виде USB-приставки к компьютеру, либо в виде отдельного прибора с экраном.
Исследуем данные протокола I2C
Если к микрокомпьютеру нужно подключить много периферийных устройств, удобно использовать шину I2C или SPI.
Шина I2C использует для подключения только два контакта (линии SLC и SDA), а шина SPI, хотя и работает заметно быстрее, требует для каждого устройства дополнительный контакт. Мы расскажем, как увидеть на двухканальном осциллографе данные I2C.
Линия SLC предназначена для сигналов синхронизации, а линия SDA —для передачи данных.
К шине I2C можно подключить одно или несколько ведущих устройств, и до 127 ведомых. При этом ведущие устройства управляют процессом передачи данных от ведомых устройств к ведущим. Каждое устройство обладает собственным адресом на шине I2C.
Собираем макет для исследования сигналов на шине I2C
В качестве ведущего устройства на шине I2C мы будем использовать микрокомпьютер micro:bit, а в качестве ведомого — измеритель освещенности (люксметр) BH1750 FVI GY-30 (рис. 10).
Люксметр BH1750 FVI GY-30 возвращает измеренное значение в люксах. Для подключения к micro:bit мы будем использовать контакты GND, VCC, SCL и SDA люксметра (рис. 11).
Подключите выводы датчика GND и VCC к земле (контакт V0) и питанию 3V, соответственно. Вывод синхронизации SCL подключив к контакту P19, а вывод данных SDA — к контакту P20 микроконтроллера micro:bit.
Устройство BH1750 FVI GY-30 позволяет изменять свой адрес на шине I2C с помощью вывода ADD.
Если не подключать этот вывод, адрес будет равен 0x5C в шестнадцатеричной системе счисления или 92 в десятичной. Если же подключить его к земле, адрес станет равным 0x23 в шестнадцатеричной системе счисления или 35 в десятичной.
Вы можете подключить к micro:bit два таких устройства, установив для каждого из них свой адрес. Например, первое из этих устройств может измерять освещенность на улице, а второе — в помещении.
Программа для получения данных от люксметра
На рис. 12 показана очень простая программа, показывающая на мониторе micro:bit значение освещенности в люксах.
Когда программа запускается, она устанавливает адрес контроллера на шине I2C, равный 35 (0x23 в шестнадцатеричной системе счисления).
Нажатие кнопки A приводит к вызову блока get intensity (1x). Полученное значение интенсивности в люксах выводится на экран micro:bit.
При подготовке этой программы мы использовали расширение BH1750 для Microsoft MakeCode. Чтобы его загрузить, откройте палитру Расширения и введите в строке поиска адрес https://github.com/makecode-extensions/BH1750.
Смотрим данные I2C на осциллографе
Блок get intensity (1x) инициирует процесс передачи данных по шине I2C, который мы можем увидеть на экране осциллографа.
Подключите вход CH1 к контакту P19 (линия SCL шины I2C), а вход CH2 к контакту P20 (линия SDA шины I2C) микроконтроллера. После этого настройте триггер осциллографа так, чтобы он срабатывал по спадающему фронту канала CH2.
Далее нажимайте кнопку A на micro:bit, чтобы запустить процесс передачи данных. На экране осциллографа вы увидите управляющие импульсы SCL, а также сигнал данных SDA. С помощью ручек POSITION и SEC/DEV осциллографа добейтесь, чтобы осциллограмма занимала весь экран осциллографа (рис. 13).
Можно ли разобраться по такой осциллограмме, какие данные передаются по шине I2C?
Да, можно, но это сложнее, чем вручную разбирать трафик UART. По возможности здесь лучше воспользоваться логическим анализатором, способным раскодировать данные I2C.
Тем не менее, будет полезно знать, какие данные и как передаются. На рис. 14 показан процесс передачи данных от люксметра в micro:bit в деталях.
Спадающий фронт SDA начинает обмен данными (отмечено на рис. 14 как Start). Далее в нашем случае по шине I2C от микроконтроллера передается адрес люксметра 0x23. После этого люксметр возвращает два байта данных 0x01 и 0x95 с текущим значением освещенности (у вас будут другие значения освещенности).
В процессе обмена мастер посылает на линию SCL тактовые импульсы, устанавливая каждый раз на линии SDA биты данных, соответствующие передаваемому значению. Когда SCL установлено в единицу, устройство считывает эти данные.
Обратите внимание, что первыми по шине передаются младшие биты данных.
Еще один важный момент касается адреса устройства. В нем только 7 бит, а восьмой бит указывает, следует ли подчиненному устройству принимать, или передавать данные. В нашем случае люксметр будет передавать данные, поэтому последний бит в адресе равен 1 (на рис. 14 выделен квадратом красного цвета).
После байта адреса идет бит подтверждения (обозначен буквой A), восемь бит второго байта данных, опять бит подтверждения A и восемь бит второго байта данных. Завершение обмена обозначено на рис. 14 как Stop.
На следующем шаге нашего эксперимента нажмите кнопку сброса, расположенную на обратной стороне платы micro:bit, чтобы запустить процесс инициализации люксметра.
На экране осциллографа вы увидите, что по шине I2C передается вначале адрес устройства 0x23, а затем команда инициализации 0x10 (рис. 15).
Здесь восьмой бит байта адреса равен нулю. Это означает, что следом идет еще один байт для подчиненного устройства, а именно байт команды 0x10 (измерение освещенности в режиме высокого разрешения). Подробнее о командах люксметра читайте в даташите.
Детальное описание I2C можно найти на сайте https://www.i2c-bus.org/, а здесь имеется перевод на русский язык: http://www.gaw.ru/html.cgi/txt/interface/iic/.
Как видите, ручное раскодирование данных I2C при помощи осциллографа представляет собой выполнимую, но не слишком простую процедуру. Здесь как раз может оказать существенную помощь логический анализатор, но это тема для отдельных статей.
Измерение шумов и пульсаций в цепях электропитания
Когда вы создаете устройства с микрокомпьютерами, то следует ответственно подойти к выбору электропитания. Особенно если эти устройства управляют не только электродвигателями, но и каким-либо аналоговым измерительным оборудованием (получают данные с АЦП, например), принимают или передают данные по радиоканалу.
Помимо требований к напряжению и потребляемому току, такое оборудование может оказаться чувствительным к пульсациям и шуму со стороны источников электропитания.
Пульсациями мы будем называть периодические изменения напряжения на выходе источника питания. Эти изменения могут быть вызваны неполным подавлением переменного напряжения электросети, кратное 50 Гц или частоте, которая используется в импульсном источнике питания. Кроме того, на выходе источника питания могут наблюдаться шумы — кратковременные высокочастотные выбросы напряжения, возникающие от работы электронных схем источника питания.
Как правильно измерять шумы и пульсации
Шумы и пульсации можно измерить с помощью осциллографа, однако для получения верных результатов измерений, следует соблюдать определенные правила.
Прежде всего нужно настроить вход осциллографа и щуп для получения максимальной чувствительности, избавившись при этом от постоянной составляющей на выходе источника питания.
Нажмите кнопку канала CH1, который мы будем использовать для измерений. В меню Coupling выберите с помощью кнопки F1 режим AC, что нужно для переключения в закрытый режим, когда постоянная составляющая сигнала отфильтровывается.
Нажав кнопку F4, установите коэффициент деления щупа 1X. Также установите этот коэффициент деления на самом щупе.
Теперь замкните вход щупа с помощью крокодила, как это показано на рис. 16.
Как видите, осциллограф показывает наличие шумов, хотя мы еще не подключили щуп к выходу источника питания. Дело в том, что короткий кабель заземления и участок щупа до зажима образуют петлю, которая улавливает наводки от расположенной рядом техники.
Уровень наводок может меняться в зависимости от электромагнитной обстановки в месте проведения измерений. На рис. 16 амплитуда пульсаций достигает 7 мВ.
Чтобы ее измерить, нажмите кнопку CURSOR и с помощью кнопки F1 выберите режим Voltage. Затем передвигайте измерительные линии S и E ручкой V0, выбирая нужную линию в меню Select Cursor, доступное при нажатии кнопки F4, как вы это делали раньше (рис. 17.
Вы можете отфильтровать высокочастотную составляющую, если она вас не интересует. Для этого выберите кнопкой F2 в меню 20MHz BW режим Limited. В этом режиме будут отфильтрованы все сигналы с частотой выше 20 МГц, и амплитуда видимых пульсаций на экране осциллографа станет намного меньше.
Другой путь уменьшить наводки на щуп осциллографа заключается в применении короткого провода для подключения щупа к земле (рис. 18).
Такая насадка будет полезна и при исследовании высокочастотных сигналов. Если она не вошла в комплект поставки вашего осциллографа, ее нетрудно изготовить из подходящей проволоки.
Если закоротить вход щупа с насадкой, уровень наведенных пульсаций уменьшится практически до нуля (рис. 19).
Измеряем пульсации на контактах питания micro:bit
Микрокомпьютер micro:bit может получать питание через порт USB при подключении к компьютеру, а также от батареи напряжением 3 В. К выводам земли GND и 3V micro:bit при этом допускается подключать слаботочные модули расширения, такие как сонары, метеостанции или таймеры.
Однако насколько хорошее питание с точки зрения пульсаций будут получать такие модули?
Давайте проверим осциллографом.
Подключим micro:bit к порту USB компьютера, а осциллограф — к выводам GND и 3V микрокомпьютера (рис. 20).
Оказывается, что при питании micro:bit через USB амплитуда пульсаций достигает 17 мВ. Но может быть она будет меньше, если подавать питание на micro:bit от батарейки?
Ничего подобного! В этом случае амплитуда пульсаций увеличится примерно до 34 мВ.
Но много это или мало?
Если подключать к линиям питания micro:bit слаботочные цифровые устройства, например сонар или погодную станцию, пульсации такой амплитуды не вызовут никаких проблем.
Но для измерительных устройств, наподобие микросхем аналого-цифровых преобразователей (АЦП) и чувствительных аналоговых устройств такие пульсации могут быть слишком велики. В этом случае нужно использовать отдельные источники питания или фильтры.
Измеряем помехи от электродвигателя
А что, если вы собираете конструкцию, в которой есть сильные источники помех, например электродвигатели?
Давайте подключим к батарейке на 3 В, состоящей из двух элементов ААА, коллекторный электродвигатель, который обычно используется в самодельных роботах. Осциллограф покажет на выводах двигателя пульсации, достигающие 0.7 В (рис. 21).
Конечно, при питании электродвигателей, например, от литий-ионных аккумуляторов с небольшим внутренним сопротивлением пульсации будут меньше. Однако в любом случае величина этих пульсаций будет слишком большой для того, чтобы использовать батареи питания электродвигателей для чего-либо еще.
В идеале для электродвигателей и подобных устройств нужен свой источник питания, для микрокомпьютера — свой, а для аналоговых измерительных устройств и модулей с высокой чувствительностью к пульсациям — свой.
Пульсации на выходе импульсных источников питания
Когда-то сетевые блоки питания делали на основе понижающего трансформатора на 50 Гц, выпрямительного моста, электролитических конденсаторов, сглаживающих пульсации, к которым иногда добавлялся стабилизатор выходного напряжения.
Для уменьшения габаритов и массы в современных блоках питания применяются импульсные схемы, выполняющие коммутацию на частотах, намного превышающих 50 Гц. Эти схемы вызывают появление достаточно сильных пульсаций и шума, требующих фильтрации и сглаживания.
Для примера давайте посмотрим пульсации на выходе блока питания домашнего роутера производства D-Link (рис. 22).
Оказалось, что при номинальном выходном напряжении 5 В амплитуда пульсаций достигает 3.24 В (рис. 23).
Такой источник питания, конечно, требует сглаживания и стабилизации напряжения. Попробуем подключить к нему понижающий преобразователь на базе микросхемы LM2596S со встроенным вольтметром.
Входное напряжение должно находиться в диапазоне от 4 В до 40 В, а выходное можно будет установить подстроечным резистором в диапазоне от 1,25 В до 37 В.
Настроим преобразователь на выходное напряжение 3 В и посмотрим пульсации (рис. 24).
Воспользовавшись курсором, видим, что теперь амплитуда пульсаций составляет всего 8.88 мВ, что уже вполне подходит для питания micro:bit.
Вот и всё! Надеюсь, это было интересно и полезно.
НЛО прилетело и оставило здесь промокод для читателей нашего блога:
— 15% на все тарифы VDS (кроме тарифа Прогрев) — HABRFIRSTVDS.
smart_pic
Ввело в заблуждение название статьи , а именно "отладка программ".
В стаье рассказали о просмотре на осциллографе сигналов стандартных интерфейсов.
Сам активно использую осциллограф для отладки. Не всегда для отладки подходит вывод в сериал порт отладочной инфы, поэтому приходится использовать другой подход. Для этого в разных точках программы расставляются команды изменения логического состояния некоторых пинов МК. А потом по осциллограмме производится анализ правильности работы ПО.
AlexandreFrolov
Здесь имеется в виду, что когда программа, запущенная на микроконтроллере, не делает то что нужно, то с помощью осциллографа можно понять, в чем причина, анализируя форму сигналов на контактах и качество питающего напряжения. В этом контрольные точки и последовательный порт, конечно, не помогут.
Стандартные интерфейсы тоже можно проверить осциллографом, если они, например, не работают или работают не так как нужно. Но передаваемые стандартными протоколами данные, конечно, удобнее смотреть логическим анализатором.
А так, конечно, никто не отменяет отладку программ с помощью контрольных точек и проверки состояния контактов. Осциллограф может показать не только состояние, но и форму сигнала, ШИМ, например, или сигналов управления шаговым двигателем.
Для micro:bit можно выводить отладочную информацию на монитор микрокомпьютера, или подключить OLED-монитор для более объемной выдачи строк и чисел. В других микрокомпьютерах, где нет монитора, можно мигать светодиодом.