- •Структурная схема информационной системы робота.
- •Instruction List (il) – язык инструкций, относится к классу ассемблеров, - для создания оптимизированных процедур.
- •Блок сенсоров для ультразвуковой системы управления мобильным роботом с обходом препятствий.
- •Принцип действия и первичные преобразователи
- •Интегрированная среда
- •Микропроцессорная (мп) платформа информационной системы.
Sequential Function Chart (SFC) – язык последовательных функциональных схем (международная версия французского стандарта «Графсет»);
Function Bloc Diagrams (FBD) – язык функциональных блоковых диаграмм, повсеместно используемый в Европе и позволяющий строить комплексную процедуру, состоящую из различных функциональных библиотечных блоков;
Ladder Diagrams (LD) - язык релейных диаграмм, распространенный в основном в США для описания логических выражений любой сложности;
Structured Text (ST) – язык структурированного текста,- из семейства языков Паскаль,- реализует гибкие процедуры обработки данных;
Instruction List (il) – язык инструкций, относится к классу ассемблеров, - для создания оптимизированных процедур.
Встроенные компиляторы CODESYS генерируют машинный код (двоичный код), который загружается в контроллер. Поддержаны основные 16-и и 32-х разрядные процессоры: Infineon C166, TriCore, 80x86, ARM (архитектура), PowerPC, SH, MIPS (архитектура), Analog Devices Blackfin, TI C2000/28x и другие, предоставившие в систему исполнения CoDeSys так называемые target-файлы (hex-файл) для прошивки того или иного контроллера.
Инструмент CODESYS Application Composer позволяет перейти от программирования практических приложений к их быстрому составлению. Пользователь составляет собственную базу объектов, соответствующих определенным приборам , механическим узлам машины и т.п. Каждый объект включает программную реализацию и визуальное представление. Законченное приложение составляется из необходимых объектов, конфигурируется и автоматически генерируется программа на языках МЭК 61131-3.
Для программирования МК семейства Mega используется язык Processing, а для работы с этим языком новичками, не знакомыми близко с разработкой программного обеспечения создана интегрированная среда разработки ArduinoIDE —кроссплатформенное приложение на Java, включающее в себя редактор кода, компилятор и модуль передачи прошивки в плату.
Язык программирования аналогичен используемому в проекте Wiring. Строго говоря, это C/C++, дополненный некоторыми библиотеками. Программы обрабатываются с помощью препроцессора, а затем компилируется с помощью AVR-GCC- GNU Compiler Collection (обычно используется сокращение GCC) — набор компиляторов для различных языков программирования, разработанный в рамках проекта GNU.- Изначально GCC поддерживал только язык Си, но позднее был расширен для компиляции исходных кодов на таких языках программирования, как C++, Objective-C, Java, Фортран и Ada.
С учетом вышеприведенных определений основные элементы информационной системы в составе структурной схемы мобильного робота могут быть представлены на рис.1.
Блок сенсоров для ультразвуковой системы управления мобильным роботом с обходом препятствий.
Принцип действия и первичные преобразователи
Как известно, скорость звука в воздухе равна около 340 м/с. Таким образом, принцип ультразвукового сенсора состоит в посылке ультразвукового импульса частотой 40 кГц и отслеживание отраженного сигнала (эхо). Зная время прохождения импульса и отраженного ультразвукового сигнала, можно получить расстояние. Разделив на два, мы получим расстояние от ультразвукового датчика до первого препятствия, от которого был отражен сигнал.
В качестве первичных преобразователей применен пьезокерамический ультразвуковой излучатель MA40B8S и пьезокерамический ультразвуковой датчик MA40B8R открытого типа. Основные параметры приведены в таблице 1 ниже.
Табл.1
Устройство |
Назначение |
Частота |
Направленность, град |
Емкость, пФ |
Область детектирования, м |
Входное напряжение, макс, В |
MA40B8S |
Излучатель |
40 кГц |
50 (симметричный) |
2000 |
0.2 … 6 |
40 |
MA40B8R |
Датчик |
40 кГц |
50 (симметричный) |
2000 |
0.2 … 6 |
— |
Рассмотрим ультразвуковой модуль измерения расстояния HC-SR04 (Ultrasonic ranging module HC-SR04) производства корпорации Scharp на базе Devantech SRF04, рис. 2.
О
собенности
Напряжение
питания: 5V DC
Ток покоя: <2mA
Эффективный
угол: <15°
Диапазон измерения
расстояния: 2–400 cm
Разрешение:
0.3 cm
SRF04/SRF05 - это только датчик, который напрямую информацию о расстоянии не выдает. У датчика помимо выводов питания имеется ещё вывод триггера и вывод эха. При настройке вывода триггера высоким датчик генерирует 8-периодную 40 kHz ультразвуковую волну. В этот момент вывод эха становится высоким и остается высоким до того времени, пока отображенная звуковая волна достигнет датчика, рис. 3.
Т
аким
образом, сигнал эха показывает время,
в течение которого звук распространяется
до объекта и обратно. Измерив это время,
умножив его на скорость распространения
и разделив на два, можно получить
расстояние до объекта.
Принципиальная схема сенсора представлена на рис.4. Для реализации диаграммы сигналов SRF04 используется микроконтроллер PIC12C508, а для питания излучателя MA40B8S напряжением ±10в – контроллер MAX232. Такое решение позволяет увеличить дальность локации до 4м и подать -10в на операционный усилитель LP331 компаратора
Приемная часть ультразвукового дальномера состоит из микрофона MA40B8R 40кгц и каскада из двух операционных усилителей LM6032. Первый с помощью обратной связи настроен на коэффициент усиления 1:100, второй на 1:10. Между операционными усилителями включены конденсаторы, выполняющие роль частотных фильтров - убирающих все низкочастотные сигналы.
После второго операционного усилителя сигнал попадает в компаратор, порог сравнения которого регулируется подстроечным резистором. Фактически он регулирует чувствительность ультразвукового дальномера: насколько чутко он будет воспринимать отраженный сигнал, и в случае использования в узком пространстве регулировкой компаратора можно отсекать многократно отраженный сигнал. На рис.5 показаны осциллограммы сигнала на выходе операционного усилителя а) мелко, б) крупно, с) после обработки компаратором.
П
осле
компаратора уровень сигнала (уже можно
сказать логического) понижается до 5
вольт и идет в прерывание микроконтроллера
- далее уже работает программа.
Для использования ультразвукового датчика Devantech с микроконтроллером AVR, нужно выводы триггера и эха соединить с какими-либо выводами AVR. Для измерения времени желательно использовать 16-битный таймер, к примеру, timer3. На сигнал Trig нужно подавать короткие импульсы длительностью 10мкс. Этот импульс запускает эхо-локатор. Он уже сам генерирует пачку ультразвуковых импульсов (40кГц) для излучателя и сам ловит отраженное эхо.
Далее приведена функция pulseIn (дополнительная функция языка Wiring), которая производит всю процедуру измерения - генерирует сигнал триггера, запускает таймер, измеряет длину сигнала эха и переводит его в расстояние в сантиметрах.
unsigned long pulseIn(uint8_t pin, uint8_t state, unsigned long timeout); Вызов:
pulseIn(порт, значение, таймаут);
Описание: Считывает импульс (высокий или низкий) c цифрового порта и возвращает продолжительность импульса в микросекундах, импульс ожидается в течении таймаута(если не указать — будет ждать 1с). Например, если параметр «значение» при вызове функции установлен в HIGH, то pulseIn() ожидает, когда на порт поступит высокий уровень сигнала. С момента его поступления начинается отсчет времени до тех пор, пока на порт не поступит низкий уровень сигнала.
Функция возвращает длину импульса (высокого уровня) в микросекундах. Работает с импульсами от 10 микросекунд до 3 минут. Обратите внимание, что эта функция не будет возвращать результат, пока импульс не будет обнаружен или пока не истечёт таймаут (по умолчанию 1с) Параметры: порт: номер порта, с которого считываем импульс значение: тип импульса HIGH или LOW таймаут: время в микросекундах в течении которого ждать импульс, опция, по умолчанию 1с Возвращаемое значение: возвращает длительность импульса в микросекундах (тип int) Пример:
int duration; // объявление переменной duration типа int duration = pulseIn(pin, HIGH); // измеряем длительность импульса
