Материалы по робототехнике и Arduino
Материалы по робототехнике и Arduino
Материалы сайта запрещено использовать где бы то ни было без согласия автора (alexmou at lab127.karelia.ru)


Шаг 1. Схемотехника и аппаратное обеспечение "Учи матчасть"

[pdf] Как подготовиться к зачету?
[doc] Анкета для окончивших курс

Плата Arduino UNO R3 на основе микроконтроллера Atmega328P-AU (корпусе TQFP-32) и USB-преобразователя CH340G. Принципиальная и монтажная схемы. Среда разработки Arduino IDE. Создание первого проекта.

Вопросы для шлифовки знаний

При ответе на вопросы нужно представлять и уметь словесно описывать, как выглядят все электронные компоненты на плате и где находятся.
  1. Краткое описание микроконтроллера ATmega328 (количество портов ввода-вывода, объем памятей, частота тактирования, способы тактирования, размер регистров ЦПУ, размер адресного пространства и размер шины данных) и линий/контактов на разъемах платы.
  2. [ВЯА]:
    Количество портов ввода-вывода: 3 порта (PortB – 8 линий, PortC – 7 линий, PortD – 8 линий).
    Объем памятей: RAM 2 КБ, FLASH 32 КБ, EEPROM 1 КБ.
    Размер адресного пространства: EEPROM - 10 бит, FLASH – 14 бит (организация памяти 16384 ячейки по 2 байта), RAM – 11 бит.
    Частота тактирования: 16 МГц (на принципиальной схеме обусловлена номиналом кварцевого резонатора, подключенного к выводам 7 и 8 ATmega328).
    Способы тактирования: от внутренней RC-цепи, от внешнего кварца или другого резонатора, от внешнего тактового генератора.
    Размер регистров ЦПУ: 32 регистра общего назначения по 8 бит каждый (1 байт).
    Размер шины данных: 8 бит (8-битные регистры).
  3. Полный список периферийных устройств ATmega328.
  4. [ВМИ]:
    1. два 8 разрядных таймера/счетчика;
    2. 16 разрядный таймер/счетчик;
    3. сторожевой таймер WDT (Watch Dog Timer, 10-битный счётный регистр; позволяет автоматически перезагрузить контроллер в случае зависания программы);
    4. 6 каналов ШИМ (PWM, Pulse Width Modulation, широтно-импульсная модуляция);
    5. аналоговый компаратор (преобразует «+» и «-» в «1» и «0» соответственно);
    6. 6-канальный 10 разрядный АЦП (аналого-цифровой преобразователь);
    7. полнодуплексный универсальный синхронный/асинхронный приемопередатчик (USART, модуль последовательного ввода/вывода);
    8. последовательный синхронный интерфейс SPI (Serial Peripheral Inteface);
    9. последовательный двухпроводный интерфейс TWI (аналог интерфейса I2C);
    10. перепрограммируемое ПЗУ EEPROM.
  5. Что программно происходит при включении питания исправной платы? Место и роль загрузчика.
  6. [ВМИ]:
    Arduino-загрузчик живёт в самом конце Flash памяти (32 Кб) микроконтроллера (МК) и позволяет записывать основную прошивку.
    При подаче питания на МК автоматически стартует загрузчик, который инициализует приемо-передатчик USART, ждёт некоторое время (вдруг кто-то начнёт слать код прошивки), затем передаёт управление основной программе. И так происходит каждый раз при старте МК.
    Arduino-загрузчик замедляет запуск МК, т.к. при каждом запуске ждёт некоторое время для потенциальной загрузки прошивки.
    Загрузчик занимает место во Flash памяти. Например, версия загрузчика для Arduino UNO занимает около 2 Кб.
  7. Принцип работы и тип полевого транзистора Q1.
  8. Тип транзистора -- полевой с индуцированным p-каналом; дырочная проводимость (посмотреть видео [6]).
    Напряжение на затворе определяет проводимость канала между истоком и стоком.
    При подаче на затвор меньшего по отношению к истоку потенциала (отрицательного напряжения / смещения) дырки образуют проводящий слой между истоком и стоком.
    Транзитор становится хорошим проводником тока, его электрическое сопротивление -- маленькое.
    Более подробно: полевой транзистор МОП (MOSFET) [2].
  9. Внутренности микросхемы LM358 и принцип работы ее компонентов.
  10. [МАД]:
    Микросхема LM358 содержит два операционных усилителя.
    Операционный усилитель (ОУ) – это усилитель тока с очень большим коэффициентом усиления (может достигать миллиона раз и более).
    У операционного усилителя есть два входа (неинвертирующий (+) и инвертирующий (-), один выход и выводы питания. ОУ усиливает разницу сигналов между входами (+) и (-).
    На выводы питания подается с одной стороны положительное напряжение, с другой – ноль или отрицательное.
    Если ОУ используется без обвязки (т.е., в режиме компаратора), то принцип его работы заключается в следующем. При подаче напряжения на входы он сравнивает напряжение на входях (+) и (-), и если напряжение на (+) больше, чем на (-), то на выходе будет положительное напряжение питания, иначе – отрицательное напряжение питания (или ноль).
    Стоит отметить что у реального операционного усилителя напряжение на выходе будет несколько отличаться от напряжения питания из-за ненулевого сопротивления выхода усилителя.
    Более подробно: операционный усилитель и LM358: Характеристики, виды и схемы.
  11. Тип диода 1N4007, напряжение его открытия.
  12. [МАД]:
    1N4007 – это кремниевый диод выпрямительного типа. Он открывается при напряжении около 0.75-0.8 вольт (см. его вольт-амперную характеристику из документации [IV] на рисунке справа; внимание, логарифмический масштаб по вертикальной оси тока).
    Так как Arduino Uno потребляет 20-50 мА, то потери на этом диоде будут близки к напряжению открытия – примерно 0.8 вольт.
    В плате ардуино этот диод выполняет задачу защиты платы в случае ошибочной подачи на разъем питания DC 2.1 отрицательного напряжения.
  13. Принцип работы стабилизаторов NCP1117 и LM6206. Что такое LDO?
  14. Электроника не любит резких скачков и провалов напряжения, поэтому стабилизация необходима. Стабилизатор обрезает излишнее входное напряжение до какого-то фиксированного выходного стабильного уровня. Срезанное напряжение падает (остается) на стабилизаторе. Чем больше падение, тем сильнее греется стабилизатор.
    LDO-стабилизаторы (low drop-out) обладают замечательным свойством: падение на них может быть очень маленьким. Таким образом, входное напряжение можно делать небольшим, оно может лишь чуть-чуть превышать выходное. В этом случае стабилизатор не будет греться, даже если по нему проходит большой ток.
    Любое более-менее сложное электронное устройство использует обратную связь (сигнал со следующего каскада подается обратно на предыдущий). Обратная связь бывает положительной и отрицательной. Положительная всегда приводит к автогенерации, резонансу, цепной реакции, "все идет в разнос", и т.д., т.е. к чрезмерному плохо контролируемому усилению. Т.е. не наш случай.
    Линейный стабилизатор использует отрицательную обратную связь. Если потребитель тока высасывает из блока питание слишком много, напряжение на выходе блока питания (стабилизатора) уменьшается. Отрицательная обратная связь немного приоткрывает вентиль (основной транзистор) и увеличивает поток электронов к потребителю: напряжение на выходе возвращается в норму. Если потребитель перестал потреблять ток, напряжение на выходе стабилизатора хочет возрасти, но отрицательная обратная связь подзакрывает заслонку.
    Таким образом, если рассматривать стабилизатор и потребителя, как два последовательных резистора, они образуют делитель. И если резистор потребителя начинает лучше пропускать ток, то и резистор стабилизатора также понизит свое сопротивление, сохраняя постоянство напряжения в точке соединения резисторов.
    МВИ подготовил более подробный ответ с картинками на этот вопрос.
  15. Организация подключения питания к плате. Защита от дурака.
  16. [ВМИ]:
    На разъем питания можно подавать напряжение в диапазоне от 7 до 12 Вольт.
    Сильно не рекомендуется одновременно запитывать Ардуино через этот разъем и по кабелю USB!
    Полное описание организации электропитания опубликовано в виде отдельного pdf-документа.
  17. Как подобрать/рассчитать номинал резистора R17?
  18. [МАД]:
    R17 – это резистор, ограничивающий ток через красный светодиод ON.
    Такой светодиод при неярком свечении потребляет примерно 2-5 мA. Если бы у нас была вольтамперная характеристика этого светодиода, мы могли бы узнать точное значение прямого падения напряжения на нем, зная значение тока. Однако, так как ВАХ нет, придется использовать примерное значение на светодиоде белого (а не красного) цвета, равное 3 Вольтам (примерные значения для всех цветов можно найти в интернете). Тогда оставшиеся 2 В (питание 5 Вольт - пандение на светодиоде 3 Вольта) должны упасть на резисторе.
    Так как мы знаем и напряжение на резисторе, и ток, который через него пойдет, то сопротивление резистора можно рассчитать по закону Ома:
    R=U/I=2/(2*10^(-3))=1000 Ом
    Тут I = 2 мА для ровного счета.
    Можно взять и другое значение (4 мА):
    R=U/I=2/(4*10^(-3))=500 Ом
    В этом случае через светодиод будет проходить больший ток, и он будет светить несколько ярче, а также чуть больше греться.

    Примечание МАПа:
    На одном из последующих занятий с осциллографом мы померяли напряжение, которое падает на светодиоде во время его горения. Оно получилось примерно 1.82 Вольта (см. фото справа, желтый луч, 1 Вольт в клетке). Длительность свечения - 1 мс (две клетки по 500 мкс в клетке).
  19. Чем различаются конденсаторы C3 и С11?
  20. [МАД]:
    С3 – полярный конденсатор в форме бочонка, а С11 – неполярный керамический в форме кирпича.
    Полярный конденсатор нужно подключать так, чтобы напряжение (потенциал) на плюсовом выводе было всегда выше, чем напряжение на минусовом. И если подключить его неправильно, он выйдет из строя.
  21. В какие моменты работы платы светятся светодиоды L, ON, TX, RX? Указать типовые значения напряжений в местах подключения светодиодов.
  22. [МАД]:
    Светодиод ON и последовательно соединенный с ним резистор R17 подключен между линией питания +5В и землей, загорается при подаче питания на Arduino.
    Свечение светодиода L управляется с микроконтроллера (вывод 17 ATmega328P, линия 13 на интерфейсном разъеме). Светодиод загорается при записи логической единицы в порт PortB5. Напряжение 5 Вольт с вывода 17 ATmega328P попадает на вход операционного усилителя LM358, включенного по схеме повторителя. А с выхода операционного усилителя через токоорганичивающий резистор попадает на светодиод.
    Светодиоды RX, TX подключены между линией питания +5 Вольт и выводами 30 (TX) и 31 (RX) микроконтроллера Atmega328P. Они подключены таким образом, чтобы загораться при низком уровне напряжения (логический 0) на линиях RX/TX.
    Гарантировано, что при приеме/передаче данных светодиоды зажигаются. Ведь заранее известно, что в каждой посылке данных по UART будет низкий уровень напряжения как миниум по время передачи стартового бита.
  23. Рассчитать потребляемые ток и мощность платы при работе программы blink_led при питании от 12В блока питания.
  24. Подключили токоизмерительный резистор 9.8 Ома в разрыв минусового провода от блока питания. На этом резисторе осциллографом измерили падение напряжения в рабочем режиме. Одновременно другим щупом смотрели сигнал на линии 13 (светодиод L).
    Оказалось, что светодиод потребляет примерно 3.2 мА, а ток потребления всей платы Arduino UNO в режиме мигающего светодиода (программа blink) равен ~21 мА.
    При подаче напряжения на плату сначала наблюдается большой импульс токопотребления, а затем потребление стабилизируется на отметке 21 мА. Импульс связан с зарядкой двух конденсаторов по 47 мкФ на плате Arduino UNO.
    Кроме этого, обнаружился интересный эффект плавающего потенциала на щупе осциллографа.
    Полное описание экспериментов (с картинками) опубликовано в виде отдельного pdf-документа.
  25. Принцип работы микросхемы CH340G и особенности ее использования на плате Arduino.
  26. [МАД]:
    CH340G - это микросхема, предназначенная для преобразования интерфейса USB в UART.
    При подключении CH340G к компьютеру с помощью USB-кабеля, CH340G "договаривается" с компьютером, который создает виртуальный COM-порт (последовательный порт). Этот COM-порт может быть использован другими приложениями.
    Микросхема CH340G содержит внутренние подтягивающие резисторы для шины USB и цепи подавления отраженного сигнала. Выводы D+ и D- должны быть подключены непосредственно к соответствующим сигналам USB (контактам разъема USB). Микросхема имеет встроенную логику сброса по включению питания.
    Для нормальной работы CH340G ее необходимо затактировать (задать ей ритм работы) 12 мегагерцами. Это делается с помощью встроенного генератора тактовой частоты: кварцевый резонатор на частоту 12 МГц подключается между выводами XI и XO и добавляются нагрузочные конденсаторы между этими выводами и землей.
    Альтернативный способ - использовать внешнее тактирование. В этом случае тактовый сигнал необходимо подать на вывод XI, а вывод XO оставить неподключенным.
  27. Найти другую ревизию платы Arduino UNO и найти все отличия в схемотехнике.
  28. ВМИ и ДОЕ полготовили отчет по этому вопросу.
  29. Как получается напряжение 3.3В на плате Arduino? Для чего используется? Каков КПД при запитке внешних устройств 3.3В от платы Arduino UNO при подаче напряжения 12В на разъем от блока питания?
  30. [МАД]:
    Напряжение 3.3 Вольта преобразуется из напряжения основной линии питания 5 Вольта стабилизатором LM6206. Это напряжение используется для питания некоторых устройств (например, датчиков). При запитке трехвольтовых внешних устройств от платы Arduino UNO при подаче напряжения 12В на разъем от блока питания вся разница в напряжении на источнике и на потребителе падает на стабилизаторах (и немного на диоде D1). Так как токи на источнике и на нагрузке примерно равны, КПД можно считать, как отношение напряжений, а не мощностей (P=UI):
    η=U_нагр/U_ист =3.3/12=0.28, т.е. всего 28%!
Полезные статьи
[1] Контроллер UNO R3 CH340
[2] Полевой транзистор МОП (MOSFET)
[3] Управление мощной нагрузкой постоянного тока
[4] AVR. Учебный курс. Устройство и работа портов ввода-вывода
[5] Подключение микроконтроллера. Ликбез
[6] Видео: Как работают транзисторы (биполярные) и диоды?
[7] Видео: Просто и понятно -- обо всех электронных компонентах в одном видео.
[8] Видео: Как читать принципиальные схемы? Выпуск 1. В теории и примерах.
[9] Видео: Как читать принципиальные схемы? Выпуск 2. 10 РЕАЛЬНЫХ принципиальных схем. Разбираем, объясняем.
[10] Видео: Как читать принципиальные схемы? Выпуск 3. Большая Мастерская Тома.
[11] Видео: Как читать принципиальные схемы? Выпуск 4. Большая Мастерская Тома.
[12] Вспомогательные функции работы по UART
[13] Примеры кода для UART, прерывания
[14] Arduino Serial lib src
[15] LCD Keypad Shield

Программа освоения Arduino
Шаг 1. Схемотехника и аппаратное обеспечение Arduino UNO "Учи матчасть"
Шаг 2. Контроллер шаговых двигателей и управление ими

Видео
Описание платы Arduino UNO R3 (Мощевикин А.П.)
Принципиальная схема платы Arduino UNO R3 (Мощевикин А.П.)

Документация:
[I] Внешний вид и распиновка платы Arduino UNO R3
[II] Принципиальная схема Arduino UNO R3 (из Интернета, некорректная)
[III] Принципиальная схема Arduino UNO R3 (исправленная [ДАМ, 2024])
[IV] ATmega328.pdf
[V] Диод 1N4007
[VI] Сдвоенный операц. усилитель LM358
[VII] USB-UART мост CH340G
[VIII] Стабилизатор NCP1117
[IX] Стабилизатор LM6206
[X] Измеритель расстояния VL53L0x
[XI] GY-53 (модуль с VL53L0x)
[XII] Б.Хуанг, Д.Ранберг. Ардуино для изобретателей
[XIII] Arduino nano: расположение компонентов
[XIV] Arduino nano: распиновка
[XV] Arduino nano: принципиальная схема

Авторы:
[ВЯА] Волкова Я.А.
[МАД] Миришкин А.Д.
[ВМИ] Васильев М.И.
[ДОЕ] Дьяченко О.Е.
[ДАМ] Демков А.М.
[МАП] Мощевикин А.П.