Если я ничего не забыл, то ссылка на первую часть где-то здесь по ссылке. Не забудьте вернуться сюда, когда начало прочитаете. Дальше интереснее. Впереди ещё и продолжение.
Теперь робот состоит из двух плат: датчика линии и управляющей платы. Мозгом робота является МК ATmega16. Тактирование осуществляется от внешнего кварцевого генератора частотой 8 МГц. Применение внешнего кварцевого генератора позволяет добиться большей стабильности частоты ШИМ, а также реализации временных задержек. Номинальное напряжение питания схемы – 5В. В качестве источника питания используется батарея из 4-х NiMh аккумуляторов. Для уменьшения помех, аналоговая часть питания контроллера подключена к источнику питания через LC-фильтр согласно документации. Питание драйвера двигателей делится на питание силовой и логической частей. С целью уменьшения влияния коммутационных помех на работу контроллера, питание силовой части отделено от питания логической части, а также от других модулей и датчиков, диодом Шоттки VD1 (защита от переполюсовки) и конденсаторным фильтром. Питание силовой части драйвера двигателей производится напрямую от батареи.
Схема подключения драйвера L298 взята из документации. Для управления сигналами направления вращения двигателей использована микросхема SN74HC00, включающая 4 логических элемента 2И-НЕ. Использование SN74HC00 позволяет сократить число используемых линий ввода-вывода контроллера с 6 до 4, а также упростить программу контроллера. Драйвер двигателей подключается к линиям 2, 3, 4, 5 порта D. Линии 2 и 5 предназначены для управления скоростью двигателей (Pwm1 и Pwm2), а линии 3 и 4 для изменения направления их вращения (Dir1 и Dir2).
Датчик линии предназначен для определения положения робота относительно нее. Он состоит из 7 светочувствительных элементов, каждый из которых состоит из пары фототранзистор-светодиод. Компоненты датчика крепятся таким образом, чтобы луч света из светодиода, отражаясь от поверхности, попадал на фототранзистор. Уровень сигнала от фототранзисторов прямо пропорционален их освещенности. Следовательно, канал с минимальным уровнем сигнала от фотодатчика будет находиться над черной полосой.
Датчик препятствий предназначен для бесконтактного измерения расстояния до препятствий, используется ультразвуковой дальномер HC-SR04. В сравнении с датчиками на основе инфракрасных светодиодов, ультразвуковые дальномеры обладают большей дальностью измерения. Дальномер подключается к линиям 6 и 7 порта D.
Модуль беспроводной связи предназначен для удаленного управления роботом. Его основой является Bluetooth модуль HC-05. Выбор данного модуля обусловлен простотой и дешевизной его использования. Интерфейс Bluetooth широко распространен, что избавляет от необходимости разработки специального радиопередатчика для компьютера оператора.
Питание модуля осуществляется от стабилизатора на напряжение 3,3 В, собранного на микросхеме LM1117 согласно документации. К линии PIO0 модуля HC-05 через ограничительный резистор подключен светодиод, предназначенный для индикации статуса соединения (светится при наличии соединения и мигает при его отсутствии). Также на схеме предусмотрена кнопка для сброса соединения. Для исключения случайного сброса соединения, вывод модуля RESET подтянут резистором к напряжению 3,3 В.
Следует отметить, что несмотря на питание от 3,3В, линии ввода-вывода модуля допускают напряжение 5 В. Модуль HC-05 может работать в двух режимах: режим радиоудлинителя интерфейса RS-232 и режим AT-команд. В режиме радиоудлинителя модуль транслирует данные поступающие к нему на подключенное к нему по радиоканалу устройство. Во втором режиме возможна настройка различных характеристик модуля, например, скорость передачи данных (по умолчанию 9600 бит/c). Выбор режима осуществляется изменением логического уровня напряжения на линии PIO11 модуля. По умолчанию модуль работает в первом режиме, поскольку линия PIO11 подтянута резистором R2к общему проводу. При подключении линии к высокому логическому уровню напряжения модуль перейдет в режим AT-команд.
Модуль индикации предназначен для вывода отладочной информации. Он состоит из 14-ти светодиодов (вот уж поставил сколько влезло :) ) с токоограничительными резисторами. Светодиоды включаются высоким логическим уровнем. Также модуль индикации включает в себя 7-сегментный 4-разрядный светодиодный индикатор с общим катодом. Для вывода данных используется динамическая индикация. Разряды подключаются к контроллеру через транзисторы, включенные по схеме с общим эмиттером. Необходимость в транзисторах вызвана ограничением порта ввода-вывода контроллера по току нагрузки в пределах 20-40 мА.
Принципиальные электрические схемы выкладывать здесь не стал, поскольку они займут много места. Все схемы в приложенном PDF-файле. Схемы рисовались в Visio, поскольку это был уже диплом, то рисовал близко к ГОСТам :)
При запуске кнопками выбирается режим: отладка или старт. При отладке робот можно тестировать по UART'у или Bluetooth (что удобнее). Для отладки написана специальная процедура, которая парсит (разбирает) команду и выполняет ее. Для упрощения работы на компьютере с символьными командами (в ASCII) была написана программа на Delphi. Программа преобразует каждый ASCII символ в HEX-код и отправляет его по последовательному интерфейсу в контроллер, а числа в HEX-коде она отправляет как есть (только 0x вначале убирается). Скриншоты ниже.
Список поддерживаемых команд с их подробным описанием приведен ниже.
I_X – прочитать содержимое регистра ввода-вывода. Здесь X адрес регистра, заданный 2-х байтным словом.
O_X_Y – записать заданное значение в регистр ввода-вывода. Здесь X адрес регистра, заданным 2-х байтным словом, а Y – 8-битное значение, выводимое в регистр.
M[L|R]_X – запись в коэффициент заполнения ШИМ левого или правого каналов 8-битного значения X.
После ввода команды разрешается прерывание от таймера и запускается процедура ШИМ двигателей. Затем контроллер ожидает ввода новой команды. После ввода команды прерывание от таймера будет запрещено, если команда отлична от описываемой или введена с ошибкой. Но при этом значение коэффициентов в ОЗУ не будет обновлено, что позволяет запускать два двигателя одновременно.
R – чтение коэффициентов регулятора P, I, D и PWM Base из памяти ЭСППЗУ (EEPROM).
R[P|I|D|B]_X–запись в соответствующий коэффициент регулятора в памяти ЭСППЗУ (EEPROM) 8-битного значения X.
C – последовательный вывод калибровочных значений для всех элементов датчика линии с 1 по 7.
C[1-7]_X –запись 8-битного калибровочного значения X для соответствующего элемента датчика линии, номер которого задан числом от 1 до 7.
S – последовательный вывод показаний датчика линии (в шестнадцатеричном виде). Также выводится текущая позиция робота, рассчитанная по показаниям датчика линии.
D – вывод показаний датчика препятствия (в шестнадцатеричном виде). Показания состоят из младшего и старшего байтов. Расстояние до препятствия выводится в мм.
H – вывод справки по командам.
E – выход из режима отладки.
Перечисленные выше команды позволяют настраивать коэффициенты регулятора и калибровочные значения датчиков, выводить текущие показания датчиков, проверять работу двигателей, а также управлять движением робота вручную. Возврат из режима отладки осуществляется в область программы, которая начинается со считывания констант из ЭСППЗУ (EEPROM). Это позволяет при обновлении коэффициентов регулятора, сразу обновить и их значения в ОЗУ (SRAM), используемые при расчетах.
В следующей части будут рассмотрены алгоритмы работы робота.