Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Разработка киберфизических систем на основе микроконтроллеров. Учебное пособие

.pdf
Скачиваний:
1
Добавлен:
08.09.2026
Размер:
2 Мб
Скачать
☆
Лекция 4. Пример разработки киберфизической системы на основе микроконтроллера
91
GMedian3<float> FilteredVoltage; // объявление фильтруемой пере-
менной
Adafruit_NeoPixel StatusStrip(NUMPIXELS, DI, NEO_GRB +
NEO_KHZ800); //объявление адресной светодиодной ленты
Servo ServoSolar; // инициализация сервопривода int SolarVoltage, LedBrightness, ServoAngle, PrevServoAngle;
//объявление числовых переменных
bool Auto = true; // объявление булевой переменной, являющейся ре-
жимом работы СУ
void setup() { pinMode(VoltagePin, INPUT); // настройка пина, к которому под-
ключен датчик напряжения, на вход
StatusStrip.begin();// инициализация адресной светодиодной ленты StatusStrip.setBrightness(50); // яркость светодиодов ServoSolar.attach(10); // подключение сервопривода к 10 пину attachInterrupt(JoystickButton, btnIsr, FALLING); // настройка пре-
рывания на смену состояния с HIGH на LOW
regulator.setDirection(NORMAL); // направление регулирования ПИ-
регулятора
regulator.setLimits(0, 180); // пределы угла поворота сервопривода } void loop() { SolarVoltage = analogRead(VoltagePin); // считывание данных с
датчика напряжения
SolarVoltage = FilteredVoltage.filtered(SolarVoltage); // фильтрация
полученных данных черезз медианный фильтр третьего порядка
LedBrightness = map(SolarVoltage, 0, 1023, 0, 255); // преобразова-
ние сигнала с датчика напряжения в яркость светодиодов
if (Auto == 0) // проверка режима работы { ServoAngle = map(digitalRead(JoystickX), 0, 1023, 0, 180); // счи-
тывание и преобразование сигнала с оси Х джойстика в угол поворота сервопривода
}
2. Проектирование киберфизических систем
92
else { regulator.setpoint = 1023; // значение, которое регулятор должен
поддерживать
regulator.input = SolarVoltage; // сообщение регулятору текущего
напряжения
ServoAngle = regulator.getResultTimer(); // запись значения с ПИ-
регулятора в угол поворота
} ServoSolar.write(ServoAngle); // поворот вала сервопривода на угол
ServoAngle
StatusStrip.clear(); // выключение всех светодиодов на ленте if (PrevServoAngle – ServoAngle < 0) // настройка парвых трех
светодиодов, если Солнце находится слева от солнечной панели
{ StatusStrip.setPixelColor(0, StatusStrip.Color(255, 255, 255)); StatusStrip.setPixelColor(1, StatusStrip.Color(255, 255, 255)); StatusStrip.setPixelColor(2, StatusStrip.Color(255, 255, 255)); } else if (PrevServoAngle – ServoAngle > 0) // настройка последних
трех светодиодов, если Солнце находится справа от солнечной панели
{ StatusStrip.setPixelColor(5, StatusStrip.Color(255, 255, 255)); StatusStrip.setPixelColor(6, StatusStrip.Color(255, 255, 255)); StatusStrip.setPixelColor(7, StatusStrip.Color(255, 255, 255)); } else // настройка средних двух светодиодов, если солнечная панель
точно направлена на Солнце
{ StatusStrip.setPixelColor(3, StatusStrip.Color(255, 255, 255)); StatusStrip.setPixelColor(4, StatusStrip.Color(255, 255, 255)); } StatusStrip.show(); // включение светодиодов
Лекция 4. Пример разработки киберфизической системы на основе микроконтроллера
93
PrevServoAngle = ServoAngle; // запись текущего угла сервоприво-
да в предыдущий
} void btnIsr() { // функция, которая выполняется при прерывании Auto = !Auto; // смена значения режима на противоположный (руч-
ной или автоматический)
}
Глава 5. Разработка схемы электрической соединений киберфизиче­ской системы
На основе схемы электрической структурной, показанной на рис. 24 была разработана схема электрическая соединений, которая представлена на рис. 26.
Рис. 26. Схема электрическая соединений
Выбор компонентов для данной схемы подробно показан в главе 1.
Заключение
В ходе работы над данным проектом была разработана киберфизиче­ская система для автоматического отслеживания положения солнца отно­сительно солнечной панели и автоматического направления на него. Вы­браны компоненты из существующих аналогов. Разработаны структурная и электрическая схемы для данной системы. Разработан алгоритм работы ки­берфизической системы управления в виде блок-схемы, программно реали­зован алгоритм для управляющей системы устройства.
2. Проектирование киберфизических систем
94
Лекция 5. Часто встречающиеся ошибки при разработке
киберфизических систем н основе микроконтроллеров
Рассмотрим основные ошибки, которые допускают начинающие раз-
работчики киберфизических систем.
1. Нет описания данных, поступающих об объекте и возвращаемых в объект. Здесь важно определить типы и структуру данных, которые считы­ваются с датчиков, расположенных на объекте и направляемых на средства воздействия на объекты. Нужно тщательно прописывать, что это за данные, через какое время они поступают. Поступают они регулярно (синхронно) или случайно (асинхронно). Данные эти скалярные (температура, влаж­ность и т.д.) или векторные (скорость, ускорения, угловые скорости, ЭКГ с разных отведений.
2. Не структурированы задачи наблюдения и / или управления объ­ектом. Задача наблюдения и управления она никогда не бывает монолит-
ной, чаще всего она распадается на определенный набор частных задач, ко­торые могут выполняться последовательно, параллельно, случайно, асин­хронно. Крайне необходимо вычленить такие подзадачи и отдельно опи­сать каждую, что сделать намного проще, чем сделать всю задачу целиком. При таком описании нужно обратить внимание:
на что у подзадачи на входе? Каков набор входных данных?  что подзадача генерирует, т.е. выходные данные?алгоритм обработки для подзадачи;  характер вызова к исполнению данной подзадачи (периодичность,
асинхронность, по требованию оператора).
3. Не формализованы локальные алгоритмы (до блок-схем). Для таких подзадач необходимо очень тщательно описывать алгоритмы. Внача­ле алгоритм можно написать словесно, дальше в виде блок-схемы и алго­ритма. Желательно уложить алгоритм в А4, но если не умещается на А4, лучше разбить на две подзадачи.
Может использоваться такие языки как, например, PDL. Крайне неже-
лательно формализовывать локальные алгоритмы путем написания их сра­зу на языке программирования высокого уровня, так как тяжело передать в последующем информацию, задачи, цели другому разработчику или просто самому себе через 2–3 месяца. Можно использовать сразу программирова-
Лекция 5. Часто встречающиеся ошибки при разработке киберфизических систем…
95
ние на высоком уровне, но тогда дополнять подробными комментариями, чтобы чтение программы походило на роман.
4. Не используются аппаратные средства МК, а всё пытаются сде-
лать на процессоре. МК изначально проигрывает в ресурсах персональному компьютеру, хотя некоторые виды работ может делать существенно быст­рее. Это происходит за счет специализированных аппаратных блоков, они реализованы схемно, т.е. работают в 50–100 раз быстрее, чем процессор МК. Кроме того, они могут работать параллельно: таймер через свою за­держку запускает АЦП, АЦП после окончания преобразования запускает последовательный порт, который передает данные в модем и все это про­исходит без участия процессора.
5. Не используется таймеры и прерывания. Типичная ошибка начи­нающих программистов КБС – это чисто программная реализация времен­ной диаграммы, например, сказано, что 500 раз в секунду считывать дан­ные с АЦП. Организуют цикл «Чтение с АЦП, задержка 2 мс и переход к началу цикла». При этом процессор занят на 100 % и все это время практи­чески выполняет функцию задержки на 2 мс. Современный АЦП имеет скорость 10 мкс, получается, что процессор выполняет полезную работу 0,5 % полезного времени. Хотя можно использовать, например, таймер, настроенный на 2 мс. Каждые 2 мс такой таймер будет генерировать пре­рывание и уже в этом прерывании можно обращаться к АЦП. Загрузка процессора в этом случае уменьшается в сотни раз.
6. В п/п обработка прерываний большие куски программы. Типич­ная ошибка начинающих программистов КБС, например, в прерывании от АЦП начинают выполнять процедуру от цифровой фильтрации с умноже­нием принятого сигнала на комплексные коэффициенты, вычисление квад­ратного корня и подобное, да еще и в формате с плавающей запятой. Чем это плохо? Нужно помнить, что во время выполнения программ обработки прерывания все другие прерывания запрещены. Это означает, что можно пропустить полезный сигнал, пока выполняется длинная программа обра­ботки прерывания. Это не допустимо. Выход – в программе обработке пре­рывания выполнять только необходимые вещи и устанавливать флаги – за­просы на обработку. А уже эти флаги периодически анализировать в цикле loop процессора и если они появились, то производить соответствующую обработку, после чего флаги сбрасывать.
2. Проектирование киберфизических систем
96
7. Не правильно выбираются типы данных, например, необосно-
ванно широко используют переменные типа float. Нужно отметить, что данные некоторых типов МК обрабатывает гораздо медленно, чем данные простых типов. Если нет прямой необходимости использовать данные с плавающей запятой типа float для скоростных задач, лучше их использо­вать реже.
8. Допускаются возможности «зацикливание» программы. Самая
опасная ошибка именно для задач реального времени, т.е.зашли в реальную программу и там остались навсегда. Обычно это ошибки при использова­нии конструкций DO WHILE или WHILE DO. Стараемся как можно реже использовать такие конструкции, но если без них не обойтись, то использо­вать так называемые Timeout, т.е. (константа или переменная, которая определяет предельное время цикла) заранее определить, сколько макси­мально времени на этот цикл можно выделить. Во время выполнения цикла все времени запрашивать системное время и определять сколько время прошло с начала цикла. Как только это время превышает заданный
Timeout, немедленно выходить из цикла. Например,
Tb = mills() If ((mills() – Tb)) > Timeout break Другой подход – использование так называемого аппаратного
WeightDOG сторожевого таймера. Этот таймер настраивается на время, за-
ранее превышающее цикл выполнения задачи. Во время выполнения зада­чи в цикле мы все время сбрасываем и обнуляем таймер, таким образом, он не доходит до конца установленного времени. В противном случае, если он дойдет до конца, то он просто сбросит МК и МК начнет выполняться с ну­ля. До конца он может дойти в том случае, когда мы его принудительно не будем сбрасывать.
9. Заранее не закладывается в программе режим отладки (отладка печати и сообщения сигнала и pin-ов и т.д.). Всегда нужно планировать по какому-то программному или аппаратному ключу работу программы с ге­нерацией отладочных сообщений. Например, читаем с АЦП сигнал, прово­дим с ним обработку, но иногда надо узнать: сигнал идет «чистый» или не очень. По специальному ключу мы можем задать возможность предвари­тельного просмотра, например в последовательном порту. Это замедлит работу всей программы, но мы получаем уверенность в правильности ис­ходных данных.
97
ЗАКЛЮЧЕНИЕ
В заключение данного учебного пособия хочется подчеркнуть важ-
ность изучения основ проектирования киберфизических систем на основе микроконтроллеров. Приведенные лекции позволяют ознакомиться с клю­чевыми понятиями и принципами работы таких систем, а также рассмот­реть роль интернета вещей, человеко-машинных интерфейсов, вычисли­тельных средств, микроконтроллеров и аналого-цифровых преобразовате­лей.
В учебном пособии представлены этапы проектирования киберфизи-
ческих систем, примеры решения задач на основе микроконтроллеров, структура проекта разработки и примеры создания киберфизических си­стем. Особое внимание уделено распространенным ошибкам при разработ­ке таких систем, что поможет избежать недочетов и повысить эффектив­ность процесса.
В качестве дополнительной литературы, которая может быть полез-
ным подспорьем разработчикам киберфизических систем рекомендуем, следующие издания [16–21].
Это учебное пособие предназначено для широкого круга читателей, начиная от студентов и специалистов в области информационных техноло­гий и заканчивая всеми, кто интересуется созданием киберфизических си­стем на базе микроконтроллеров. Рассмотренные вопросы помогут студен­там уяснить ключевые моменты структуры и методологии разработки ки­берфизических систем на основе микроконтроллеров. Надеемся, что оно будет полезным инструментом для изучения и практического применения знаний по проектированию киберфизических систем.
98
СПИСОК ЛИТЕРАТУРЫ
1. Горбачев, Я. Г. Киберфизические системы. Методы высокоуровневого
проектирования [Текст] / Я. Г. Горбачев, А. Е. Платунов, В. Ю. Пинке­вич, М. В. Кольчурин. – Санкт-Петербург : Университет ИТМО, 2022. – 48 с.
2. Асанбаев, А. И. [Электронный ресурс]. – А. И. Асанбаев, А. К. Орозобе-
кова. Режим доступа: http://elibrary.ru/item.asp?id=48468800 (дата обра­щения 29.02.2024). Вестник Кыргызского государственного универси­тета строительства, транспорта и архитектуры им. Н. Исанова, 2022. – Т. 2. – № 2 (76). С. 620–629.
3. Горюнов, А. Г. Архитектура микроконтроллера INEL [Текст] 8051:
учебное пособие / А. Г. Горюнов, С. Н. Ливенцов. ‒ Томск, 2005.
4. Архитектура микроконтроллеров [Электронный ресурс]. – Режим до-
ступа: http://life-prog.ru/arhitektura.php, свободный (дата обращения
14.03.2024).
5. Гумеров, Р. И. Практикум по микропроцессорам. Часть первая: микро-
контроллеры AVR [Текст] / Р. И. Гумеров. ‒ Казань, 2009.
6. Аналого-цифровые преобразователи [Электронный ресурс]. – Режим
доступа: http://neo-chaos.narod.ru/useful/adc/ad cs.pdf, свободный (дата обращения 18.09.2023).
7. Синютин, С. А., Цифровая обработка электрокардиосигнала в микро-
контроллерных кардиомониторах [Текст] : монография / С. А. Синю­тин, А. В. Леонова. Ростов-на-Дону : Издательство Южного федераль­ного университета, 2015.
8. Ревич, Ю. В. Практическое программирование микроконтроллеров
Atmel AVR на языке ассемблера [Текст] / Ю. В. Ревич. ‒ 2-е изд. ‒ Санкт-Петербург : БХВ – Петербург, 2011.
9. Характеристики и особенности микросхемы FT232R [Электронный ре-
сурс]. – Режим доступа: http://oscope.narod .ru/usb_ft232r.html, свобод­ный (дата обращения 18.09.2023).
10. GitHub – AlexGyver/GyverLibs: Мои библиотеки [Электронный ре-
сурс]. – Режим доступа: URL: [https://github.com/GyverLibs/directADC].
11. GitHub – AlexGyver/GyverLibs: Мои библиотеки [Электронный ре-
сурс]. – Режим доступа: URL: [https://github.com/AlexGyver/GyverLibs].
Список литературы
99
12. GitHub – AlexGyver/GyverLibs: Мои библиотеки [Электронный ре-
сурс]. – Режим доступа: URL: [https://github.com/GyverLibs/GyverIO].
13. GitHub – AlexGyver/GyverLibs: Фильтрация сигналов [Электронный ре-
сурс]. – Режим доступа: URL: [https://alexgyver.ru/lessons/filters/].
14. Максимов, С. М. Изучение внешнего фотоэффекта [Текст] : метод. ука-
зания / С. М. Максимов. – Ростов-на-Дону : Издательский центр ДГТУ,
2010. – 10 с.
15. Ваш Умный Дом [Электронный ресурс]. – URL: https://
vashumnyidom.ru / elektropitanie / alternativnaya-energiya / kpd-solnechnyx­batarej.html (дата обращения: 19.05.2023).
16. Шамин, А. А. Интернет вещей для начинающих. Визуальное програм-
мирование микроконтроллеров семейства ESP8266 [Текст] / А. А. Ша­мин. – Москва ; Вологда : ИнфраИнженерия, 2023. – 120 с.
17. Зараменских, Е. П. Интернет вещей. Исследования и область приме-
нения [Текст] : монография / Е. П. Зараменских, И. Е. Артемьев. – Москва : ИНФРА-М, 2023. – 188 с. – (Научная мысль). – DOI
10.12737/13342. ISBN 978-5-16-011476-7 (print), ISBN 978-5-16-103731-7 (online).
18. Грингард, С Интернет вещей: Будущее уже здесь [Текст] ; пер. с англ. –
Москва : Альпина Паблишер, 2016. – 188 с. ISBN 978-5-9614-5853-4.
19. Человекомашинное взаимодействие [Текст] : учебное пособие. –
Москва : СОЛОН-ПРЕСС, 2016. – 96 с. (Серия «Библиотека студента»).
20. Алиев, М. Т. Интерфейсы микроконтроллеров [Текст] : учебное посо-
бие / М. Т. Алиев, Т. С. Буканова. – Йошкар-Ола : Поволжский государ­ственный технологический университет, 2019. – 94 с. ISBN 978-5-8158-
2156-9.
21. Мерзлякова, Е. Ю. Человекомашинное взаимодействие [Текст] : учебно-
методическое пособие / Е. Ю. Мерзлякова. – Новосибирск : Изд-во СибГУТИ, 2015. – 34 с.
100
ПРИЛОЖЕНИЕ
Таблица П.1
Варианты исходных данных для тренировочных проектов по разработке
киберфизичкских систем на основе микроконтроллеров
№
Датчик
сигнала 1
Датчик
сигнала 2
Алгоритм
обработки
сигнала 1
Алгоритм
обработки
сигнала 2
Механизм 1
Механизм 2
1
Датчик напряжения
Датчик тока
Усреднение в скользя­щем окне
Низкоча­стотная фильтрация сигнала фильтром первого порядка
Сервопривод
Двигатель постоянного тока
2
Датчик тока
Датчик освещенно­сти
Низкоча­стотная фильтрация сигнала фильтром первого порядка
Определе­ние средне­квадратич­ного значе­ния сигнала
Символьный LCD-дисплей
Символьный
LCD-дисплей
3
Датчик освещенно­сти
Датчик температуры и влажности
Пиковый детектор
Определе­ние средне­квадратич­ного значе­ния сигнала
Реле
Символьный
LCD-дисплей
4
Датчик температуры и влажности
Датчик ускорения и угловой скорости
Низкоча­стотная фильтрация сигнала фильтром первого порядка
Медианный фильтр
Сервопривод
Двигатель постоянного тока
5
Датчик уско­рения и угловой скорости
Датчик магнитного поля Земли
Низкоча­стотная фильтрация сигнала фильтром первого порядка
Медианный фильтр
Сервопривод
Шаговый двигатель
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]