Текст
                    Гололобов В.Н.
КОМПЬЮТЕР
В ЛАБОРАТОРИИ
РАДИОЛЮБИТЕЛЯ
и
^издательства
Наука и Техника, Санкт-Петербург


УДК 621.314:621.311.6 ББК 32.971.321.4 Гололобов В.Н. Компьютер в лаборатории радиолюбителя. - СПб.: Наука и Техника, 2018. - 384 с, илл. ISBN 978-5-94387-883-1 Радиолюбители часто сталкиваются с проблемой нехватки приборов для проверки и настрой- ки создаваемых ими устройств. Особенно это относится к начинающим радиолюбителям,для которых покупка осциллографа,а без него не обойтись,- большая финансовая проблема. Сегодня у каждого радиолюбителя есть компьютер или планшет. А ПК - это целая лабора- тория, включающая все необходимые приборы в виде программ моделирования. Можно провести опыты с простыми электрическими схемами, позволяющими изучить свойства основных радиокомпонентов, можно экспериментировать со схемами сложных устройств. Таков диапазон работы не только дорогостоящих коммерческих программ, но и их бес- платных аналогов. Для загрузки программы в большинство микроконтроллеров нужен программатор, который подключается к компьютеру. А РОБОТЫ, даже самые простые, требуют для своего создания не только использование микроконтроллеров, но и умения создавать свои программы. Это невозможно без компьютера. О том, как компьютер становится полезным инструментом в лаборатории радиолюбителя, и рассказано в этой книге: от простых экспериментов в программах моделирования до работы с микроконтроллерами. Книга предназначена для широкого круга радиолюбителей. Дополнительные материалы к книге,листинги программ, рассмотренных в книге, справочную информацию и многое другое можно скачать с сайта автора книги http://vgololobov.narod.ru/, а также с сайта издательства Наука и Техника www.nit.com.ru. 9 785943"87883 ISBN 978-5-94387-883-1 Автор и издательство не несут ответственности за возможный ущерб, причиненный в ходе использования материалов данной книги Контактный телефон издательства (812) 412-70-26 Официальный сайт: www.njt.com.ru © Гололобов В.Н. © Наука и Техника (оригинал-макет) 000 «Наука и Техника». Лицензия № 000350 от 23 декабря 1999 года. 198097, г. Санкт-Петербург, ул. Маршала Говорова, д. 29. Подписано в печать 02.04.2018. Формат 70*100 1/16. Бумага офсетная. Печать офсетная. Объем 24 п. л. Тираж 1300 экз. Заказ № 3164 Отпечатано с готовых файлов заказчика в АО «Первая Образцовая типография» филиал «УЛЬЯНОВСКИЙ ДОМ ПЕЧАТИ» 432980, г. Ульяновск, ул. Гончарова, 14
СОДЕРЖАНИЕ От автора 7 Глава 1. Первое знакомство с любительской лабораторией на компьютере 9 Глава 2. Генератор на компьютере или на плате 18 Генератор прямоугольных импульсов 18 Эксперименты в программе QucsStudio 22 Повторение схемы на макетной плате 26 Перед тем, как включать паяльник 30 Проверка усилителя в лаборатории на компьютере 35 Глава 3. Что проку от генератора прямоугольных импульсов? 35 Испытание простого усилителя на компьютере 37 Проверка усилителя при наличии осциллографа 39 Генератор биений 40 Глава 4. Сначала моделирование, потом конструирование 42 Схема 42 Шифратор 45 Высокочастотный генератор 45 Манипулятор и усилитель ВЧ 48 Простой оконечный усилитель звуковой частоты 51 Глава 5. Представление об усилителе мощности звуковой частоты .. 51 Двухтактный усилитель мощности в режиме А 53 Режим работы оконечного двухтактного каскада АВ 54 Моделирование теплоотвода 58 Некоторые соображения, касающиеся УНЧ 63 Глава 6. Готовимся с компьютером к пополнению рабочего места ... 73 Усилитель для наушников 73 Использование операционного усилителя 78 Некоторые соображения и рекомендации по работе с усилителем 82 Простые правила работы с готовым устройством 86 Еще раз о компьютерных программах 88 Программа Yenka 89
Программа «Начала электроники» 91 Лабораторная работа 94 Глава 7. Кирпичики программ моделирования 98 Резистор 98 Конденсатор 100 Индуктивность 101 Диод 103 Транзистор 103 Разновидности анализа электрических схем в программах моделирования 104 Глава 8. Цифровые микросхемы 107 Таймер 107 Измеритель емкости и индуктивности 109 Генератор для пошаговой проверки 113 Генератор для проверки радиоприемника с амплитудной модуляцией 115 Пульт дистанционного управления 117 Угадай-ка! 118 Генератор псевдослучайных чисел на сдвиговом регистре... 119 Глава 9. Программа, осциллограф и радиоприемник 123 Глава 10. Почему программы моделирования? 131 Впрямь, почему и зачем? 131 Схема из Интернета 132 Схема из книги другого издательства 136 Глава 11. Компьютер - лучший друг микроконтроллера 141 Графический язык программирования 141 О чем речь дальше 144 Язык программирования высокого уровня 145 Обустройство микроконтроллера 147 Устройства на цифровых микросхемах и микроконтроллер.. 149 Глава 12. Свет в конце чулана 155 Датчик присутствия 155 Да будет свет 158 Глава 13. Программирование микроконтроллера 161 Начало, или почему Arduino? 161 Пример работы с модулем Arduino 162
Пример работы с PIC-микроконтроллером 165 Не для дела, но «крутизны» ради 171 Глава 14. Куда уехал робот? 175 Сегодня и вчера 175 Среда разработки MicroC 176 Робот-конструктор. Зачем? 180 Глава 15. Конструктор и собственные идеи 185 Неудачный опыт с конструктором ROBOPICA 185 Из справки по PWM для PIC16F887 187 В чем может быть подвох? 192 В чем была не удавшаяся идея? 194 Глава 16. Управление самоходным роботом с пульта 202 ИК-управление 202 Радиоуправление самоходным роботом 205 Глава 17. Не Windows единым 216 Почему? 216 Qucs 216 PIC- контроллеры 218 Arduino (AVR-контроллер) 220 Глава 18. STM32F103C8 (ARM-контроллер), подготовка в Linux ROSA 225 STM32CubeMx 225 System Workbench 233 Code::Blocks 235 Глава 19. Модуль STM32F103C8 и System Workbench в ROSA Linux.. 241 Кнопка и светодиод 241 Приключения начинаются 242 Истина не в Wine 246 Глава 20. Несколько простых примеров для STM32CubeMx и System Workbench 252 Кнопка и светодиод (возвращение) 252 Отладка, или новые приключения 256 Отладка программы работы светодиода и кнопки 260 Глава 21. STM32F103C8, устройство сигнализации и другие полезные программы 267 Сигнализация 267
STM32F103C8 Linux-Windows 273 Измерение постоянного напряжения с помощью АЦП 276 Передача данных через USART 281 Измерение переменного напряжения с помощью АЦП 285 Подключение буквенно-цифрового дисплея к STM32F103C8 289 Глава 22. STM32F103C8 и Code::Blocks в Linux ROSA 10 305 Предваряя начало работы 305 Установка программы Code::Blocks и приложений 306 Linux и Windows 320 Глава 23. Использование порта USB 321 Почему USB? 321 Подготовка проекта 322 Реализация и проверка проекта 325 Глава 24. Заключительная 332 Приложение 1. Полезные советы, как избежать ошибок при работе с System Workbench 334 Приложение 2. System Workbench: создание работающего проекта STM32 339 Приложение 3. System Workbench: отладка проекта 349 Приложение 4. System Workbench: импорт mbed проекта в System Workbench для STM32 353 Приложение 5. System Workbench: экспорт mbed программ для GCC-ARM toolchain 355 Приложение 6. System Workbench: импорт MBED-сгенерированного исходного кода 357 Приложение 7. System Workbench: импорт проекта, сгенерированного STM32CubeMX, под System Workbench 361 Приложение 8. System Workbench: использование ССМ памяти 370 Приложение 9. Знакомьтесь: программа MINIBLOQ для программирования роботов 376
ОТ АВТОРА В радиолюбительской практике приборы играют немало- важную роль. Вместе с тем, и это не удивляет, приборы доста- точно дорогие компоненты любительской лаборатории. Более того, современные устройства (а радиолюбители достаточно чувствительны к веяниям времени) используют такое разноо- бразие элементов, что приборов для работы с ними, что назы- вается, не напасешься. Что же приходит на помощь среднеста- тистическому радиолюбителю? У многих есть компьютер. Это либо стационарная модель, либо ноутбук, либо планшет. Хотя у меня, сознаюсь, не хватило терпения освоить работу с планшетом в полной мере. Если компьютера нет, то можно купить недорогой б/у вариант, на котором есть или можно установить хотя бы Windows XP или один из дистрибутивов Linux. И компьютер станет основой виртуальной, компьютерной лаборатории. Есть строгое методологическое определение виртуальной лаборатории. О том, насколько серьезен подход к вопросу, можно судить, если вспомнить, что разработками в этой сфере занимался небезызвестный Массачусетский Технологический Институт. Не думаю, что радиолюбителям так важно определение компьютерной лаборатории, но гораздо важнее знать, чем она полезна на практике. Тем более что на форумах можно встре- тить откровенно отрицательные отзывы о программах моде- лирования электрических цепей. Насколько это оправданно, судить трудно! Проще рассмотреть сами программы, чтобы сделать собственный выбор. А в качестве одного из аргументов в пользу компьютерных программ моделирования можно рас-
Компьютер в лаборатории радиолюбителя смотреть цены на коммерческие версии — программы стоят не меньше, чем ряд приборов. Еще один аргумент в пользу компьютерной лаборатории — микроконтроллеры, которые все больше привлекают внима- ние радиолюбителей, требуют загрузки программы, которую, похоже, без компьютера не осуществить. И это при условии, что программу для микроконтроллера кто-то написал за вас, а если нет? Конечно, теоретически можно использовать обыч- ный блокнот и карандаш или ручку для написания кода про- граммы. Но это при условии, что вы опытнейший программист, великолепно владеющий языком программирования. На практике, особенно это касается любителей, для соз- дания хорошей работающей программы приходится тратить время, и силы, причем не только свои, но и компьютерные. Да и программы моделирования уменьшают трудозатраты, как при создании собственных устройств, так и при повторении готовых конструкций. Рассказу об этом посвящена эта книга. С уважением, Владимир Гололобов
ГЛАВА 1 ПЕРВОЕ ЗНАКОМСТВО С ЛЮБИТЕЛЬСКОЙ ЛАБОРАТОРИЕЙ НА КОМПЬЮТЕРЕ Мое личное знакомство с программами моделирования электрических цепей произошло случайным образом: не полу- чилось нарисовать график синусоиды от руки, кто-то посове- товал использовать программу, и я наткнулся на программу Electronic Workbench 5.12 (рис. 1.1). Это были времена, когда Интернет не был переполнен авторскими правами, а я подо- зреваю, что производители программного обеспечения были сами заинтересованы, чтобы «дыры» в их программах отыски- вали бесплатные тестеры — радиолюбители. Не помню, что было с синусоидой, но программа меня заинтересовала. В те давние времена в размышлениях «А нужны ли мы нам?» я написал первый рассказ для радиолюби- телей. Тогда уже появилась версия программы под названием Multisim, хотелось бы в своем рассказе использовать ее, но не получилось, поэтому в рассказе я использовал EWB512. Позже появилась возможность пользоваться программой Multisim (рис. 1.2). Я не думаю, что и сегодня каждому из радиолюбителей доступен подобный осциллограф, но познакомиться с ним весьма интересно.
10 Компьютер в лаборатории радиолюбителя Рис. 1.1. Программа EWB512 .•■-'.""Ws t»f w l^ ш- Рис. 1.2. Осциллограф в программе Multisim
Глава 1. Первое знакомство с любительской лабораторией на компьютере 11 Рис. 1.3. Печатная плата в программе Ultiboard Тогда же программа моделирования электрических цепей обзавелась второй составляющей, предназначенной для раз- водки печатных плат (рис. 1.3). Многие радиолюбители с удовольствием изготавливают печатные платы для своих изде- лий, а профессионалы к тому времени давно перешли к систе- мам сквозного проектирования. ПРИМЕЧАНИЕ. Конечно, печатные платы изготавливались ра- диолюбителями и раньше, но теперь они стали гораздо аккуратнее, а процесс их создания стал проще. Многие радиолюбители и тогда, и теперь скептически отно- сятся к программам^моделирования, но это, я считаю, ошибоч- ная точка зрения. В подтверждение этого сошлюсь на статью моих давних знакомых (ее можно найти на моем сайте [3]: «Интересная статья» или в журнале «Домашняя лаборатория»).
12 Компьютер в лаборатории радиолюбителя Рис. 1.4. Исследование БП в программе МиItisim Схема устройства довольно сложна (рис. 1.4), а исследование весьма интересно. ПРИМЕЧАНИЕ. Рис. 1.4 публикуется с согласия авторов Скворцова СЮ. и Смирнова ВВ. Когда вы задумываете создание какого-либо устройства, я считаю очень полезным изучить отдельные детали схемы или всю схему с помощью программы моделирования. Не люблю травмы, ни физические (когда что-то взрывается или горит), ни моральные (когда устройство на макетной плате выходит из строя из-за нелепой ошибки).
Глава 1. Первое знакомство с любительской лабораторией на компьютере 13 СОВЕТ. Купить сегодня программу Muttisim не так про- сто! Поэтому радиолюбителям я советую ис- пользовать более доступные и бесплатные про- граммы. Он обладают теми же возможностями, а порой и большими, что и коммерческие версии. Из программ, которые я немного знаю, я предлагаю исполь- зовать Qucs (рис. 1.5), расшифровывается как «Почти универ- сальный симулятор электрических цепей». Я не думаю, что в любительской лаборатории есть, напри- мер, генератор, работающий на частоте 1 ГГц. Да и пользо- ваться таким генератором нужно уметь! А в программе Qucs вы можете использовать такой генератор. Не у всех есть много- канальные осциллографы, а в этой виртуальной лаборатории на компьютере вы можете контролировать множество точек. В дальнейшем мы будем пользоваться более поздней вер- сией программы Qucs, которая называется, вы уже догада- лись — QucsStudio. Рис. 1.5. Программа Qucs 0.0.18
14 Компьютер в лаборатории радиолюбителя ПРИМЕЧАНИЕ. Программы не совместимы в части чтения схе- мы, созданной в программе Qucs, в ее новой вер- сии, но последняя версия позволяет перейти к созданию печатной платы, как это сделано в программе Muttisim. Пока версия QucsStudio не русифицирована, чего не ска- жешь о ее предшественнице. Но зато она остается бесплатной программой. Для каких-то схем можно использовать программу EE-Sim (рис. 1.6), которая имеет весьма неплохую библиотеку моделей микросхем и транзисторов. Ряд программ позволяет легко добавить новые модели транзисторов. Радиолюбители подчас ищут возможность использовать в программе отечественные транзисторы, напри- Рис. 1.6. Программа EE-Sim 6.20
Глава 1. Первое знакомство с любительской лабораторией на компьютере 15 Рис. 1.7. Моделирование в программе Proteus мер, КТ315, есть такие модели, но, возможно, это подправлен- ные клоны зарубежных аналогов. Очень полезна при моделировании схем, в состав которых входит микроконтроллер, программа ISIS (Proteus) (рис. 1.7). Вместе с тем программа позволяет моделировать и аналого- вые, и цифровые схемы. Если бы не стоимость программы, ее можно было бы рекомендовать в качестве обязательной для каждой любительской лаборатории на компьютере. При отсутствии в лаборатории радиолюбителя программы Proteus спасает тот факт, что отлаживать программу микро- контроллера можно в среде разработки, где пишется код про- граммы, а связи с внешними компонентами помогает тот факт, что выводы микроконтроллера в основном работают как циф- ровой вход или выход. Вполне можно использовать другие инструменты лаборатории — программы моделирования элек- трических цепей. Для работы с микроконтроллерами пользуются соответ- ствующими средами разработки. Очень удобен для изучения микроконтроллеров и освоения работы с ними программно- аппаратный комплекс Arduino. Его аппаратная часть сегодня
16 Компьютер в лаборатории радиолюбителя Рис. 1.8. Программа Arduino стоит недорого, а для написания кода и отладки программы используется программная часть, которая тоже называется Arduino (рис. 1.8). Рис. 1.9. Наблюдение за шиной SPI на экране осциллографа-приставки
Глава 1. Первое знакомство с любительской лабораторией на компьютере 17 Свою лабораторию на компьютере вы создаете сами, выби- рая инструменты из тех, что описаны выше или отыскивая те, что вам больше подходят, но иной раз вы пополняете ее вынуждено. О чем я? Сегодня можно купить на Алиэкспресс доступный по цене осциллограф-приставку. Но вы вновь получаете программно- аппаратный комплекс. Аппаратную часть вы используете так, как используется обычный осциллограф, но вместо экрана, ручек и кнопок вы получаете программу, с которой и работа- ете (рис. 1.9).
ГЛАВА 2 ГЕНЕРАТОР НА КОМПЬЮТЕРЕ ИЛИ НА ПЛАТЕ I Генератор прямоугольных импульсов Начинающему радиолюбителю не обязательно сразу обза- водиться всеми приборами в их физическом воплощении. Вы можете поучиться паять, и собрать первый простой, но необхо- димый прибор — генератор. Генераторы в любительской прак- тике применяют разные. Все зависит от конкретной задачи. Но сейчас я бы назвал задачу, которую вы должны поставить перед собой, — освоить азы электроники и радиотехники, осво- ить азы конструирования и создания электронных устройств, освоить азы работы с паяльником. Начнем с генератора прямоугольных импульсов. Почему генератор прямоугольных импульсов? Поясняю, генератор прямоугольных импульсов сделать проще, чем любой другой генератор. Это раз. Прямоугольные импульсы можно представить в виде огромного количества гармонических составляющих, которые при необходимости можно выделить, получив синусоидальное напряжение. Это два. Для проверки работы многих устройств можно использо- вать прямоугольные импульсы. Это три.
Глава 2. Генератор на компьютере или на плате 19 Рис. 2.1. Схема генератора прямоугольных импульсов Наконец, можно быстро превратить генератор прямоуголь- ных импульсов в генератор биений для проверки высокоча- стотных цепей. Это четыре. И мне кажется, я перечислил далеко не все. Так, можно оце- нить и рабочую полосу частот усилителя с помощью прямоу- гольных импульсов. Если не очень «жадничать», то в качестве основы генера- тора можно использовать микросхему К1006ВИ1 (она же тай- мер 555). Вот схема такого генератора (рис. 2.1). Начнем мы, вы уже знаете, не с пайки, а с выяснения того, что нарисовано на схеме. И даже не с этого, а с того, как это нарисовать в программе Qucs. Последнюю версию программы вы можете найти на домаш- нем сайте Qucs [1]. Скачайте и установите программу. После запуска программы вы получите (рис. 2.2) рабочее окно про- граммы, которое состоит из поля чертежа, над которым основ- ное меню и инструментальная панель, а слева окно менеджера проектов, оно же окно компонентов и т. д. Чтобы добавить в поле чертежа какой-либо компонент, щелкните левой клавишей мышки по закладке Компоненты. Но
20 Компьютер в лаборатории радиолюбителя компоненты в программе организованы в несколько катего- рий, выбор которых осуществляется в верхней части окна ком- понентов. На рис. 2.1 выбраны Диаграммы. Для выбора другого набора компонентов служит стрелка в правой части окошка набора компонентов. ПРИМЕЧАНИЕ. Я, пожалуй, сейчас отмечу эту стрелку на рис. 2.1, чтобы не рисовать всю картинку еще раз. Нажмем на стрелку и из выпадающего меню вы- берем Дискретные компоненты (рис. 2.2). Рис. 2.2. Выпадающее меню выбора компонентов
Глава 2. Генератор на компьютере или на плате 21 Но начинать работу я советую не с этого. Начинать работу следует с создания проекта. В основном меню найдите раздел Проект-*Новый проект. В диалоговом окне, когда вы нажмете на раздел создания нового проекта, впишите имя вашего про- екта. Пусть это будет myjirst. СОВЕТ Я не знаю, стоит ли название проекта писать кириллицей. Допускаю, что программа это позво- лит, но лучше не привыкать к этому. Так метки в программе следует вводить только латиницей. Не обязательно знать язык, чтобы использовать латиницу, можно записать латиницей, например, moy_proekt. Программе безразлично, как вы назовете свой проект. Теперь вернемся на закладку компонентов с дискрет- ными компонентами. Выберем резистор, щелкнув по нему левой клавишей мышки. Перенесем курсор в рабочее поле чер- тежа, контур резистора будет привязан к курсору мышки. ПРИМЕЧАНИЕ. Кстати, пока вы не оставили резистор в рабочем поле, вы можете щелчком правой клавиши мышки повернуть рисунок. Попробуйте. Когда выберете место для резистора, выберете его положе- ние, поворачивая, щелкните левой клавишей мышки, резистор останется в том месте, которое вы для него выбрали. Два резистора, два конденсатора и источник постоянного напряжения — все это вы найдете легко. Источники питания и другие источники сигналов есть в категории Источники. Но с таймером 555 сложнее. То, как создаются макромодели, вы
22 Компьютер в лаборатории радиолюбителя можете прочитать в рабочей тетради одного из создателей программы, ее вы найдете на моем сайте [3]. Впрочем, скачайте и установите программу QucsStudio. Она похожа на программу Qucs, как если бы таковой и была, но она представляет следующее поколение программы. ПРИМЕЧАНИЕ. К сожалению, новое поколение, как это часто бы- вает в жизни, не в полной мере понимает преды- дущее. Схему из Qucs нельзя открыть в QucsStudio, они не совместимы. Но нет худа без добра. Мы пока схему и не нарисовали. I Эксперименты в программе QucsStudio Не знаю, как это будет выглядеть позже, пока версия 2.4.1 существует в портативном варианте. Ее можно скачать и скопировать, скажем, на диск С в папку с именем QucsStudio. Перейдя в эту папку, найдите папку bin, где найдите исполня- емый файл qucs.exe. Двойной щелчок по этому файлу запустит программу. ПРИМЕЧАНИЕ. Сегодня программа не русифицирована, возможно, позже это будет сделано. Но, если нет, то при- выкать к англоязычным названиям когда-то надо начинать.
Глава 2. Генератор на компьютере или на плате 23 Повторим создание нового проекта Project-+New Project. Назовем первый проект так, как собирались. То же диалоговое окно позволяет ввести имя проекта. Теперь можно воспользоваться библиотекой новой версии программы (рис. 2.3). Я отметил закладку Library и отметил набор, где есть таймер 555, и обратите внимание на подпись под таймером: «Подцепи и перенеси меня». Так и поступите — подцепите символ таймера с нажатой левой клавишей мышки и перенесите на чертеж. Остальные компоненты вы знаете, где найти и как пере- нести на чертеж. Я только поясню, что теперь на закладке Components (над закладкой библиотеки) следует выбрать кате- горию lumped components, где вы найдете резисторы и конден- саторы. Символ таймера 555 немного отличается от ранее нари- сованного. Есть некоторые различия и при моделировании. Я добавлю схему еще раз (рис. 2.4). Поясню, что вам предстоит делать после того, как вы пере- несете в поле чертежа все компоненты. Используйте иконку Рис. 2.3. Библиотека моделей программы QucsStudio
24 Компьютер в лаборатории радиолюбителя transient и simulation 10 1 т 1 1 0-- Pr1,B n T- TR1 Stop=500 мс Points=1010 reltol=0,0001 abstol=10MKB initialDC=HeT 1e-4 2e-4 3e-4 4e-4 J-i 4( 5e-4 Рис. 2.4. Схема генератора в программе QucsStudio с рисунком карандаша на инструментальной панели, чтобы соединить все компоненты. Достаточно нажать на эту иконку, чтобы курсор мышки изменил свой вид. Теперь, щелкая по красным кружкам, которыми заканчи- ваются все выводы компонентов, вы можете проводить соеди- нения. Завершать их можно щелчком по кружку следующего компонента или по линии, соединяющей два компонента. ВНИМАНИЕ. Не забудьте после соединения всех компонентов нажать на иконку с привычным видом курсора или нажмите на клавишу Esc на клавиатуре, завер- шая режим проведения соединений. Напомню, что источники разного рода, от батарейки до сложных генераторов, вы найдете в разделе Components/sources. Для моделирования вам нужно выбрать вид моделирования в разделе Components/simulations. Нас интересует моделирование переходного процесса. Этот компонент переносится в поле чертежа, как и осталь- ные компоненты. Но его нужно настроить, используя диалог
Глава 2. Генератор на компьютере или на плате 25 свойств компонента. Двойной щелчок левой клавишей мышки открывает этот диалог. На закладке диалога Sweep вы должны задать время окончания, Stop = 500 us, количество точек Points= 1010. Дальнейшие настройки на закладке Properties в соответствии с тем, что вы видите на рис. 2.4. Значение сопротивления резисторов и емкости конденса- торов задаются на их страницах свойств. О том, как работает таймер 555, можно прочитать в книге [20]. В программе Oucs таймер 555 не входил в библиотечный набор, но эта модель была создана одним из авторов про- граммы с помощью базовых компонентов. То, как создаются подобные модели, хорошо описано в его рабочей тетради, которую вы найдете на моем сайте [3]. СОВЕТ. Рекомендую прочитать, чтобы лучше понять ра- боту схемы, поскольку она, работа генератора, ба- зируется на внутреннем устройстве микросхемы. Тем не менее, увеличение значения резистора R2 или кон- денсатора С1 уменьшает частоту генератора. Проведите экспе- римент, увеличьте сопротивление резистора R2 до 10 кОм. Вы получите меандр с частотой около 6 кГц. Увеличьте сопротив- ление резистора R2 до 100 кОм. Частота должна уменьшиться до 700 Гц. Похожие результаты вы получите при изменении емкости конденсатора С1. ПРИМЕЧАНИЕ. При увеличении сопротивления и емкости не забудьте изменить время остановки моделиро- вания.
26 Компьютер в лаборатории радиолюбителя При уменьшении частоты генератора, если не изменить время остановки моделирования, вы увидите только часть импульса. Определять время по отметкам оси х на графике весьма затруд- нительно. Поэтому используйте задание отметок на графике. Нажмите на инструментальной панели иконку с графиком значком плюс и буквой «т», щелкните в любом месте графика, и вы получите отметку величины импульса и времени. Для перемещения отметки по графику выделите отметку щелчком левой клавиши мышки и используйте клавиши управления курсором на клавиатуре для перемещения отметки (рис. 2.5). ЧТО ЕСТЬ ЧТО. Меандр - форма прямоугольных импульсов, когда время высокого уровня импульса и время низкого уровня равны между собой. Мы, используя компьютерное моделирование, убедились в работоспособности схемы, узнали о некоторых возможностях изменения частоты генерируемых импульсов. Осталось убе- диться, что схема работает не только в программе QucsStudio, но и на макетной плате. I Повторение схемы на макетной плате Доверяете вы компьютерному моделированию или не доверяете, но если вы намерены спаять схему, ее следует про- верить на макетной плате. Что предваряет проверку на макет- ной плате? Проставьте номера выводов микросхемы. На рис. 2.5 у микросхемы нет обозначения номеров выводов. Можно оста- вить схему на экране монитора, но лучше ее распечатать на бумаге. Соберите все необходимые детали.
Глава 2. Генератор на компьютере или на плате 27 transient Л simulation TR1 Stop=3 мс Points=1010 reltol=0,0001 abstol=10M«B initialDC=HeT 5e-4 1e-3 1,5e-3 0,002 0,0025 0,003 0,01-T- obT jcv_L Рис. 2.5. Метки на графике диаграммы результата моделирования СОВЕТ. Если маркировка резисторов цветовая, то про- верьте резисторы. В этом вам поможет про- грамма Qucs, где в разделе основного меню Инструменты есть подраздел Resistors color codes. Введите цвета полосок на резисторе, нажмите кнопку То Resistance диалогового окна, чтобы получить уведомление о сопротивлении (рис. 2.6). Если есть возможность (мой мультиметр это позволяет), проверьте правильность емкости конденсатора. Маркировка 103 на конденсаторе означает десять, умноженное на десять в третьей степени, то есть, искомая емкость 10 нФ. Постарайтесь, насколько возможно, приблизить располо- жение деталей на макетной плате к расположению элементов схемы. Так проще разобраться при проверке и налаживании устройства.
28 Компьютер в лаборатории радиолюбителя Рис. 2.6. Подпрограмма определения сопротивления по цветовой маркировке ПРИМЕЧАНИЕ. Отсчет ножек у микросхемы идет от метки. Часто это точка возле первой ножки. Не пола- гайтесь на маркировочную надпись. Маркировка может быть перевернута. СОВЕТ. Не укорачивайте выводы деталей при макетирова- нии. Макет выглядит не очень «презентабельно», но детали пригодятся тогда, когда вы будете паять готовое устройство, а при этом могут потребо- ваться длинные выводы. Не забудьте еще раз прове- рить правильность монтажа перед тем, как вклю- чить питание, и проверьте напряжение питания! На макетной плате схема может выглядеть так, как пока- зано на рис. 2.7. Если у вас есть осциллограф, вы можете проверить работу генератора с его помощью (рис. 2.8). Частота прямоугольных импульсов около 800 Гц. Если у вас мультиметр с частотомером, вы можете измерить частоту точ- нее. Если у вас нет пока осциллографа, то убедиться в работо-
Глава 2. Генератор на компьютере или на плате 29 MS. aKV.. / Рис. 2.7. Схема генератора на макетной плате способности генератора можно с помощью измерения пере- менного напряжения (или даже постоянного напряжения) мультиметром. Два измерения: при включенном питающем напряжении схемы и при выключенном питающем напряже- нии, — помогут вам сориентироваться в этом вопросе. 500.00 Нг Рис. 2.8. Проверка работы схемы с помощью осциллографа
30 Компьютер в лаборатории радиолюбителя СОВЕТ. Вам могло не понравиться то, что соединитель- ные провода для макетной платы очень длинные. Это так. За ними не видно деталей, что может очень раздражать. Можно, конечно, купить ко- роткие провода для макетной платы, но можно поступить иначе. Возьмите небольшой отрезок компьютерного кабеля с витыми парами, вытащите из него про- вода. Теперь, отрезая небольшие кусочки нужной длины, зачистив провода на длину 7-9 мм с обе- их сторон, вы получите вполне симпатичные со- единители для вашей макетной платы. Вдобавок они будут, скорее всего, разноцветными. I Перед тем, как включать паяльник Мы проверили схему с помощью компьютерного моде- лирования. Более того, мы проверили работу генератора на макетной плате. Не пора ли начинать пайку? Да, можно включить паяльник и приступить к пайке. Но я советую потратить еще немного времени, чтобы нарисовать для себя монтажную схему. ПРИМЕЧАНИЕ. Программа QucsStudio позволяет «нарисовать» монтажную схему на ПК. Дело в том, что у про- граммы есть вторая часть, как у любой програм- мы для сквозного проектирования, предназначен- ная к разводке печатной платы.
Глава 2. Генератор на компьютере или на плате 31 Я не советую увлекаться созданием печатных плат до тех пор, пока в этом не будет жестокой необходимости. Но рису- нок печатной платы дает хорошее подспорье — вы получаете монтажную схему, которая, если вы не помешаете этому, будет выполнена без ошибок. Итак, сначала несколько изменим рисунок схемы, убрав компоненты нужные только для моделирования. Этот компо- нент — батарейка. Кроме удаления ненужных компонентов схемы следует добавить новые — порты. Есть такой компонент среди lumped components. Порты нужны, например, для выхода генератора, нужны для подключения источника питающего напряжения (батарейки «Крона»). Итогом стало такое изображение схемы (рис. 2.9). Следующий шаг — это дать команду создания печатной платы (основное меню Tools^Create PCB netlist). Этим созда- ется список всех соединений и запускается программа KiCAD. В окне новой программы на инстру- ментальной панели найдите иконку (справа от иконки с биноклем) чтения netlist, файла, созданного ранее. Чтобы было удобнее, при наведении курсора на иконку появляется подсказка. Вам нужна иконка с подсказкой Read netlist. В диалоговом окне можно указать нужный файл, но сейчас он появляется по умолчанию. Достаточно воспользо- ваться кнопкой диалога Read Current Netlist, чтобы продолжить работу после закрытия диалога (кнопка Close). На экране появится лист рабочего чертежа, а в левом верхнем углу над этим листом появятся все детали конструкции, соединенные согласно схеме, но сваленные в кучу (ratsnest). Перед их размещением следует задать габариты будущей платы. Для этого: выбрать границы платы в окошке, где выбирается активный слой (рис. 2.10). После выбора режима проведения границ нажмите иконку размещения, отмеченную на рис. 2.10. На правой инстру- *-ОРЗ ОР4 Рис. 2.9. Подготовка схемы к разводке печатной платы
32 Компьютер в лаборатории радиолюбителя Рис. 2.10. Выбор режима проведения границ платы ментальной панели есть иконка выбора проведения линий и прямоугольников (Add graphic line or polygon). Нарисуйте пря- моугольник, который должен иметь размеры будущей платы, нажимая левую клавишу на всех углах поворота. Замкнув линии, нажмите клавишу Esc на клавиатуре. Нажмите иконку на правой инструментальной панели с изображением курсора. Переместите курсор на детали над левым верхним углом чертежа и нажмите правую клавишу мышки. Из выпадающего меню выберите то, что показано на рис. 2.11. ПРИМЕЧАНИЕ. Итогом работы программы станет автомати- ческая расстановка всех компонентов на плате. Но вас едва ли устроит критерий размещения - максимальная компактность. Увеличьте рисунок компонентов, используя иконку на основной инструментальной панели с увеличительным сте- клом и значком плюс. Щелкая по отдельным компонентам правой клавишей мышки, выбирайте этот компонент из выпадающего меню, а из подменю выбирайте команду перемещения (Move). Постарайтесь разместить все компоненты самым для вас удоб-
Глава 2. Генератор на компьютере или на плате 33 Рис. 2.11. Выбор авторазмещения компонентов ным образом. Затем щелкните правой клавишей мышки по ком- понентам, чтобы выбрать из выпадающего меню автоматиче- скую разводку платы (Global Autoroute-+Autoroute All Modules). Скорее всего, хотя и не обязательно, будут получены не все дорожки. Те дорожки, которые не были созданы, выглядят простыми соединительными линиями. Используйте поворот и перемещение компонентов. Выберите на правой инструмен- иконку, активирующую рисование дорожек и отверстий (Add tracks and vias). С помощью ручного рисования дорожек и добавления отверстий дорисуйте все дорожки. I СОВЕТ. Не забывайте, что контактные площадки для компонентов могут быть на нижней стороне платы, а дорожку вы проводите на стороне раз- мещения компонентов. В месте расположения контактной площадки в этом случае нужно до- бавить отверстие. Итогом этой работы должна стать разведенная печатная плата (рис. 2.12).
34 Компьютер в лаборатории радиолюбителя Рис. 2.12. Завершенная разводка платы Сама печатная плата вам пока не нужна. А использовать безошибочный рисунок монтажной платы — это и было нашей целью. Возможно, я этого не исключаю, вам удобнее нарисовать монтажные соединения на листе бумаги с помощью каран- даша. Но знать о возможности разводки платы, думаю, полезно. Вы можете использовать и самостоятельную программу KiCAD. Файл netlist, созданный программой QucsStudio, пре- красно работает в сегодняшней версии программы. О том, как использовать программу KiCAD, вы можете прочитать в руко- водстве к ней, которое есть на моем сайте [3].
ГЛАВА 3 ЧТО ПРОКУ ОТ ГЕНЕРАТОРА ПРЯМОУГОЛЬНЫХ ИМПУЛЬСОВ? Проверка усилителя II в лаборатории на компьютере II Генератор прямоугольных импульсов мы собрали из сооб- ражений его простоты. Но это не делает его менее полезным. Давайте, рассмотрим несколько примеров применения такого генератора. Начнем с простейшего усилителя (рис. 3.1). Я надеюсь, что вы подобрали резистор R1 так, чтобы напря- жение на коллекторе транзистора было равно половине напря- жения батарейки VI. Используя генератор, о котором шла речь Pr1 680 к ВС850С 1 1e-3 2e-3 3e-3 4e-3 5e-3 V1 -9B Рис. 3.1. Проверка схемы простейшего усилителя
36 Компьютер в лаборатории радиолюбителя 1е-3 5е-4 О { t, с 1е-3 2е-3 Зе-3 4е-3 5е-3 R1 V1 100 к UH=9B ТН=1 мс TL=1 мс Рис. 3.2. Делитель напряжения для генератора в главе 2, вы выходное напряжение должны были подать на делитель из двух резисторов, чтобы иметь напряжение на выходе порядка одного милливольта. Изначально генератор формирует импульсы с амплитудой, близкой к девяти вольтам. Этот сигнал нам нужно поделить в 10000 раз. Проверим это, используя программу OucsStudio (вы, несо- мненно, можете это и рассчитать). Почему программу? Удобно (рис 3.2). Здесь VI — это наш генератор с выходным напряжением около девяти вольт. А на графике показано, что с делителя сни- мается сигнал около одного милливольта. Кстати, вы можете обозначать оси координат на графике. ПРИМЕЧАНИЕ. Не думаю, что вы будете делать это каждый раз, но сохраняя схему и описание к ней, используйте эту возможность. Чтобы изменить называния осей, вам нужно: ♦ щелкнуть по графику; ♦ выбрать из выпадающего меню Edit Properties; ♦ в диалоговом окне выбрать закладку Properties9 где два верхних окошка и предназначены для ввода названия осей. Программа в этом случае поддерживает кириллицу.
Глава 3. Что проку от генератора прямоугольных импульсов? 37 Испытание простого усилителя | на компьютере II Я отвлекся на рассказ о том, что вам, скорее всего, известно и без меня. Итак. Мы подали на вход усилителя сигнал с амплитудой один милливольт. На выходе мы получили амплитуду немного более ста милливольт. Что нам это дает? Во-первых, мы можем сказать, что наш усилитель усили- вает напряжение. Что от него и требовалось. Во-вторых, мы можем сказать, что коэффициент усиления по напряжению равен ста (или около того). Для первого испытания этого вполне достаточно. Используя наш генератор, мы можем проверить, например, неисправное устройство, у которого есть усилитель звуковой частоты. Подав через конденсатор на вход усилителя сигнал в один милли- вольт, мы должны услышать из динамика звук с частотой, на которую настроен генератор. Если вы собираете свой усилитель на беспаечной макетной плате, то, подключив к выходу осциллограф, вы увидите то, что нарисовано на графике (рис. 3.1). Осциллограф позволяет вам использовать либо открытый вход, либо закрытый вход. Выберите тот вариант, который позволяет работать без допол- нительного конденсатора на выходе усилителя. ПРИМЕЧАНИЕ. Если вы пока не обзавелись осциллографом, то подключите к выходу усилителя мультиметр в режиме измерения переменного напряжения че- рез электролитический конденсатор, скажем, 10 мкФ на 10 В. Не забудьте, что плюс конденса- тора подключается к коллектору транзистора (рис. 3.1). Предварительно вам следует опреде- литься с величиной напряжения, которую вам по- кажет мультиметр.
38 Компьютер в лаборатории радиолюбителя Для этого подключите мультиметр к генератору без дели- теля напряжения. Мы знаем, что амплитуда сигнала около девяти вольт. Показания вольтметра позволят вам получить нужный коэффициент для дальнейших измерений. Положим, что мультиметр показал 4,5 вольта. Тогда коэффициент будет два. При последующих измерениях вам нужно будет показания мультиметра умножить на два. Конечно, без осциллографа будет трудно сказать что-то большее, чем уже сказано. Но! Меняя частоту генератора в сторону уменьшения частоты, вы сможете получить нижнюю частоту среза, когда напряжение на выходе уменьшится в 1,5 раза. Предварительно вы можете оценить возможности проведения испытаний с помощью про- граммы QucsStudio (рис. 3.3). [ас simulation Ц АС1 Type=log Start=1Oru Stop=100i<rL4 Points=1900 РП " 1"" Т "Л "Г ГТП П-ГГППГ —Z.LllUiU l-UJ-LLJU LJ.LLUUI J-_L -г-гг Trim--i-тпп-тт! rrrmiii—г-гттгМп R1 680к R3 1 к •HZDHb BC850CJ freq=1 кГц 10 100 1e3 1e4 1e5 Рис. 3.3. Получение АЧХ с помощью QucsStudio Собранный нами генератор не даст частоту значительно больше 100 кГц, поэтому я изменил схему, добавив парал- лельную частотно-зависимую отрицательную обратную связь и изменив величину конденсатора С1. Для такой схемы вы можете составить вполне приемлемую оценку полосы пропу- скания.
Глава 3. Что проку от генератора прямоугольных импульсов? 39 Проверка усилителя II при наличии осциллографа II Позже мы вернемся к вопросу об осциллографе, а сейчас подразумевается, что он у вас есть. ВОПРОС Чем может помочь генератор прямоугольных им- I пульсов при наличии осциллографа? Подключим к схеме на рис. 3.3 генератор прямоугольных импульсов и понаблюдаем за выходным напряжением на раз- ных частотах (рис. 3.4). Искажение прямоугольного импульса такого характера, как показано на рис. 3.4, свидетельствует о спаде АЧХ на низких частотах. При достаточном навыке вы сможете, меняя частоту генератора, определить, пусть и не совсем точно, но опреде- лить нижнюю частоту среза. Повторив эту же операцию для высоких частот, мы получим следующее (рис. 3.5). Сравните верхнюю часть импульса на рис. 3.4 и рис. 3.5 с той, что изображено на рис. 3.1. Хотя вы не получаете полной TR1 Stop=100MC Points=10100 С1 3,2 мк R3 С2 1 к 3200 UH=1 мВ ТН=10мс TL=10mc ВС850С 1 9В 0,01 0,02 0,03 0,04 0,05 0,06 0,07 0,08 0,09 0,1 Рис. 3.4. Сигнал на выходе усилителя при частоте 50 Гц
40 Компьютер в лаборатории радиолюбителя 5,1- • 5,05 TR1 Stop=200 мкс Points=10100 1,6е-4 2е-Л Рис. 3.5. Сигнал на выходе усилителя при частоте 10 кГц информации о полосе пропускания, используя такой прием, но вы можете измерять мультиметром выходное напряжение, чтобы построить график АЧХ. Использование генератора прямоугольных импульсов для оценки полосы пропускания не единственная возможность применения простого генератора. Генератор биений Добавив к генератору прямоугольных импульсов резонанс- ный контур, можно получить генератор биений (рис. 3.6). l Рг1, В т V | L-4- -1- _ j_ V 1 1 1 Т Г 1 X 1- —1—1 1 1 1 1 —i 1 1 i i j А 1 пЛ|ла L Г 1—1 г 1 1 1 t.c —► 2е-4 4е-4 6е-4 8е-4 1е-3 0,0005 Рис. 3.6. Генератор биений с высокой несущей частотой
Глава 3. Что проку от генератора прямоугольных импульсов? 41 Я подобрал частоты такие, чтобы было понятно, о чем идет речь. Но при реализации этого решения, конечно, несущую частоту следует выбрать либо в диапазоне длинных волн, либо равной промежуточной частоте. Такой генератор вы можете использовать при проверке, настройке или ремонте AM ради- оприемника. Вероятно, за колебательным контуром следует использовать усилитель. Но даже самый простой усилитель, собранный по схеме рис. 3.1, сможет работать до частоты в несколько десятков мегагерц. Проверьте это либо в QucsStudio, либо на макетной плате, если у вас есть подходящий генератор. Я не говорю о цифровых микросхемах, где генератор пря- моугольных импульсов, часто оказывается обязательным эле- ментом схемы. И уж, конечно, будет полезен при наладке или ремонте цифровых устройств.
ГЛАВА 4 СНАЧАЛА МОДЕЛИРОВАНИЕ, ПОТОМ КОНСТРУИРОВАНИЕ II Схема В моей книге «Электроника для любознательных» [15], чтобы показать пример схемы, я использовал схему, опублико- ванную в журнале «Радио» [16,17,18]. Схема могла быть любой, оказалась эта, но меня она сразу заинтересовала необычным подходом к управлению радиоуправляемыми моделями. Я не исключаю, что это не столь необычно, как кажется человеку далекому от темы управления моделями самолетов, кораблей или автомобилей, но я решил, что позже вернусь к этой схеме. Так что же меня заинтересовало? Меня всегда привлекали простые и эффективные решения (рис. 4.1). Рассмотрим работу шифратора. Симметричный мульти- вибратор на транзисторах VT1 и VT2, благодаря переменным резисторам R2 и R4, формирует импульсы регулируемой дли- тельности. Этими импульсами управляется транзистор VT3, задачей которого служит управление усилителем высокой частоты. Собранный на транзисторе VT5, усилитель обслуживает зада- ющий генератор на транзисторе VT4.
Глава 4. Сначала моделирование, потом конструирование 43 1потР. | Шифратор -к- Рис. 4.1. Схема радиоуправления моделями Сигнал с усилителя высокой частоты приходит на усили- тель мощности передатчика, нагрузкой которого будет пере- дающая антенна. Сигнал, отправленный передатчиком, принимается при- емником, схему которого мы, возможно, рассмотрим позже, а сейчас мне хотелось бы рассмотреть все функциональные узлы передающего устройства.
44 Компьютер в лаборатории радиолюбителя Pr1 0,005 0,01 0,015 0,02 0,025 0,03 0,035 0,04 0,045 0,05 Рис. 4.2. Симметричный мультивибратор - основа шифратора i 12- 10 8- 1 of г jr г г г г г 1 1 1 1 1 1 1 1 -г t т "Г "Г "Г "Г 1 — -г ■jr т "Г "Г "Г 1 7 - ■ ■ ■ - — -- -1 1 1 п 1 -\ п /j -| 1 п 1 1 1 1 1 1 ... --у 7 — -- II 1 1 II 1 1 г -■ — г t,c 0 0,005 0,01 0,015 0,02 0,025 0,03 0,035 0,04 0,045 0,05 А Рг1, В 1'" ■i- 7+П ~—t- ] t,c 0 0,005 0,01 0,015 0,02 0,025 0,03 0,035 0,04 0,045 0,05 Рис. 4.3. Изменение формы импульсов при управлении
Глава 4. Сначала моделирование, потом конструирование 45 Шифратор Симметричный мультивибратор устроен не сложно (рис. 4.2). При изменении положения движков резисторов R5 и R6 вы можете наблюдать следующие изменения в форме импульсов (рис. 4.3). При крайних положениях переменных резисторов R5 и R6 частота меняется мало, а скважность импульсов меняется заметно. Высокочастотный | генератор I Моделирование работы схемы генератора в программе, я подозреваю, задача не тривиальная. Я помню время, когда мне не удавалось это сделать в разных программах моделирования. Соберем схему в программе QucsStudio и посмотрим, удастся ли ее «оживить» (рис. 4.4). Я изначально собирался использовать разные программы моделирования, поэтому сейчас хочу повторить моделирова- ния в другой программе (рис. 4.5). Индуктивность L2, которой нет в оригинальной схеме, отражает только тот факт,^что кварцевый резонатор на частоте резонанса носит индуктивный характер, что я, сознаюсь, не знал. Мы все учились понемногу чему-нибудь и как-нибудь... Однажды, прошло много лет, задумавшись над тем, как работает емкостная трехточка, я понял, что не помню этого. Хотя схемы подобных генераторов применяют в радиотехнике очень часто. И очень часто при повторении схемы можно стол- кнуться с тем, что она не хочет работать. Проверить, работает ли схема, даже при наличии осцилло- графа порой затруднительно — многие осциллографы работают до частоты в 10—20 МГц, а современные радиоустройства чаще
46 Компьютер в лаборатории радиолюбителя R3 1100 TR1 T Stop=1 мкс J0,001 Points=10100 РП.В i i i— —i— } I i I if | —i i i 1 1 —i 1 A 1 ' t, с 1 1—*• 1е-7 2е-7 Зе-7 4е-7 5е-7 6е-7 7е-7 8е-7 9е-7 1е-6 Рис. 4.4. Генератор в программе QucsStudio Рис. 4.5. Моделирование схемы генератора в программе SIMetrix (EE-Sim)
Глава 4. Сначала моделирование, потом конструирование 47 ит.кэ используют частоты в 300-900 МГц. 1тл 1 Ясное понимание работы схемы в подобных случаях — самый надеж- ный помощник. Сознаюсь, что я попытался моделировать схему генератора в программе Qucs. He получилось. И не подумайте, что я не пробовал это в MicroCap, Multisim или Proteus. Прекрасные, к слову программы, но дорогие. Не получилось. Пришлось прибегнуть к поиску $ Яндексе. И вот, что я нашел [11]. Нарисуем такую схему (рис. 4.6). Рис. 4.6. Схема для расчета генератора ЧТО ЕСТЬ ЧТО. Если выделенные заливкой элементы 2кэ и 1бэ - емкости, a Zk6 - индуктивность (все эти величи- ны комплексные), то схема называется емкост- ной трехточкой, если наоборот, то индуктивной. Причем, в первом приближении элементы принимаются чисто реактивными: Здесь Хс = l/2nfC, a XL= 2nfL. При определенных условиях, баланса амплитуд и фаз на частоте генерации, в схеме возни- кают колебания: Хбэ + Хкб = -Хкэ. Вот моделирование схемы в программе QucsStudio, где не потребовалось менять источник напряжения на «генератор ступеньки» (рис. 4.7). Сегодня, спустя годы, мне вновь интересно проверить, но уже программы. Попытка получить такой же результат в про- грамме SIMetrix оказалась неудачной. Неудачна она и в ISIS (Proteus). Что ж, у каждой программы свои достоинства.
48 Компьютер в лаборатории радиолюбителя 2 в Stop=4MKC Points=10100 2N2222AJ' :С1 0,0001 -LC2 ■0,0001 t,c 5е-7 1е-6 1,5е-6 2е-6 2,5е-6 Зе-6 3,5е-6 4е-6 Рис. 4.7. Моделирование работы генератора по схеме емкостной трехточки I Манипулятор и усилитель ВЧ Просто и эффективно исходная идея проецируется и на решение проблемы с модуляцией. При моделировании мне пришлось существенно изменить схему, чтобы показать прин- цип действия манипулятора (рис. 4.8). Отчасти это связано с очень разными временами работы генератора несущей частоты и мультивибратора. Но, вместе с тем, может быть свя- зано и с моим недопониманием работы программы. Последнее можно, впрочем, проверить, упростив схему (рис. 4.9). Этот прием полезен не только при моделировании, но и при макетировании. Он позволяет отделить ваше пред- ставление о работе схемы от ее собственного представления о том, что ей следует делать. И еще, в схеме есть особенности, с которыми предстоит познакомиться при сборке макета или готового устройства. Усилитель высокой частоты по структуре похож на усили- тель промежуточной частоты, благодаря колебательному кон- туру в цепи коллектора. Вкупе с усилителем мощности он отве-
Глава 4. Сначала моделирование, потом конструирование 49 -ю TR1 Stop=20 мкс Points=10100 2е-6 4е-6 6е-6 8е-6 1е-5 1,2е-5 1,4е-5 1,6е-5 1,8е-5 2е-5 Рис. 4.8. Моделирование работы манипулятора TR1 Stop=20 мкс Points=10100 V4 UH=10B TH=2 мкс TL=4 мкс 4е-6 8е-6 1.2е-5 1.6е-5 2е-5 Рис. 4.9. Моделирование упрощенной схемы
50 Компьютер в лаборатории радиолюбителя чает за дальность передачи управляющих сигналов. Сегодня проверить работу усилителя можно с помощью осциллографа. ПРИМЕЧАНИЕ. Но есть одна особенность, о которой следует напомнить начинающим радиолюбителям. Щуп осциллографа имеет собственное сопротивле- ние порядка одного мегаома и может иметь ем- кость в несколько десятков пикофарад. В высоко- частотных цепях об этом не следует забывать. Если вы надумаете моделировать работу схемы в про- грамме QucsStudio, то вам понадобится определить индуктив- ность катушки L2. В этом вам поможет инструмент, который вы найдете в основном меню (Tools-+Coil Designer). В диалоге укажите параметры катушки индуктивности, получите значе- ние индуктивности (рис. 4.10). Если вы решите собрать устройство, то лучше о работе схемы, ее настройке и сборке прочитать в статье автора в жур- нале «Радио» [16,17,18], никто лучше автора об этом вам не поведает. Рис. 4.10. Диалог расчета катушек индуктивности
ГЛАВА 5 ПРЕДСТАВЛЕНИЕ ОБ УСИЛИТЕЛЕ МОЩНОСТИ ЗВУКОВОЙ ЧАСТОТЫ Простой оконечный усилитель | звуковой частоты II Усилитель мощности в схеме, рассмотренной в главе 4, относится к усилению радиосигнала, где есть свои особенно- сти. А мы постараемся рассмотреть усилитель мощности звуковой частоты. Заниматься собственной разработкой такого усилителя или собирать такой усилитель есть смысл только в том случае, если у вас есть интерес к схемам усили- телей и их работе. Когда-то сборкой усилителей занимались очень многие радиолюбители. А сегодня проще купить готовую микросхему для применения в своих разработках или купить готовый музыкальный центр. Но знать об особенностях работы усилителей звуковой частоты, мне кажется, полезно. Первые усилители мощности на транзисторах создавались с применением выходного трансформатора. Если говорить об усилении мощности, то любой усилитель можно считать усилителем мощности. Транзисторный каскад с общим эмиттером усиливает сигнал и по току, и по напряже- нию, то есть, усиливает мощность сигнала. У оконечных уси- лителей звуковой частоты проблема заключалась в том, что громкоговорители имели сопротивление звуковой катушки порядка 4—8 Ом.
52 Компьютер в лаборатории радиолюбителя ПРИМЕЧАНИЕ. Если транзисторный каскад усиления нагрузить таким сопротивлением, то результат будет пла- чевным. Поэтому использовали предыдущий опыт создания усилителей на лампах и добавляли вы- ходной трансформатор. Понижающий выходной трансформатор решал проблему согласования вы- ходного сопротивления усилителя и нагрузки. Однако трансформаторы достаточно трудоемкий эле- мент в изготовлении. И, несмотря на то, что трансформаторы были в те дни очень востребованы, достаточно быстро нашли выход из положения, создавая двухтактные выходные каскады. Особенно удобно это получалось с использованием транзисто- ров разного типа проводимости и двухполярного питающего напряжения. Простейшая конструкция, тем не менее, имеет ряд пре- имуществ, но и имеет существенный недостаток. В чем он заключается можно видеть на рис. 5.1. Простота схемы, конечно, потрясающая, но и неприятно- сти сразу бросаются в глаза. Характерный вид искажений воз- никает по причине того, что транзисторы открываются только при напряжении около 0,5—0,7 вольт. В тех случаях, когда искажения не играют роли, а входное напряжение достаточно большое, схема вполне удобна, поскольку обладает высоким коэффициентом полезного действия. Для усилителей мощно- сти, когда на транзисторах рассеивается большая мощность, 5е-4 1е-3 0,0015 0,002 Рис. 5.1. Простейший оконечный каскад
Глава 5. Представление об усилителе мощности звуковой частоты 53 этот фактор может быть решающим. Режим работы оконечного каскада, показанный на рис. 5.1, называют режимом В. Двухтактный усилитель мощности | в режиме АI Традиционно, когда вы настраиваете рабочую точку уси- лительного каскада с общим эмиттером для усиления симме- тричных сигналов, вы выбираете напряжение на коллекторе транзистора равным половине напряжения питания. При этом ток в покое, то есть, в отсутствии сигнала, будет равен поло- вине максимального тока. Их этих соображений настраивается выходной двухтакт- ный каскад для усиления без характерной для режима В сту- пеньки (рис. 5.2). При этом КПД усилительного каскада будет не больше 50%. Половина мощности при каждой полуволне будет «достав- ляться» в нагрузку, а половина рассеиваться в виде тепла на транзисторе. Возникает опасность так разогреть транзистор, что он выйдет из строя. Чтобы этого не случилось, транзисторы устанавливают на радиаторы. ЧТО ЕСТЬ ЧТО. Простейший радиатор - это лист металла та- кой площади, чтобы тепло успевало отводиться от транзистора в окружающее пространство. Для удобства лист металла загибали в виде бук- вы «П». Но было понятно, что если радиатор будет похож не на букву «П», а на букву «Ш», то он займет меньше места, имея ту же площадь. Так появились ребристые радиаторы. Позже появились другие типы радиаторов, например, игольчатые
54 Компьютер в лаборатории радиолюбителя 5" I I Г 5 ■ — ■ ■__—-_ 5е-4 1е-3 0,0015 0,002 Рис. 5.2. Использование режима А в двухтактном усилителе радиаторы, которые при той же поверхности имели еще мень- шие размеры, чем ребристые. Радиаторы для транзисторов рассчитывают, задаваясь допустимой температурой транзисторов, учитывая темпера- туру окружающей среды и параметры передачи температуры от кристалла транзистора радиатору, а от последнего окружа- ющей среде. I Режим работы оконечного двухтактного каскада АВ Этот режим работы транзисторов является промежуточным между В и А. Ток покоя задают таким, чтобы не было появле- ния «ступеньки», но, чтобы он был меньше, чем в режиме А. Сохраняя хорошие показатели в части искажений, такой режим работы имеет лучший КПД, чем режим А. Для усилителей мощности немаловажным фактором явля- ется коэффициент нелинейных искажений. Возьмите тот же усилитель мощности ВЧ (рис. 4.1). С одной стороны жела- тельно иметь высокий КПД, а с другой стороны — нужно при- нимать меры к тому, чтобы на антенну приходили только коле- бания с частотой 27 МГц, не создавались помехи для устройств, работающих на частотах, кратных этой частоте для управляе- мых моделей (рис. 5.3).
Глава 5. Представление об усилителе мощности звуковой частоты 55 L1 0,38 мкГн "С : J_°'c С1 1С2 0,000082 мк I 0,00027 мк X R2 100 к [ас simulation [ АС1 Type=log Start=100i<ru Stop=100Mru Points=19000 Eqn1 Pr1_db=dBm(Pr1.dv) 20 1—rn-mn г-тпттп г~т- -40 гЧ-т-п -60 «-H- i f-Гц 1e7 1e8 Рис. 5.3. Выход усилителя ВЧ (рис. 4.1) для управляемых моделей На частоте задающего генератора нет ослабления сигнала, а за этой частотой спад достаточно эффективный. Так, вторая гармоника 54 МГц спадает почти на 40 дБ. Иными словами, сигнал на этой частоте уменьшается почти в 100 раз. ПРИМЕЧАНИЕ. Для снижения нелинейных искажений в усили- телях звуковой частоты применяют локальные ООС, а весь усилитель охватывают петлей об- щей отрицательной обратной связи. Ламповые усилители в силу их особенностей, не позво- ляли вводить глубокую отрицательную обратную связь. Транзисторные усилители это позволили, что приводило к появлению двух проблем: ♦ при глубокой обратной связи возможна потеря устойчиво- сти, то есть, возникновение генерации на частотах за пре- делами звукового диапазона;
56 Компьютер в лаборатории радиолюбителя ♦ появились искажения, которые придавали усилителю специфическое «транзисторное» звучание. Относительно потери устойчивости можно сказать следую- щее. Если у усилителя три каскада усиления, у него три верхних граничных частоты (по одной на каскад). После первой верхней частоты среза спад частотной харак- теристики 20 дБ/дек. После второй частоты среза спад АЧХ 40 дБ/дек, а после третьей, соответственно, 60 дБ/дек. Если после введения обратной связи АЧХ попадает в область 20 дБ/дек предыдущего графика, то усилитель будет устойчив. Если новый график оказывается в области 40 дБ/дек., то сле- дует определять устойчивость усилителя — есть математиче- ские и практические методики. Рассмотрим популярную в свое время схему усилителя на транзисторах (рис. 5.4). Плавный спад частотной характеристики за верхней гра- ничной частотой позволяет вводить очень глубокую отрица- АС1 Type=log Start=1OI~u Stop=100Mru Points=1900 | equation Eqn1 Pr1_db=dBm(Pr1.dv) 40 i-r Выход, дБ 20 i- 0 -20 - г -i-пт гтгг - - п -п rmi 1- I I I I I ИИ _20-| I_L1LULU__ J_LLULIU__L_I_U1UU.__LJ JJLI1I1 ТГПТШ""Т" I I I I MM I Mill I_LLUHJJ__ f.Tu, 10 100 1e3 1e4 1e5 1e6 1е8 Рис. 5.4. Транзисторный усилитель звуковой частоты
Глава 5. Представление об усилителе мощности звуковой частоты 57 тельную обратную связь. При этом расширяется полоса вос- производимых частот, уменьшаются нелинейные искажения, улучшается соотношение сигнал/шум. При введении глубокой обратной связи следует следить за характером АЧХ. Если на частотной характеристике появляется выброс (рис. 5.5), то следует проверить усилитель на отсут- ствие самовозбуждения. * > Выход, дБ 20--и о..-; -20 —i - т т т rrmr и- пттгг - г т гтт - ~i -nnnir - гг п п т - I I MIIIII I I МИШ I I II Mill I I Illllll I Ml i i мши i i 11inn i i i mm I I I MUM _ JLJJLUUIL.- i i i nun i i iiiiiii I I MIIIII i ii 11inn i 111 I I Mill I I Mlllll I MIIIII I I Illllll I I MIIIII I I I -U1IJLHL -L± JJHUI- J-UUUIL _L1 Mil Hill 10 100 1e3 1e4 1e5 1e6 f,ru 1е7 Рис. 5.5. Амплитудно-частотная характеристика усилителя при глубокой ООС Можно рассчитать выходной каскад. Максимальная мощность при усилении синусоидального сигнала достигается при полном размахе (сумма амплитуд положительной и отри- цательной полуволн) выходного напряжения равном напря- жению питания. Но этому препятствует эффект «насыщения» транзисторов, когда напряжение эмиттер-коллектор полно- стью открытого транзистора не равно нулю. Расчетные формулы (при условии, что напряжение насы- щения для биполярных выходных транзисторов равно 1,5 В): ♦ Vr = Vn /2 — 1,5 = (Vn — 3)/2 — амплитудное значение вы- ходного напряжения. ♦ Vr.eff = (Vn — 3)/2><1,41 — действующее значение для сину- соидального сигнала. ♦ Ir = Vt/Rh — амплитудное значение выходного тока. ♦ Ir.eff = WRhx1,41 — действующее значение для синусои- дального сигнала. ♦ Pr = Vt2/Rh — пиковое значение мощности в нагрузке. ♦ Pr.eff = Vt2/Rhx2 — действующее значение.
58 Компьютер в лаборатории радиолюбителя Для режима А: ♦ Рт = Vr.efP/RH = Vt2/2Rh = VrxIo/2 — мощность, рассеиваемая на транзисторе в отсутствии сигнала, где 1покоя = Vt/Rh определяет рабочую точку. Для режима В: ♦ Рт.тах ~ 0.1Vt2/Rh — максимальная рассеиваемая на тран- зисторе мощность. Здесь Vn — напряжение питания, a Rh — сопротивление нагрузки. ПРИМЕЧАНИЕ. При расчете выходного каскада после определе- ния мощности, рассеиваемой на выходных тран- зисторах, следует определить, обеспечат ли вы- бранные радиаторы отвод тепла. I Моделирование теплоотвода Выходные транзисторы усилителя мощности греются, тем больше, чем больше рассеиваемая на них мощность. Кристалл, основа транзистора, спрятан внутри корпуса, он может оста- ваться работоспособен только до тех пор, пока его температура не превысит некоторого предела. Значение этой температуры можно найти в справочных данных транзисторов. Так, для транзистора КТ602 предельная температура составляет 393 К или 120 °С, что характерно для кремниевых транзисторов.
Глава 5. Представление об усилителе мощности звуковой частоты 59 ПРИМЕЧАНИЕ. Измерить температуру перехода, не ломая тран- зистор, мы не можем. Поэтому для транзисторов, впрочем, как и для других полупроводниковых при- боров, в справочных данных приводят параметр, который связывает температуру корпуса, ее мы можем измерять, и температуру перехода. Очевидно, что температура корпуса ниже температуры перехода, что не следует забывать. Тепловые расчеты и рас- смотрение тепловых процессов удобно проводить с использо- ванием модели, основанной на аналогии между электрической схемой и тепловой. Действительно, тепло, определяемое мощностью рассея- ния, растекается по всем элементам тепловой схемы подобно току, протекающему по электрической цепи. Перепады темпе- ратуры, как разница между температурой перехода и темпе- ратурой корпуса транзистора, подобны падению напряжения. А, значит, мы можем, как в законе Ома, определить тепловое сопротивление, по которому протекает тепловой ток, зная перепад температур. Или, зная тепловое сопротивление, рас- считать перепад температур. Точные расчеты достаточно сложны, хотя можно использо- вать программы для этих расчетов. Конечной целью подобных расчетов будет выбор теплоотвода, если мы знаем мощность, рассеиваемую на полупроводниковом компоненте схемы. Для отвода тепла используются радиаторы. Простейший радиатор — это вертикально установлен- ная на плате металлическая пластина, на которой закреплен, например, транзистор. Выделяемое транзистором тепло расте- кается по пластине, соприкасающейся с воздухом, который при нагреве поднимается вверх, унося с собой тепло и освобождая место для более холодного притекающего к пластине воздуха.
60 Компьютер в лаборатории радиолюбителя ПРИМЕЧАНИЕ. Чем больше поверхность пластины, тем лучше происходит процесс охлаждения. Но не следует забывать, что тепло «растекается» по пла- стине с некоторой скоростью, а, значит, в пластине образу- ется область, где температура выше, чем на краях пластины, и в итоге края могут не достигать температуры этой области, а могут и не принимать участия в процессе охлаждения. ПРИМЕЧАНИЕ. Сделав радиатор очень большим, мы не достиг- нем поставленной цели, но лишь увеличим разме- ры устройства. V У В качестве материала для изготовления радиаторов чаще используют алюминий и его сплавы, реже медь или другие материалы. Для увеличения поверхности контакта с воздухом при сохранении разумных габаритов пластинчатый радиатор складывают, изготавливают из нескольких сложенных пластин или делают его поверхность ребристой и игольчатой. В последнее время часто применяют принудительное охлаждение с помощью вентиляторов. Радиаторы для такого вида охлаждения делают тоже специальным образом, у ребри- стых радиаторов ребра располагаются значительно ближе друг к другу. Если охлаждение происходит при естественном движении воздуха, то в такой конструкции воздух не будет проникать между ребрами теплоотвода, значительно уменьшая его эффективность. На месте стыков (кристалл-корпус, корпус-радиатор, ради- атор-воздух) образуются тепловые сопротивления, которые можно найти в справочной литературе. Но далеко не всегда. Я листаю справочник по транзисторам, хороший справочник, к которому я привык, но не для всех транзисторов нахожу такой важный параметр, как тепловое сопротивление переход-корпус.
Глава 5. Представление об усилителе мощности звуковой частоты 61 СОВЕТ. Для начинающих, как мне кажется, лучше исполь- зовать те рекомендации, которые, как прави- ло, присутствуют в описании схемы усилителя. Хотя, чтобы лучше представлять, как все проис- ходит в действительности, можно использовать программы, можно провести ряд экспериментов. Многие мультиметры позволяют измерять тем- пературу, а, имея в своем распоряжении транзи- стор, радиатор и источник питания, можно про- верить, например, как влияет способ крепления транзистора к радиатору на разницу в темпера- турах корпуса и радиатора. Обычно для транзистора на теплоотводе фрезеруют место установки, которое затем шлифуют для улучшения теплового контакта. С этой же целью применяют специальные пасты, которые наносят на место установки транзистора. Вы можете посмотреть, как влияет на температуру корпуса способ крепле- ния транзистора, начав эксперимент с установки транзистора на не шлифованный участок, продолжив его перемещением в шлифованную область, и закончить опыт нанесением тепло- проводящей пасты на место установки транзистора. Программа Qucs позволяет рассмотреть тепловую модель, если принять, что есть соответствие: ♦ температура эквивалентна напряжению; ♦ теплота (мощность) эквивалентна току; ♦ тепловое сопротивление эквивалентно сопротивлению. Для создания такой модели потребуется знание мощности, рассеиваемой на транзисторе. Примем ее равной 5 Вт. Нужно знать тепловое сопротивление переход-корпус. Для транзи- стора П701 (что нашлось в справочнике) — это 10 К/Вт, а для транзистора П702 — 2,5 К/Вт. Такое же тепловое сопротивление для транзистора КТ802.
62 Компьютер в лаборатории радиолюбителя И еще одно тепловое сопротивление, которое потребуется, это тепловое сопротивление радиатора. Его можно рассчи- тать по приближенной формуле: RT.p.~ 1/dTSp.. ПРИМЕЧАНИЕ. А если принять во внимание, что оно много мень- ше, чем тепловое сопротивление корпус-среда, то оно и определит второй компонент схемы. В формуле <хт = 3 вт/м2хград — коэффициент теплоотдачи радиатора при естественном охлаждении. A Sp — полная площадь поверхности радиатора в метрах квадратных с учетом обеих сто- рон и всех поверхностей ребер, если это ребристый радиатор. Самый простой приближенный расчет: площадь радиа- тора определяется условием, на каждый 1 Вт рассеиваемой мощности должно приходиться 30 см2 поверхности радиатора. Посмотрим, какие температуры мы получим, если для 5 Вт возьмем радиатор 150 см2 (0,015 м2). В этом случае RT.p. = 22 град/Вт. Если принять изменения температуры окружающей среды в диапазоне 10—40 граду- сов, то можно построить тепловую модель по этим данным (рис. 5.6). T_out 10 17,5 25 32,5 40 T_out 10 17,5 25 32,5 40 T_per.,B 132 140 147 155 162 T_rad, В 120 127 135 142 150 Ятранз радиатор ! 22 dc simulation J±V1 " - U=T out 1 DC1 Parameter sweep I SW1 Sim=DCi Param=T_out Type=lin Start=10 Stop=40 Points=5 Рис. 5.6. Тепловая модель
Глава 5. Представление об усилителе мощности звуковой частоты 63 Таким образом, если я ничего не напутал, то при заданной площади радиатора кристалл будет перегреваться. Попробуем увеличить поверхность радиатора вдвое до 300 см2. Новая таблица температур получается следующей (рис. 5.7). Т out 10 17,5 25 32,5 40 Т out 10 17,5 25 32,5 40 Т_рег., В 77,5 85 92,5 100 107 T_rad., В 65 72,5 80 87,5 95 Рис. 5.7. Таблица данных при увеличении площади радиатора Теперь температура радиатора не превосходит 95 граду- сов, а температура перехода 108 градусов. Эта таблица соот- ветствует радиатору-с поверхностью 300 см2. Это получится, если взять алюминиевую пластину толщиной, положим, 2 мм и с размерами 10x15 см, и придать ей «П» образную форму. Меньшие габариты дадут ребристый и игольчатый радиатор. ПРИМЕЧАНИЕ. Таким образом, для расчета теплоотвода сле- дует знать тепловые параметры транзистора и тепловые параметры радиатора. Они сильно влияют на конечный результат, и без их точного учета транзистор можно вывести из строя. Некоторые соображения, | касающиеся УНЧ II Если возникают сомнения в устойчивости усилителя, охва- ченного глубокой отрицательной обратной связью, то можно проверить его устойчивость, например, по критериям запаса по амплитуде и фазе. В этом месте моего повествования произошли два непри- ятных события.
64 Компьютер в лаборатории радиолюбителя Во-первых, программа QucsStudio стала плохо моделиро- вать УНЧ. Конечно, с этим стоило разобраться, но не думаю, что вам было бы интересно читать несколько десятков страниц моих размышлений и стенаний на это счет. Во-вторых, привычка выбрасывать из головы после сдан- ного экзамена все, чем ты пытался удивить преподавателя на экзамене, сыграла со мной злую шутку — я понял, что забыл все, что касается устойчивости усилителя с обратной связью. Пришлось обратиться за помощью к Интернету. ПРИМЕЧАНИЕ. Кстати, про отрицательную обратную связь (ООС) вы можете почитать, например, здесь [6]. Прочитать о программе SIMetrix (EE-Sim) можно в журнале «Радиоежегодник» [14]. Первую проблему я решил заменой QucsStudio на SIMetrix. Обе программы хороши и бесплатны (рис. 5.8). Рис. 5.8. Исследование усилителя звуковой частоты в программе SIMetrix
Глава 5. Представление об усилителе мощноаи звуковой частоты 65 Сборка схемы в этой программе мало отличается от анало- гичных операций в других программах. Есть инструменталь- ная панель с общеупотребительными элементами схем, есть диалог свойств, открывающийся двойным щелчком левой кла- виши мышки. Для проведения соединения достаточно подве- сти курсор мышки к выводу детали. Курсор меняет свой вид, становясь похожим на паяльник. Щелкнуть левой клавишей мышки по выводу и провести соединение к нужной детали, где щелкнуть повторно. Если вы хотите продолжить соединение, больше ничего делать не нужно, проводите его дальше. Если хотите завер- шить соединение, то щелкните правой клавишей мышки или нажмите клавишу Esc на клавиатуре. Источник напряжения в программе универсальный. По умолчанию он появляется в качестве источника постоянного напряжения. Чтобы настроить его на работу в качестве гене- ратора синусоидального напряжения, откройте его свойства (двойной щелчок левой клавишей мышки по источнику), найдите закладку Sine, где и впишите нужные параметры (рис. 5.9). Рис. 5.9. Диалог настройки источника
66 Компьютер в лаборатории радиолюбителя Теперь можно настроить вид анализа, в нашем случае вна- чале анализ переходного процесса. Для этого используйте основное меню: Simulator-* Choose Analysis. В появившемся диалоге на закладке Transient задайте нуж- ные параметры (рис. 5.10). Рис. 5.10. Настройка анализа переходного процесса Задав параметры, можно нажать кнопку Run и выполнить анализ. Появится окно с сообщением об успешном моделирова- нии или неудачной попытке. Для наблюдения за результатами можно поступить по-разному. Можно добавить постоянное наблюдение (пробник) за нужной точкой, а можно использовать «переносной» пробник, который вы найдете в основном меню: Probe —► Voltage. Курсор меняет свой вид, а пробник, в который он превра- тится, позволит вам указать нужную точку. Едва вы это сде- лаете, как появится графическая панель с графиком сигнала (рис. 5.8). Коснувшись другой точки схемы, вы увидите еще один график, если он по своим размерам сопоставим с преды- дущим. Для построения амплитудно-частотной и фазово-частотной характеристик вам следует настроить источник для анализа на
Глава 5. Представление об усилителе мощности звуковой частоты 67 Рис. 5.11. Настройка источника синусоидального сигнала для получения АЧХ переменном токе. В его свойствах выберите закладку АС, где заполните нужные поля требуемыми данными (рис. 5.11). Не забудьте поставить галочку, как отмечено на рис. 5.11. Затем настройте анализ на переменном токе, используя основ- ное меню, а в диалоговом окне на закладке АС задайте требуе- мые параметры анализа (рис. 5.12). Не забудьте снять галочку с анализа переходного процесса и установить ее для анализа на переменном токе, как отмечено на рис. 5.12. И запустите анализ кнопкой Run. Рис. 5.12. Настройка анализа для получения АЧХ и ФЧХ
68 Компьютер в лаборатории радиолюбителя ■ X У ?р '■" fl *U Рис. 5.13. Пробники для получения АЧХ и ФЧХ Теперь вы можете воспользоваться пробниками анализа для получения частотных характеристик (рис. 5.13). Согласитесь, хорошая программа моделирования. Со второй проблемой я не уверен, что справился, но понял это так: если построить графики АЧХ петлевого усиления, уси- ления без ООС в децибелах, построить ФЧХ, то можно опре- делить запас устойчивости усилителя по амплитуде и фазе (рис. 5.14). ШШ ПРИМЕЧАНИЕ. Для работы усилителя без самовозбуждения сле- дует иметь запас по амплитуде не менее 3 деци- бел и запас по фазе не менее 60 градусов. Рис. 5.14. Построения для определения устойчивости усилителя
Глава 5. Представление об усилителе мощности звуковой частоты 69 S parameter simulation SP1 Type=lin Start=1OTu Stop=100Kru Qg Points=1900 470 мк C4 100 мк C2 ТЮОмк ~ Q2N3904 1 Рис. 5.15. Подготовка схемы к моделированию S-параметров Интересный вариант определения стабильности пред- лагает программа QucsStudio. Немного видоизменим схему (рис. S.1S). Запустим моделирование, а на странице диаграмм выбе- рем Cartesian. Добавив прямоугольные координаты на стра- ницу диаграмм, откроем свойства диаграммы. И здесь в строке свойств (рис. 5.16) впишем только одно: rollet(). После этого нажмем кнопку Apply, что перенесет требуе- мый график в окно Graph. Нажмем кнопку ОК, получим диа- грамму (рис. 5.17). Критерий Роллета прост — если кривая не опускается ниже 1, схема устойчива, иначе она имеет область неустойчи- вости. В нашем случае, похоже, это область выше 50 кГц. Вопрос устойчивости усилителя с глубокой обратной свя- зью достаточно важен, поэтому постарайтесь разобраться в нем лучше, чем это сделал я.
70 Компьютер в лаборатории радиолюбителя Рис. 5.16. Задание свойств диаграммы 3.1 г____, , , , , , г г 1е4 2е4 Зе4 4е4 5е4 6е4 7е4 8е4 9е4 1е5 Рис. 5.17. Диаграмма для определения устойчивости по Роллету ПРИМЕЧАНИЕ. С появлением комплементарных пар транзисто- ров, с расширением их номенклатуры усилители старались строить по максимально возможно симметричной схеме. Это было вызвано тем, что при очень глубокой отрицатель- ной обратной связи появлялся эффект запаздывания работы ООС. То есть, входной сигнал мог резко возрастать, а обрат-
Глава 5. Представление об усилителе мощности звуковой частоты 71 ная связь «срабатывала» с запозданием (сигналу нужно было время), что вызвало перегрузку входных каскадов. При симме- тричной схеме УНЧ глубина обратной связи могла быть гораздо меньше при получении нужных параметров. С появлением новых полевых транзисторов их быстро стали использовать в качестве выходных транзисторов УНЧ. ПРИМЕЧАНИЕ. Кроме того, сегодня можно купить микросхемы хороших усилителей, учитывающих все послед- ние наработки в части качества усилителей. Поэтому радиолюбителю следует обратить внимание на другие вопросы, касающиеся созда- ния усилителей звуковой частоты. Вы можете собрать очень качественный усилитель, схемы таких усилителей есть. Но, если ваши громкоговорители среднего качества, вы не получите ожидаемого эффекта. Да, сегодня в продаже есть очень хорошие излучатели, из которых вы можете построить качественную акустическую систему. Однако потребуется не только правильный выбор динами- ков, но и материалов и конструкции для изготовления корпу- сов низкочастотных громкоговорителей. Эти вопросы требуют отдельного обстоятельного разговора, но вам следует учесть, что для проверки качества громкоговорителей вам потребуется либо заглушённая камера, либо понадобится выехать в чистое поле, где хотя бы на слух оценить свою работу, прослушивая качественную запись симфонического оркестра. ПРИМЕЧАНИЕ. И следует понимать, что большинство людей пло- хо различают хорошее и очень хорошее качество звучания. Еще меньше людей отличают очень хо- рошее качество звучания от великолепного.
72 Компьютер в лаборатории радиолюбителя Есть и еще ряд проблем, связанных с особенностями чело- веческого слуха. Так при разных уровнях громкости люди по-разному слышат низкие и высокие частоты относительно средней частоты звукового диапазона. Это следует учитывать при создании регуляторов громкости. И, наконец, следует учи- тывать, что любая запись сделана звукорежиссером. И далеко не факт, что вы слышите то, что задумал композитор. Далеко не то, что слышит дирижер, и ради чего старается оркестр. Повозиться с усилителем звуковой частоты — это и приоб- ретение знаний, и получение опыта, и определение необходи- мого для экспериментов оборудования. Но, если вас интере- сует именно звукоусиление, вам предстоит прочитать не одну книгу, проделать множество экспериментов, чтобы получить что-то заслуживающее внимания. А слушать вам придется, все- таки, в чистом поле, поскольку любое помещение сведет на нет ваши старания. Имейте это в виду.
ГЛАВА 6 ГОТОВИМСЯ С КОМПЬЮТЕРОМ К ПОПОЛНЕНИЮ РАБОЧЕГО МЕСТА Усилитель II для наушников II При измерениях разного рода на переменном токе чувстви- тельности мультиметра, да и простого осциллографа, может не хватать. Поэтому будет совсем неплохо пополнить свою лабо- раторию усилителем. Но начнем с другого решения. Можно использовать наушники для оценки прохожде- ния сигнала. Но наушники имеют небольшое сопротивление, что не позволяет ими пользоваться без усилителя (рис. 6.1). Человеческое ухо инструмент очень чувствительный. Вы, навер- ное, не сможете определить коэффициент усиления, но убе- диться в том, что каскад (или усилитель) усиливает, сможете. Элементы схемы, скажем так, взяты «с потолка». Поэтому вам предстоит проверить работу схемы в программе SIMetrix. Рассчитайте выходной каскад, определите выходную мощ- ность и проверьте устойчивость усилителя. Но главное не в этом — ваш слух слишком ценный инстру- мент, чтобы подвергать его риску.
74 Компьютер в лаборатории радиолюбителя Рис. 6.1. Схема усилителя для испытательных наушников СОВЕТ. Рекомендую последовательно с наушниками вне- сти в схему резистор. При том сопротивлении, что указано на схеме, возьмите резистор, напри- мер, 3 кОм. Зашунтируйте резистор кнопкой без фиксации. Проверьте осторожно при нажатой кнопке, не будет ли звук слишком громким при максимальном входном напряжении и при отсут- ствии заметных на слух искажений. Проверьте, при каком уровне сигнала вы слышите звук при отпущенной кнопке. Подключаясь к испытуемой цепи, проверьте, слышен ли звук при отжатой кнопке. Если так, то не нажимайте кнопку. Берегите свой слух, он вам еще пригодится. Про схему я бы добавил еще несколько слов. Начнем со спецификации. Посмотрим, можно ли сегодня купить транзисторы, обозначенные в схеме. Я собираюсь сде- лать это с помощью сайта интернет-магазина «Чип и Дип».
Глава 6. Готовимся с компьютером к пополнению рабочего места 75 Выходные транзисторы BD135 и BD136 сегодня в продаже есть и стоят около 15 рублей. Уже хорошо. Транзистор 2N2222 тоже есть в наличии, он обойдется рублей в 10—15. Примерно во столько же обойдется пара тран- зисторов ВС556В. Диоды 1N4148 в продаже есть, пара таких диодов обойдется в 8—10 рублей. Конденсаторы и резисторы, надо полагать, можно найти всегда. Но, если бы мы не нашли транзисторов в продаже, то что можно было бы предпринять? Думаю, с выбора отечественных аналогов транзисторов. У меня есть справочник по полупро- водниковым приборам [19]. Справочник не самый новый, но что-то в нем найти можно. Есть поиск в Интернете. Так, для транзистора ВС556В пред- лагаемый аналог КТ3107А. Для транзистора 2N2222 в справоч- нике находится КТ3117А. Для транзисторов BD135 и BD136 оте- чественные аналоги КТ815Б и КТ814Б. Однако перед покупкой транзисторов подумаем, нужны ли нам именно эти модели? Судя по выходным транзисторам уси- литель на схеме, приведенной на рис. 6.1, довольно мощный. Не думаю, что такая мощность нам нужна. Следовательно, мы можем применить транзисторы меньшей мощности. Подобная замена может очень сильно повлиять на работоспособность схемы. Правильность замены можно определить только тогда, когда собранный усилитель будет тщательно проверен. Таким образом, мы откладываем покупку деталей, и начи- наем разбирать схему. Это и есть самое правильное начало работы. Выходной каскад выполнен на комплементарной паре транзисторов. Оба транзистора включены по схеме с общим коллектором (эмиттерный повторитель). В цепи эмиттеров транзисторов включены резисторы R7 и R8. Они ограничивают ток, протекающий через транзисторы. Если, по какой-то при- чине, оба транзистора будут полностью включены, то ток не превысит значение, определяемое их сопротивлением.
76 Компьютер в лаборатории радиолюбителя <kj ПРИМЕЧАНИЕ. Планируя усилитель меньшей мощности, чем ис- ходный, мы должны будем изменить значение этих сопротивлений. Кроме ограничения тока, эти резисторы несколько снижают рассеиваемую на транзисторах мощность, но за счет снижения КПД. На этих резисторах рассеивается тепло, а полезная мощность сигнала уменьшается. Диоды, включенные в базы выходных транзисторов, обе- спечивают переход режима работы выходного каскада из В в АВ, задавая смещение на базы в отсутствии сигнала (в состо- янии покоя). Иногда эти диоды устанавливают на радиаторы транзисторов. При повышении температуры сопротивление диодов уменьшается, снижая ток покоя, то есть, рассеиваемую на транзисторах мощность. Конденсатор С2 называют конденсатором вольтодо- бавки. Его используют для повышения выходного напряжения, поскольку выходные каскады не усиливают сигнал по напря- жению. Транзистор Q3 включен с общим эмиттером, имеет рези- стор R4 последовательной обратной связи. Отрицательная обратная связь улучшает частотные свойства каскада. ПРИМЕЧАНИЕ. Мы помним, что введение глубокой отрицатель- ной связи зависит от верхних рабочих частот всех каскадов усиления, стабилизирует рабочую точку, повышает линейность преобразования входного напряжения в выходное. Но при измене- нии схемы не следует забывать, что и величину этого резистора, возможно, придется изменить.
Глава 6. Готовимся с компьютером к пополнению рабочего места 77 Входной каскад на транзисторах Q1 и Q2 выполнен по дифференциальной схеме. На вход транзистора Q2 через цепь R9R10C1 подается общая отрицательная обратная связь. По постоянному току обратная связь оказывается «стопроцент- ной», в этом случае делитель R9R10, подающий часть выход- ного сигнала на вход, не работает из-за конденсатора С1. По переменному току обратная связь определяется делителем R9R10. Резистор R2, общий для Q1 и Q2, обеспечивает работу диф- ференциального каскада, но сигнал снимается с выхода тран- зистора Q1. После изменений в схеме мы можем проверить работу усилителя с помощью программы симуляции, где мы сможем определить все напряжения, токи и мощность рассеивания на всех элементах. Что даст нам возможность определить, нужно ли применять теплоотвод, рассчитать требуемые рабочие напряжения конденсаторов. СОВЕТ. Если верхняя граничная частота окажется та- кой, как показывает программа моделирования, если вы не намерены использовать усилитель иначе, чем для наушников, то попробуйте вклю- чить между коллектором и базой транзистора Q3 конденсатор емкостью порядка 1 нФ. Для проверки всех параметров усилителя у нас пока нет нужных приборов. Поэтому, повременим с пайкой (и закупкой деталей).
78 Компьютер в лаборатории радиолюбителя I Использование операционного усилителя ПРИМЕЧАНИЕ. Перед тем как выбирать схему, следует опреде- литься с тем, для какой цели нам нужен усили- тель! Пока не поздно, сделаем это. У нас есть генератор, но нет осциллографа (возможно, не у всех). Мы можем проверить про- хождение сигнала с помощью мультиметра. Но измерить мы можем постоянное напряжение, а не напряжение сигнала. От этой беды поможет конденсатор, через который мы подклю- чим мультиметр. А будет ли это сигнал от генератора, или это будет «свист», порождаемый самовозбуждением, об этом муль- тиметр нам не сообщит. Мы оснастили лабораторию наушниками. Они помогут услышать прохождение сигнала по всему усилителю, если мы будем уверены, что услышим сигнал с напряжением 1 мВ. Помочь услышать такой сигнал должен усилитель. Вот для какой цели мы намерены в данный момент собрать усилитель. Регулировать коэффициент усиления операционного уси- лителя просто: мы можем менять нижнее или верхнее плечо делителя цепи отрицательной обратной связи (R2R3 рис. 6.2). Сегодня в магазине огромный выбор операционных усили- телей. Так компания Analog Devices выпускает модели, работа- ющие до частот в несколько сотен мегагерц. Но я не советую вам начинать с таких усилителей. Работа на высоких и сверх- высоких частотах требует определенных навыков, которые вам еще предстоит получить. Для первых экспериментов я предлагаю операционный усилитель, выбранный мною по критерию минимального допустимого напряжения питания. Помимо этого усилитель будет иметь хорошую амплитудно-частотную характеристику, которая позволит вам и в дальнейшем использовать этот изме-
Глава 6. Готовимся с компьютером к пополнению рабочего места 79 Рис. 6.2. Измерительный усилитель на AD8616 рительный усилитель. При резисторах R2 и R3, указанных на рис. 6.2, коэффициент усиления около 10, а верхняя граничная частота около 2 МГц. Входной сигнал можно подать и на неинвертирующий вход, и на инвертирующий вход. В первом случае коэффициент уси- ления: K = R3/R2. Во втором случае коэффициент усиления: K=l+R3/R2. Если оставить в стороне широкую полосу пропускания, то можно использовать операционный усилитель LM358 (рис. 6.3). В одном корпусе два операционных усилителя, которые можно использовать либо с двумя коэффициентами усиления, но разной полосой пропускания, либо включить два последовательно с усилением в десять раз. Паспортная граничная частота для LM358 составляет 1 МГц. При единичном усилении это так. А при усилении равном 10, граничная частота уменьшится в десять раз, став 100 кГц.
80 Компьютер в лаборатории радиолюбителя 1 mrnetrm I мш»и» Рис. 6.3. Усилитель на LM358 с однополярным питанием Теперь задумаемся, как мы намерены применять наш изме- рительный усилитель. Если мы намерены измерять выходное напряжение, скажем, тестируемого усилителя, то с мультиме- тром средней стоимости нам не нужно дополнительное уси- ление. Оно потребуется при измерении входного напряжения, если мы захотим получить коэффициент усиления. Но наш мультиметр обеспечит правильное измерение синусоидаль- ного напряжения с частотой до 400—1000 Гц. В этом случае даже 100 кГц нам не потребуется. С другой стороны, если вы решите построить АЧХ, то для таблицы вам потребуется измерять выходное напряжение на частоте в десятки килогерц. Что пользы от измерительного усилителя, если «мультиметр против»? Вспомним, что в основе работы мультиметра лежит хоро- ший аналого-цифровой преобразователь, измеряющий посто- янное напряжение. При измерении переменного напряжения в нем, скорее всего, используется операционный усилитель с выпрямителем. Но, если мы соберем свой усилитель с выпря- мителем, если мы будем измерять не переменное напряжение, а постоянное?
Глава 6. Готовимся с компьютером к пополнению рабочего места 81 Рис. 6.4. Выпрямитель переменного напряжения Для реализации этого решения можно использовать схему выпрямителя с операционным усилителем (рис 6.4). На выходе этого выпрямителя мы получим полуволны с амплитудным значением входного напряжения. Останется добавить фильтр, чтобы можно было измерять амплитуду мультиметром в режиме измерения постоянного напряжения. Чтобы получить действующее значение переменного напря- жения, можно либо использовать калькулятор, либо на выходе фильтра использовать резисторный делитель. При использова- нии операционного усилителя AD8616 АЧХ выглядит так, как показано на рис. 6.5. ПРИМЕЧАНИЕ. Спад менее четырех децибел до частоты в че- тыре мегагерца - это неплохой результат, если учесть, что входное напряжение десять милли- вольт.
82 Компьютер в лаборатории радиолюбителя Рис. 6.5. АЧХ выпрямителя по схеме рис 6.4 Исходя из вышесказанного, вам следует хорошо подумать до того, как составлять спецификацию и идти в магазин за покупками. Хорошо бы еще раз перепроверить все. Бумага... она все терпит, так ли будет в жизни? I Некоторые соображения и рекомендации по работе с усилителем Повторим некоторые детали работы с усилителем, о кото- рых уже говорили. Наибольший интерес для нас представляла бы сборка и налаживание усилителя по схеме (рис. 6.1). Но для настройки этого усилителя потребуется хотя бы осцилло- граф. Все настройки следует выполнять, подключив на выход усилителя резистор с сопротивлением нагрузки, скажем, 16 или 32 Ом. Нелишне будет добавить к сопротивлению науш- ников и дополнительный резистор. Дело в том, что даже при небольшой мощности усилителя громкость может быть слиш- ком большой.
Глава 6. Готовимся с компьютером к пополнению рабочего места 83 ВНИМАНИЕ. Берегите свой слух. Не используйте наушники со- вместно с усилителями, которые могут оглушить вас. Особенно, если вы заранее не знаете, какой громкости сигнал может попасть на наушники. Используя готовый усилитель для наушников, я бы остано- вил свой выбор на микросхеме TDA7052A, требующей неболь- шого количества деталей. Если добавить на входе резистивный делитель, мы получим все, что хотели получить от усилителя. Проверить работу усилителя можно подключив к нему генера- тор синусоидального сигнала (использовать выход 1 мВ). СОВЕТ. Последовательно с наушниками включите рези- стор, не надевайте наушники, а положите их ря- дом со схемой, подключите батарейку для пита- ния усилителя и аккуратно проверьте наличие и громкость сигнала в наушниках. ч, „ Напряжение на выходе усилителя можно измерить муль- тиметром, переключая его с наибольшего предела измерения напряжения к меньшему. Величина этого напряжения даст вам коэффициент усиления. Для питания усилителя, как и генера- тора, можно использовать батарейку 9 В. При дальнейшей работе с усилителем, если все заработает, начинайте, как и при проверке, с наушников, лежащих рядом с усилителем, пока не убедитесь, что громкость в наушниках не чрезмерная.
84 Компьютер в лаборатории радиолюбителя СОВЕТ. Очень полезно, если громкость позволяет, доба- вить последовательно с наушниками резистор сопротивлением 50-100 Ом, а параллельно на- ушникам включить два диода, например, 1N4001 встречно, если напряжение на наушниках при до- статочной громкости не превышает 0,5 В. Не следует увлекаться большой громкостью в наушниках — она ничем вам не поможет. Для подключения к испытуемым схемам элегантнее было бы использовать щупы, но мне кажется, что лучше использо- вать два монтажных провода. Эти провода вы будете под- паивать каждый раз, когда захотите проверить прохождение сигнала. Не элегантно. Зато, припаивая провода, вы лучше освоите искусство пайки, очень полезное умение, и у вас будет время обдумать все детали предстоящего эксперимента. Спешка, столь характерная для желания поскорее увидеть результаты работы, во-первых, лишает вас удовольствия от самого про- цесса, во-вторых, всегда будет причиной ошибок. Да и умение обдумывать свои планы и действия не менее полезно, чем уме- ние паять. СОВЕТ. Если при измерении вы пользуетесь мульти- метром, который включается и выключается отдельной кнопкой, то не забывайте перед вы- ключением переключать его в режим измерения максимального напряжения. Это поможет вам сохранить прибор: очень часто, оставляя прибор в режиме измерения тока, после подключения к источнику большого напряжения, вы вынуждены . ремонтировать его.
Глава 6. Готовимся с компьютером к пополнению рабочего места 85 А использовать мультиметр при настройке вам обязательно понадобится. Начинать любую настройку следует с проверки напряжения питания и напряжений на транзисторах, если они есть в схеме. Для сборки усилителя можно использовать кусочек мон- тажной платы. Нарисуйте схему монтажа, расположив детали удобным образом. Обращайте внимание на правильность определения выводов транзисторов! Напомню, что корпуса транзисторов могут быть одинаковы, а выводы расположены по-разному. Обратите внимание на ключ микросхемы, напомню, что надпись может быть перевернута, и на нее нельзя ориентиро- ваться. Проверьте правильность подключения диодов и элек- тролитических конденсаторов. У некоторых моделей диодов их анод и катод могут быть перевернуты относительно меток, правильное определение выводов проверьте по справочнику. У электролитических кон- денсаторов, выпускаемых в последнее время, маркируется минус. Старые конденсаторы могли маркироваться разной длиной выводов и метками в виде плюса и минуса. СОВЕТ В усилителях с большим коэффициентом усиле- ния входные и выходные цепи следует разносить на максимальное (разумное) расстояние при мон- таже. Это поможет избавиться от случайных монтажных обрат- ных связей, которые снижают устойчивость работы усилителя. ^Раньше каскады высокой частоты часто монтировали в отдель- ных, хорошо экранированных отсеках. Экраны применяют и сегодня. Причины те же — паразитные связи.
86 Компьютер в лаборатории радиолюбителя ПРИМЕЧАНИЕ. И еще, если вы используете усилитель и блок питания с трансформатором, не забывайте, что трансформатор может наводить помехи. Услышав лишние шумы, проверьте, нет ли рядом с входными цепями чего-то, что будет источни- ком помех. Проверьте правильность монтажной схемы, и можно начи- нать монтаж. После включения питающего напряжения про- верьте, не греются ли транзисторы или резисторы. Проверьте напряжение на электролитических конденсаторах, соответ- ствует ли оно допустимому напряжению. СОВЕТ. Включая смонтированное устройство первый раз, постарайтесь не наклоняться над монтаж- ной платой. При неправильном включении или ошибках монтажа некоторые детали могут взрываться. Так ведут себя не только электро- литические конденсаторы, но, например, и микро- схемы, и варисторы. I Простые правила работы с готовым устройством Не забывайте, что усилитель, о котором идет речь, мы намерены использовать в качестве прибора. Поэтому рабо- тать с ним следует так же, как и с другими приборами. Как при использовании мультиметра следует начинать измерения с верхних пределов, постепенно повышая чувствительность,
Глава 6. Готовимся с компьютером к пополнению рабочего места 87 так и усилитель следует до начала измерений переключать на самую низкую чувствительность. Проверку прохождения сигнала в устройстве следует начинать с входной цепи. С места подключения генератора. Убедитесь, что сигнал генератора есть, и он не искажен. Иначе вы можете долго возиться с настройками схемы, перегрузив, скажем, выход генератора. Постепенно продвигаясь к выходу усилителя, убедитесь в наличии сигнала и отсутствии слыши- мых искажений (если речь идет об усилителе звука). Человеческое ухо различает нелинейные искажения порядка нескольких процентов. Искажения проявляются в виде призвуков, хрипов, искажений чистого тона. Конечно, с такими простыми приборами вы не соберете усилитель класса Hi-End. Вместе с тем, повторюсь, не следует переоценивать значение этого термина. Дело в том, что боль- шинство людей не способны в принципе отличить звуково- спроизводящую систему сверхвысокого качества от просто качественной. Для усиления звука не менее важным оказываются такие компоненты, как громкоговоритель и помещение прослушива- ния. Без специального помещения вы, скорее всего, не сможете реализовать все преимущества Дорогостоящего оборудования, на реализацию которого потратите много времени и сил. А конечный результат — ваше удовлетворение от прослу- шивания. Поэтому, начиная создание, придумывая или выби- рая схему, убедитесь, что вы пытаетесь создать не химеру, а реальное устройство. СОВЕТ. Проверяя и налаживая его, старайтесь привести устройство к тем параметрам, которые опреде- лили на этапе подготовки к созданию, даже если вы сможете, как вам кажется, улучшить эти па- раметры.
88 Компьютер в лаборатории радиолюбителя Получив улучшение параметров, вы можете приобрести вместе с ними такие непредсказуемые свойства, как повышен- ную температурную чувствительность, склонность к самовоз- буждению или чувствительность к наводкам. Пусть параметры будут несколько хуже, чем у других усилителей, но вы будете уверены, что эти параметры сохранятся при любых условиях эксплуатации. |Еще раз о компьютерных программах Многие недолюбливают компьютерные программы в качестве инструмента для обучения начинающих радиолюбителей. Я не из их числа. Если вы только начинаете работать с электрическими устройствами, очень важно приобретать полезные привычки. Привычки довольно скоро приобретают характер автома- тизма. Привыкнув к небрежности в начале своей работы, вы позже не найдете времени избавиться от привычки, хотя она обойдется вам в избыток ошибок, в раздражающие вас неу- дачи, в ставящие в тупик несуразности. При профессиональной подготовке, например, при прове- дении лабораторных работ, от вас потребуют внимательности, преподаватель может запретить вам включать установку без его проверки, заставит вас все перепроверить, даже если вы все сделали правильно. Это не потому, что он такой противный, он хочет выработать у вас автоматизм, который поможет вам впоследствии. Когда вы работаете самостоятельно, вам следует быть одно- временно и преподавателем (противным), и учеником. Очень может помочь в приобретении навыков измерений при пер- вых шагах весьма интересная и полезная программа, которая называется Yenka. Единственный ее недостаток, вернее два, это то, что программа использует не только меню, но и все под- сказки на английском языке; и для бесплатного использования вам нужно подключение к Интернету.
Глава 6. Готовимся с компьютером к пополнению рабочего места 89 Программа | Yenka II Скачивание и установка программы ничем не отличаются от операций с другими программами. После первого запуска вам потребуется получить лицензию на домашнее использова- ние программы, указав свой адрес электронной почты. Скачать программу можно по адресу [7]. Получив лицензию, вы можете запускать программу, но при этом будете получать сообщение (рис. 6.6). Рис. 6.6. Запуск программы Yenka Подтвердив, что вы дома, вы можете выбрать один из делов этой обучающей программы (рис. 6.7). Сейчас нас не интересует ни математика, ни компьютерная тематика. Остановим выбор на разделе электроники, и посмо- Рис. 6.7. Диалоговое окно выбора темы программы Yenka
90 Компьютер в лаборатории радиолюбителя Yenka Рис. 6.8. Меню раздела электроники Рис. 6.9. Анимированная схема генератора на таймере 555
Глава 6. Готовимся с компьютером к пополнению рабочего места 91 трим (рис. 6.8), что интересного можно найти сразу, не обра- щаясь к пункту «Getting Started, приступая к работе». Прошло много лет с тех пор, когда я в последний раз поль- зовался программой для рассказа о ней. Сегодня пришлось обновить ее. К слову, программа частично переведена на рус- ский язык, в чем вы можете убедиться, если выберете русский язык на сайте Crocodile Circle. Вот одна из анимированных схем (рис. 6.9). Вам она ничего не напоминает? Программа, конечно, для самых начинающих, с этим я согласен, но и сам готов с ней «повозиться». Впрочем, к ней мы вернемся позже, а сейчас я хочу рассказать о другой про- грамме. К моему сожалению, я обнаружил ее совсем недавно. Тем не менее, программа от этого не проиграла, проиграл я. Программа | «Начала электроники» I Насколько я понимаю, есть две версии программы «Начала электроники»: ♦ портативная, которую можно держать на «флэшке»; ♦ версия, требующая установки на компьютер. Я не очень люблю пользоваться внешними носителями, поэтому даже портативные версии держу на компьютере, но это дело вкуса и личных предпочтений. И я очень жалею, что не знал о программе раньше, хотя ее первая версия, как говорят, появилась давно. Установка программы происходит обычным образом, как мы устанавливаем все программы, то есть, нажимаем кнопку Дальше, не вчитываясь в пояснения, иногда ищем, где поста- вить галочку, что мы согласны с соглашением о лицензии, если без этого кнопка Дальше не оживает. Однажды, бывает и такое, я решил ознакомиться с согла- шением, предлагаемым Microsoft. Очень увлекательное чте- ние, кому делать нечего — написано юристами для юристов,
92 Компьютер в лаборатории радиолюбителя написано из расчета того, что пользователь до конца дей- ствия лицензии будет изучать этот документ в надежде что-то понять. Словом... В данном случае после установки программы, ее, как и любую другую, можно запустить и начать что-то делать, но лучше обратиться к руководству, нажав кнопку на инструмен- тальной панели (рис, 6.10). Рис. 6.10. Кнопка на панели для запуска руководства И есть еще одна кнопка, которую я хочу использовать. Называется она «Лабораторные работы» (рис. 6.11). Рис. 6.11. Кнопка вызова лабораторных работ Не буду переписывать эти работы, но хочу повторить одну из них, используя программу и макетную плату. Бесспорно, далее должен следовать заголовок лаборатор- ной работы номер один. Но кто же утерпит, кто же не попро- бует что-то сделать в программе. Я не исключение. При первом взгляде немного смущает фон программы, на котором не сразу разглядишь рабочую панель. И еще одно — про- грамма у меня на компьютере с Windows 10 закрывает весь экран, включая основную панель операционной системы, поэтому воз- можность свернуть программу совсем не лишняя (рис. 6.12). Рис. 6.12. Кнопка сворачивания окна программы «Начала электроники»
Глава 6. Готовимся с компьютером к пополнению рабочего места 93 Перетаскивая детали с правой инструментальной панели, обратите внимание на то, что положение детали зависит от близости к монтажным точкам: ♦ две горизонтальные точки заставляют деталь принимать горизонтальное положение; ♦ ве вертикальные точки заставляют деталь перестроиться, чтобы занять вертикальное положение. Если вам потребуется изменить положение, можно просто перенести деталь, она повернется и займет новые монтаж- ные контакты. Однако некоторые детали позволяют их пере- вернуть, если щелкнуть по детали правой клавишей мышки (рис. 6.13). %Сщ?~ ~ Рис. 6.13. Поворот детали Полагаю, что это предназначено для «полярных» элемен- тов схемы. А для, например, выключателя появится команда «Включить». Есть еще одна кнопка, о которой следует сказать. Это кнопка отображения параметров деталей, без которой нельзя, наверное, изменить величину сопротивления или параметры других компонентов (рис. 6.14). И, пока не забыл, при наведении курсора на кнопки появ- ляется подсказка об их назначении. На панели свойств можно Рис. 6.14. Кнопка отображения параметров деталей
94 Компьютер в лаборатории радиолюбителя изменить все параметры, которые там указаны, а щелчок левой клавиши мышки, когда курсор указывает на другую деталь, переключит панель на параметры этой детали. I Лабораторная работа Суть этой работы сводится к изучению зависимости сопротивления реальных проводников от их геометрических параметров и удельного сопротивления материала. Порядок работы: предлагается собрать на монтажной панели предложенную схему и перейти к определению ряда параметров, описанных формулами, которые приводятся в оригинале лабораторной работы. Итак. Нам нужен проводник, обладающий сопротивлением (хотя они все им обладают) и имеющим хорошо измеряемое значение. Для этого перемещаем курсор мышки на инструмен- тальную панель. Курсор меняет свой вид, превращаясь в пинцет. Выбираем иконку с резистором, как его изображают на схе- мах в ряде стран. Нажимаем левую клавишу мышки, поверх иконки появля- ется изображение элемента, который будет установлен на мон- тажную плату. Не отпуская клавиши мышки, перемещаем курсор мышки (теперь он имеет вид детали) в нужное место, располагая его так, как нам удобнее, где и отпускаем клавишу мышки. Не забудем на основной инструментальной панели вклю- чить кнопку отображения параметров элементов. Аналогично выбираем батарейку, пиктограмма которой эту батарейку и изображает. Батарейку переворачиваем, исполь- зуя правую клавишу мышки. И добавляем простые перемычки, чтобы завершить картину. Пока наша лабораторная работа выглядит следующим образом (рис. 6.15). Далее в тексте описания лабораторной работы написано, что следует провести измерения напряжения и тока. Но для
Глава 6. Готовимся с компьютером к пополнению рабочего места 95 Рис. 6.15. Вид подготовленной к роботе платы Рис. 6.16. Кнопка инструментальной панели для добавления мультиметров этого нужны измерительные приборы. Вот, где их можно найти (рис. 6.16). Мультиметров потребуется два, то есть, кнопку следует нажать дважды. Один мультиметр будет измерять напряжение, второй нужен для измерения тока. Вид мультиметра, можете это проверить, ничем не отлича- ется от вида реального прибора. Но возле гнезд, куда в физи- ческом варианте мультиметра включаются щупы, возле этих гнезд есть еще что-то... Это и есть щупы. Как и с деталями, переместив курсор к щупу, нажмите и удержите левую клавишу мышки, переме- стите щуп в нужное место и отпустите клавишу. Когда курсор расположен над щупом, он приобретает вид руки, при переме- щении он выглядит, как и обычный курсор, а в том месте, где вы отпустили клавишу, появится щуп с номером мультиметра. В данном случае подразумевается, что первый мультиметр (№1) будет измерять напряжение, а второй (№2) ток (рис. 6.17). Эти виртуальные мультиметры, представьте себе, равно как и реальные, требуют правильного включения. Если вы поместите курсор мышки на шкалу выбора режима и предела измерения при переключателе, то курсор приобретет вид руки. Поместите курсор на нужный предел и режим измерения, щел-
96 Компьютер в лаборатории радиолюбителя кните по нему, и переключатель повернется, заняв нужное положение. Если для мультиметра №1, измеряющего постоянное напряжение, не вызывает сомнений предел измерения — падение напряжения, скорее всего, не превысит 2В, то с муль- тиметром №2 далеко не все ясно. Я, например, не могу ска- зать, какое будет сопротивление у медного проводника длиной 10 метров при заданном сечении. Поэтому переключатель вто- рого мультиметра лучше установить на 10 А. И это типичный пример — если вы не знаете, какое будет измеряемое напря- жение, выйирайтр пррдрл ШППВ; не знаете, какой будет ток, выбирайте предел 10 А. Как только вы установите переключатель первого мульти- метра на предел 2 В постоянного напряжения, вы увидите, что на дисплее появилось значение 0. И это правильно — цепь пока разомкнута, ток не протекает, падения напряжения нет. Но, задав 10 А для второго мультиметра, вы получите замкнутую цепь. Рис. 6.17. Проведение эксперимента ВНИМАНИЕ. Если бы вы не включили второй мультиметр на предел 10 А, то, скорее всего, вывели бы мульти- метр из cm роя. Для возвращения прибора к жизни потребовалась бы только замена предохраните- ля, который установлен внутри мультиметра, но не уверен, что вы держите большой запас предо- хранителей у себя в столе.
Глава 6. Готовимся с компьютером к пополнению рабочего места 97 Если вы намереваетесь провести реальный эксперимент, если у вас нет опыта работы с электрическими цепями, то измените схему эксперимента, добавив выключатель. После сборки схемы и включения приборов проверьте еще раз правильность соединений и правильность выбора пределов измерения. Только после этого включайте питающее напря- жение. Такая практика никогда не будет лишней, позволяя вам избежать многих неприятностей, порой, поджидающих в самых неожиданных местах.
ГЛАВА 7 КИРПИЧИКИ ПРОГРАММ МОДЕЛИРОВАНИЯ II Резистор В прошлом веке радиолюбители аккуратно мотали катушки индуктивности и из подручных средств создавали детекторы. Их наградой была едва слышная радиопередача. Позже радио- любители придумывали, как лучше использовать лампы. И были несказанно рады появлению транзисторов. Сегодня радиолюбитель чаще интересуется, какие сигналы и на какие выводы нужно подавать, чтобы все заработадо-как- надо. Прогресс в изготовлении полупроводниковых прибо- ров «упаковал» все прежние изыскания в корпуса микросхем, которые похожи друг на друга, как близнецы. Вспомните, часто ли вы задумываетесь о резисторах или конденсаторах, если исключить ситуацию, когда нужного резистора нет под рукой? Сопротивление проводника зависит от материала, из кото- рого он сделан, от его длины и площади поперечного сече- ния. Этому была посвящена лабораторная работа, описанная в главе 6. Если у вас есть набор резисторов, то посмотрите, сколько номиналов резисторов в наборе. А зачем? Начнем с самого простого ответа на этот вопрос. Изготовив для своей лаборатории генератор, вы захотите иметь разные
Глава 7. Кирпичики программ моделирования 99 значения напряжения на его выходе. Один сигнал, например, с напряжением в один милливольт вам нужен для проверки усилителя, другой нужен для цифровой схемы с напряжением пять вольт. Генератор формирует прямоугольные импульсы или синусоидальное напряжение, имеющее одно значение на его выходе. Следовательно... Резисторный делитель очень часто применяется на прак- тике. И он входит не только в состав измерительных приборов. Потенциометр или переменное сопротивление — это регу- лятор громкости многих устройств. Во всяком случае, раньше. А потенциометр — это резисторный делитель напряжения, где оба резистора меняют свое значение. Кстати, вспомним, что у генератора на микросхеме тай- мера 555 для получения разных частот можно использовать потенциометр. Но уже не в качестве делителя напряжения, а как переменное сопротивление, которое совместно с конден- сатором образуют времязадающую электрическую цепь. Эта конструкция имеет параметр, который называют постоянной времени, что зависит от величины сопротивления и емкости. Включая резистор последовательно со светодиодом, вы задаете ток через полупроводниковый прибор. Если свето- диод включен в цепь питания, то величина сопротивления для индикатора определится питающим напряжением. Такой резистор часто называют токоограничительным. Он же рабо- тает совместно со стабилитроном. При выборе рабочей точки транзистора вы рассчитыва- ете нужное значение сопротивления в его цепи базы. Какое «насчитаете», такое и потребуется. Резисторы довольно часто используют в простых -фильтрах. Такие фильтры оказываются достаточно ком- пактными, а в сочетании с активными элементами, транзисто- рами или операционными усилителями, и достаточно эффек- тивными. Сопротивление спирали электронагревателя довольно велико благодаря материалу, из которого это сопротивление сделано. А велико оно для того, чтобы хорошо грелось. В элек- троплитках и обогревателях сопротивление используют для
100 Компьютер в лаборатории радиолюбителя получения тепла. А в осветительной лампочке спираль нагре- вается так сильно, что светится. Я не уверен, что вспомнил все ипостаси резистора, но добавлю еще терморезисторы, где чувствительность резистора к температуре используется для получения данных о темпера- туре, а в ряде случаев для регулировки параметров при изме- нении температуры. Есть еще тензодатчики, где изменение сопротивления обязано растяжению или сжатию. Есть фото- резисторы, сопротивление которых зависит от освещенности. Конденсатор Две пластины из металла, между которыми тонкий изо- лятор, образуют конденсатор. Емкость конденсатора зависит от расстояния между пластинами, свойств диэлектрика и пло- щади пластин. Конденсатор имеет свойство заряжаться. Кроме того, он имеет свойство проводить переменный ток и не про- водить постоянный ток. Последнее часто использовалось в усилителях для связи двух каскадов усиления. Конденсатор называли разделитель- ным, и он помогал соединить два каскада без влияния на рабо- чую точку транзисторов (или ламп до этого). При достаточной емкости разделительного конденсатора он не влиял на ниж- нюю частоту полосы пропускания. Не берусь судить, но, возможно, одно из первых применений конденсатор нашел в выпрямителях. Его свойство заряжаться, на что требуется время, и разряжаться, что позволяет его рас- сматривать в качестве источника питания, позволяло выпрям- ленное переменное напряжение превратить в такое, которое мало отличалось от напряжения батарейки или аккумулятора. А его использование в колебательном контуре любого радиоприемника?! Без конденсатора тут не обошлось. В сущ- ности, колебательный контур — это фильтр, выбирающий одну частоту из многих других. А в качестве элемента филь-
Глава 7. Кирпичики программ моделирования 101 тра конденсатор использовался долго, думаю, и по сей день используется. Он работает и в RC-фильтрах, и в LC-фильтрах. Изменение емкости конденсатора под воздействием внеш- них факторов используется в датчиках. Если одна из пластин конденсатора подвижна, а вторая нет, то эту конструкцию используют в датчиках давления, одним из примеров которого служит конденсаторный микрофон. Сегодня разновидность конденсаторного микрофона, электретный микрофон, широко применяется, например, в телефонах. Мало подверженный внешним наводкам, имеющий хорошие параметры, такой микрофон вы можете использовать в качестве измеритель- ного микрофона. Присмотритесь к характеристикам недорогих электретных микрофонов. О времязадающих цепях мы говорили, и многие тактовые генераторы их используют. Простота схемы и компактность RC-цепи, большой выбор номиналов этих деталей — привле- кательны во многих случаях. Не знаю, как сегодня, но было время, когда изменение емкости конденсатора широко использовали в качестве детек- тора охранных систем. Забор из сетки, имеющей заданную емкость относительно земли, реагировал на появление чело- века или животного около забора: менялась емкость участка забора относительно земли. Здесь, конечно, использовался не столько конденсатор, сколько емкость. Индуктивность Фильтры. Колебательный контур. Об этом мы говорили, но первое, что приходит в голову — это трансформатор. Две катушки индуктивности, намотанные одна поверх другой, сер- дечник, облегчающий жизнь магнитному полю, и эффект вза- имоиндукции — вот суть трансформатора. Долгое время в электронике использовали повышающие трансформаторы, поскольку электронные лампы требовали
102 Компьютер в лаборатории радиолюбителя большого напряжения питания. Хотя и тогда нить накала питали от понижающей обмотки трансформатора. Будет трансформатор повышающим или понижающим — все зависит от количества витков. Поскольку от него зависит индуктивность катушки индуктивности. Которая зависит еще от диаметра намотки и материала сердечника, если он есть. Позже наибольшее распространение получили понижаю- щие трансформаторы, поскольку транзисторные схемы тре- бовали более низкого напряжения питания. Но долгое время повышающие трансформаторы использовали в телевизорах, где высокое напряжение нужно было кинескопу. Впрочем, я выглядываю из окна, и вижу трансформаторную подстанцию во дворе. Она простоит еще долго с понижающим трансфор- матором. Современные блоки питания чаще всего созданы либо без трансформаторов, либо с трансформаторами, работающими на частотах больше промышленной частоты в пятьдесят герц. Часто в блоках питания и адаптерах используют преобразова- тели постоянного напряжения в постоянное, но другой вели- чины, где активно используется индуктивность. Ламповые звуковые усилители мощности имели два транс- форматора, входной и выходной. Первые транзисторные уси- лители имели такую же конфигурацию. А в радиоприемниках и телевизорах такая разновидность трансформатора, как индук- тивно связанные катушки, использовались до недавнего вре- мени в каскадах усиления промежуточной частоты. Возможно, используются и по сей день. Свойство катушки индуктивности реагировать на магнит- ное поле используется в генераторах напряжения электростан- ции, используется в моторах, но используется и в датчиках. Во всех случаях работает индуктивность. Электродинамический микрофон или громкоговоритель — это тоже постоянное место работы индуктивности.
Глава 7. Кирпичики программ моделирования 103 Диод Он был первым полупроводниковым прибором, который стал теснить электронные лампы. Выпрямитель, детектор, варикап, стабилитрон, светодиод, фотодиод. Что я забыл упо- мянуть? Я не слишком об этом задумывался раньше, но диоды работали и в цифровой технике в качестве базовых элементов. Вот пример двух базовых элементов (рис. 7.1). Рис. 7.1. Элементы «ИЛИ» и «И» Транзистор Везде, где нужен активный элемент схемы, можно найти транзистор. Но он же в ряде случаев и там, где можно исполь- зовать диод. Так фототранзистор более чувствителен, чем фотодиод. Если добавить к предыдущим схемам транзистор, они будут иметь инверсный выход (рис. 7.2). Реальные цифровые микросхемы сегодня устроены иначе, но это не меняет сути вопроса — во всех устройствах работает
104 Компьютер в лаборатории радиолюбителя 10k 1 Qi : - \ cpH'?792 R4 : a - - •* — Puc. 7.2. Схема инвертора транзистор. А о применении цифровых микросхем мы погово- рим в следующей главе. I Разновидности анализа электрических схем в программах моделирования Практически для любой программы моделирования обяза- тельными видами анализа будут: анализ на постоянном токе, анализ на переменном токе, анализ переходных процессов. И обязательным будет графическое отображение результатов анализа. Анализ на постоянном токе дает возможность определить рабочую точку транзистора и увидеть все напряжения в схеме при отсутствии сигналов (рис. 7.3). Проверка токов и напряжений в любом электронном устройстве важный этап проверки. А анализ на переменном токе позволяет увидеть амплитудно-частотную и фазочастот- ную характеристики, что важно при создании не только филь- тров, но и усилителей (рис. 7.4).
Глава 7. Кирпичики программ моделирования 105 Рис. 7.3. Анализ схемы на постоянном токе ■ ттеАш / f «ш Рис. 7.4. Фазочастотная и амплитудно-частотная характеристики электрической схемы
106 Компьютер в лаборатории радиолюбителя Рис. 7.5. Осциллограммы электрической схемы при включении питания Но чаще всего вы будете, видимо, пользоваться анализом переходных процессов. Это не что иное, как наблюдение сигна- лов на экране осциллографа (рис. 7.5). А сигналы — это основ- ные жители любого электронного устройства. Меняя параметры схемы, меняя элементы схемы можно яснее осознать их влияние на работу устройства, при этом в программе моделирования вы не рискуете остаться без послед- ней в вашем запаснике микросхемы или транзистора. Склад в программе моделирования безграничен.
ГЛАВА 8 ЦИФРОВЫЕ МИКРОСХЕМЫ Таймер Цифровые микросхемы создавались с тем, чтобы на их основе собирать вычислительные машины и периферийные устройства для этих вычислителей. Но не думаю, что радиолюбители активно собйралй№га5слительньге машины, что не мешало им использо- вать цифровые микросхемы в своей практике. Вспоминая те времена, я помню только повальное увлече- ние сборкой часов. Мне не довелось долгое время работать с цифровой техникой, хотя с представителями этой разновид- ности электроники работать приходилось. Поэтому в памяти остались только интересные идеи, происхождение которых я не помню, но попробую воспроизвести эти идеи с помощью цифровых микросхем. Было время, когда таймер использовался при фотопечати. А кто из нас не увлекался тогда фотографированием? Схем тай- меров для фотопечати было множество, но таймеры, исполь- зующие цифровые микросхемы, строились, как правило, на счетчиках (рис. 8Л). Сегодня таймер есть в микроволновой печи, в электро- плите, в телевизоре. Как составная часть схемы таймер может использоваться в разных устройствах. На рис. 8.1 задающий генератор U4 работает на частоте 1 МГц, но посмотрим на осциллограмму (рис. 8.2).
108 Компьютер в лаборатории радиолюбителя Рис. 8.1. Основа часов и таймеров - цифровые счетчики Рис. 8.2. Осциллограмма схемы рис. 8.1 Верхний график отображает сигнал на выходе Q3 счетчика U2, а время наблюдения полсекунды. До вывода Q13 счет дой- дет еще не скоро. Хороший таймер можно собрать, используя микросхему 555, для того она и создавалась. Но с цифровыми микросхе- мами использовались семисегментные индикаторы, а счет- чики имели режим предустановки и возможность обратного
Глава 8. Цифровые микросхемы 109 отсчета. То есть, вы могли задать нужное время, отображае- мое на индикаторах, запустить таймер и видеть результат его работы. В этом, конечно, с цифровыми таймерами было трудно соперничать. Измеритель емкости | и индуктивности I Идея этого измерителя была в том, что на конденсатор и индуктивность подаются импульсы треугольной формы. В зависимости от емкости, например, на выходе формируются импульсы прямоугольной формы, амплитуда которых зависит от емкости. Схему я не помню, но интересно было бы прове- рить саму идею (рис. 8.3). В свойствах генератора прямоугольных импульсов VI я задаю параметры, которые превращают его в генератор треу- гольных импульсов. Задавая емкость конденсатора С1 равной 10 нФ и 5 нФ, я получаю такие осциллограммы (рис. 8.4). Рис. 8.3. Схема эксперимента с конденсатором
110 Компьютер в лаборатории радиолюбителя Рис. 8.4. Осциллограммы опыта с конденсатором Амплитуда импульсов на резисторе R1 впрямь изменилась вдвое при изменении вдвое емкости конденсатора. Если изме- нить схему, как показано на рис. 8.5, то можно провести испы- тания индуктивности. Изменяя индуктивность вдвое (5 и 10 миллигенри), мы получим осциллограммы, очень похожие на предыдущие (рис. 8.6). И амплитуда, похоже, тоже меняется вдвое. ! тмтпж . Рис. 8.5. Испытание схемы измерения индуктивности
Глава 8. Цифровые микросхемы 111 Рис. 8.6. Осциллограммы опытов с индуктивностью Проведите ряд экспериментов в программе SIMetrix с изменением частоты, емкости и индуктивности. Результаты, видимо, будут зависеть от частоты импульсов. То есть, ее нужно будет подобрать для разных диапазонов емкости и индуктив- ности. В оригинальной схеме, я думаю, использовался такто- вый генератор на цифровых вентилях и счетчики для получе- ния разных частот. Но амплитуду можно увидеть на осциллографе, а как быть, если его нет? Проведем еще один опыт с измерением емкости, исполь- зуя выпрямитель (рис. 6.4). Если выпрямленное напряжение будет постоянным, то мы сможем его измерить мультиметром (рис. 8.7). Изменяя значения емкости конденсатора С1, как мы делали это раньше (5 нанофарад и 10 нанофарад), получим такие осциллограммы (рис. 8.8). Осциллограммы сняты на конденсаторе С2 и результат не столь плох. Вы можете провести эксперименты, используя тре- угольное напряжение (или близкое к нему по форме), которое дает генератор на таймере 555. Конечно, если ваш мультиметр позволяет вам измерять емкость, вам такой измеритель не нужен. Но, согласитесь, прекрасная идея! И я не знаю мульти- метра, который позволяет измерять индуктивность!
112 Компьютер в лаборатории радиолюбителя Рис. 8.7. Измерение емкости на постоянном напряжении Рис. 8.8. Осциллограммы выпрямленного напряжения
Глава 8. Цифровые микросхемы 113 Генератор | для пошаговой проверки II Еще одна простая, но полезная, чем и очень мне понрави- лась, идея вспомнилась мне в связи с проверкой и наладкой цифровых устройств. Почти все они имеют тактовый генера- тор, а с помощью осциллографа можно отыскать неисправ- ность. Но этот тогда, когда осциллограф есть. При отсутствии осциллографа может быть полезен гене- ратор, который формирует какое-то количество импульсов. С помощью такого генератора вы переводите цифровую схему в новый режим, в котором можете проверить состояние выходов с помощью мультиметра. Схема формирователя простая (рис. 8.9). Генератор U2 — это задающий генератор, осциллограмма его работы на верхнем графике. U3 — это одновибратор, то есть, гене- ратор одиночного импульса. Если его длительность равна 3 микро- секундам при тактовой частоте 1 микросекунда, то на выходе вы получите три импульса, как показано на нижней диаграмме. Рис. 8.9. Формирователь импульсов от тактового генератора и одновибратора
114 Компьютер в лаборатории радиолюбителя Out Thrash PulsetO 5*0 50On SCM)n Muj ! '"'"' : / ft»i*i,iJ • Рис. Л10. Формирователь импульса на таймере 555 Рис. 8.11. Диаграммы формирования одиночного импульса
Глава 8. Цифровые микросхемы 115 Увеличив длительность одиночного импульса, вы получите другое количество импульсов на выходе. Третья диаграмма показывает пять импульсов на выходе, когда длительность одиночного импульса выбрана 5 микросекунд. В качестве формирователя одиночного импульса с регу- лируемой длительностью вы можете использовать таймер 555 (рис. 8.10), но можете собрать и другой формирователь импульса. В реальном устройстве генератор одиночного импульса V2 и инвертор U2 будет заменен резистором и кнопкой. В итоге должны получиться такие импульсы (рис. 8.11). Верхняя диаграмма — это сформированный импульс дли- тельностью 200 мкс, а на нижней диаграмме импульс, который должна сформировать кнопка запуска таймера 555. Генератор для проверки радиоприемника | с амплитудной модуляцией I Предыдущую схему рис. 8.9 легко превратить в удоб- ный генератор для проверки радиоприемника. Для звуко- вого импульса можно использовать генератор на таймере 555 (рис. 2.1). А в качестве генератора несущей частоты можно использовать генератор на цифровых микросхемах (рис. 8.12). Генератор VI — это генератор звуковой частоты, скажем, частотой 1 кГц. А на вентилях U1 и U2 собран генератор несу- щей частоты. Частота задается значениями резистора R1 и кон- денсатора С1. Ее следует выбрать такой, чтобы она попадала в диапазон проверяемого радиоприемника. В результате будут получены пачки импульсов (рис. 8.13). Выход генератора (выход U2) можно через конденсатор небольшой емкости подключить к входному колебательному контуру радиоприемника. Но можно попробовать подключить к выходу генератора кусок провода, и положить его рядом с антенной приемника. При настройке на частоту несущей гене- ратора приемник должен издавать звук с частотой низкоча- стотного генератора.
116 Компьютер в лаборатории радиолюбителя / тттмм Рис. 8.12. Генератор для проверки радиоприемника Рис. 8.13. Сигнал на выходе вентиля U2
Глава 8. Цифровые микросхемы 117 Пульт II дистанционного управления II Если в предыдущем генераторе выбрать частоту несущей около 36 кГц, если к выходу генератора подключить инфра- красный светодиод (через транзистор), то его легко превратить в пульт дистанционного управления каким-то своим устрой- ством (рис. 8.14). Рис 8.14. База для создания пульта управления Излучающий светодиод для пульта управления следует выби- рать из соображений его «дальнобойности». При этом следует учесть, что можно «умощнить» импульсы с одновременным их укорачиванием, уменьшая значение резистора R3 с помощью шунтирующего резистор R3 конденсатора. В качестве генератора кода пульта можно использовать простую кнопку, получив самый простой пульт. Если собрать приемник так, чтобы он реагировал только на длительные пачки импульсов, порядка одной-двух секунд, то он не будет реагировать на другие пульты управления. Можно использовать в качестве генератора VI такой, как показано на рис. 8.9, то есть, генератор заданного количества импульсов. Исполняющее устройство, использующее микро-
118 Компьютер в лаборатории радиолюбителя схему ИК-приемника TSOP1736, может отсчитывать количе- ство импульсов с помощью счетчика и включать или выклю- чать что-то. Угадай-ка! Это последнее, что приходит мне на память, что где-то было опубликовано, но я, увы, уже не помню, где и кем. Идея тоже проста и эффективна, что достойно восхищения. В приве- денном виде получаем игрушку для детей. Необходимо угадать двузначное число из четырех цифр от 1 до 4. Возьмем два D-триггера и соберем такую схему (рис. 8.15). При включении питания на входы сброса (RST) приходит импульс, сформированный цепочкой R4C1 и инвертором U3. Оба триггера переходят в состояние, когда на выходах Q низ- кий уровень (логический нуль). Рис. 8.15. Игровое устройство
Глава 8. Цифровые микросхемы 119 VI—V4 на схеме — это кнопки, соединяющие входы так- тирования с плюсом питающего напряжения. Когда нажата первая «правильная» цифра VI, то на выход первого триг- гера переписывается единица. Вторая «правильная» кнопка V2 перепишет эту единицу на выход второго триггера, что зажжет светодиод D1. При любой «неправильной» кнопке V3 или V4 пройдет сигнал сброса и можно начинать угадывать сначала. Я не уверен, что правильно все нарисовал, проверьте! Можно усложнить задачу, если добавить блокировку на некоторое время. Это можно сделать, если «неправильные кнопки» будут запускать, например, одновибратор на таймере 555 (рис. 8.10). Задав время задержки в несколько секунд, вы не позволите простым перебором выиграть игру. Задачу можно упростить, если оставить одну кнопку. И, если придумать случайное переключение «правильных» и «неправильных» кнопок, то игра станет еще интереснее. А для случайного переключения... Генератор псевдослучайных чисел | на сдвиговом регистре II Когда-то я использовал подобную схему (рис. 8.16). Сдвиговый регистр 4094 с помощью микросхемы исключа- ющего ИЛИ формирует псевдослучайную последовательность чисел на выходах Q0-Q7 (рис. 8.17). Если теперь использовать управляемые ключи для подклю- чения кнопок (рис. 8.18), то можно получить то, что мы соби- рались — одна из кнопок случайным образом будет «правиль- ной», подключенной к плюсу питания. Кнопки будут подключены к выводам 1—4. При случайном формировании сигналов на выводах Q0 и Q1 будет выбираться один из ключей НС4052 (рис. 8.18), подавая на одну из кнопок питающее напряжение. При этом остальные кнопки будут под- ключены к земле (рис. 8.19).
120 Компьютер в лаборатории радиолюбителя Рис. 8.16. Генератор псевдослучайных чисел Рис. 8.17. Формируемые на выходах U1 сигналы
Глава 8. Цифровые микросхемы 121 Рис. 8.18. Формирователь для кнопок Рис. 8.19. Формирование случайного выбора кнопок На рис. 8.19 видно, что в любой момент времени только одна из кнопок 1—4 имеет высокий уровень. Подав сигнал от такой «правильной» кнопки на триггер, мы заставим его пере- ключить выход в высокое состояние. Добавим кнопку сброса, которая будет сбрасывать триггер после угаданной кнопки, а попутно эта кнопка будет переключать регистр, формируя
122 Компьютер в лаборатории радиолюбителя Рис. 8.20. Схема игры «Угадай-ка» новый адрес, то есть, подключая следующую случайную «пра- вильную» кнопку (рис. 8.20). К выходу триггера (VOUT) подключается, конечно, свето- диод. Но подумайте, что можно изменить в схеме или добавить в схему, чтобы не использовать кнопку сброса. Подумайте, как можно «правильной» кнопкой запустить процесс ожидания в 2—3 секунды, после чего подать импульс сброса и переключе- ния адреса другой кнопки. А в качестве подсказки пусть будет рис 8.1.
ГЛАВА 9 ПРОГРАММА, ОСЦИЛЛОГРАФ И РАДИОПРИЕМНИК Давно это было, но появление транзисторов радиолюби- тели отметили созданием многочисленных устройств, в част- ности транзисторных приемников. В основном это были при- емники прямого усиления, но кое-кто отваживался собирать супергетеродинные схемы. Я сомневаюсь, что в те времена у радиолюбителей были осциллографы, и уж точно не было программ моделирования. Вспоминая те годы, я решил отыскать старенький промышлен- ный радиоприемник и посмотреть, чем могла бы помочь про- грамма моделирования при сборке радиоприемника-суперге- теродина, и насколько осциллограф подтвердит увиденное в программе. Схему радиоприемника я, конечно, не нашел, но отыскал на одном из сайтов (рис. 9.1). В моем прошлом понимании работы радиоприемника все было просто — покрутить ручку, чтобы найти радиостанцию. Все. Это сегодня я понимаю, что ручка связана либо с конденса- тором переменной емкости, либо с переменной индуктивно- стью, либо с регулятором напряжения, меняющим напряжение на варикапе. Да, сегодня я понимаю, что конденсатор переме- ной емкости перестраивает входной LC-контур, настраивая его на определенную частоту (рис. 9.2).
124 Компьютер в лаборатории радиолюбителя Рис. 9.1. Сайт-музей отечественной радиотехники 5е-4 1е-3 0,0015 0,002 Рис. 9.2. Моделирование входного контура радиоприемника Радиоприемник принимает радиостанции с амплитудной модуляцией. При моделировании я использовал источник сиг- нала с AM. Колебательный контур L1C1 имеет определенную резо- нансную частоту. Ее можно рассчитать, а можно воспользо- ваться построением АЧХ, чтобы определить эту частоту. Или
Глава 9. Программа, осциллограф и радиоприемник 125 определить, какой должна быть индуктивность катушки, если мы используем реальный воздушный конденсатор перемен- ной емкости с максимальным значением в 200 пФ, а собира- емся слушать радиостанцию, работающую, скажем, на частоте 100 кГц (рис. 9.3). АРМ, В ас simulation АС1 Type=log Start=1 кГц Stop=1 МГц Points=19000 1еЗ 1е4 С1 1 мГн у 0,002 Рис. 9.3. Амплитудно-частотная характеристика LC-контура Сигнал, выделенный входным колебательным контуром приемника, очень маленький. Поэтому контур через катушку связи (для уменьшения влияния входного сопротивления на контур) подключают к усилителю высокой частоты. В радио- приемнике, построенном по супергетеродинной схеме, часто входной усилитель играет роль и усилителя входного сигнала, и смесителя. Гетеродин, вспомогательный генератор, перестраивается вторым блоком конденсатора переменной емкости так, чтобы в результате сложения входной несущей частоты радиостан- ции с частотой гетеродина получилась промежуточная частота. Пусть это будет 500 кГц. Смешивание двух частот происходит из-за нелинейных свойств транзистора. При обычном усилении сигнала нелиней- ность преобразования — помеха. Но для супергетеродинного приемника она друг (рис. 9.4). В том, что, благодаря нелинейным свойствам транзистора, на выходе появляется суммарная и разностная частота, мы убедились. Но, благодаря транзистору или нет? Уберем транзистор из схемы, посмотрим, что получится без него (рис. 9.5). Еще более убедительным выглядит результат, если исполь- зовать быстрое преобразование Фурье. Следуя рекомендациям
126 Компьютер в лаборатории радиолюбителя АРМ, В hbfrequency: 2,5e+06 Pr1.dVb:0,359/75,1e hbfrequency: 5e+05 Pri.dVb: 0,664/45,7° Harmonic balance simulation 1R2 И к V1J± 5ВТ- сз 0,001 R4 100 к а 0.5-—А+^Чь V2 |- freq=1 МГц R3I 100 2,1е6 2,6е6 Рис. 9.4. Работа гетеродина для получения промежуточной частоты I Harmonic balance |] [simulation hbfrequency: 1,5е+06 Pri.dVb: 0,432/30,4е 1,1е6 1,6е6 2,1е6 2,6е6 hbfrequency: 1e+06 Pri.dVb: 0,376/41,3е 0,4 <-- 0,2- Рис. 9.5. Два генератора, работающие на активную нагрузку профессора Gunthard Kraus [4], выполним моделирование переходного процесса (рис. 9.6). На диаграмме видны частоты 500 кГц, 1 МГц, 1,5 МГц и 2,5 МГц. Чтобы получить этот результат, после выполнения моделирования, после выбора прямоугольных координат (Cartesian) в диалоговом окне графики следует выполнить сле- дующее (рис. 9.7): ♦ записать встроенную функцию преобразования для вы- ходного сигнала времени в частоту; ♦ записать пределы отображения частоты; ♦ записать пределы отображения амплитуды.
Глава 9. Программа, осциллограф и радиоприемник 127 transient simulation TR1 R1 Stop=40 mkc 3qq к Points=262144 C1 0,001 i >спектр 1 0,8 0,6 0,4 0,2 0 5e5 1e6 1,5e6 2e6 2,5e6 Зеб Рис. 9.6. Диаграмма разложения выходного сигнала в ряд Фурье -f ;-J.inww.ii'icf^«:. Puc. 9.7. Оформление преобразования Фурье
128 Компьютер в лаборатории радиолюбителя ПРИМЕЧАНИЕ. Правда, при этих преобразованиях мой компью- тер подвисал надолго, несмотря на все его четы- ре ядра в процессоре. Мне кажется, что показаны достаточно убедительные экс- перименты. В живом радиоприемнике наблюдать сигналы удобно с помощью генератора биений (рис. 3.6), если, конечно, у вас нет генератора сигналов с амплитудной модуляцией. Катушку генераторов сигналов можно расположить рядом с катушкой приемника на магнитной антенне, а осциллограф подключить к удобной точке на плате (рис. 9.8). Не совсем похоже на то, что показывает генератор биений. И есть ли несущая частота? Изменяя настройки осциллографа, можно увидеть и несу- щую частоту (рис. 9.9). Больше похож на сигнал генератора биений сигнал про- межуточной частоты при частоте генератора импульсов 1 кГц (рис. 9.10). Рис. 9.8. Наблюдение сигнала на экране осциллографа
Глава 9. Программа, осциллограф и радиоприемник 129 Рис. 9.9. Несущая частота генератора биений 1 in ' «Si ......я $ ш 111 III: Рис. 9.10. Сигнал генератора биений в тракте усиления промежуточной частоты
130 Компьютер в лаборатории радиолюбителя Использование промежуточной частоты, одинаковой для всех радиостанций, на которые настроен радиоприемник, позволило применить вместо широкополосного усилителя усилитель одной частоты. Это существенно эффективнее. А усиление сигнала нужно, в первую очередь, для того, чтобы обеспечить нормальную работу детектора, выделяю- щего информационный сигнал. Почти все диоды открываются при падении напряжения на них не менее 0,5 В. Выделенный детектором низкочастотный сигнал попадает в усилитель низкой частоты, усиливающий его до нужного напряжения и мощности, чтобы работал громкоговоритель. Жаль, что в те времена ни программ моделирования, ни осцил- лографа у среднестатистического радиолюбителя не было.
ГЛАВА 10 ПОЧЕМУ ПРОГРАММЫ МОДЕЛИРОВАНИЯ? Впрямь, II почему и зачем? II Многие бывалые радиолюбители уверены в том, что доста- точно паяльника, припоя и канифоли. Схем электронных устройств великое множество и в Интернете, и в журналах, и в книгах. Выбирай, паяй, пользуйся. Когда-то давно мне понадобился интерпретатор (тогда это был только интерпретатор) языка Бейсик для отечествен- ного домашнего компьютера. Найдя шестнадцатеричный код в одном из журналов, я честно переписал его, переписал без ошибок. Но так и не получил работающей среды программи- рования на Бейсике. Пришлось выискивать ошибки, которых оказалось довольно много. И только после исправления оши- бок, интерпретатор заработал. Позже я обратился к схемам в книгах и Интернете, где тоже обнаруживались ошибки. Так бывает, сам грешу этим, отыски- ваю свои ошибки, краснею и исправляю. В главе 5 приведен пример усилителя мощности низкой частоты, теряющего устойчивость при глубокой обратной связи. Ошибка ли это схемы? Отнюдь, я уверен, что схему много
132 Компьютер в лаборатории радиолюбителя раз повторяли, и она успешно работала. Причина, по которой усилитель теряет устойчивость, может оказаться банальна — раньше старые транзисторы корректировали частотные свой- ства усилителя, имея низкие граничные частоты. Достать их сегодня трудно, а новые транзисторы требуют продуманного подхода к усилителю. I Схема из Интернета В Интернете схемы редко «рождаются», скорее всего, не буду этого утверждать, их копируют из книг и журналов. Но так ли это важно? Начну с того, о чем пойдет речь ниже: схема тонкомпен- сированного регулятора громкости. Зачем нужен подобный регулятор? Дело в том, что человеческое ухо по-разному воспринимает разные частоты звукового диапазона в зависимости от громко- сти звука. Проводя эксперименты в этой области, специалисты создали графики, которые называют кривыми равной громко- сти. Эти графики я взял из рисунков Яндекса, не буду наста- ивать на их абсолютной точности, но это в данном случае не важно. Важно, что кривые показывают, каким уровнем должен обладать звук на разных частотах, чтобы обычный человек вос- принимал их звуками одинаковой громкости (рис. 10.1). Без такой компенсации любители музыки, как пра- вило, включают музыкальный центр на полную громкость. Достаточно давно в музыкальные центры встраивают эква- лайзеры, позволяющие перестраивать АЧХ усилителя, что называется «по вкусу». Но ранее применяли более простое решение — использование тонкомпенсированных регуля- торов громкости. Обычно их выполняли на потенциометрах с дополнительными отводами. Но достать такие потенциоме- тры было сложно, поэтому радиолюбители создавали схемы, использующие обычные регуляторы громкости.
Глава 10. Почему программы моделирования? 133 1L ГР°МКОСТЬ. АБ Кривые равной громкости 100 1000 10000 Рис. 10.1. Кривые равной громкости Просматривая разные схемы в Интернете, я выбрал схему такого регулятора по той причине, что наткнулся на ошибку в тексте, описывающем регулятор. Схему регулятора громко- сти я приведу сразу в программе OucsStudio, где потенциометр впоследствии заменят два последовательно включенные рези- сторы R1 и R2 (рис. 10.2). В описании схемы было написано, что конденсатор С1 неполярный, но его Можно заменить двумя электролитиче- скими конденсаторами К50-6 20 мкФ (на схеме 1 мкФ!), соеди- ненными последовательно и встречно. Данные катушек индук- тивности L1 и L2 в описании не приводились, но вот, что было в нем сказано. ас simulation АС1 Type=log Start=10ru Points=19 Рис. 10.2. Схема регулятора громкости с компенсацией тембра
134 Компьютер в лаборатории радиолюбителя ИЗ ОПИСАНИЯ. Необходимый при уменьшении громкости подъ- ем АЧХ на низших и высших частотах создается последовательными колебательными контурами L1C1 и L2C2, настроенными соответственно на частоты 30 и 18 000 Гц. Катушки L1 и L2 намо- таны на ферритовых кольцевых сердечниках ти- поразмера М2000НМ-А-К17,5X8,2X5. Первая из них содержит 2000 витков провода ПЭЛ - 0,08, вторая - 200 витков провода ПЭЛ - 0,27. Поскольку речь идет о резонансных контурах, емкость кон- денсатора очень важна. Простота и остроумное решение схемы заставили меня сделать попытку разобраться с опечаткой. Начнем с того, что попробуем рассчитать индуктивность по намоточным данным. На ферритовом кольце 2000НМ 17,5x8x5 проводом ПЭЛ 0.08 наматывается 2000 витков. Формула для расчета индуктивности: L = (цдх8сха)2)/(7,8х104х/ср) Здесь сечение и длина даны в сантиметрах (сечение в ква- дратных, естественно), а ю — количество витков. Индуктивность при этом получается равной 6 Гн. Порядок величины похож. Хотя мне казалось, что получить такую большую индуктив- ность достаточно трудно. Видимо, сказывается малый опыт работы с индуктивностями. Изменим схему, чтобы определить низкую резонансную частоту (рис. 10.3). Это явно не 30 Гц. И вы можете проверить, что конденсатор 10 мкФ больше подходит для этой цели. Поскольку мы занялись проверкой резонансных частот, проверим и верхнюю частоту, считая, что индуктивность катушки L2 в 100 раз меньше (рис. 10.4). И в этом случае частота не 18 кГц, но можно уменьшить емкость конденсатора до 1,3 нФ, чтобы получить желаемую резонансную частоту.
Глава 10. Почему программы моделирования? 135 ас simulation АС1 Type=log Start=10ru ' Stop=100Kru Points=1900 V1 U=1B Рис. 10.3. Определение низкой резонансной частоты ас simulation АС1 Type=log Start=10ru Stop=100Kru Points=1900 U=1BV C1 0,01 мк L1 60мГн ,Pr1,B ■ -n nmir -птпиг "гп mm - г nnrni 10 100 1еЗ 1е4 1е5 Рис. 10.4. Проверка второго последовательного колебательного контура Осталось проверить, что мы получаем в результате этих экспериментов (рис. 10.5). Можно сравнить полученный результат с кривыми рав- ной громкости, можно повторить моделирование при других значениях резисторов R1 и R2, то есть, других положениях регулятора громкости, и настроить схему, что называется «по вкусу».
136 Компьютер в лаборатории радиолюбителя ас simulation АС1 Type=log Start=1Ofu Stop=100Kru Points= 19000 * > выход, дБ 8-- | equation Eqn1 Output=dBm (Pr1 .dV) гтгпгмг-т-птгтт I I I I Mill 100 1e3 1e4 1e5 Рис. 10.5. Итоговая проверка регулятора громкости с тонкомпенсацией Схема из книги другого издательства В одной из книг известного издательства можно было встретить такую схему (рис. 10-6). Схема как схема, я не обратил бы на нее внимание, если бы не странное назначение цепочки R2R5. Явная опечатка, под- черкнутая ярко выраженными точками соединения проводов VD2 КД522Б Рис. 10.6. Схема из книги другого издательства
Глава 10. Почему программы моделирования? 137 Pr1,B 1e-3 0,002 0,003 0,004 TR1 Stop=4 мс Points=10100 J+V2 ®UH=5 В jFTH=100mkc 4r TL=900 мкс 6- 4- 2- 0- РгЗ, В i i i п .... я.-- - |[ . „1„_. If —i— t,r —► 1е-3 0,002 0,003 0,004 Рис. 10.7. Триггер но двух транзисторах, переключаемый импульсами в других местах схемы. Явно резисторы R2 и R5 должны соеди- няться с базой транзистора VT1. В описании сказано, что в основе работы схемы триггер на двух транзисторах. Видимо, это VT2 и VT3. И вновь, цепочка R7R9 вызывает недоумение. Рассмотрим схему триггера на транзисторах, нарисованную привычным образом (рис. 10.7). Короткие импульсы, приходящие на конденсаторы С1 и С2, переключают триггер из одного устойчивого состояния в дру- гое, что видно на графиках справа (рис. 10.7). Тот факт, что нарисованная обычным образом схема триг- гера работает, заставляет думать, что и в случае с цепочкой R7R9 пропущено соединение с коллектором VT2. Моделирование симметричного триггера на транзисторах интересно само по себе. Дело в том, что триггер симметричен, а моделирование строится на расчетах. При идеальных элемен-
138 Компьютер в лаборатории радиолюбителя TR1 Stop=4 мс Points=10100 з- 2- 1 С 1" 0,5- U" i РП.Е r__ I ) 1e-3 Pr2, В r-- ... i —i— — — j- 0,002 Г" .._ —h- _ _ j —i 1 1 0,003 0,C 1 _ _ . 1 04 i i V О 1е-3 0,002 0,003 0,004 Рис. 10.8. Триггер в устойчивом состоянии после включения питания тах схемы триггер не должен переходить в устойчивое состо- яние при включении питания, когда одно плечо включено, а другое выключено (рис. 10.8). Почему же на рис. 10.8 правый транзистор полностью включен, а левый выключен? Заменим транзисторы 2N2222A идеальными транзисто- рами (рис. 10.9). Pr1 i 2- 1.5- 1- 0,5- о- L Рг1 В ~т i i i i ' i ч— Г-- 1 1 1 1 1 1 ' 1 —1— 1-- 1 1 1 1 1 1 1 —ь- 1 1 1 1 1 1 1 It, с TR1 Stop=4 мс Points=10100 2 1,5 1 0,5 0 0 1е-3 0,002 0,003 0,004 Рг2,В г т 1 1 t.C н ь* 1е-3 0,002 0,003 0,004 Рис. 10.9. Моделирование схемы триггера с идеальными транзисторами
Глава 10. Почему программы моделирования? 139 Когда транзисторы идеальные, начальное переключение не происходит. Только реальные транзисторы из-за разброса их параметров позволяют схеме перейти в нужное состояние. Формированием импульса переключения триггера занима- ется усилитель на транзисторе VT1. Чтобы избежать фоновых шумов, используют фильтр R4C1 (рис. 10.6). Можно проверить его АЧХ, чтобы убедиться в правильности выбора элементов схемы (рис. 10.10). АС1 Type=log Start=100ru Stop=1 МГц Points=1900 | equation Eqn1 output=dBm(Pr1.dV) LUU l_J_LLUUl.__i_lJJaHH L.LL1U1U 1e3 1e4 1e5 1e6 Рис. 10.10. АЧХ усилителя, моделирование И, наконец, можно проверить реакцию усилителя на рез- кий звук. Вернув значение резистора R2 к величине, указан- ной в оригинале схемы, проведем моделирование. Источником резкого звука пусть будет генератор одиночного импульса (рис. 10.11). Триггер, похоже, переключается задним фронтом импульса, который здесь выражен не очень явно. Можно попы- таться решить это, а можно перейти к натурным испытаниям. Устройство (рис. 10.6) предназначено для включения света с помощью реле К1 при хлопке в ладоши. Если устройство зара-
140 Компьютер в лаборатории радиолюбителя V3 U1=0B 112=1 В Т1=0 Т2=1 мс 4- m 2- 0- Pr1, В —**^. 1 1 '*■*>■. I— i | i —h- i i i i "•> i | • 1 1 1 1 i i i i i H 1 Ь- i [ 1 — ! • i { i ! -4- i i i i i ! • —1 1 t с 1—^ 0 0,002 0,004 0,006 0,008 0,01 Puc. 10.11. Формирование импульса переключения ботает, если у вас есть дети, то включение новогодней елки при хлопке в ладоши: «Елочка зажгись!», - доставит им огромное удовольствие. Но мне хотелось сказать, что бездумное повторение схем, может не доставить радости ни вам, ни вашим детям. Лучше потратить немного времени за компьютером, чем долго воз- иться с готовым устройством. Даже простым выключателем света. Похожая проблема со светом, впрочем, была у меня, решить которую я пытался иначе.
ГЛАВА 11 КОМПЬЮТЕР- ЛУЧШИЙ ДРУГ МИКРОКОНТРОЛЛЕРА Графический II язык программирования II Количество серий цифровых микросхем, а особенно коли- чество микросхем в каждой серии могут вызывать вопрос: «А зачем они?». Но не следует забывать, что в основу микропро- цессоров легли все наработки при создании вычислительных машин из цифровых микросхем. Разобрать работу микропроцессора на макетной плате, вероятно, было бы интереснее, чем микроконтроллера, но я не думаю, что сегодня много радиолюбителей, которые исполь- зуют микропроцессоры. Скорее всего, их внимание привле- кают микроконтроллеры. Однако заглянуть внутрь микроконтроллера с помощью осциллографа не получится. Он укрыт за портами ввода- вывода, как за каменной стеной. И только среды разработки программ для микроконтроллеров позволяют «заглянуть внутрь». Любая среда разработки программ для микроконтроллеров позволяет использовать и ассемблер, и языки высокого уровня. Любая среда разработки имеет средства отладки написанного кода. В главе 6 мы познакомились с программой Yenka. Среди примеров есть пример работы микроконтроллера (рис. 11.1).
142 Компьютер в лаборатории радиолюбителя Рис. 11.1. Работа обогревателя в примерах Уепка Привел я этот пример для того, чтобы рассказать немного о микроконтроллере, используя программу FlowCode 7. Срок пробного использования этой версии у меня истекает, поэтому я и хочу начать с этой среды разработки. Повторим программу от Yenka, используя микроконтроллер PIC16F628A и среду разработки FlowCode. Пока мы не будем использовать термометр, заменив его тремя кнопками. ПРИМЕЧАНИЕ. Первая кнопка должна отображать падение тем- пературы ниже 20 градусов, вторая - темпера- туру между 20 и 100 градусами, а третья кноп- ка «покажет» температуру выше 100 градусов (рис. 11.2). Запустив программу, произведя все настройки и собрав программу, ее можно запустить на формирование hex-кода.
Глава 11. Компьютер - лучший друг микроконтроллера 143 Рис. 11.2. Программа обогревателя в FlowCode 7 Проверить работу программы можно в отладчике FlowCode, но завтра программа перестанет работать в полнофункци- ональном режиме, поэтому для проверки я использую про- грамму ISIS (Proteus), которая останется у меня и завтра (рис. 11.3). Отладка программы — это не менее важный про- цесс, чем настройка и отладка электронного устройства. ^&&<g?Z.?j&S&%~ui.-323&S ~f*^z£&^_^ Рис. 11.3. Проверка работы программы
144 Компьютер в лаборатории радиолюбителя 10 чем речь дальше... Я бы уподобил графический язык программирования изо- бражению электрической схемы электронного устройства. Графическое изображение программы используется довольно давно в профессиональной среде. А использование этой гра- фики для получения готовой программы, с моей точки зрения, реализовалось не так давно. Я знаю несколько программ для микроконтроллеров, использующих графический язык программирования. Одна из программ — это FlowCode. Все типовые языковые конструк- ции представлены в виде графических элементов, из которых складывается программа любой сложности. Среда разработки FlowCode имеет встроенный отладчик и позволяет загрузить собранную программу в микросхему. Я ранее рассказывал о программе FlowCode, у меня остались рисунки, иллюстрирую- щие работу программы. Вот один из рисунков (рис. 11.4). Подобно тому, что сложные цифровые микросхемы можно представить в виде набора базовых элементов, программу для микроконтроллера можно составить из базовых компонентов: Рис. 11.4. Элементы программы FlowCode и панель отладки
Глава 11. Компьютер - лучший друг микроконтроллера 145 ввод, вывод, ветвление, циклы и т. д. Если графическую схему программы уподобить электрической схеме, то написание кода программы я бы представил пайкой компонентов электрон- ного устройства. Никто не начинает создание электронного устройства с включения паяльника. Отчего-то все предпочитают начинать работу со схемы. Так и в программировании, начинать работу над программой лучше со «схемы программы». Язык программирования | высокого уровня II Сегодня языков программирования высокого уровня для микроконтроллеров довольно много. Вам есть из чего выбрать. Но наиболее распространенным остается язык Си (рис. 11.5). Производители микроконтроллеров поддерживают работу с ними, предлагая свои среды разработки. Это полнофункци- ональные программы, имеющие отладку и возможность пря- Рис. 11.5. Фрагмент программы в среде MPLAB X
146 Компьютер в лаборатории радиолюбителя мой работы с программаторами. Бесплатный транслятор языка ассемблера доступен всегда, а язык Си может иметь ограниче- ния. Чаще всего это ограничение на доступную в программе память микроконтроллера. Бесплатная версия, как правило, использует только поло- вину памяти. Однако есть и полнофункциональные бесплат- ные трансляторы, так что, с использованием языка Си у вас проблем быть не должно. Программирование на ассемблере требует навыков и боль- шого опыта. Ассемблерные команды повторяют команды микроконтроллера, таким образом, вам доступны тончайшие операции, но в них следует хорошо разбираться. Чтобы позна- комиться с ассемблером для программирования микрокон- троллеров следует прочитать книгу, написанную программи- стом, который долгое время работал с этим языком [12]. Часть таблицы команд микроконтроллера представлена в табл. 11.1. Байт ориентированные команды микроконтроллера PIC16F628A Мнемоника команды ADDWFf.d ANDWF f,d CLRFf CLRW- COMFf.d DECFf.d DECFSZf.d INCFf.d INCFSZf.d lORWFf.d MOVFf,d MOVWFf Описание Сложение W и f Побитное «И» W и f Очистить f Очистить W Инвертироватьf Вычесть 1 из f Вычесть 1 из f и пропустить, если 0 Прибавить 1 к f Прибавить 1 к f и пропустить, если 0 Побитное «ИЛИ» W Hf Переслать f Переслать W в f Циклов 1 1 1 1 1 1 1(2) 1 1(2) 1 1 1 Таблица 11.1 14-разрядный код Бит 13 Бит 0 00 0111 dfff ffff 00 0101 dfff ffff 00 0001 lfff ffff 00 0001 0000 ООН 00 1001 dfff ffff 00 ООН dfff ffff 00 1011 dfff ffff 00 1010 dfff ffff 00 1111 dfff ffff 00 0100 dfff ffff 00 1000 dfff ffff 00 0000 lfff ffff Изм. флаги C.DC.Z z N z z z z z z
Глава 11. Компьютер - лучший друг микроконтроллера 147 Таблица 11.1 (продолжение) Мнемоника команды NOP- RLF f,d RRF f,d SUBWFf.d SWAPFf.d Описание Нет операции Циклический сдвиг f влево через перенос Циклический сдвиг f вправо через перенос Вычесть W из f Поменять местами полубайты в регистре f Циклов 1 1 1 1 1 14-разрядный код Бит 13 Бит 0 00 0000 ОххО 0000 OOllOldfffffff OOllOOdfffffff 00 0010 dfff ffff 00 lllOdfffffff Изм. флаги С С C.DC.Z ПРИМЕЧАНИЕ. Система команд разных микроконтроллеров мо- жет быть разной, но принцип остается одина- ков - каждой команде, заложенной при изготов- лении микроконтроллера, соответствует аббре- виатура этой команды. Обустройство II микроконтроллера II Любой микроконтроллер имеет процессор с заложенными в него при разработке командами, энергонезависимую память для программы, оперативную память. С внешним миром про- цессор общается через порты ввода-вывода, которых может быть несколько. Помимо этого почти все современные микро- контроллеры имеют встроенные в них модули: это модуль последовательного обмена данными UART, модули таймеров, модуль АЦП и т.п. Микроконтроллеры разных производителей могут отли- чаться скоростью работы, частотой тактового генератора, ско-
148 Компьютер в лаборатории радиолюбителя ростью выполнения операций, объемом памяти, количеством встроенных модулей, но эти параметры в большей мере важны для профессионалов. СОВЕТ. Любителям, желающим научиться работать с микроконтроллерами, желательно выбрать одну модель, определяясь в выборе по цене, доступно- сти микросхемы и доступности программного обеспечения. Я часто рассказываю о PIC16F628A по причине того, что описание этого микроконтроллера можно найти на русском языке в Интернете. А я почти уверен, что большинство ради- олюбителей предпочитают читать это описание на родном языке. Вместе с тем, осваивать микроконтроллер без его опи- сания можно, но не нужно. При первом знакомстве с микроконтроллером важно понимать, что для наблюдения на макетной плате за рабо- той микросхемы контроллера вам доступны только состояния выводов. Почти все выводы микроконтроллера могут работать и на ввод, и на вывод данных. При этом данные — это высокий или низкий уровень напряжения на выводах порта. Из этого вам следует сделать простой вывод: все, что происходит внутри микроконтроллера, вы можете выяснить только в среде разра- ботки программы. Есть, правда, возможность отлаживать контроллеры с помо- щью отладочных средств, например, программатора. Но это не более удобно, чем отладка с помощью среды разработки. Разные микроконтроллеры работают с разными програм- маторами. И это еще одна из причин того, что в первое время лучше остановиться на выборе одной модели или одного про- изводителя. До недавнего времени популярными среди радио- любителей оставались микроконтроллеры AVR и PIC, в послед- нее время большой интерес возник к ARM-контроллерам.
Глава 11. Компьютер — лучший друг микроконтроллера 149 ПРИМЕЧАНИЕ. Однако следует помнить, что за большие воз- можности микросхемы придется платить боль- шим усердием и большим временем, затраченным на то, чтобы разобраться с такой моделью. Устройства на цифровых микросхемах | и микроконтроллер II Значительную часть схем, ранее выполненных на цифро- вых микросхемах, можно повторить, используя микроконтрол- лер. Рассмотрим игровое устройство рис, 8.15. Еще раз повторим, как оно работает. Есть четыре кнопки, две из них образуют «правильную» последовательность. При наборе этой последовательности, этого числа, зажигается све- тодиод, подтверждающий ваш выигрыш. Если нажата непра- вильная кнопка, то вам следует начинать игру с начала. Здесь можно даже усугубить эту часть, зажигая индикатор ошибки и останавливая игру, скажем, на секунду. Возьмем за основу для программы это описание. Когда-то я сделал такую программу в среде FlowCode для микроконтрол- лера PIC16F628A, которая сохранилась у меня в виде загрузоч- ного файла, что позволит ее проверить в программе ISIS. И у меня остались поясняющие рисунки. Начнем. Четыре кнопки будут подключены к четырем выводам одного порта микросхемы контроллера. Два светодиода будут подключены к двум выводам другого порта. Выводы, к которым подключаются кнопки, должны работать на ввод информации, а выводы для светодиодов нужно направить на выход. Кнопки можно подключить двояко: можно подключить их к питающему напряжению, а входы заземлить через резисторы. А можно подключить через резисторы входы микроконтрол- лера к питающему напряжению, а кнопки подключить к земле.
150 Компьютер в лаборатории радиолюбителя Вы можете выбрать любой способ, но я советую подклю- чить кнопки к земле. Причина в том, что заземление выводов, работающих на вход, не причинит им вреда даже при ошиб- ках, а подключение к питающему напряжению может вывести микросхему из строя при неблагоприятных обстоятельствах. Я выбираю подключение кнопок к земле. Светодиоды под- ключаются между выводом микросхемы и землей через рези- стор. Это полностью описывает электрическую схему устрой- ства: четыре кнопки, шесть резисторов, два светодиода, микро- схема контроллера, все! Создание программы в среде FlowCode (это была ранняя версия программы) начинается с запуска программы, выбора «Создать новую программу» и выбора микроконтроллера. После этого вы получаете шаблон для заполнения его нуж- ными элементами. Шаблон состоит из двух компонентов: BEGIN и END. Тот, кто знаком с языком Паскаль, может увидеть в шаблоне знакомую конструкцию. Все, или почти все, программы микроконтроллеров рабо- тают в бесконечном цикле. Это означает, что после включе- ния питания выполняется первая команда программы, затем выполняется вторая команда и так до последней команды про- граммы. Затем выполняется первая команда, повторяя цикл бесконечное число раз, завершающееся только выключением питания или поломкой микроконтроллера. Команды программы всегда выполняются последовательно одна за другой, если в программе нет ветвлений. В последнем случае часть программы остается невыполненной, а программа выполняет другие команды. Есть еще один случай, когда последовательное выполнение команд нарушается. Этот случай называется прерыванием. Если прерывание разрешено, то после его возникновения все данные о выполняемой программе отправляются в специаль- ное место в памяти, которое называется стек, а вместо про- должения выполнения программы выполняется специальная подпрограмма. Эта подпрограмма называется программой обработки прерывания. Завершив выполнение этой подпро- граммы, микроконтроллер возвращается к выполнению основ-
Глава 11. Компьютер - лучший друг микроконтроллера 151 ной программы. Начинается выполнение с извлечения из стека всех данных, записанных при возникновении прерывания. Механизм прерывания был создан тогда, когда вычисли- тельные машины, занимаясь вычислениями, работали с очень медленными периферийными устройствами, Механизм ока- зался очень удобным, поэтому применяется сегодня во многих случаях, но увлекаться прерываниями не следует. При большом количестве прерываний возможно переполнение стека, что приведет, скорее всего, к зависанию контроллера. Итак. Первое, что нам потребуется из элементов про- граммы .— это цикл. Добавив его в программу, можно пере- йти к следующему шагу. Следующий шаг следует из того, что микроконтроллер должен ждать нажатия кнопок. Поэтому мы должны добавить ввод данных о состоянии четырех кно- пок. Опрос кнопок и будет основной работой микроконтрол- лера. Любая программа, за редким исключением, работает с переменными. Поэтому состояние кнопок будут присва- иваться переменным: buttonl, button2, button3 и button4 (рис. 11.6). Рис. 11.6. Первая часть игровой программы
152 Компьютер в лаборатории радиолюбителя Создавая переменную в программе, следует позаботиться не только об имени переменной, которое следует выбрать понятным и запоминающимся, следует позаботиться о типе переменной. Последнее определяет, сколько места в памяти нужно переменной. Так для переменной, которой предстоит pa6oTajb с числами от нуля до 255, достаточно байта (byte). Если же вам нужны числа в несколько тысяч или немного больше, вы должны выбрать переменную целого типа (int). Нам для пере- менной достаточно байта. Можно сразу подготовить панель для отладки. На панель можно добавить четыре кнопки, в свойствах которых выбрать кнопки без фиксации, которые соединить с нужными выводами микроконтроллера. Все эти операции выполняются с помощью основного меню, инструментального меню и диалогов свойств. СОВЕТ. Не забудьте задать слово конфигурации, где можно выключить все опции, а для осциллятора выбрать внутренний генератор. Тактовой частоты 4 МГц вполне достаточно, а этот выбор избавит вас от необходимости покупать кварц. Многие микроконтроллеры имеют встроенные резисторы, которые можно подключить подтягивающими резисторами для кнопок, что избавит вас и от необходимости использовать четыре сопротивления из шести. Написав небольшой фрагмент программы, вы можете про- должить ее сборку, но я советую вам сохранить программу в любом удобном для вас месте и запустить отладку. Пока ничего интересного не происходит. Это так! Но ошибки удобнее оты- скивать в небольших фрагментах, а не собирать большую про- грамму, чтобы пытаться в ней отыскать все ошибки. Если вы забыли, например, задать переменные для кнопок или соеди- нить их с выводами, то, думаю, получите сообщение об ошиб- ках, которые можно тут же исправить.
Глава 11. Компьютер - лучший друг микроконтроллера 153 Если программа не жалуется ни на что, то можно продол- жить ее сборку. Нам понадобится «правильное» число. Путь это будет 42, при этом 24 должно быть «неправильным» числом. Поэтому мы начнем с обработки кнопки 4. После опроса этой кнопки создадим ветвление программы (если., то), используя элемент «решение». Если нажата четвертая кнопка, то про- верим, не нажата ли кнопка два. Если и она нажата, то вклю- чим индикатор правильного решения (зеленый светодиод на выходе RB0). Записав этот фрагмент программы, повторим проверку. Перед этим добавим на панель зеленый светодиод (это опреде- ляется в его свойствах), который подключим к выводу 0 порта В. Для отладки сделаем кнопку 4 фиксированной. В реальном устройстве вы можете нажать кнопку и удерживать ее, но сей- час вам придется нажимать кнопку мышкой, а удерживать ее будет нечем (рис. 11.7). Рис. 11.7. Отладка первого ветвления программы
154 Компьютер в лаборатории радиолюбителя Теперь можно добавить ветвление программы при нажа- тии кнопок 1 и 3. Нажатые кнопки должны зажигать индикатор неправильного выбора и делать паузу в 2 секунды. После паузы можно выключить индикатор ошибки. Как это выполнить в программе FlowCode, вам, наверное, понятно. Ветвление программы для кнопки 2 выполним несколько иначе. Если при нажатии на кнопку 2 кнопка 4 нажата, то мы... Впрочем, вначале переделаем нашу заготовку. Теперь при нажатии на первую правильную кнопку мы присвоим новой переменной (right) значение 1. А при нажатии кнопки 2 про- верим значение этой переменной. Если переменная right = 1, то включим индикатор правиль- ного ответа, если нет, то сбросим переменную right. Сбрасывать переменную right нужно и при нажатии на другие неправиль- ные кнопки. Вот все ветвления программы (рис. 11.8). Теперь можно проверить работу всей программы. Микроконтроллер — вы тоже заметили это? — упрощает элек- трическую схему. Но это не самое главное. Вы можете переде- лать программу, загрузить ее в ту же микросхему, и получить новое устройство. Рис. 11.8. Ветвления программы
ГЛАВА 12 СВЕТ В КОНЦЕ ЧУЛАНА Датчик II присутствия II У каждого из нас со временем скапливается много вещей, которые жалко выбросить, но негде хранить. Нам в этом отно- шении повезло — было глухое помещение под условным назва- нием «чулан». Но после ремонта, когда все стало красиво и ухо- жено, случилась неприятность со скрытой проводкой в чулан, а чулан без света становился типичным «чемоданом без ручки». Мастер предложил самый удачный в части сохранения ремонта вариант: просверлить дальнюю стену чулана, подве- сти проводку и прикрыть это светильником с выключателем. Ремонт торжествовал, но каждый раз, добираясь до выключа- теля, приходилось миновать множество углов и ловушек. Это заставило меня не раз задуматься о чем-то, что решало бы проблему. Занимаясь системами умного дома, я встречал такое поня- тие, как датчик присутствия, но с самим датчиком сталки- ваться не довелось. Сейчас, разбирая скопившиеся за месяц электронные компоненты, я наткнулся на ультразвуковой датчик (рис. 12.1). Чем не датчик присутствия, подумал я, но любую идею следует проверить.
156 Компьютер в лаборатории радиолюбителя Рис. 12.1. Ультразвуковой датчик HC-SR04 Подобные датчики используют, например, в автомобилях, чтобы облегчить водителю парковку. Проверить работу дат- чика мне проще всего в паре с модулем Arduino. Есть библи- отека функций для работы с датчиком, достаточно ввести в поисковике: arduino ultrasonic library [10]. В полученном файле есть и примеры. Я использую один из примеров, чтобы прове- рить свои соображения. ♦include <Ultrasonic.h> Ultrasonic ultrasonic(12, 13); // trig, echo (+5V and GND) void setup () { Serial.begin(9600); } void loop() { Serial.print("Distance in CM: "); // Pass INC as a parameter to get // the distance in inches Serial.println(ultrasonic.distanceRead()); delay(1000); Загрузив программу в модуль Arduino Uno, соединив дат- чик с модулем, я направляю излучатели в противоположную стену, получая на мониторе порта такие данные (рис. 12.2). Вся конструкция у меня на компьютерном столе, а до про- тивоположной стены расстояние, как мне кажется, несколько больше, но я не буду сейчас придираться к точности измере- ния, а поставлю на место кресло, которым пользуюсь, работая за компьютером. Показания датчика меняются (рис. 12.3).
Глава 12. Свет в конце чулана 157 Рис. 12.2. Данные ультразвукового датчика на экране монитора порта Рис. 12.3. Изменение данных, получаемых от датчика Если исключить некоторую вариацию данных, то вполне можно различить данные пустого помещения и помещения с присутствием объектов. Одна беда, когда я сажусь в кресло, дан- ные колеблются от 300 до 0 без промежуточных результатов. Видимо, если звук отражается от моей одежды, датчик начинает себя «плохо чувствовать». Но, тем не менее, ультразвуковой дат- чик неплохой кандидат на роль датчика присутствия. Ультразвуковые датчики давно применялись в системах охраны складских помещений. Позже появились датчики дви- жения. Но стоили достаточно дорого, чтобы мне не пришло в голову использовать их, решая проблему неудачного размеще- ния выключателя. Но сегодня...
158 Компьютер в лаборатории радиолюбителя II Да будет свет Сегодня появились дешевые датчики движения, обладаю- щие хорошими параметрами (рис. 12.4). т Рис. 12.4. Датчики движения на Алиэкспресс Вот те параметры, которые мне показались весьма при- влекательными: ♦ широкий диапазон рабочего напряжения: по умолчанию рабочее постоянное напряжение от 5 В до 20 В; ♦ микро мощность: ток покоя 65 мкА, особенно для сухой ба- тарейки; ♦ выходной сигнал высокого уровня может легко стыковать- ся с различными типами схем. Рассматривая датчики, я обратил внимание еще на один предмет — светильник (рис. 12.5). Заказал датчики. Т.к. доставка 1 датчика стоила почти столько же, сколько сам датчик, я заказал несколько штук. И не напрасно, одни из датчиков я включил неправильно, испор- тив его. А светильник я заказал один, но после неудачи с дат- чиком движения позже заказал еще. Светильник можно было приспособить к полке книжного шкафа — он наклеивался на двухсторонний скотч. Но первый светильник, который я полу- чил, имел недостаток: его задняя крышка крепилась винтами. Однако для моей цели это было не существенно.
Глава 12. Свет в конце чулана 159 Рис. 12.5. Светодиодный светильник Рис. 12.6. Схема светильника с датчиком движения Светильник подразумевал установку батареек, а включался нажатием на линзу. Оставалось доработать схему и собрать все. Схема получилась очень простая: если бы не перестраховка, я добавил транзистор, чтобы не перегрузить датчик, схемы почти и не было бы (рис. 12.6). Для сборки можно использовать любую подходящую коро- бочку из пластика. У меня давно лежала коробочка из-под часов «Слава», в которой легко можно было прорезать скальпе- лем квадратное отверстие для линзы датчика движения. Чтобы не паять датчик, я вместо разъема приспособил оставшийся от предыдущих экспериментов фрагмент панельки под микро- схему, к которому подпаял транзистор и два резистора.
160 Компьютер в лаборатории радиолюбителя В задней крышке светиль- ника хватило небольшого отверстия для двух проводов, их следует подпаять к контактам, к которым подходят проводники от выключателя и светодиодов (рис. 12.7). Коробку для сборки я под- бирал под размер батарейки «Крона». Ток через светодиоды я выбрал порядка 5—10 мА, что позволило выбрать любые тон- кие провода от датчика движе- ния к светильнику. Сам светиль1 ник я приклеил двухсторонним скотчем к подставке, которая подходила мне, и которую я собрал с помощью скотча из полосы картона. Получилась несложная конструкция (рис. 12.8). Так появился свет в конце чулана. Но таким он оставался недолго. Через некоторое время, когда я получил новый све- тильник, он оказался улучшенной моделью в части замены батареек версии. Поэтому я его приклеил на стенку возле входа, а светильник с датчиком движения отправил... нет, не свалку истории, а в коридор. С поздней осени до ранней весны, когда темнеет рано, он верой и правдой служит мне по ночам и по сей день. К датчику движения Рис. 12.7. Батарейный отсек светильника Рис. 12.8. Конструкция в сборе
ГЛАВА 13 ПРОГРАММИРОВАНИЕ МИКРОКОНТРОЛЛЕРА Начало, | или почему Arduino? I Программирование любого микроконтроллера выполня- ется в три основных этапа. Этап 1. Определить, что вы хотите от микроконтроллера. Что микроконтроллер должен делать. Этап 2. Написать и отладить код программы. Этап 3. Записать программу в микроконтроллер и прове- рить его работу на макете. Начинающим радиолюбителям, которые желают освоить работу с микроконтроллером, я советую использовать модуль Arduino. Прочитать о нем можно в моей книге [15] или в книге [13]. Почему Arduino? Модуль Arduino позволяет работать с ним без дополнительных устройств, не нужно питание, не нужен программатор, достаточно подключить модуль к порту USB. Недорогие модели базируются на микроконтроллерах ATMegal68 и ATMega328. Будет совсем не лишним скачать datasheet для соответствующей модели. Я не встречал сопро- водительной документации в переводе на русский язык. Но самыми важными будут описания регистров контроллера. А это не так много текста, чтобы не потрудиться над их прочте- нием. Благо многие поисковые системы предлагают перевод текста с английского языка на русский.
162 Компьютер в лаборатории радиолюбителя I Пример работы с модулем Arduino В качестве примера мы повторим устройство, изображен- ное на рис. 11.1. Обогреватель мы включать не будем, исполь- зуем светодиод на плате модуля, соединенный с выводом 13. Данные о температуре могут поступать в разном виде, это зависит от датчика. Предположим, что в качестве датчика был использован терморезистор. В этом случае изменения темпе- ратуры будут вызывать изменение напряжения на датчике. А изменение напряжения модуль Arduino отслеживает с помо- щью встроенного модуля АЦП. Первый эксперимент можно провести с переменным резистором и Arduino. Модуль имеет вывод питающего напря- жения 5 вольт, и самое разумное использовать это напряжение, соединив среднюю точку потенциометра с входом АО Arduino. В примерах для Arduino есть программа, которая назы- вается Analoglnput. Она демонстрирует возможность модуля считывать напряжение в той же схеме, что намереваемся использовать мы. Поэтому программу можно взять в качестве шаблона для модификации под те цели, о которых говорилось Рис. 13.1. Измерение напряжения на потенциометре
Глава 13. Программирование микроконтроллера 163 выше. Программа меняет частоту мигания светодиода на плате при вращении ручки потенциометра. Но нас в данный момент интересует, что прочитывает АЦП. Чудес ожидать не стоило, числа от 0 до 1023 при вращении ручки потенциометра (рис. 13.1). Терморезистор с дополнительным резистором образуют делитель напряжения подобный тому, что мы использовали в готовой программе из числа примеров для Arduino. Мы можем рассчитать или измерить сопротивление выбранного терморе- зистора, определившись с его сопротивлением, что даст значе- ние сопротивления дополнительного резистора. ПРИМЕР kuP Если выбрать терморезистор ММТ-1 сопротив- лением 100 кОм, то для него в справочнике указан температурный коэффициент сопротивления от -2,4 до -5,0 процентов на градус. Но здесь не все так просто - зависимость от температуры нелинейная. Можно, конечно, задаться расчетами, но лучше воспользо- ваться подсказкой. Например, готовым графиком. Получается, что при 100 градусах сопротивление терморезистора будет 10 кОм. Поскольку мы не собираемся сооружать термометр, примем это значение без проверки на точность. Итак, нам нужно получить два числа, соответствующих напряжению при температуре 25 градусов и при темпера- туре 100 градусов. Для двух резисторов по 100 кОм, ясно, что число 512. Второй вариант можно рассчитать, но я использую программу QucsStudio. Делитель напряжения из резисторов 100 кОм и 10 кОм и батарейка с напряжением 1023 В, равным максимальному числу, прочитываемому АЦП при напряжении 5 В. дают нужное число 93. Теперь можно вернуться к программе. В программе удалим все лишнее, но добавим два условия: если считываемое число больше 512, то включаем светодиод;
164 . Компьютер в лаборатории радиолюбителя если число меньше 93, то будем мигать светодиодом, обозна- чая выключенный обогреватель и включенную аварийную сиг- нализацию. Программа становится такой: int sensorPin = АО; int ledPin = 13; int sensorValue = 0; void setup() { pinMode(ledPin, OUTPUT); } void loop() { sensorValue = analogRead(sensorPin); if (sensorValue > 512) digitalWrite(ledPin, LOW); if (sensorValue <= 512) digitalWrite(ledPin, HIGH); if (sensorValue < 93) { digitalWrite(ledPin, LOW); delay(1000); digitalWrite(ledPin, HIGH); delay(lOOO); Можно придумать еще что-то, но следует проверить уже написанный код. Я проверяю это, записав программу в модуль Arduino, но могу проверить и в программе ISIS (рис. 13.2). Для этого потребуется hex-файл, который отыщется по адресу: С:\ Пoльзoвaтeли\Имяпoльзoвaтeля\AppData\Local\Temp\arduino- build... и лучше ориентироваться на время, когда вы компили- ровали или загрузили проект. Рис. 13.2. Проверка работы программы в Proteus
Глава 13. Программирование микроконтроллера 165 Пример работы | с Р1С-микроконтроллером II Я не знаю причин, по которым микроконтроллеры AVR пользуются большим интересом в любительской среде. Может быть, потому, что на базе этого контроллера создан модуль Arduino? He знаю! СОВЕТ. Когда меня спрашивают, с чего начинать осво- ение микроконтроллера, кроме Arduino я реко- мендую использовать контроллер PIC16F628A. Повторюсь, причина проста - есть переведенное на русский язык описание этой модели. Не думаю, что все начинающие радиолюбители настолько хорошо владеют английским языком, чтобы без проблем поль- зоваться описанием на английском языке. Зачем же лишние проблемы? В отличие от модуля Arduino работа с Р1С-контроллером потребует программатора. Сегодня еще можно купить, я наде- юсь, недорогой, но хороший программатор в Китае (рис. 13.3). Рис. 13.3. Программатор для Р1С-контроллеров
166 Компьютер в лаборатории радиолюбителя Рис. 13.4. Среда разработки PIC-контроллеров Программатор, если я не ошибаюсь (надо попробовать) позволяет не только загрузить программу в микросхему микро- контроллера, но и отлаживать его, что называется, в «живом виде». В качестве бесплатной среды разработки можно исполь- зовать программу от Microchip (рис. 13.4), которая называ- ется MPLAB X. Эта бесплатная версия имеет встроенный (его необходимо загрузить отдельно) компилятор языка Си ХС8, созданный на основе одного из самых популярных для PIC- контроллеров. Следуя собственным советам, я напишу, что я хочу полу- чить от микроконтроллера: Микроконтроллер должен работать в качестве генератора меандра. Мне этой записи хватает, поскольку я лукавлю — я заранее знаю и программу, и код программы, и то, как я буду ее отла- живать, что мне и нужно для рассказа. Но почему генератор меандра? Прямоугольные импульсы содержат большое количество гармоник. Такой генератор можно использовать не только при
Глава 13. Программирование микроконтроллера 167 проверке цифровых устройств, не только в качестве задающего генератора для микроконтроллера, но и при проверке анало- говых устройств. Не трудно превратить генератор прямоу- гольных импульсов в генератор биений. Кроме того, генератор меандра на микроконтроллере можно развивать, совершен- ствовать, меняя программу: ♦pragma config FOSC = INTOSCIO ♦pragma config WDTE = OFF ♦pragma config PWRTE = OFF ♦pragma config MCLRE = OFF ♦pragma config BOREN = OFF ♦pragma config LVP = OFF ♦pragma config CPD = OFF ♦pragma config CP = OFF ♦define _XTAL_FREQ 4000000 ♦include <xc.h> void main(void) { char rng = 1; TRISA = OxFE; while (1) { RAO = 1; delayjns(rng); RAO = 0; delayjns(rng); После сборки программы ее можно отлаживать. Часто этому способствует пошаговое прохождение либо всей программы, либо части программы, если задать перед ней точку останова. ПРИМЕЧАНИЕ. Я не знаю, можно ли наблюдать за состоянием локальных переменных, но за глобальными пере- менными можно наблюдать при пошаговом про- хождении.
168 Компьютер в лаборатории радиолюбителя Рис. 13.5. Отображение состояния вывода RAO логическим анализатором На это время можно перенести переменную, записав ее до главной программы main. В нашем случае можно проверить «генератор», используя логический анализатор из состава про- граммы (рис. 13.5). При создании проекта я выбрал в качестве отладчика симу- лятор программы. Но можно было выбрать PICkit, если есть дополнительная отладочная плата. Насколько это удобно я не знаю, поскольку не пользовался — хватало отладки в режиме симулятора. СОВЕТ. У программатора PICkit есть еще одно полез- ное свойство - его можно использовать в каче- стве трехканального логического анализатора. Рекомендую. У меня старенький клон PICkit2, который удобно исполь- зовать для программирования микроконтроллеров. Я сделал
Глава 13. Программирование микроконтроллера 169 панельку для программирования PIC16F628A, поэтому есть постоянное соединение программатора с несколькими выво- дами микросхемы. Я внесу небольшие изменения в программу, представленную выше: void main(void) { char rng ='1; TRISB = 0x7F; while (1) { RB7 = 1; delay_ms (rng); RB7 = 0; delay_ms(rng); } После сборки программы и загрузки ее в микросхему, я использую PICkit2 для наблюдения за выводом 13 (он же RB7). Для этого в программе, работающей с программатором, я выберу раздел, показанный на рис. 13.6. В появившемся окошке анализатора отметим галочкой напряжение питания и выберем вначале кнопку Logic I/O (рис. 13.7). После перехода на новую страницу настроек следует нажать на кнопку Enable 10 (рис. 13.8), выделить подключенный Рис. 13.6. Выбор логического анализатора
170 Компьютер в лаборатории радиолюбителя Рис. 13.7. Подготовка анализатора к работе Mode: i I Рт I о.шт Pin 4 ш: °'пЫ- f Jm b -, Ргр в :,; Рис. 13.8. Выбора вывода, подключенного к анализатору вывод (у меня он подключен к PIN4 разъема для внутрисхем- ного программирования), направив его на выход. Теперь можно воспользоваться кнопкой Analizer для воз- вращения к основному окну анализатора, где задать режим
Глава 13. Программирование микроконтроллера 171 г ~4* L:-j:v --Ф Рис. 13.9. Запуск анализатора для наблюдения за сигналом включения триггера, и можно запустить анализатор кнопкой Run (рис. 13.9). Триггер может запускаться передним или задним фронтом. Возможные варианты перечислены в окне настройки триггера каждого канала. В данном случае наблюдения за работающим выводом хватило бы и при отладке программы в MPLAB X. Но при работе с интерфейсом SPI три канала анализатора не будут лишними, поскольку в обмене сигналами участвуют два устройства, что трудно реализовать в отладчике MPLAB X. Да и желательно видеть реакцию реального устройства на запрос от вашего микроконтроллера. Используя беспаечную макетную плату, вы можете проверить работу микроконтроллера по про- токолу SPI. Не для дела, | но «крутизны» ради II Многие радиолюбители, вышедшие из разряда самых начи- нающих, обижаются, когда им предлагают использовать для
172 Компьютер в лаборатории радиолюбителя освоения работы с микроконтроллерами модуль Arduino или PIC16F628A: «Есть же ARM-контроллеры!». Аналогичную версию я однажды слышал о протоколе RS485: «Почему не WiFi?». Я согласен, если нет возможности проложить провода для связи, то можно использовать и ради- оканал. Но не следует забывать, что радиоканал — это толпа радиосигналов, которой мешает множество преград. Чтобы не быть голословным, я хочу привести пример (рис. 13.10) загру- женности каналов на частоте 2,4 ГГц в обычной квартире. Рис. 13.10. Многоканальный модуль RF24L01 Рис. 13.11. Недорогой модуль STM32F103C8T6
Глава 13. Программирование микроконтроллера 173 Слева-направо — это номера каналов (в шестнадцатерич- ном виде), а почти все начальные каналы уже заняты. И это в день, когда в квартире не работают все мобильные телефоны, планшеты и ноутбуки. Один из представителей более сложных, чем упомя- нутые мной микроконтроллеры, стоит не очень дорого на Алиэкспресс (рис. 13.11). Схожесть с модулем Arduino Nano не должна ввести вас в заблуждение. СОВЕТ. Приобретая модуль, не забудьте купить кабель для соединения с USB-портом (второй разъем такого кабеля - это микро-USB), он понадобится для работы с этим портом, и купите программа- тор для программирования модуля (рис. 13.12). Рис. 13.12. Программатор для модуля STM32 Профессионалы для работы с этим модулем могут исполь- зовать разные среды разработки, но любителям лучше вос- пользоваться бесплатными версиями двух программ: ♦ STM32CubeMX, которая позволяет настроить тактовые ча- стоты для работы и создать шаблон будущей программы;
174 Компьютер в лаборатории радиолюбителя ♦ Keil nVision5, которая позволит воспользоваться этим ша- блоном для написания собственного кода. #в ПРИМЕЧАНИЕ. Впрочем, это не единственная пара программ, ко- торыми могут воспользоваться радиолюбители, но об этом позже. Я не вижу задач, стоящих перед начинающими радиолюби- телями, которые потребовали бы применения такого микро- контроллера, но для удовлетворения любопытства модуль STM32F103C8T6 подходящий кандидат. Вдобавок программа Keil jiVisionS познакомит вас с опи- санием микроконтроллера. Однако будьте готовы к тому, что полное описание занимает около 1000 страниц на английском языке.
ГЛАВА 14 КУДА УЕХАЛ РОБОТ? Сегодня II и вчера II Сегодня многих радиолюбителей интересует робото- техника. Тема для интереса хорошая, бесспорно, но занятие довольно дорогое. Просматривая сегодня в Интернете недо- рогие роботы-конструкторы, а именно конструктор, позво- ляющий познакомиться с основами создания роботов, я не нашел ничего походящего для начинающих радиолюбите- лей. Исключая, может быть, конструктор, изображенный на рис. 14.1. Рис. 14.1. Конструктор на Алиэкспресс
176 Компьютер в лаборатории радиолюбителя Однако в основе этого конструктора модуль Arduino, о работе с которым есть достаточно много книг. Когда-то, озабо- тившись подобным выбором, я использовал робот-конструктор IE-ROBOPIC. Сегодня его трудно найти, да и цена существенно выросла. В первую очередь, этот конструктор привлек мое вни- мание средой разработки MicroC. И вот почему. I Среда разработки MicroC Подсказка (Help) в этой среде разработки имеет не только перечень функций для каждой библиотеки, но и пример про- граммы, и схему подключения (рис. 14.2). Рис. 14.2. Пример подсказки по библиотеки для дисплея с МК PIC16F887
Глава 14. Куда уехал робот? 177 На плате ROBOPICA есть буквенно-цифровой дисплей. Можно использовать пример программы, чтобы познако- миться с тем, как подключить и использовать дисплей в своих конструкциях. А дисплей — очень удобный способ отображе- ния информации. Попробуем повторить программу-пример из подсказки: // По ключение LCD модуля sbit LCD_EN_Direction at TRISD3_bit; sbit LCD_D4_Direction at TRISD4_bit; sbit LCD_D5_Direction at TRISD5__bit; sbit LCD_D6_Direction at TRISD6_bit; sbit LCD_D7_Direction at TRISD7_bit; // Соединение LCD модуля завершено char txtl[] = "mikroElektronika"; char txt2[] = "EasyPIC6"; char txt3[] = "Lcd4bit"; char txt4[] = "example"; char i; // Переменная для цикла void MoveJDelayO { // Функция для перемещения текста Delay_ms(500); // Вы можете изменить скорость перемещения здесь } void main () { ANSEL = 0; // Конфигурирование выводов AN как цифровой I/O ANSELH = 0; C10N_bit =0; // Запрещение работы компараторов C2ON~bit = 0; Lcd_Init(); // Инициализация LCD Lcd_Cmd(_LCD_CLEAR); // Очистим дисплей Lcd_Cmd(_LCD_CURSOR_OFF); // Выключение курсора Lcd_Out(l,6,txt3); // Запишем текст в первую строку Led Out(2,6, txt4); // Запишем текст во вторую строку
178 Компьютер в лаборатории радиолюбителя Delay_ms(2000); Lcd_Cmd(_LCD_CLEAR)/ // Очистим дисплей Lcd_Out(lflftxtl); // Запишем текст в первую строку Lcd_Out(2,5,txt2); // Запишем текст во вторую строку Delay_ms(2000); // Перемещение текста for(i=0; i<4; i++) { // Переместим текст вправо на 4 позиции Lcdj:md(_LCD_SHIFT_RIGHT) ; MoveJDelayO ; } while(1) { // Бесконечный цикл for(i=0; i<8; i++) { // Переместим текст 7 раз влево Lcd_Cmd(_LCD_SHIFT_LEFT); MoveJDelayO; } for(i=0; i<8; i++) { // Переместим текст 7 раз вправо Lcdj:md(_LCD_SHIFT_RIGHT)/ Move__Delay(); Перед загрузкой программы в плату ROBOPICA я про- верю, как подключается дисплей на плате, и подправлю про- грамму. В этом и будет заключаться разница между примером и его реализацией на плате ROBOPICA. Проверить работу про- граммы я могу двумя способами. Во-первых, я могу сделать это в программе ISIS (Proteus), есть у меня такая возможность (рис. 14.3). Во-вторых, и это самая убедительная проверка — загрузка программы в плату ROBOPICA (рис. 14.4). Программу вывода на дисплей можно впоследствии исполь- зовать всякий раз, когда понадобится вывод данных, напри- мер, для генератора, описанного в главе 13. Переменную rng, надеюсь, вы ее помните, можно менять, нажимая на кнопку, которую можно подключить к выводу микроконтроллера. Но определять рабочую частоту без осциллографа будет трудно. Добавьте к генератору дисплей, напишите новый блок про- граммы отображения частоты, пользоваться генератором ста- нет намного удобнее.
Глава 14. Куда уехал робот? 179 Рис. 14.3. Проверка программы в ISIS Рис. 14.4. Загрузка программы в рабочую плату
180 Компьютер в лаборатории радиолюбителя |Робат-конструктор. Зачем? В руководстве к ROBOPICA приведен ряд примеров работы с микроконтроллером при использовании некоторых датчиков, есть возможность познакомиться с хорошим микроконтролле- ром. В этом и есть основной смысл подобного конструктора. Проводя «кастинг» на роль героя в этой книге, я нашел еще одного робота, которого можно программировать (рис. 14.5). Стоит такой робот-кон- структор порядка 8 тыс. руб. на Алиэкспресс. Почти за те же деньги можно приобрести его в Москве. Не буду говорить, что это дорого для конструктора, скажу о другом. Программирование, равно как и управление, можно осуществлять со смартфона. Но мой смартфон, как и мно- гие другие, не позволит устано- вить нужную программу. Да и программирование с использова- нием смартфона, пусть с исполь- зованием графического языка программирование, весьма неудобно. Даже использование планшета для этих целей не самый удачный выбор. Подобные программы с графическим языком програм- мирования есть для обычных компьютеров. И жаль, что этот робот подразумевает использование для программирования, если верить рекламным рисункам, именно смартфон, напри- мер, это может быть такая программа (рис. 14.6). Возвращаясь к конструктору ROBOPICA, скажу, что в руко- водстве есть пример работы с встроенным в микроконтроллер модулем АЦП, а в состав конструктора входит переменный резистор, который можно подключить к плате. Есть пример программы, которая позволит познакомиться с тем, как работает этот полезный и интересный встроенный Рис. 14.5. Программируемый робот
Глава 14. Куда уехал робот? 181 Рис. 14.6. Пример программы с графическим языком программирования во множество микроконтроллеров модуль аналого-цифрового преобразования: / ***/ /** Отображает данные АЦП с RA3 на ЖКИ*/ char data_[6]; int x; // Задание выводов для Led sbit LCD_RS at RD2_bit; sbit LCD_EN at RD3_bit; sbit LCDJD7 at RD7_bit; sbit LCDJD6 at RD6_bit; sbit LCDJD5 at RD5_bit; sbit LCD__D4 at RD4_bit; // Направление выводов sbit LCD_RS_Direction at TRISD2_bit; sbit LCD_EN_Direction at TRISD3_bit; sbit LCD_D7_Direction at TRISD7_bit; sbit LCD_D6_Direction at TRISD6__bit; sbit LCD_D5_Direction at TRISD5__bit; sbit LCD D4 Direction at TRISD4 bit;
182 Компьютер в лаборатории радиолюбителя void main () { Delay_ms(1000); Lcd_Init(); ANSEL = OxFF; // PORTA ==> PORTA ==> Аналоговый TRISA = OxFF; // PORTA ==> PORTA ==> вход Lcd_Cmd(_LCD_CURSOR_OFF); // Курсор ЖКИ выключен Lcd_Out(l,l,"SENSORl = "); // Показать текст ADCON0=0bll001101; // Выбор режима: Analogl RC_Mode и ADON while (1) { ADCON0.GO=l; while(ADCONO.GO); x = (ADRESH*4)+(ADRESL/64); WordToStr(x,data_); Lcd_Out(l,10,data_); Delayjns(lOO); Программа считывает данные «как есть» (рис. 14.7). ~ &.- а -ш 'я *, --,:-: Рис. 14.7. Считывание данных с потенциометра
Глава 14. Куда уехал робот? 183 В некоторых случаях этого достаточно — можно исполь- зовать относительные данные. Но в ряде случаев желательно выводить данные в обычных единицах напряжения. ПРИМЕЧАНИЕ. Для этого программу следует модифицировать, добавив конвертирование чисел в напряжение и вывод информации в символьном виде. Спасибо создателям MicroC за великолепные библиотеки функций. Модификация программы происходит так: «Легким движением руки мы превращаем...» / ***/ /** Отображает данные АЦП с RA3 на ЖКИ*/ / •** / char data_[6]; int x/ float xl; // Переменная для значения с плавающей точкой // Задание выводов для Led sbit LCD_RS at RD2_bit; sbit LCD_EN at RD3_bit; sbit LCD_D7 at RD7_bit; sbit LCD_D6 at RD6_bit; sbit LCD_D5 at RD5_bit; sbit LCD_D4 at RD4_bit; // Направление выводов sbit LCD_RS_Direction at TRISD2_bit; sbit LCD_EN_Direction at TRISD3_bit; sbit LCD_D7_Direction at TRISD7_bit; sbit LCD_D6_Direction at TRISD6_bit; sbit LCD_D5_Direction at TRISD5_bit; sbit LCD_D4_Direction at TRISD4_bit; void main() { Delay_ms(1000); Led Init();
184 Компьютер в лаборатории радиолюбителя ANSEL = OxFF; // PORTA ==> PORTA ==> Аналоговый TRISA = OxFF; // PORTA ==> PORTA ==> вход Lcd_Cmd(_LCD_CURSOR_OFF); // Курсор ЖКИ выключен Lcd_Out(l,l,"SENSORl = "); // Показать текст ADCON0=0bll001101; // Выбор режима: Analogl RC_Mode и ADON while(1) { ADCON0.GO=l; while(ADCONO.GO); x= (ADRESH*4)+(ADRESL/64); xl = x*0.0049; // Значение в десятичном виде FloatToStr(xl,data_); // Преобразование переменной в строку Lcd_Out(l,10,data_); Delayjns(lOO); И можно убедиться — напомню, что напряжение 5 В для АЦП имеет 1023 ступеньки, а значение одной 0,0049 В — можно убедиться, что отображает дисплей напряжение в вольтах (рис. 14.8). Рис. 14.8. Получение данных на дисплее в вольтах
ГЛАВА 15 КОНСТРУКТОР И СОБСТВЕННЫЕ ИДЕИ Неудачный опыт | с конструктором ROBOPICA II В прошлый раз, когда я рассказывал о конструкторе ROBOPICA, у меня, похоже, не получилось регулировать ско- рость движения. Причина этого осталась для меня не вполне ясной. Сейчас я хочу вернуться к вопросу регулировки скоро- сти движения. Общие соображения остаются прежними — скорость враще- ния ротора коллекторного двигателя постоянного тока управ- ляется с помощью встроенного в микроконтроллер модуля PWM (ШИМ). ВНИМАНИЕ Подключить мотор непосредственно к микро- контроллеру, скорее всего, не получится - ток двигателя постоянного тока может превышать допустимый ток для выхода микроконтроллера.
186 Компьютер в лаборатории радиолюбителя К18А-К18В МОТОР А ОБРАТНО ПРЯМО ОБРАТНО CR1 Керамический резонатор 20 МГц К19А-К19В МОТОР В ПРЯМО Рис. 15.1. Подключение двигателя у конструктора ROBOPICA Что ж, можно использовать транзисторный ключ, а можно использовать специальную микросхему. Вот, как это устроено у ROBOPICA (рис. 15.1). В конструкторе использовалась специализированная микросхема, которую часто называют «драйвером» двигате- лей. Такие микросхемы удобны в применении к движущимся роботам или игрушкам с радиоуправлением. Вот схема L293D из ее справочного описания (рис. 15.2). OUT1 OUT3 IN1 < ENABLE1 С IN2C О IN3 ENABLE2 IN4 OUT2 OUT4 Рис. 15.2. Микросхема L293D
Глава 15. Конструктор и собственные идеи 187 Микросхема позволяет получить ток до 600 мА для двига- теля. Используя вывод Enable, можно останавливать двигатель. Из справки по PWM 1 для PIC16F887 II За время, прошедшее от предыдущих опытов с конструк- тором-роботом, я, признаться, все основательно подзабыл. Поэтому будет не лишним скопировать раздел, относящийся к реализации PWM. Итак, раздел Enhanced Capture/Compare/PWM (ССР1): ЧТО ЕСТЬ ЧТО. Модуль Enhanced Capture/Compare/PWM - это периферия, которая позволяет пользователю обращаться к времени и управлять разными со- бытиями. В режиме Capture периферия позволяет оценивать длительность событий. Этот режим позволяет пользователю переключать внешние события, когда предопределенный интервал вре- мени истекает. Режим PWM может генериро- вать модулирующий импульсный сигнал с меняю- щейся частотой и скважностью. Далее в табл. 15.1 показан регистр ССР ICON. Название битов регистра CCP1CON R/W-0 Р1М1 R/W-0 Р1М0 R/W-0 DC1B1 R/W-0 DC1B0 R/W-0 ССР1МЗ R/W-0 ССР1М2 Таблица 15.1 R/W-0 ССР1М1 R/W-0 ССР1М0 Бит 7 Бит 0
188 Компьютер в лаборатории радиолюбителя Теперь рассмотрим назначение битов регистра. Биты 7-6 Р1М<1:0>: Биты конфигурации выхода PWM Если ССРШ<3:2> = 00,01,10: хх = Р1А назначен как Capture/Compare вход; Р1В, PIC, P1D определены как выводы порта ЕслиССРШ<3:2>=11: 00 = Единичный выход; Р1А модулирован; Р1В, PIC, P1D определены как выводы порта 01 = Прямой полномостовой выход; P1D модулирован; Р1А активен; Р1В, Р1С не активны 10 = Полумостовой выход; Р1А, Р1В модулированы с мерт- вой зоной управления; PIC, P1D выводы порта 11 = Инверсный полномостовой выход; Р1В модулирован; Р1С активен; Р1А, P1D не активны Биты 5-4 DC1B<1:O>: минимально значимые биты длительности PWM Режим захвата (Capture): Не используются Режим сравнения (Compare): Не используются Режим PWM Эти биты — два LS (биты младшего байта) длительности PWM (duty cycle). Восемь MS (биты старшего байта) находятся в CCPR1L Биты 3-0 ССР1М<3:0>: Биты выбора режима ЕССР 0000 = Capture/Compare/PWM выключено (сброс ЕССР модуля) 0001 = Не используется (зарезервировано) 0010 = Режим сравнения (Compare), переключает соответ- ствующий выход (ССР 1 IF бит установлен) ООП = Не используется (зарезервировано)
Глава 15. Конструктор и собственные идеи 189 0100 = Режим захвата (Capture), каждый спадающий фронт 0101 = Режим захвата, каждый нарастающий фронт 0110 = Режим захвата, каждый 4й нарастающий фронт 0111 = Режим сравнения, каждый 16й нарастающий фронт 1000 = Режим сравнения (Compare), устанавливает соответ- ствующий выход (бит ССР 1 IF установлен) 1001 = Режим сравнения, очищает соответствующий выход (бит ССР 1 IF установлен) 1010 = Режим сравнения, генерация соответствующего про- граммного прерывания (ССР 1 IF установлен, вывод ССР1 не меняется) 1011 = Режим сравнения, переключается специальное собы- тие (бит CCP1IF установлен; ССР1 сбрасывает TMR1 или TMR2) 1100 = Режим PWM; P1A, Р1С активный высокий уровень; Р1В, РШ активный высокий уровень 1101 = Режим PWM; P1A, Р1С активный высокий уровень; Р1В, РШ активный низкий уровень 1110 = Режим PWM; P1A, Р1С активный низкий уровень; Р1В, РШ активный высокий уровень 1111 = Режим PWM; P1A, Р1С активный низкий уровень; Р1В, РШ активный низкий уровень Регистр CCP2CON рассмотрен в табл. 15.2. Название битов регистра CCP2CON U-0 — U-0 — lR/W-0 DC2B1 R/W-0 DC2B0 R/W-0 ССР2МЗ R/W-0 CCP2M2 Таблица 15.2 R/W-0 CCP2M1 R/W-0 CCP2M0 Бит 7 Бит 0 Назначение битов регистра представляю ниже. Биты 7-6 Не поддерживаются: читаются как «0» Биты 5-4 DC2B<l:0>: минимально значимые биты длительности PWM Режим захвата (Capture): Не используются
190 Компьютер в лаборатории радиолюбителя Режим сравнения (Compare): Не используются Режим PWM: Эти биты — два младших бита LS длительности PWM (duty cycle). Восемь MS находятся в CCPR2L Биты 3-0 ССР2М<3:0>: Биты выбора режима ССР2 0000 = Capture/Compare/PWM выключено (сброс модуля ССР2) 0001 = Не используется (зарезервировано) 0010 = Не используется (зарезервировано) ООП = Не используется (зарезервировано) 0100 = Режим захвата (Capture), каждый спадающий фронт 0101 = Режим захвата, каждый нарастающий фронт 0110 = Режим захвата, каждый 4й нарастающий фронт 0111 = Режим захвата, каждый 16й нарастающий фронт 1000 = Режим сравнения (Compare), устанавливает соответ- ствующий выход (бит CCP2IF установлен) 1001 = Режим сравнения, очищает соответствующий выход (бит CCP2IF установлен) 1010 = Режим сравнения, генерируется программное соот- ветствующее прерывание (бит CCP2IF установлен, ССР2 вывод не меняется) 1011 = Режим сравнения, переключает специальное собы- тие (бит CCP2IF установлен, TMR1 сбрасывается и преобразо- вание A/D начинается, если разрешено в модуле ADC. Вывод ССР2 не меняется.) 11хх = Режим PWM И дальше следуют пояснения по режимам захвата, срав- нения и того режима, который интересует нас сейчас, режима PWM. Режим PWM В режиме PWM генерируется широтно-импульсный сигнал на выводах ССРх. Длительность импульса, период и разреше- ние определяются следующими регистрами: ♦ PR2
Глава 15. Конструктор и собственные идеи 191 ♦ T2CON ♦ CCPRxL ♦ CCPxCON В режиме широтно-импульсной модуляции (PWM) модуль ССР производит сигналы PWM выхода на выводы ССРх с раз- решением до 10 разрядов. Поскольку выводы ССРх мульти- плексированы с защелкой данных порта, регистр TRIS для этих выводов должен быть очищен для разрешения использования выводов в качестве выходов драйвера ССРх. Примечание: Очистка регистра CCPxCON оставит управ- ление выводами ССРх. Следующие страницы, где приведена диаграмма форми- рования ШИМ и схема устройства этого модуля, я надеюсь, вы прочтете сами, а я хочу привести раздел с описание того, как начать формирование ШИМ: Задание PWM операций Следующие шаги должны быть выполнены при конфигури- ровании ССР модуля для выполнения PWM операций. 1. Запретите использовать выводы PWM (ССРх) выходов драйверов как входы, установив связанные с ними биты TRIS. 2. Установите период PWM загрузкой PR2 регистра. 3. Сконфигурируйте СРР модуль для режима PWM загруз- кой CCPxCON регистра соответствующими значениями. 4. Задайте длительность импульса PWM загрузкой CCPRxL регистра и DCxB<l:0> битов регистра CCPxCON. 5. Сконфигурируйте и запустите Timer2: ♦ очистите флаг прерывания TMR2IF регистра PIR1; ♦ установите значение предделителя Timer2 загрузкой T2CKPS битов регистра T2CON; ♦ разрешите работу Timer2, установив бит TMR2ON регистра T2CON. 6. Разрешите выход PWM после того, как начался новый цикл PWM: ♦ дождитесь переполнения Timer2 (бит TMR2IF регистра PIR1 установлен); ♦ разрешите выход драйверов выводов ССРх очисткой свя- занных с ними битов TRIS.
192 Компьютер в лаборатории радиолюбителя Что было упущено мною в этом описании? Регистры PR2, PIR1 и T2CON. Найдем и приведем ниже в таб. 15.3 формат этих регистров. Регистр PR2 полностью служит для записи зна- чения. Биты регистров PIR1 и T2CON Таблица 15.3 и-о — R/W-0 ADIF R/W-0 RCIF R-0 TXIF R-0 SSPIF R/W-0 - CCP1IF WW-0 TMR2IF R/W-0 TMR1IF Бит 7 Бит 0 Регистр PIR1 U-0 — R/W-0 TOUTPS3 R/W-0 TOUTPS2 R/W-0 TOUTPS1 R/W-0 TOUTPSO R/W-0 TMR2ON R/W-0 T2CKPS1 R/W-0 T2CKPSO Бит 7 Бит 0 Регистр T2CON IB чем может быть подвох? Проверим еще раз программу управления двигателем. Микроконтроллер PIC16F887 имеет несколько выводов, кото- рые могут использоваться для PWM: RD5 (Р1В), RD6 (PIC), RD7 (P1D), RC1 (ССР2), RC2 (ССР1/Р1А). Подвох, как выясняется, в том, что для управления двига- телем не используются выводы микроконтроллера предназна- ченные для PWM. Мне остается только проверить программу в режиме моделирования, используя «правильные» выводы PWM. Программа из примеров MicroC (PWM): unsigned short current_duty, old_duty; void InitMain() { ANSEL = OxFE; // Конфигурация выводов АЦП как цифровых ANSELH = 0; C10N_bit =0; // Запрет работы компараторов C2ON_bit = 0; PORTA = 255;
Глава 15. Конструктор и собственные идеи 193 TRISA = 255; // Конфигурация выводов PORTA как входных PORTB =0; // Устанавливаем PORTB в 0 TRISB = 0; // Определяем выводы PORTB как выходные PORTC =0; // Устанавливаем PORTC в 0 TRISC =0; // Определяем выводы PORTC как выходные PWMl_Init(5000); // Инициализация модуля PWM1 на частоте 5 кГц } void main () { InitMainO ; current_duty =16; // Начальное значение current_duty PWMl_Start(); // Запускаем PWM1 PWMl_Set_Duty(current_duty); // Задаем скважность для PWM1 while (1) { /Л Бесконечный цикл if (RA0_bit) { // Кнопка на RA0 нажата Delay_ms(40); current_duty++; // Увеличиваем current_duty PWMl_Set_Duty(current_duty); } if (RAl_bit) { // Кнопка на RA1 нажата Delay_ms(40); current_duty—; // Уменьшение current_duty Рис. 15.3. Моделирование работы двигателя
194 Компьютер в лаборатории радиолюбителя PMl_Set_Duty(current_duty); , } Delay_ms(5); // Немного замедлить изменения Оттранслируем программу, и посмотрим на результат работы этой программы (рис. 15.3) в ISIS (Proteus). IB чем была не удавшаяся идея? Идея была простая — использовать джойстик для управ- ления скоростью движения. Джойстик — это не более чем потенциометр (или потенциометры), соединенный с входом (или входами) АЦП. Мне, конечно, не хочется резать дорожки и перепаивать работающую плату ROBOPICA, но ничто не мешает моделированию. Быстро скопировав из подсказки программы MicroC нуж- ные фрагменты программы, я пытаюсь моделировать, но... ничего не получается. Следовало бы проверить работу про- граммы в отладчике MicroC. Но я, вспоминая, как легко и быстро все получалось некогда, понимаю, что за прошедшее время все забыл. Вот программа, уже исправленная, которую я отлаживал: unsigned short current_duty, old_duty; unsigned int temp__res; void InitMain() { ANSEL = 0x04; // Сделаем вывод AN2 (RA2) аналоговым входом ANSELH = 0; C10N_bit =0; // Отключим компараторы C2ON_bit = 0; PORTA = 255; TRISA = 255; // Выводы PORTA на вход PORTB =0; // Устанавливаем PORTB в 0 TRISB =0; // Определим выводы PORTB как выходы PORTC = 0; // Установим PORTC в 0
Глава 15. Конструктор ^собственные идеи 195 TRISC =0; // Определим выводы PORTC как выходы PWMl_Init(5000); // Инициализация модуля PWM1 на 5 кГц } void main() { InitMainO ; ADC_Init(); current_duty =0; // Начальное значение current_duty PWMl_Start(); // Запускаем PWM1 PWMljSet_Duty(current_duty); // Задаем текущее значение while (1) { // Бесконечный цикл temp__res = ADC_Read(2); // Прочитываем результат АЦП if (tempjres < 500) tempjres = 500; if ((tempjres > 500) & (tempjres < 600) ) tempjres = 600; if ((tempjres > 600) & (tempjres < 700) ) tempjres = 700; if ((tempjres > 700) & (tempjres < 800) ) tempjres = 800; if ((tempjres > 800) & (tempjres < 900) ) tempjres = 900; if ((tempjres > 900) & (tempjres < 1000) ) tempjres = 1000; switch (tempjres) { case 500 : current_duty = 0; break; case 600 : current_duty = 210; break; case 700 : current_duty = 220; break; case 800 : current_duty = 230; break; case 900 : current_duty = 240; break; case 1000 : current_duty = 250; break; default : current_duty = 100; } PWMl_SetJDuty(current_duty); Delayjns(5); To, что режим отладки есть, я не сомневался (рис. 15.4). После запуска отладчика можно открыть окно наблюдения за переменными (рис. 15.5). Окно может появиться в основ- ном окне программы, но его можно вынести, подцепив мыш- кой, в любое место экрана. В некоторых случаях так удобнее, чем использовать одно окно программы и для редактора, и для окон отладчика. В этом окне есть возможность выбрать переменные. Достаточно нажать на кнопку со стрелкой вниз (справа от пер-
196 Компьютер в лаборатории радиолюбителя Рис. 15.4. Отладчик MicroC Рис. 15.В<0кна наблюдения за переменными вого окошка), чтобы получить список всех доступных перемен- ных и регистров микроконтроллера (рис. 15.6). И если с переменными я разобрался быстро, то с АЦП... Была бы плата реальной, я подключил бы переменный рези- стор, как это сделано на рис. 14.8. А здесь? Приходится обратиться к справке по PIC16F887. В раз- деле описания АЦП (ADC) есть указание на настройку канала (табл. 15.4).
Глава 15. Конструктор и собственные идеи 197 Й^ЯШ Рис. 15.6. Выбор переменных для наблюдения Регистр ADCON0 R/W-0 ADCS1 R/W-0 ADCS0 R/W-0 CHS3 R/W-0 CHS2 R/W-0 CHS1 R/W-0 CHS0 Таблица 15.4 R/W-0 GO/DONE R/W-0 ADON Бит 7 Бит 0 Legend: R = считываемый бит W = записываемый бит U = бит не реализован, читается как 0 -п = значение POR 1' = бит установлен '0' = бит сброшен х = бит неизвестен ADCON0: A/D CONTROL REGISTER Назначение битов регистра: Бит 7-6 ADCS<1:O>: A/D биты выбора времени преобразо- вания 00 = Fosc/2 01 = Fosc/8 10 = Fosc/32
198 Компьютер в лаборатории радиолюбителя 11 = FRC (время от выделенного внутреннего генератора = 500 кГц max) Бит 5-2 CHS<3:0>: биты выбора аналогового канала 0000-AN0 0001-AN1 0010-AN2 0011-AN3 0100-AN4 0101 -AN5 0110-AN6 0111-AN7 1000 -AN8 1001 -AN9 1010-AN10 1011 — AN11 1100-AN12 1101-AN13 1110-CVref 1111 — фиксированное Ref (0,6 вольт фиксированное опор- ное напряжение) Бит_1 GO/DONE: A/D бит состояния 1 = преобразование осуществляется. Установкой этого бита начинается процесс преобразования. Когда преобразование завершено, бит автоматически сбрасывается. 0 = преобразование завершено/не осуществляется. Бит О ADON бит разрешения преобразования 1 = преобразование разрешено. 0 = преобразование запрещено, и преобразователь не потребляет ток. И в списке регистров есть регистры, в которые записыва- ется результат преобразования. ПРИМЕЧАНИЕ. Аналого-цифровой преобразователь 10-разряд- ный, поэтому результат записывается в два ре- гистра.
Глава 15. Конструктор и собственные идеи 199 Рис 15.7. Запись нужного значения в регистр Рис. 15.8. Переменная получает свое значение, заданное через АЦП
200 Компьютер в лаборатории радиолюбителя Рис. 15.9. Новое значение длительности импульса Рис. 15.10. Поверка программы изменения импульса в ISIS
Глава 15. Конструктор и собственные идеи 201 После выбора из списка нужных регистров можно двойным щелчком по регистру вызвать в окне наблюдения окно записи данных или, выделив регистр в окне наблюдения, желаемое значение вписать в ячейку Value (рис. 15.7). В регистр ADCON0 следует вписать 9 перед пошаговой про- веркой программы, а в регистры данных АЦП — требуемое зна- чение. Если теперь выполнять пошаговую проверку (клавиша F7 клавиатуры), то переменная tempjres получит свое значе- ние (рис. 15.8). Продолжая пошаговое выполнение программы, мы полу- чим новое значение для длительности импульса (рис. 15.9). Отладив программу (машинально копируя текст, я скопиро- вал лишнее), можно повторить свой эксперимент в программе ISIS (рис. 15.10).
ГЛАВА 16 УПРАВЛЕНИЕ САМОХОДНЫМ РОБОТОМ С ПУЛЬТА ИК-управление Если бы мы «были в танке», то джойстик стал бы неотъем- лемой частью его пульта управления. Но с самоходным робо- том можно сделать следующее: 1. Соединить джойстик тонким кабелем с микроконтролле- ром робота. 2. Использовать ИК-управление. 3. Использовать радиоканал. Первый случай настолько очевиден, что о нем нечего ска- зать. Проблема только в тонком кабеле с 3-4 проводами. Но это не слишком сложно сделать своими руками. Рассмотрим два других варианта. Начнем с ИК-управления. Для этого случая желательно в пульте использовать микро- контроллер. Особенных требований к микроконтроллеру нет: нужна модель с двумя модулями, ADC и USART.
Глава 16. Управление самоходным роботом с пульта 203 ПРИМЕЧАНИЕ. Разумно было бы использовать туже модель, что на плате ROBOPICA, но для меня это означает необходимость приобрести PIC16F887. Вместе с тем у меня есть несколько модулей Arduino, кото- рые я могу использовать. Мне так удобнее. Почему модуль USART? Причина в простоте отправки команд. Идея такой передачи такова: каждой ступеньке изме- рения скорости (см. программу в разделе «В чем была не удав- шаяся идея?») отвечает команда в виде символа; например, нейтральному положению джойстика соответствует символ «0», следующей скорости «1» и т. д. Идея реализации модулированных импульсов на рис. 16.1. Рис. 16.1. Модулированные импульсы команды Программа для модуля Arduino, которая выполняет эту работу, выглядит следующим образом:
204 Компьютер в лаборатории радиолюбителя uint8_t Ctrl; void setup () { pinModed, OUTPUT); pinMode(3, OUTPUT); tone (3,36000); } void loop() { Serial.begin(4800); Serial.print("1"); Serial.end(); digitalWrited, LOW); delay(10); } В программе следует отметить функцию tone (3,36000), где в качестве аргумента вывод 3 и частота 36 кГц. Благодаря этой функции на выводе 3 формируются импульсы с частотой 36 кГц. Еще есть команда Serial. end (), которую редко при- меняют. Она нужна для того, чтобы выполнить перевод вывода 1 (Тх) в низкое состояние: digitalWrite (1, LOW). ПРИМЕЧАНИЕ. Это нужно для того, чтобы в отсутствии пере- дачи команды убрать несущую частоту. Осталось добавить транзисторный ключ и ИК-светодиод. Если рабочее расстояние окажется слишком маленьким, можно использовать короткие импульсы, добавив формирователь таких импульсов. Некоторые светодиоды при скважности 10% допускают ток через светодиод до 500 мА. Для приема сигналов удобно использовать микросхему TSOP с подходящей частотой несущей.
Глава 16. Управление самоходным роботом с пульта 205 Радиоуправление | самоходным роботом II Такой вариант, с моей точки зрения, предпочтительней. А самым удобным радиомодулем я считаю недорогой приемо- передатчик, работающий на частоте 433 МГц (рис. 16.2). 433Mh? uf receiver Module руб. Vi'iM'nz kf trafisrmtrer Modu Рис. 16.2. Приемо-передатчик на частоту 433 МГц У меня ранняя версия этой пары, хотя ее сегодня можно приобрести по цене около 40 руб., но без антенн. Передатчик (рис. 16.3) можно подключить к модулю Arduino к выводу Тх, а приемник к плате робота к выводу Rx. Передатчик Приемник +5 В Данные Земля иш Rx Рис. 16.3. Расположение выводов у приемника и передатчика
206 Компьютер в лаборатории радиолюбителя Эту серию опытов начнем с чтения джойстика. Джойстик имеет выводы подключения к питающему напряжению, кото- рые подключаются к гнездам +5 В и GND модуля Arduino. И он имеет два вывода для считывания перемещений по оси х и по оси у. Пока безразлично, какую ось использовать. Поскольку джойстик — это два потенциометра, вывод «бегунка» под- ключим к выводу АО модуля Arduino. Для отладки программ с модулем Arduino удобно использовать монитор порта. Вот такие предварительные данные для написания кода, да и сам код не становится загадкой: uintl6_t x__coordinat = 0/ void setup () { Serial.begin (9600); } void loop() { x_coordinat = analogRead (АО); Serial.println(x_coordinat); delay(2000); } Пауза в две секунды используется только для удобства про- верки. Результаты этой проверки отображаются в окне мони- тора порта (рис. 16.4). Теперь следует написать код для формирования пере- дачи команд. Часть кода позаимствуем из предыдущих экс- Рис 16.4. Проверка считывания положения джойстика
Глава 16. Управление самоходным роботом с пульта 207 периментов. Часть кода обновим. Так, чтобы не забрасывать приемник ненужными командами, добавим две переменные, одна из которых будет хранить информацию о предыдущем положении джойстика, а вторая считывать новые данные. Отправлять будем только информацию, которая изменилась. Чтобы не быть голословным, я проверю эту часть программы: uintl6_t xjprev = 0; uintl6_t x_cur = 0; void setup () { Serial.begin (9600); } void loop() { xjprev = analogRead (АО); x_cur = analogRead (A0); if (x_cur/10 != x_prev/10) Serial.println(x_cur); Условие передачи записано не совсем так, как заявлено, сравниваются данные, деленные на десять. Причина этого про- ста — физическое прочитывание данных может меняться на несколько единиц при повторной оцифровке, а нас интересуют только «большие перемены». Например, такие изменения, как показано на рис. 16.5. Рис. 16.5. Отображение только перемещений джойстика
208 Компьютер в лаборатории радиолюбителя Теперь можно приступить к формированию команд: uintl6_t xjprev = 0; // Предыдущее значение uintl6_t x_cur = 0; // Текущее значение void setup () { Serial.begin (9600); Serial.println("0"); x_prev = analogRead (АО); // Получим начальное значение } void loop () { x_cur = analogRead (АО); // Проверим, изменилось ли значение? if (x_cur<500) x_cur = x_prev; // Отбросим движение вниз if (x_cur/10 != x_prev/10) { // Если значение изменилось // Подготовим данные для переключателя switch if (x_cur>500 && x_cur<600) x_cur = 500; if (x_cur>600 && x_cur<700) x_cur = 600; if (x_cur>700 && x_cur<800) x_cur = 700; if (x_cur>800 && x_cur<900) x_cur = 800; if (x_cur>900 && x_cur<1000) x_cur = 900; if (x_cur>1000) x_cur = 1000; // Отправим команду с помощью переключателя switch (x_cur) { case 500 : Serial.println("О"); break; case 600 : Serial.println("1"); break; case 700 : Serial.println("2"); break; case 800 : Serial.println("3"); break; case 900 : Serial.println("4"); break; case 1000 : Serial.println(rr5fr); break; default : break; x_prev = analogRead (АО); // Получим опорное значение Загрузим программу в модуль Arduino, проверим работу джойстика с этой программой (рис. 16.6). Следующий шаг — подготовка программы к проверке пере- дачи по радиоканалу. Это не сложно: заменим команду Serial. println() на Serial.printO, поскольку в передаваемой команде нам не нужны лишние символы перевода строки.
Глава 16. Управление самоходным роботом с пульта 209 Рис. 16.6. Проверка работы программы с джойстиком После загрузки программы в модуль Arduino подключим передатчик, что не сложно, и подумаем, как поступить дальше. Мне проще всего проверить радиоканал, используя второй модуль Arduino. Программа для него может выглядеть так: uint8_t cmd; void setup () { Serial.begin(9600); _ } void loop() { if (Serial.available() > 0) { cmd = Serial.read(); Serial.println(cmd, HEX); Проверка дает такой результат (рис. 16.7), напомню, что на мониторе отображаются символы в шестнадцатеричном фор- мате. Проведя эти опыты, можно завершить работу, подключив к приемнику плату робота. Правда, придется вернуться к среде разработки MicroC, чтобы написать программу для микрокон-
210 Компьютер в лаборатории радиолюбителя 32" 32 33 33 33 33 33 о 34 34 34 34 34 34 35 35 О О о о Рис. 16.7. Проверка радиоканала с джойстиком и передатчиком троллера PIC16F887. Часть кода, конечно, можно взять из пре- дыдущих программ. И, поскольку управлять скоростью работы двигателя не получится, я хочу вывести принятую команду на дисплей. // Подключение LCD модуля sbit LCD__RS at RD2_bit; sbit LCD_EN at RD3__bit; sbit LCD_D4 at RD4_bit; sbit.LCD J)5 at RD5_bit; sbit LCDJD6 at RD6_bit; sbit LCD_D7 at RD7_bit; sbit LCD_RS_Direction at TRISD2Jbit; sbit LCD__EN___Direction at TRISD3'ebit; sbit LCD_D4__Direction at TRISD4_bit; sbit LCD_D5_Direction at TRISD5_bit; sbit LCD_D6_Direction at TRISD6_bit; sbit LCD__D7_Direction at TRISD7_bit; , // Соединение LCD модуля завершено char i; // Переменная для цикла char cmdjprev =0; // Переменная для предыдущего значения
Глава 16. Управление самоходным роботом с пульта 211 char cmd_cur =0; // Переменная для текущего значения void main(){ ANSEL = 0; // Конфигурирование выводов AN как цифровой I/ OI/O ANSELH = 0; C10N_bit =0; // Запрещение работы компараторов C2ON_bit = 0; UARTl_Init(9600); // Инициализация модуля UART на 9600 bps Delayjns(100); // Ожидание стабилизации UART Lcd__Init(); // Инициализация LCD Lcd_Cmd (_LCD_CLEAR); // Очистка дисплея Lcd_Cmd(_LCD_CURSOR_OFF); // Выключение курсора cmd_cur = cmdjprev; while(1) { if (UARTl_Data_Ready()) { // Если данные получены cmd_cur = UARTl_Read(); } if (cmd_cur != cmdjprev) { Lcd_Out(l,l/'Current: "); II Запишем текст в первую строку LcdJ?hr(1^0,cmd_cur) ; LcdjDut(2,1, ''Previous: ff); // Запишем текст во вторую строку Lcd_Chr (2,U,cmd_prev); cmd_prev = cmd_cur; И я хочу проверить работу программы с помощью моде- лирования (рис. 16.8). Хотя последняя команда не отработалась, она прошла, когда программа занималась обработкой данных для дисплея, в целом можно на этом остановиться. Но! Как люблю я эти «НО»! При попытке повторить программу в «живом виде», используя модуль Arduino, модули передатчика и приемника, плату робота, я вижу мелькание непонятных символов на месте команд, но ничего более. А жаль. Приходится вспомнить, что лучший друг каждого, кого интересует электроника — это осциллограф (рис. 16.9).
212 Компьютер в лаборатории радиолюбителя Рис. 16.8. Моделирование программы вывода команды на дисплей то 00 Hz Рис. 16.9. Осциллограмма вывода данных приемника при выключенном передатчике
Глава 16. Управление самоходным роботом с пульта 213 Осциллограмма снята, когда передатчик выключен! Что ж, помехи никто не отменял, не было принято такого закона. Пока в части борьбы с помехами мне приходит в голову только одно — не дать времени помехам на размышление. То есть, изменить программу пульта (модуля Arduino): uintl6_t x__cur = 0; // Переменная для чтения с АЦП uint8_t snd; // Переменная для отправки данных void setup () { Serial.begin (9600); } void loop () { x_cur = analogRead (АО); // Читаем АЦП snd = x_cur/4; // Нам не нужно высокой точности Serial.write(snd); // Отправляем данные delay(1); } Придется и менить и программу приема команд: // Подключение LCD модуля sbit LCD_RS at RD2_bit; sbit LCD_EN at RD3_bit; sbit LCDJD4 at RD4_bit; sbit LCD_D5 at RD5_bit; sbit LCD_D6 at RD6_bit; sbit LCDJD7 at RD7_bit; sbit LCDJRS_Direction at TRISD2_bit; sbit LCD_EN_Direction at TRISD3_bit; sbit LCD_D4_Direction at TRISD4_bit; sbit LCD_D5_Direction at TRISD5_bit; sbit LCD_D6_Direction at TRISD6_bit; sbit LCDJD7J)irection at TRISD7__bit; // Соединение LCD модуля завершено char i; // Переменная для цикла char cmd_cur; // Переменная для данных char txt[4]; // Массив для символьных данных void main(){ ANSEL = 0; // Конфигурирование выводов AN как цифровой I/O ANSELH = 0; ClON_bit =0; // Запрещение работы компараторов C2ON bit = 0;
214 Компьютер в лаборатории радиолюбителя UARTl__Init(9600); // Инициализация модуля UART на скорость 9600 Delayjns(lOO); // Дать время стабилизироваться модулю UART Lcd_Init(); // Инициализация LCD Lcd_Cmd(_LCD_CLEAR); // Очистим дисплей Lcd_Cmd(_LCD_CURSOR_OFF); // Выключение курсора while (1) { if (UARTl_Data_Ready()== 1) { // Если данные получены cmd_cur = UARTl_Read(); // Считываем данные } ByteToStr(cmd_cur, txt); // Преобразуем байт в строку Lcd__Out (1,1 /'Speed:"); // Запишем текст в первую строку Lcd_Out(2,l, txt); // Запишем данные во вторую строку Прежде, чем проверять работу с платой робота, я хочу повторить моделирование в программе ISIS (рис. 16.10). Рис. 16.10. Моделирование измененных программ
Глава 16. Управление самоходным роботом с пульта 215 Рис. 16.11. Эксперимент с радиоканалом Теперь можно проверить работу радиоканала и в «живом» виде (рис. 16.11). При моделировании передатчик UART модуля Arduino и приемник UART микроконтроллера PIC16F887 соединены непосредственно. Таким образом, помех нет. Посмотрим, не «забьют» ли помехи данные в радиоканале. Сейчас все гораздо лучше, это так. Но, если вы решите использовать радиоканал для управления своими устрой- ствами, придется не раз все проверить. Возможно, придется усложнить отправляемые данные, добавив идентификатор команды; если команды передавать редко, то повторять их несколько раз. Все это решится опытным путем.
ГЛАВА 17 НЕ WINDOWS ЕДИНЫМ Почему? Радиокружки при школах, учебные заведения не всегда могут приобрести оборудование, а потратиться на программ- ное обеспечение, скорее всего, не будет задачей номер один. Сегодня эта часть необходимого для работы хорошо замеща- ется операционной системой Linux и бесплатными програм- мами. Qucs Программа давно работает в разных дистрибутивах Linux, и все, что было сказано о работе программы в Windows, в равной мере относится и к Linux (рис. 17.1). Пока, если я не ошибаюсь, нет варианта для Linux про- граммы QucsStudio, но для изучения электрических цепей вполне достаточно Qucs. А программа разводки печатных плат KiCAD, вторая составляющая QucsStudio, есть и в Linux (рис. 17.2). Правда, схему для разводки придется ввести заново, но это и раньше было неотъемлемой процедурой для инженеров, занимающихся разработкой печатных плат.
Глава 17. Не Windows единым 217 ИГ it Рис. 17.1. Программа Qucs в Linux ROSA Рис. 17.2. Программа разводки печатных плат KiCAD в Linux ROSA
218 Компьютер в лаборатории радиолюбителя II PIC- контроллеры Для работы с PIC-контроллерами есть среда разработки MPLAB X. Что называется — найдите десять отличий (рис. 17.3). Рис. 17.3. Среда разработки программ для PIC-контроллеров Скачать программу можно на сайте производителя Microchip, там же можно скачать и компиляторы для работы со всеми микроконтроллерами этой фирмы. Не буду утверждать, что для всех дистрибутивов процедура установки одинакова, но для дистрибутива ROSA следует про- верить установочный файл после его распаковки. Откройте свойства файла и посмотрите, установлена ли галочка возле одного из его свойств (рис. 17.4). Есть еще одна особенность установки. Признаться, я забыл об этом, что заставило меня немного понервничать. Необходимо запускать установку в терминале с правами глав- ного администратора, используя такую запись: sudo ./имя устанавливаемого файла.
Глава 17. Не Windows единым 219 Рис. 17.4. Установочный файл должен быть выполняемым Конечно, предварительно я переместил установочный файл в свою домашнюю директорию, а в терминале (консоли) пере- шел в директорию командой: cd /home/Vladimir. Аналогично можно установить и нужные компиляторы, и другие программы (за исключением некоторых). ПРИМЕЧАНИЕ. Я не знаю, есть ли ограничения для компилято- ра ХС8 в свободном варианте, но можно исполь- зовать и другой полнофункциональный компиля- тор, например, SDCC И работа в Linux с этой программой ничем не отличается от работы в Windows (рис. 17.5).
220 Компьютер в лаборатории радиолюбителя Рис. 17.5. Отладка программы для PIC16F628A в Linux ROSA Не забывайте только при больших временах паузы увели- чивать количество записей в настройках логического анализа- тора, если пользуетесь им. I Arduino (AVR-контроллер) Программа есть в штатном списке устанавливаемых про- грамм. Но, если вам нужна последняя версия, то ее нужно ска- чать с сайта Arduino. И с этой программой вы не найдете отли- чий от работы в Windows (рис. 17.6). Отличается в Linux подключение модуля к порту, при- вычное для постоянных пользователей Linux (USBO), но не для начинающих работать с этой операционной системой (рис. 17.7).
Глава 17. Не Windows единым 221 Рис. 17.6. Arduino в Linux ROSA Рыс. 17.7. Подключение модуля Arduino для записи программы в Linux ROSA
222 Компьютер в лаборатории радиолюбителя В списках примеров вы найдете все примеры, которые есть для Arduino. Вы можете добавить новые примеры, а также библиотеки для работы с разными устройствами и датчиками. СОВЕТ. Если что-то не получается, то поищите под- сказки в Интернете, таких подсказок сегодня вполне достаточно. Разные дистрибутивы могут по-разному устанавливать и настраивать программы. Поэтому лучше использовать под- сказки к конкретному дистрибутиву. Многих, кто давно рабо- тает с Arduino, заинтересовала возможность написания про- грамм для STM32. Такая возможность есть. Нужно запустить программу и выбрать менеджер плат (рис. 17.8). В окне менеджера плат следует выбрать Arduino SAM Boards (32-bits ARM Cortex-МЗ), нажать ссылку More info и нажать Рис. 17.8. Менеджер плат в программе Arduino
Глава 17. Не Windows единым 223 кнопку Установить, которая активизируется. После установки платы следует скачать из Интернета пакет Arduino_STM32- мастер и распаковать его. СОВЕТ Полученную попку рекомендую переименовать в ArduinoJSTM32. Ее место (в других дистрибути- вах могут быть разночтения) в разделе: /home/ ваше имя/Ardulno. Если там есть папка hardware, то туда следует скопировать папку с STM32. Если такой папки нет, то ее нужно создать и в нее скопировать папку Arduino_STM32. После перезапуска про- граммы Arduino вы получите новые платы (рис. 17.9). IfvfTi ШШШёШШШжШШЩШЩ, I Ш ш _ -; - ; ~";:,^.^;г„"_"„^;,::.":'.^-.._,— 1-JSH ШШШШШШШШШШШШШШШШШш^ 1 я Pt/c. 17.9. Новые плашь/ б программе Arduino
224 Компьютер в лаборатории радиолюбителя Рис. 17.10. Программаторы для загрузки файлов в STM32 Как и с модулем Arduino, вы можете загрузить вашу про- грамму в модуль STM32F103C8 из среды разработки Arduino, используя разные программаторы (рис. 17.10). СОВЕТ. О модуле и программе Arduino можно прочитать в моей книге [15] или другой, сегодня они есть в достаточном количестве. Я не буду настаивать, но с модулем STM32F103C8 удобнее работать в других программах.
ГЛАВА 18 STM32F103C8 (ARM-КОНТРОЛЛЕР), ПОДГОТОВКА В LINUX ROSA STM32CubeMx Я постараюсь описать несколько вариантов работы с моду- лем STM32F103C8 в Linux. Но в любом случае советую начинать с установки программы STM32CubeMx. Программу можно скачать с сайта производителя, где нужно будет зарегистрироваться, или с другого сайта [2], про- грамма бесплатная. Но перед установкой программы следует установить пакет Java с помощью штатного для операционной системы менеджера установки программ (рис. 18.1). Последние версии CubeMx не требуют «танцев с бубном», достаточно в свойствах установочного файла указать, что он исполняемый (как на рис. 17.4), и в консоли выполнить команду: sudo ./SetupSTM32CubeMX-4.23.0.linux Можно не спорить с помощником по установке, нажимая кнопку Next (рис. 18.2). Программа при установке предлагает выбрать место, куда следует установить программу. Но, если сделать установку по умолчанию, если у вас нет других предпочтений, то после завершения установки (кнопка Done), программа окажется в домашней папке (рис. 18.3).
226 Компьютер в лаборатории радиолюбителя Рис. 18.1. Установка пакета Java Рис. 18.2. Помощник установки программы STM32CubeMx
Глава 18. STM32F103C8 (ARM-контроллер), подготовка в Linux ROSA 227 Рис. 18.3. Попка с установленной программой STM32CubeMx Для запуска программы достаточно дважды щелкнуть левой клавишей мышки по значку STM32CubeMx (проверьте, установлен ли в свойствах флажок исполняемой программы). После запуска программы можно выбрать создание нового проекта (New Project), а можно открыть уже существующий, если он у вас есть (рис. 18.4). Программа STM32CubeMX выводит длинный список моде- лей (рис. 18.5) для будущего проекта и предлагает выбрать, для какой программы сгенерировать шаблон. ПРИМЕЧАНИЕ. Шаблон программы - это то, что, по моему мнению, важно для начинающих осваивать ARM- контроллеры.
228 Компьютер в лаборатории радиолюбителя Рис. 18.4. Программа STM32CubeMx в Linuc ROSA Рис. 18.5. Окно выбора модели контроллера
Глава 18. STM32F103C8 (ARM-контроллер), подготовка в Linux ROSA 229 Рис. 18.6. Назначение вывода микроконтроллера для цифрового выхода Микроконтроллеры этой архитектуры имеют очень боль- шие возможности, но достаточно сложны, если сравнивать их с более простыми моделями PIC или AVR. Выбирая модель, вы можете колесиком мышки переме- щаться по списку, подтвердив выбор двойным щелчком мышки. Возможно, программа подгрузит недостающие компоненты. Когда откроется следующее окно, вам нужно выбрать, для каких целей будут использоваться выводы микроконтроллера (рис. 18.6). Щелчок левой клавиши мышки по выводу открывает меню для выбора назначения вывода, что можно подтвердить щелч- ком левой клавиши мышки по выбранному разделу выпадаю- щего меню. Если вы намерены изменить конфигурацию такто- вых импульсов, используйте закладку Clock Configuration. ПРИМЕЧАНИЕ. Не будем делать этого в первый раз, удовлетво- рившись настройками по умолчанию.
230 Компьютер в лаборатории радиолюбителя -*&******%:' Рис. 18.7. Выбор программы для продолжения работы Рис. 18.8. Папка с будущим проектом
Глава 18. STM52F103C8 (ARM-контроллер), подготовка в Linux ROSA 231 Следующее окно диалога предлагает ввести имя проекта и выбрать, для какой программы следует создать шаблон (рис. 18.7). В этом же диалоговом окне вы можете указать папку для хранения проекта. Если установить опцию «Use Default Firmware Location», то после загрузки необходимого, вы можете открыть папку с будущим проектом (рис. 18.8) или перейти к работе в выбранной среде разработки проекта. Используя установленную ранее программу CubeMx, я мог упустить ряд деталей. Так следует проверить наличие указан- ных ниже компилятора и утилит: ♦ gcc-arm-none-eabi ♦ binutils-arm-none-eabi ♦ libnewlib-arm-none-eabi ПРИМЕЧАНИЕ. Если эти пакеты не установлены, то при попыт- ке установить эти пакеты с помощью штат- ного менеджера установки программ можно убе- диться, что их для дистрибутива ROSA нет. Приходится искать компилятор на просторах Интернета. Предпочтительнее ввести в строку поиска полную верхнюю строку из рекомендованных пакетов с добавлением слова «скачать», чтобы попасть на сайт для скачивания компилятора (рис. 18.9). После распаковки пакета его можно разместить в папке /usr рядом с пакетом avr (рис. 18.10). Для этого придется при- бегнуть к помощи консоли, поскольку нужны права главного администратора. Созданный ранее проект предназначен для продолжения работы в программе...
232 Компьютер в лаборатории радиолюбителя Downloads GNU Arm E«ib«!<fcd Tookhain 'ШЯШт Рис. 18.9. Сайт загрузки дополнений для работы cARM-контроллером f§ifi# ^р ШШ ев ш ш Рис. 18.10. Размещение пакета ARM
Глава 18. STM32F103C8 (ARM-контроллер), подготовка в Linux ROSA 233 System It Workbench I Программу можно скачать с сайта производителя, но тре- буется регистрация. Сама по себе регистрация ни к чему не обязывает, однако анкета при регистрации рассчитана на американских пользователей, что затрудняет ее заполнение. Попробуйте скачать программу с указанного сайта [5]. ПРИМЕЧАНИЕ. Установочный файл должен быть выполняемым (как на рис. 17.4), и имеет особенность - его сле- дует устанавливать не от имени главного адми- нистратора (root), а от имени пользователя. То есть, команда sudo не требуется. Как и во мно- гих случаях, можно положиться на установку по умолчанию, если, конечно, у вас нет опыта рабо- ты с программой. Рис. 18.11. Выбор продолжения работы
234 Компьютер в лаборатории радиолюбителя Рис. 18.12. Диалоговое окно выбора рабочего пространства Рис. 18.13. Программа System Workbench Запустив программу, можно воспользоваться командой File-+Import. Но начинающим я советую использовать другой подход. По завершении настройки CubeMx лучше выбрать кнопку Open Project (рис. 18.11). При выборе рабочего пространства программы System Workbench в диалоговом окне (рис. 18.12) лучше использовать то, что задано по умолчанию. Позже, если потребуется, это можно, видимо, изменить. После выбора рабочего пространства запускается сама про- грамма System Workbench (рис. 18.13).
Глава 18. STM32F103C8 (ARM-контроллер), подготовка в Linux ROSA 235 О том, как работать в программе, мы поговорим в главе 19. А сейчас для тех, кому может не понравиться работа в System Workbench, я немного расскажу о работе с программой... Code::Blocks II Но сразу хочу предупредить, для связи CubeMx с програм- мой Code::Blocks пришлось проделать много шагов. Я повторил эти операции дважды, но год или два назад, хорошо забыв все. Дважды я проделывал операции по той причине, что с первого раза не запомнил последовательность действий, пришлось сне- сти операционную систему, чтобы проделать все во второй раз. Но и при второй установке, как я сейчас подозреваю, я не все запомнил. Однако базовые точки «застревания», надеюсь, я запомнил (и записал). С чем предлагаю познакомиться и вам. Итак. Следующей по порядку будет, наверное, установка программы Makefile4CubeMX, которую следует скачать и уста- новить так, как описано по следующим ссылкам [8,9]. Программа устанавливается, кажется, при использовании ярлычка Install При этом записывается один файл (рис. 18.14). Строка в консоли позволяет сделать программу доступной по имени: sudo ln--s "$PWDf7CubeMX2Makefile.py /usr/bin/ CubeMX2Makefile.py Файл CubeMX2Makefile.py следует открыть в текстовом редакторе и подправить две строки: localSetting[ffGCC_PATHff]=f7usr/arm/bin/fr localSetting["FLASH_PATHrr]=f7usr/local/bin/st-flashrr Первая строка подтверждает тот факт, что в это место была перенесена папка компилятора (если вы ее туда поместили). А вторая строка требует того, чтобы по этому «адресу» был рас- положен файл, о котором чуть ниже. Если с этим все в порядке, то остается настроить программатор.
236 Компьютер в лаборатории радиолюбителя Рис. 18.14. Программа создания файла для программы Code::Blocks Но перед этим хотелось бы создать простую программу и проверить, все ли правильно (а мне кажется, что есть подво- дные камни). Запустим программу STM32CubeMx, настроим ее так, как написано выше, получим файл в формате SW4STM32. Я сохраню его в своей домашней папке в подпапке cdbl с именем test, поскольку не знаю, чем все закончится (рис. 18.15). Рис. 18.15. Папка с заготовкой проекта
Глава 18. STM32F103C8 (ARM-контроллер), подготовка в Linux ROSA 237 Рис. 18.16. Папка с проектом после использования предыдущей команды сборки Теперь открываем консоль (если нет консоли в перечне приложений, то устанавливаем ее штатным образом), перехо- дим в папку проекта и запускаем файл CubeMX2Makefile.py. Результат должен выглядеть так, как на рис. 18.16. При этом заметьте, что в консоли команда запуска CubeMX2Makefile.py должна завершаться пробелом и точкой (рис. 18.17). Рис. 18.17. Команда сборки в консоли
238 Компьютер в лаборатории радиолюбителя О III Рис. 18.18. Пакеты gtk в менеджере установки программа Р(/с. 1Л19. Загрузка ранее созданного проекта в Code::Blocks Я сейчас не вспомню, в этот ли раз или при установке ST-Link, или в другом месте потребовалось установить штатные пакеты gtk, без которых работа не продвигалась (рис. 18.18).
Глава 18. STM32F103C8 (ARM-контроллер), подготовка в Linux ROSA 239 Не скажу, какие пакеты точно нужны, но можно их устанав- ливать до тех пор, пока не получится нужный результат. А вот теперь можно установить (если вы не сделали этого раньше) среду разработки Code::Blocks, запустить программу и открыть проект, созданный ранее (рис. 18.19). Но перед тем как продолжить работу, следует настроить компилятор (рис. 18.20). В диалоговом окне следует указать все необходимые ком- поненты компилятора и компоновщика, которые находятся там, куда мы переместили распакованный пакет компилятора (рис. 18.21). Рис. 18.20. Меню перехода к выбору и настройке компилятора Рис. 18.21. Место расположения необходимых для настройки файлов
240 Компьютер в лаборатории радиолюбителя Рис. 18.22. Настройка компилятора в программе Code:.'Blocks А вот так должна выглядеть настройка в диалоговом окне программы Code::Blocks (рис. 18.22). Настроив компилятор, можно в режиме отладки проверить его работу. Если все сделано правильно, то сборка проекта осу- ществится без ошибок (и, возможно, без предупреждений). Мы еще, пожалуй, вернемся к теме Code::Blocks. А сейчас...
ГЛАВА 19 МОДУЛЬ STM32F1O3C8 И SYSTEM WORKBENCH В ROSA LINUX Кнопка I! и светодиод II Использование цифровых входов и выходов остается основной задачей любого микроконтроллера. Начнем создание нового проекта с программы STM32CubeMx. Настроим вывод порта PC 13 на выход (GPIO_Output), а вывод РС14 на вход (GPIOJnput)... Дойдя в своем рассказе до этого места, я вынужден был прерваться. Из-за проблем с отладкой и загрузкой в System Workbench плавное течение моих рассуждений превратилось в некий мутный водоворот у запруды. Когда год назад я рассказывал о модуле STM32F103C8, у меня не получилось скачать программу System Workbench, не умею я заполнять анкеты, рассчитанные на американского пользователя. Сейчас, изыскав такую возможность, я решил, что все трудности позади, поэтому собирался рассказать о нескольких простых проектах с участием STM32CubeMx и System Workbench, а завершить рассказ одним примером соз- дания проекта в Code::Blocks. Но...
242 Компьютер в лаборатории радиолюбителя I Приключения начинаются Кроме текущих несуразиц у меня возникли сомнения и в части описанной ранее установки программ и начала работы с ними, их тоже хотелось бы проверить. Чем я и намерен заняться. Я хочу поставить заново одну из последних версий на сегодняшний день Linux ROSA, чтобы установить, записывая все шаги, и STW32CubeMx, и System Workbench. А затем заново разобраться с работой в этих программах. Итак. Первой версией дистрибутива, который я использовал в этот раз, была рабочая станция ROSA PLASMA. Конечно, работа в VirtualBox с ограниченными ресурсами памяти весьма сво- еобразна. Каждое действие сопровождается ожиданием его выполнения, так что терпение — это лучшее лекарство в подоб- ной ситуации. После изменения в свойствах установочных программ CubeMx и Workbench (их следует отметить на закладке «Права» исполняемыми) обе установочных программы запускаются из терминала на установку, но почти сразу я получаю предупреж- дение, что следует установить пакет Java, что я и делаю. Первая программа устанавливается с правами root (sudo!), а вторую я вопреки рекомендациям тоже хочу поставить рядом с первой в директорию/usr/local (рис. 19.1). В промежутках между установкой программ приходится устанавливать обновления, которых более 500, что требует тер- пеливого многочасового ожидания, но, в конечном счете, все завершается, обе программы запускаются. Меня интересовало, будет ли запускаться программа Workbench (рис. 19.2). Создав проект в CubeMx, я открываю его в Workbench. Но на этом успешная работа, увы, завершается — попытка собрать проект неудачна. Не работает сборка при такой установке про- граммы. Я не исключаю, что это можно преодолеть, но и мое терпение не безгранично. В итоге я удаляю установленную версию, чтобы установить более легкий дистрибутив R9 с графической оболочкой Gnome. К слову, в этой версии, как в Windows 10, после блокировки
Глава 19. Модуль STM32F103C8 и System Workbench в ROSA Linux 243 Рис. 19.1. Установка программы System Workbench в Linux ЙШШ&ШШШШМ &Шш Ш1ШШШШШШШ Рис. 19.2. Запуск программы System Workbench в Linux ROSA PLASMA
244 Компьютер в лаборатории радиолюбителя экрана (длительный перерыв в использовании) появляется заставка, которую нужно подцепить мышкой и сдвинуть вверх до конца. После этого появляется заставка ввода пароля. Установка любой операционной системы в VirtualBox мало отличается от обычной установки и занимает столько же вре- мени. Вдобавок вновь нужно установить обновления и пакет Java. И только после этого можно приступить к установке про- грамм, которые меня, собственно, интересуют. Однако если STM32CubeMx устанавливается привычным для меня образом (после многочисленных повторов), то с System Workbench иначе. Программа желает устанавливаться только в терминале. Не запуск на установку из терминала, а полная уста- новка в терминале. Я делаю несколько попыток, но затем сда- юсь, соглашаюсь с таким вариантом установки (рис. 19.3). Хуже всего, что первая попытка открыть программу из CubeMx открывает только текст сценария, но не программу. Я пытаюсь этот сценарий тоже сделать выполняемой програм- мой, что помогает, но ненадолго. Попытка запустить сборку проекта завершается сообщением об отсутствии компилятора. Рис. 19.3. Установка Workbench в Gnome
Глава 19. Модуль STM32F103C8 и System Workbench в ROSA Linux 245 С таким вариантом я сталкиваюсь впервые, начинаю суе- титься, что завершается сносом установленной программы простым ее удалением (не хочется тратить время на выяснение того, как использовать uninstaller через Java). После нескольких попыток установки-сноса, когда терпе- ние уже на исходе, я распаковываю компилятор из plugin, кото- рый есть в программе, и копирую его в папку, где установлена программа Workbench, в раздел конфигурации (рис. 19.4). После этих действий запуск программы начинается с ини- циализации компилятора. Я не знаю, какое из моих суетливых действий помогло, я понимаю, что для чистоты эксперимента следовало бы снести операционную систему, установив дис- трибутив с графической оболочкой KDE, но, если вам прихо- дилось устанавливать и переустанавливать операционные системы, вы меня поймете. В промежутках я возвращался к работе программ в Windows 10. Была у меня и мысль использовать Wine — поддержку про- грамм Windows в Linux. Но... Рис. 19.4. Добавление компилятора из plug ins программы System Workbench
246 Компьютер в лаборатории радиолюбителя I Истина не в Wine Пытаясь совладать с работой двух программ, которые предназначены для совместной работы, я неоднократно обра- щаюсь за помощью к Интернету, читаю статьи, где все про- сто и логично. Читаю сообщения на форумах. Ни отладка, ни загрузка программы в модуль STM32F103C8 не получаются. В разных вариантах настроек я получаю разные сообще- ния. Так, если при отладке я применяю настройку конфигу- рации отладчика с ручной установкой (рис. 19.5), то вижу реакцию программатора ST-Link, что-то происходит и в про- грамме, но меня смущает то, что загрузка программы в модуль STM32F103C8 не работает. Для тестовой программы я использую, что и вам советую, самую простую программу: GPIOC->ODR Л= GPIO_PIN_13; HAL Delay(lOOO); тттшш Рис. 19.5. Настройка конфигурации отладчика
Глава 19. Модуль STM52F105C8 и System Workbench в ROSA Linux 247 Эти две строки вставляются, как и положено, в раздел while(l) шаблона, созданного программой CubeMx. Может быть, это не к месту, но, если для тех, кто давно зна- ком с языком C++, мои примечания не нужны, для остальных они могут быть полезны. ПРИМЕЧАНИЕ. GPIOC - означает порт С структуры вводов/вы- водов общего назначения. Доступ к элементам класса или структуры может быть осуществлен двумя операциями - операцией точка и операци- ей стрелка. Доступ через объект осуществляет- ся с помощью операции точка, а доступ же через указатель на объект осуществляется через опе- рацию стрелка. Если сместиться ниже в файле main.c, то можно найти такую строку: GPIO_InitStruct.Pin = GPIO_PIN_13; в этом случае доступ к свойству структуры осуществляется с помощью оператора точки. GPIOx_ODR — это регистр вывода данных. Оператор А= побитовое исключающее «ИЛИ» совместно с оператором присваивания. А то, как можно переключать вывод микроконтроллера, вы найдете, если внимательно про- смотрите файл stm32flxx_hall_gpio.c. Просматривая файл, вы наверняка обнаружите функцию: void HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uintl6_t GPI0J>in) { /* Check the parameters */ assert_param(IS_GPIO_PIN(GPIO_Pin)); GPIOx->ODR A= GPIO_Pin; Командой из этой функции мы и воспользовались.
248 Компьютер в лаборатории радиолюбителя Рис. 19.6. Отладка в программе System Workbench, установленной в Linux Вернемся к тестовому проекту. После настройки можно наблюдать, используя инструментальную панель отладчика, изменение в регистре ODR (рис. 19.6). ПРИМЕЧАНИЕ. При отладке лучше закомментировать строку паузы. Иначе, как мне кажется, придется манипу- лировать пошаговым режимом и запуском, тре- бующим выключение через секунду, если пауза за- дана секундной (рис. 19.7). И вы можете наблюдать за светодиодом в процессе отладки. Он зажигается и гаснет при изменении значения в регистре ODR. Для загрузки программы в микроконтроллер я изменяю настройку в конфигурации Run. Но перед этим исправляю файл конфигурации, созданный в программе STM32CubeMx:
Глава 19. Модуль STM32F103C8 и System Workbench в ROSA Linux 249 Рис. 19.7. Изменения в регистре ODR # use hardware reset, connect under reset # reset_config srst_only srst_nogates # This is an testl board with a single STM32F103C8Tx chip. # Generated by System Workbench for STM32 source [find interface/stlink-v2-l.cfg] set WORKAREASIZE 0x5000 transport select "hla_swd" set CHIPNAME STM32F103C8Tx source [find target/stm32flx_stlink.cfg] # use hardware reset, connect under reset reset_config none Этот файл создается в папке проекта, и называется его име- нем с расширением .cfg. Изменению подверглась последняя строка, которую я выделил курсивом выше. И вот настройки конфигурации Run (рис. 19.8). Настройка сводится к указанию на исправленный файл конфигурации. Можно нажать кнопку Apply, а затем кнопку Run этого диалогового окна, чтобы загрузить программу в модуль (рис. 19.9).
250 Компьютер в лаборатории радиолюбителя Рис. 19.8. Настройка конфигурации для загрузки программы в микроконтроллер Рис. 19.9. Программа загружена в модуль
Глава 19. Модуль STM52F105C8 и System Workbench в ROSA Linux 251 Светодиод на плате STM32F103C8 мигает, но я вам сове- тую перепроверить это, изменив длительность паузы с одной секунды на три. Если режим мигания меняется, цель, похоже, достигнута. Я не уверен, что в любом другом дистрибутиве, исключая ROSA, вам не понадобятся другие «танцы с бубном», но хотя бы здесь результат есть. Поэтому можно вернуться к первоначаль- ному плану. А второй дистрибутив Linux ROSA я хочу оставить, чтобы проверить установку всего необходимого для работы с Code::Blocks. He получится ли это повторением главы о при- ключениях?!
ГЛАВА 20 НЕСКОЛЬКО ПРОСТЫХ ПРИМЕРОВ для STM32CUBEMX и SYSTEM WORKBENCH I Кнопка и светодиод (возвращение) Я хочу вернуться к программе с кнопкой и светодиодом. При этом не исключаю новых приключений, поэтому буду повторять все действия по созданию проекта, его отладке и загрузке. Начну я с запуска STM32CubeMx, где проведу все настройки для создания проекта (рис. 20.1). Когда шаблон проекта сгенерирован, когда, используя кнопку «Открыть проект», мы переместимся в программу System Workbench, можно добавить следующие строки после while(l): if (HAL_GPIO_ReadPin(GPIOC, GPI0_PIN_14) == 0 ) { (*GPIOC).BSRR = GPI0_BSRRJBS13; } else { GPIOC->BSRR = GPI0_BSRR_BR13; } Теперь можно и собрать проект (Project^Build Project). Об успешном завершении этого вы получите подтверждение в окне сообщений (рис. 20.2). Можно перейти к отладке и загрузке проекта.
Глава 20. Несколько простых примеров для STM32CubeMx 253 Рис. 20.1. Настройки в программе CubeMx для создания шаблона Рис. 20.2. Удачная сборка проекта Или нет? Конечно, я забыл еще один момент при созда- нии шаблона в CubeMx. Я забыл добавить для входного вывода встроенный подтягивающий резистор. Что ж, может быть,
254 Компьютер в лаборатории радиолюбителя Рис. 20.3. Исправление в программе CubeMx на закладке Configuration оно и к лучшему. Поскольку я хочу проверить еще одно, что небезынтересно: программа System Workbench загружается довольно долго. Сейчас следовало бы завершить работу этой программы, запустить CubeMx, сделать исправления и вновь запустить System Workbench. Но я хочу проверить, насколько это нужно? То есть, я запущу CubeMx, внесу исправление (рис. 20.3). Теперь сгенерирую новый шаблон и открою проект в System Workbench. И проект открывается, а программа начинает вносить изменения в переделанный проект. Я не знаю, нужно ли это, но повторяю сборку проекта, надеюсь, уже переделанного. ПРИМЕЧАНИЕ. И еще одно, если вы работали над другим проек- том, то он останется в менеджере проекта.
Глава 20. Несколько простых примеров для STM32CubeMx 255 Вы можете указать активный проект и собирать его, исполь- зуя ранее обозначенный пункт основного меню. Но, если вы ненароком выберете сборку всех проектов (Build All), то собе- рутся все проекты, которые есть в окне менеджера. Позже вы сможете создавать проекты функциональными частями, собирая их в одном проекте, но на первых порах я бы советовал удалить другие проекты из списка. Сделать это несложно: достаточно выделить ненужный проект, щелкнуть правой клавишей мышки и выбрать пункт «Удалить» из выпа- дающего меню (рис. 20.4). Сам проект при этом не будет удален. Он будет удален только из базы данных программы. Теперь можно приступить к отладке, подключив к порту USB программатор, к которому подключен модуль STM32F103C8. И не забудьте подправить файл конфигурации проекта, заменив строку: reset_config srst_only srst_nogate,- строкой: reset_ config none. Рис. 20.4. Удаление ненужного проекта из списка
256 Компьютер в лаборатории радиолюбителя I Отладка, или новые приключения Смысл проекта прост: ♦ когда кнопка не нажата (вывод PC 14), светодиод (вывод PC 13) не горит; ♦ когда кнопка нажата — горит; ♦ кнопка подключена к выводу и земле. После правки файла конфигурации запускаем сборку проекта (Project-+Build Project), настраиваем режим отладки (Run-+Debug Configurations), задавая ручную настройку (на закладке Debugger manual spec) с ST-LinkV2 и SWD. Запускаем отладку (Run->Debug) или просто используем кнопку Debug в диалоге настройки... Удачное завершение приключений, описанных в предыду- щей главе, настроило меня на оптимистический лад, захоте- лось быстрее описать процесс отладки программы. В спешке, а это не самый лучший советчик в подобных обстоятельствах, я не понял, отчего модуль STM32F103C8 перестал опознаваться программой (рис. 20.5). Для загрузки программы в модуль можно использовать отдельную программу для программатора ST-Link. Но нет, и эта Рис. 20.5. Странный результат работы программы
Глава 20. Несколько простых примеров для STM32CubeMx 257 программа не справляется с загрузкой в модуль бинарной про- граммы, созданной при сборке программой System Workbench. Это файл с расширением .bin. Программа загрузки то пред- лагает при загрузке файла нажимать кнопку reset на плате STM32F103C8, то изменить режим загрузки. Я вспоминаю, что при первом знакомстве с STM32 попадал в такую ситуацию, а то, как я из нее выходил, вспоминается не сразу. В Windows в разделе программ от STMicroelectronics есть программа STMFlashLoader (рис. 20.6). Тогда, когда я впервые столкнулся с подобной проблемой, мне пришлось пожалеть, что я не приобрел переходник с USB на TTL (рис. 20.7). Выводы RxTx этого переходника, переключенного на 3,3 В, соединяются с выводами А9 и А10 модуля STM32F103C8, для питания которого можно подключить его кабелем ко второму USB порту или использовать питание переходника. Переходник появляется в системе как виртуальный СОМ-порт, который выбирается программой Flash Loader (рис. 20.8). Рис. 20.6. Flash Loader в Windows
258 Компьютер в лаборатории радиолюбителя Рис. 20.7. Переходник USB/TTL шттштшзж Рис. 20.8. Выбор подключаемого порта в программе Flash Loader После загрузки бинарного файла в модуль STM32F103C8 он вновь готов к работе со всеми программами. Когда я начинал эксперименты с STM32, я купил програм- матор ST-Link (рис. 20.9).
Глава 20. Несколько простых примеров для STM32CubeMx 259 Рис. 20.9. Программатор ST-Link Мне казалось, что этого будет достаточно. И это так, если бы не проблемы с «пропиской» модуля STM32. Впрочем, не буду лукавить, я обошелся самодельным переходником, который некогда сделал для рассказа об интерфейсе RS485. Разбираясь с отладкой, я пытался повторить установку ком- пилятора, которую сделал в ROSA 9, и не она ли стала причи- ной проблем. Поэтому я удалил программу System Workbench тяштштш тш Рис. 20.10. Приглашение к работе программы Workbench
260 Компьютер в лаборатории радиолюбителя Рис. 20.11. Отображение процесса работы в строке состояния и папку ее рабочего пространства, созданную ею, а затем вновь повторил установку, в этот раз без «самодеятельности». По завершении установки и запуска программы, дождавшись появления приглашения (рис. 20.10), я перезагрузил виртуаль- ный компьютер (напомню, что ROSA Linux у меня в VirtualBox) и вернулся к отладке программы. Вспоминая предыдущую спешку, я дождался, когда про- цесс^установки всего необходимого завершится. Обращайте внимание на правый нижний угол рабочего поля программы (рис. 20.11). Вероятно, не стоит «тормошить» программу, пока в строке состояния что-то происходит. I Отладка программы работы светодиода и кнопки Выявляя проблемы, я предпочел работать с самой простой программой с мигающим светодиодом — легче и проверить
Глава 20. Несколько простых примеров для STM32CubeMx 261 отладку, и разобраться с загрузкой. Можно при загрузке менять длительность паузы, чтобы убедиться в том, что программа загрузилась правильно. Теперь, когда я вернулся к отладке программы с кнопкой и светодиодом, я вспомнил, что работала она, что называется, «с точностью до наоборот». То есть, когда кнопка не нажата, све- тодиод горит, а при нажатой кнопке гаснет. Поэтому я решил изменить программу: if (HAL_GPIO_ReadPin(GPIOC, GPI0_PIN_14) == 0) { HAL_GPIO_WritePin(GPIOC_PIN_13,1); } else { HAL GPIO WritePin(GPIOC PIN 13,0); Меняя единицу и ноль в параметрах вывода 13 местами, можно получить желаемый результат и понять, как получа- ется правильно. Однако сейчас меня более всего интересует процесс отладки. Настроив, как ранее я опробовал, отладчик, я несколько раз запускал отладку. Какие-то проблемы оста- вались. Тогда я решил начать все с самого начала, запустить CubeMx, сгенерировать новый шаблон и попытаться работать уже с ним. После запуска CubeMx я обратил внимание на то, что край- няя справа иконка на инструментальной панели преврати- лась в зеленую стрелку, направленную вниз. Нажав на нее, я, как оказалось, запустил процесс обновления программы STM32CubeMX. Следовало бы прочитать, что нового, что изме- нилось в программе, но цель была иная, а обратил я внима- ние только на изменение внешнего вида списка моделей (рис. 20.12). Удаление папки workspace очистило окно менеджера про- екта в System Workbench, и после правки файла конфигурации (на всякий случай, чтобы не забыть), который создается при сборке проекта, запустилась отладка проекта (рис. 20.13). В правом верхнем окошке отображения состояния пере- менных и регистров есть закладка I/O Re (так она видна сей- час на экране), она-то нам и нужна. Если этой закладки по
262 Компьютер в лаборатории радиолюбителя Рис. 20.12. Изменение вида списка моделей STM32 Рис. 20.13. Работающий отладчик программы System Workbench
Глава 20. Несколько простых примеров для STM32CubeMx 263 шш&ж . ^^^^ Е ■ -. Рис. 20.14. Раздел меню для добавления закладки в окно наблюдения какой-то причине нет, то ее можно добавить в окно наблюде- ния (рис. 20.14). И обратите внимание: при выборе этой закладки появля- ется подсказка (рис. 20.15) о том, как «оживить» содержимое регистров. Нас в данном случае интересует порт С (GPIOC), где с выводом 13 соединен светодиод, а с выводом 14 кнопка. Выбираем регистр ODR порта С. После запуска и приостановки отладки (иконка паузы на инструментальной панели отладки) двойной щелчок по нужным выводам отображает их состояние. Если щелкнуть по отображению значения бита 14, то можно изменить его состояние, вписав новое значение. Напомню, что этот вывод «подтягивается» встроенным резистором к плюсу питания, что отражается единицей, когда кнопка не нажата. Нажимая кнопку, мы переводим это значение в нулевое. Что мы можем и сделать сейчас (рис. 20.16). Запустим программу в режиме отладки еще раз, еще раз ее приостановим, когда вывод 14 «заземлен». И увидим то, что
264 Компьютер в лаборатории радиолюбителя В»1: Рас. 20.15. Отображение состояния регистров Рас. 20.16. Виртуальное нажатие на кнопку
Глава 20. Несколько простых примеров для STM32CubeMx 265 lillii Рис. 20.17. Подготовка к загрузке программы в модуль шттттм Рис. 20.18. Изменение активного режима работы
266 Компьютер в лаборатории радиолюбителя изображено на рис. 20.16. Изменение состояния бита 14 при- вело, как мы и хотели, к изменению состояния бита 13. Завершив отладку, мы можем загрузить программу в модуль STM32F103C8. Для этого настроим конфигурацию загрузки (Run), как показано на рис. 20.17. Загруженная программа работает, в чем можно убе- диться, перемыкая выводы С14 и G (GND) на плате модуля STM32F103C8. Но мы работали в режиме отладки. И я очень подозреваю, что загрузили мы программу, имеющую фраг- менты программы, предназначенные для отладки. Поэтому, используя иконку на инструментальной панели (рис. 20.18), сменим активный режим. Соберем проект еще раз, загрузим программу еще раз. Чтобы разобраться, почему работает кнопка не так, как мы задумывали, что не мешает нам внести исправления «на ходу», следует обратиться к описанию микроконтроллера, где навер- няка найдется объяснение этому казусу.
ГЛАВА 21 STM32F103C8, УСТРОЙСТВО СИГНАЛИЗАЦИИ И ДРУГИЕ ПОЛЕЗНЫЕ ПРОГРАММЫ Сигнализация Многие начинающие любители «сразу рвутся в бой». Ищут довольно сложные устройства, которые пытаются собрать. Поступают они, как мне кажется, отчасти потому, что им кажется, будто простые программы бесполезны. На примере программы из главы 20 я хочу показать, что бесполезных про- грамм не бывает. Системы сигнализации часто работают с датчиками, име- ющими контакты реле (или транзистор, выполняющий эту "функцию), которые замыкаются или размыкаются при сра- батывании датчика. Так ряд пожарных датчиков имеет кон- такты, работающие на размыкание при пожаре. Почему на размыкание? Сделано это по той причине, что датчики, как правило, рас- полагаются вдали от пульта сигнализации. Проводных соеди- нений бывает много, а, значит, возрастает вероятность того, что в каком-то месте соединение с датчиком будет нарушено.
268 Компьютер в лаборатории радиолюбителя ПРИМЕЧАНИЕ. I 4* i I Чтобы проверить целостность соединения, дат- чик блокирован диодом, включенным встречно по отношению к штатному питающему напряже- нию, а при срабатывании датчика полярность пи- тания меняют. Если ток в цепи протекает (через диод), то можно быть уверенным в том, что сра- ботал датчик, а не произошел обрыв проводов. Но мы можем пока об этом не думать, поэтому используем предыдущий вариант — кнопка не нажата, все хорошо. Кнопка нажата — тревога. Итак. while (1) { if (HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_14) == 0 ) {• while (HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_14)'== 0) { GPIOC->ODR Л= GPIO_PIN_13; HALJDelay (500); } } else { GPIOC->BSRR = GPIO_BSRR_BR13; } } Я объединил две программы: мигание светодиодом и кнопка со светодиодом. Программа задумана для проведе- ния эксперимента, поэтому кнопка работает на подключение вывода микроконтроллера к земле. После процедуры создания шаблона с помощью CubeMx, после перехода в программу System Workbench можно доба- вить целевой фрагмент текста. Обращайте внимание на один нюанс (рис. 21.1). После изменения текста основной программы в названии файла появляется звездочка. Нужно после появления этого «сигнала» сохранить файл перед его сборкой. Подготовив конфигурацию к отладке, запустив отладку, можно «оживить» регистры и изменить состояние виртуальной кнопки (рис. 21.2), щелкнув левой клавишей мышки в окошке значения.
Глава 21. STM32F103C8, устройство сигнализации и другие... 269 Рис. 21.1. Добавление фрагмента текста в основную программу Рис. 21.2. Изменение состояния в регистре
270 Компьютер в лаборатории радиолюбителя Рис. 21.3. Изменение состояния бита 13 Рис. 21.4. Окно кода без основного файла
Глава 21. STM32F103C8, устройство сигнализации и другие... 271 Запуск отладки на исполнение с последующей приостанов- кой (иконка паузы на инструментальной панели отладчика) покажет изменение состояния светодиода (рис. 21.3). Выполняя отладку, дописывая программу и вновь отлажи- вая ее, легко сделать что-то, что делать вы не планировали. Так я случайно удалил из окна кода файл main.c (рис. 21.4). Используя поиск (Search), находим файл — окно поиска открывается после ввода имени файла в окне диалога. Двойным щелчком по находке вновь открываем код основной программы (рис. 21.5). Как и многие редакторы других сред разработки, текстовый редактор программы System Workbench доброжелательно под- сказывает вам во многих случаях. Так обилие фигурных скобок мешает разобраться с ошибками. Однако если выделить одну из скобок, парная ей будет выделена редактором (рис. 21.6). Выделив нижнюю скобку, завершающую цикл while(l), вы получите выделенную парную к ней скобку. Рис. 21.5. Восстановление основного файла в окне кода программы
272 Компьютер в лаборатории радиолюбителя ■С Рис. 21.6. Подсказка редактора со скобками ПРИМЕЧАНИЕ. Если придумать, как сделать переполюсовку ли- нии с датчиком так, чтобы можно было прочи- тать состояние линии с помощью цифрового входа микроконтроллера, то можно продолжить эксперименты с программой и отлаживать ее не только виртуально, но и на беспаечной макетной плате. Я не буду спорить, заранее согласен^ что для такой простой программы использовать микроконтроллер STM32 не резон, можно использовать простую модель PIC или AVR-контроллера. Но, если вы надумаете подключить к устройству сигнализа- ции радиоканал, если надумаете использовать Интернет, а такое может со временем случиться, STM32 «потянет» все эти задумки.
Глава 21. STM52F105C8, устройство сигнализации и другие,,. 273 А мне хотелось показать, что и простые программы могут оказаться полезны. Главное не в сложности программы, а в том, чтобы знать, для чего программу (устройство, конечно) использовать. STM32F1O3C8 I Linux-Windows II Все предыдущие эксперименты я проделал в виртуальной машине, с установленным дистрибутивом ROSE Linux. Но все это можно сделать и в Windows. Более того, мне сейчас стало интересно, можно ли программу, написанную в Linux исполь- зовать в Windows? Отчего бы не попробовать... Скопировав проект, созданный в ROSA 9, я открываю его, используя закладку Welcome (рис. 21.7). В рабочее время для удобства я удаляю эту закладку, но ее можно открыть, если заглянуть в раздел Help основного меню. Рис. 21.7. Пункт загрузки проекта, созданного ранее в Linux (или в Windows)
274 Компьютер в лаборатории радиолюбителя Рис. 21.8. Диалог выбора проекта для загрузки в System Workbench При выборе этого раздела, предлагаемого для начала работы, появляется диалоговое окно (рис. 21.8), где можно использовать кнопку Browse, чтобы указать путь к проекту и сам проект. ВНИМАНИЕ. Как во многих случаях работы с программами, желательно избежать кириллических названий и пробелов в названиях директорий. Я не уверен, что путь: Рабочий стол\Мой проект, не принесет приключения, которые я имел при написании этой главы. О них я, пожалуй, расскажу в приложении в назидание самому себе. Кнопка Finish диалога открывает его в Workbench. Если заставка Welcome не сворачивается, открывая рабочее поле
Глава 21. STM32F103C8, устройство сигнализации и другие... 275 Рис. 21.9. Иконка восстановления рабочего поля программы программы, я встречал такой поворот событий, воспользуйтесь иконкой левой инструментальной панели (рис. 21.9). После появления программы в редакторе текста можно убе- диться, что это та же программа, которую вы написали в Linux (рис. 21.10). Можно убедиться, что она не отличается от программы, соз- данной в Windows, но более убедительным будет проверка ее работы в режиме отладки (рис. 21.11). Не забудьте настроить конфигурацию отладки, выбрав программный сброс модуля. Рис. 21.10. Программа, созданная в Linux и открытая в Windows
276 Компьютер в лаборатории радиолюбителя Рис. 21.11. Отладка Linux программы в Windows Дождитесь, когда завершится перестройка проекта с новой конфигурацией отладчика — файл конфигурации должен пере- писаться. И можно отлаживать программу. Поскольку нет существенной разницы, где создавался про- ект, я продолжу рассказ о System Workbench, используя Windows вариант программы, мне так удобнее. I Измерение постоянного напряжения с помощью АЦП Многие модели микроконтроллеров имеют в своем составе аналого-цифровой преобразователь. STM32 не исключение, но АЦП в составе модели STM32F103C8 имеет 12 разрядов (и АЦП два, оба 16 канальные). То есть, микроконтроллер использует 12 бит для получения значения постоянного напряжения в рамках, оговоренных в описании.
Глава 21. STM32F1O3C8, устройство сигнализации и другие... 277 Поскольку речь зашла про описание, я позволю себе при- вести вводную его часть про АЦП. ЭТО ПОЛЕЗНО ЗНАТЬ. 12-битовый АЦП последовательного приближе- ния имеет до 18 переключаемых каналов, позво- ляющих измерять 16 внешних и два внутренних источника. Преобразование разных каналов мо- жет происходить в единичном, продолжающемся, сканирующем и бесконечном режимах. Результат оцифровки сохраняется в 16-битовом регистре с записью слева-направо или наоборот, по выбору. Аналоговое сторожевое устройство позволяет приложению обнаруживать, когда входное напря- жение выходит за пределы (верхний или нижний — порог), заданные пользователем. Тактовый гене- ратор АЦП формируется сигналом от PCLK2 с помощью предделителя, и его частота не долж- на превышать 14 МГц. Настройку STM32CubeMx мы пока сведем к выбору первого канала ADC1, что соответствует выводу РАО. Создадим шаблон (рис. 21.12), который затем откроем в System Workbench (кнопка Open Project в диалоге). В шаблоне программы создается много файлов. Присмотритесь к файлам hal. Сейчас заглянем в файл stm32f lxxjial_adc.c, откуда выберем нужные нам функции. А в раздел переменных добавим такую запись: /* Private variables */ uintl6_t dig = 0; while (1) { HAL_ADC_Start(&hadcl); dig = HALJJXJ5etValue(&hadcl); /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */
278 Компьютер в лаборатории радиолюбителя Рис. 21.12. Создание шаблона программы в СиЬеМх Рис. 21.13. Диалоговое окно отладчика, где следует указать рабочий файл
Глава 21. STM32F105C8, устройство сигнализации и другие... 279 Настроим конфигурацию отладчика, указав на программ- ный сброс, после чего соберем проект. Дождемся полного завершения работы по сборке, обращая внимание на пра- вый нижний угол окна программы, где отображается про- цесс работы. Когда сборка завершена, откроем конфигурацию отладчика (Run-+Debug Configurations) еще раз. Двойным щелч- ком по выбранной конфигурации (в данном случае ADC1 Debug) откроем диалог. Окно с указанием файла пусто (рис. 21.13). Воспользуемся кнопкой Browse для указания пути к файлу с расширением .elf. Нажмем кнопку Apply, теперь можно под- ключить программатор ST-Link и запустить отладку кнопкой Debug. В следующем диалоге достаточно нажать ОК, чтобы начался процесс подготовки к отладке. Следует дождаться его полного завершения (рис. 21.14). Кнопка Yes откроет проект в режиме отладки. Если этот процесс в Linux выглядит несколько иначе (я использовал Рис. 21.14. Завершение подготовки к отладке проекта
280 Компьютер в лаборатории радиолюбителя Рис. 21.15. Опыты с отладкой программы работы с АЦП CubeMx версии 4.23.0 и System Workbench 4.S.4 Mars2), то отли- чается он незначительно. Полагаясь на предыдущий опыт отладки, я пользуюсь закладкой I/O Registers, где нахожу раздел ADC1, в котором открываю, как мне кажется, правильный регистр данных (рис. 21.15). Первый опыт я провожу, замыкая вывод АО на землю, останавливаю отладку и делаю снимок экрана, а для второго опыта подключаю батарейку. Проводя подсчет полученного результата, я получил зна- чение напряжения 1,62 В, но батарейка имеет не более 1,5 В. Или я посчитал неверно, или посмотрел не там. Но тот факт, что отладка проекта работает, меня пока устраивает.
Глава 21. STM32F103C8, устройство сигнализации и другие... 281 Передача данных | через USARTI Использование встроенного в микроконтроллер модуля последовательной передачи данных во многих случаях удобно. Проводное соединение с интерфейсом RS485 работает на рас- стояниях до сотен метров. При этом ни соединительные про- вода не создают помех, ни им никто не мешает. Удобно. У модуля STM32F103C8 не один порт USART, что еще удоб- нее. Хотя нам сейчас хватит одного порта. Начало проекта, как обычно, это STM32CubeMx (рис. 21.16). Вы, я полагаю, заметили, что в проекте предполагается использовать АЦП — не зря же мы возились с этим встроен- ным модулем в предыдущем разделе. И идея опыта проста — считываем постоянное напряжение и передаем данные через порт USART. Рис. 21.16. Настройка шаблона программы
282 Компьютер в лаборатории радиолюбителя ПРИМЕЧАНИЕ. Если прежде АЦП использовалось в простом ре- жиме измерения напряжения, то теперь можно перевести модуль в режим непрерывных циклов измерения напряжения. Для этого откроем закладку Configuration, где выберем раз- дел Analog и нажмем кнопку ADC1. В диалоговом окне разре- шим продолжающийся режим работы (рис. 21.17). Из программы предыдущего раздела возьмем все, что каса- ется считывания напряжения модулем АЦП. Затем заглянем в файл stm321xxjial_uartc. Здесь есть то, как задать скорость работы порта: huartl.Init.BaudRate = 115200; Рис. 21.17. Настройка модуля АЦП
Глава 21. STM32F103C8, устройство сигнализации и другие... 283 huartl определяет US ART 1 в структуре микроконтроллера. Выбранная скорость работы последовательного порта отправ- ляется в раздел int main(void). ПРИМЕЧАНИЕ. Добавление кода программы в шаблон требует соблюдения разметки, сделанной при генерации файла программой CubeMx. Так, переменные про- писываются на своем месте, настройки на своем, а сама рабочая часть программы в цикле while(l). Вместо двух переменных для двух частей числа, измерен- ного АЦП, я использую массив с двумя ячейками, куда и запишу данные для отправки. Программа выглядит так: /* Private variables */ uint!6_t dig = 0; uintBJ: digj?art[2] = {0,0}; int main(void) { huartl.Init.BaudRate = 115200; /* Reset of all peripherals,... */ HAL_Init(); /* Configure the system clock */ SystemClock_Config () ; /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_ADCl_Init(); MXJJSARTlJJART_Init () ; ADC1-XX2 = 5; HALJ)elay(lOOO); while (1) { HU_ADC_Start (Shadd) ; dig = HAL_ADC_GetValue(&hadcl) ; digjpart[O] * dig»8; dig_pazt[l] = dig&OxFF; HALJJARTJIransmit(&huartl, digjpart, 2, 100); HAL_Delay(5000);
284 Компьютер в лаборатории радиолюбителя ПРИМЕЧАНИЕ. Я выделил жирным шрифтом те строки, что до- бавил в программу. В этот раз для проверки работы программы я воспользу- юсь другим приемом. Для работы с микроконтроллерами AVR удобно использовать программу Atmel Studio (некогда AVR Studio), а с Atmel Studio приходит очень удобная программа Data Visualizer. Подключив модуль STM32F103C8 через пере- ходник TTL/RS232 к СОМ-порту, можно наблюдать происходя- щее в терминале (рис. 21.18). К входу АЦП подключена та же батарейка, что и в преды- дущем примере (рис. 21.15), но шестнадцатеричное значе- ние сейчас 0x71С меньше предыдущего. Это значение ближе к реальному напряжению. ■ИНННИ! Рис. 21.18. Проверка работы USART
Глава 21. STM32F103C8, устройство сигнализации и другие... 285 Измерение переменного напряжения | с помощью АЦП II Однополярное переменное напряжение можно измерять с помощью АЦП микроконтроллера. Смысл этого эксперимента: сканируем переменное напряжение, определяя его максималь- ное значение. Максимальное значение синусоидального пере- менного напряжения будет равно двойной амплитуде этого напряжения. Настройки программы CubeMx, включая настройку режима работы АЦП, остаются такими же, что и в предыдущем при- мере (рис. 21.16 и рис. 21.17). А код программы я скопирую из прежнего своего рассказа, откуда возьму и рисунок опыта, который тогда проделал. /* Includes */ ♦include "main.h" ♦include "stm32flxx_hal.h" /* USER CODE BEGIN Includes */ /* USER CODE END Includes */ /* Private variables */ ADC_HandleTypeDef hadcl; UART_HandleTypeDef huartl; /* USER CODE BEGIN PV */ /* Private variables */ uintl6 t digl = 0; // временная переменная для хранения результата uintl6_t dig = 0; // окончательная переменная для хранения результата uint8_t dig_part[2] = {0,0}; // массив для отправки данных uintl6_t acl =0; // переменная для оцифровки uintl6_t ac2 =0; // вторая переменная для оцифровки /* USER CODE END PV */ /* Private function prototypes */ void SystemClock_Config(void); void Error_Handler(void); static void MX_GPIO_Init(void); static void MX_ADCl_Init(void); static void MX_USARTl_UART_Init(void); /* USER CODE BEGIN PFP */
286 Компьютер в лаборатории радиолюбителя /* Private function prototypes */ /* USER CODE END PFP */ /* USER CODE BEGIN 0 */ /* USER CODE END 0 V int main(void) { huartl.Init.BaudRate = 115200; /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MCU Configuration */ /* Reset of all peripherals... */ HAL_Init(); /* Configure the system clock */ SystemClock_Config (); /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_ADCl_Init(); MX_USARTl_UART_Init(); ADC1->CR2 = 5; HAL_Delay(1000); /* USER CODE BEGIN 2 */ /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { for (int i = 0; i<1000;i++) { // определяем максимум оцифровки HAL_ADC_Start(&hadcl); acl = HAL_ADC_GetValue(&hadcl); HAL_ADC_Start(&hadcl) / ac2 = HAL_ADC_GetValue(&hadcl); if(acl>ac2) { digl = acl;} else{digl = ac2;} if(digl>dig) {dig = digl;} } digj?art[0] = dig»8; // начинаем подготовку данных для отправки dig_part[l] = dig&OxFF; HAL_UART_Transmit(&huartl, dig_part, 2, 100); HAL_Delay(1000);
Глава 21. STM32F103C8, устройство сигнализации и другие... 287 /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */ ПРИМЕЧАНИЕ. й?1 Скопированный фрагмент шаблона содержит больше, чем нужно для опыта. Сделано это по той причине, что я уже упоминал - код вашей про- граммы следует вставлять в определенные разде- лы шаблона. Надеюсь, просматривая приведенный выше текст, вы легче будете ориентироваться в дальнейшем, куда следует добавлять свой код. В прошлый раз я использовал, как и выше (рис. 21.18), для наблюдения программу Data Visualizer. Кстати, небольшое замечание об этой программе. После запуска программы по умолчанию используется интерфейс, который в данном случае не нужен (рис. 21.19). Первое, что следует сделать — это нажать на закладку (слева) Configuration. В появившемся окне есть разделы, кото- рые раскрываются с помощью стрелок слева от них. Раскроем раздел внешних соединений. На панели DGI Control Panel есть, как у всех окон Windows, кнопка «выключателя», иконка с крестиком. Удалим ненуж- ный нам интерфейс, дважды щелкнем левой клавишей мышки по Serial Port в левом окне, чтобы получить интерфейс СОМ- порта. У меня переходник TTVRS232 подключен к СОМ1, у вас это может быть виртуальный порт, который и следует выбрать. Сигнал переменного напряжения 1 кГц я получаю от моего осциллографа-приставки со встроенным генератором. К сиг- налу добавлена постоянная составляющая, которая делает его однополярным. После всех подготовительных операций результат опыта получился такой (рис. 21.20, определить результат в вольтах помогает калькулятор).
288 Компьютер в лаборатории радиолюбителя Рис. 21.19. Запуск программы Data Visualizer 000.0 Hz ■MS ш вяЗ!! ■■■и ш 8 т ш i i ИИ» ЗйЯВ i т 1 1 1 i Рис. 21.20. Результат эксперимента по измерению переменного напряжения
Глава 21. STM32F103C8, устройство сигнализации и другие... 289 Конечно, можно выполнить все перерасчеты в программе, выводя готовый результат, что я и предлагаю вам сделать. В Linux я не уверен, что программа Data Visualizer будет работать. СОВЕТ Можно поискать работающую программу тер- минала RS232, а можно наблюдать сигнал от STM32F103C8 на экране осциллографа. Или по- пробовать увидеть результат в программе System Workbench. Но можно провести еще один эксперимент. Подключение буквенно-цифрового дисплея | к STM32F1O3C8 II Работая с модулем Arduino легко осуществлять разного рода проверки, используя монитор порта. Видимо, я не стану отри- цать, это подтолкнуло меня к мысли использовать для про- верки работы STM32F103C8 программу Data Visualizer. Хотя, если вспомнить прошлые опыты, справедливости ради отмечу, что эта программа мне понадобилась в качестве интерфейса к осциллографу на основе Arduino. ПРИМЕЧАНИЕ. Но, если в Windows эта программа есть, то, рабо- тая в Linux, возможно, лучше использовать бук- венно-цифровой дисплей.
290 Компьютер в лаборатории радиолюбителя Дисплеев существует множество: ♦ знаковые и графические; ♦ цветные и монохромные. В моем распоряжении недорогой дисплей, возможно, с кон- троллером 1602А, возможно, я уже не помню «фамилию» дис- плея, с другим контроллером, но дисплей двухстрочный из серии 16x2. При первых экспериментах с модулем STM32F103C8 я поль- зовался программой Keil uVisionS, соответственно, отыски- вал примеры работы с этой программой. Что-то получалось, что-то нет. Помогло чтение справки к контроллеру для дисплея gdml602. И, перечитывая сейчас тот рассказ, я обнаружил, что в первый раз не подключил вывод RW дисплея к модулю, чаще всего этот вывод соединяют с землей. СОВЕТ. Настройку шаблона, я считаю, что начинающим это крайне удобно, но и более опытным радио- любителям полезно, осуществим в программе STM32CubeMx (рис. 21.21). Используем выводы так: ♦ выход для передачи данных на дисплей (4 бита, что чаще всего делается) РВ12—РВ15; ♦ выводы для управления (RS и Е) PC 13 и PC 14. Нужно ли, нет, не скажу, но задаю источник тактирования. Подключение дисплея к модулю я в эксперименте осуще- ствил так (рис. 21.22). Для подключения дисплея можно было бы использовать один порт, но я не был уверен, что манипуляция с выводами управления не «зацепит» что-то в данных. Оригинал, с кото- рого я списывал, обращается ко всем 8 битам данных дисплея, по причине чего эту часть пришлось переделывать.
Глава 21. STM32F103C8, устройство сигнализации и другие... 291 Рис. 21.21. Настройка шаблона для работы с дисплеем РВ15* РВ14» РВ13* ► G PB12» Рис. 21.22. Соединение модуля STM32F103C8 с дисплеем
292 Компьютер в лаборатории радиолюбителя ПРИМЕЧАНИЕ. И, вообще, списывание всегда чревато ошибками (и не только своими). В частности, используя 16 битовые переменные (как в оригинале) я стол- кнулся с ошибками при преобразовании, что по- служило к замене всех переменных с типа беззна- ковых целых на беззнаковые байтовые. Принцип работы с дисплеем не самый сложный. Есть команды настройки и управления, их список можно найти в табл. 21.1. Эти команды выполняются при сигнале RS, рав- ном нулю. Сами команды записываются, как и данные, через выводы данных, когда меняется сигнал Е. Если верить диаграммам справки, это производится задним фронтом сигнала Е, когда он из нуля переходит в единицу и обратно (рис. 21.23). R/w\ VIH1 t VIL1 < tS"1 » VIL1 E / ► - DB0-DB7 < VIH1 VIL1 щ tr tw ^ VIH1^ . tsu2 L Aviu VALIDD tc th2 ATA К /viL1 У VIH1 \VIL1 VIL1 Puc. 21.23. Временная диаграмма сигналов при записи в контроллер дисплея
Глава 21. STM32F103C8, устройство сигнализации и другие... 293 Команды для дисплея вначале используются для его настройки. Выглядит это так: void lcd_init(void) { GPIOC->BSRR = GPIO_BSRR_BR13; // RS = 0 lcd_write_data(0x28); // задание 4 бита 2 линии 5x8 точек 00101000 HALJ)elay(l); lcd_write_data(0xC); // включение дисплея 00001100 HAL_Delay(l); lcd_write_data(0x6); // настройка режима ввода 00000110 HALJ)elay(l); lcd_write_data(0xl); // очистка 00000001 HAL_Delay(l); lcd_write_data(0x2); // возврат домой 00000010 HAL_Delay(l); GPIOC->BSRR = GPIO_BSRR_BS13; // RS = 1 } Паузы между командами в справке микросекундные, но было проще взять миллисекунду. Правильность инициализа- ции можно сверить с табл. 21.1 из справки к контроллеру. Функция записи данных выглядит следующим образом: void lcd_write_data(uint8_t data) { uint8_t h_data; // старшая четверка данных uint8_t l_data; // младшая четверка данных h_data = (data » 4); l_data = data & OxOF; GPIOB->ODR = h_data«12; // перемещаем половину данных (*GPIOC).BSRR = GPIO_BSRR_BS14; // записываем их HALJDelay(l); GPIOC->BSRR = GPIO_BSRRJBR14; GPIOB->ODR = l__data«12; // перемещаем вторую половину данных (*GPIOC).BSRR = GPIO_BSRR_BS14; // записываем ее HALJ)elay(l); GPIOC->BSRR = GPIO BSRR BR14;
Таблица команд для Инструкция Очистить дисплей Вернуться домой Набор режимов ввода Управление ON/OFF дисплея Сдвиг курсора или дисплея Набор функций контроллера 1602А Код инструкции RS 0 0 0 0 0 0 R/W 0 0 0 0 0 0 DB7 0 0 0 0 0 0 DB6 0 0 0 0 0 0 DB5 0 0 0 0 0 1 DB4 0 0 0 0 1 DL DB3 0 0 0 1 S/C N DB2 0 0 1 D R/L F DB1 0 1 I/D С - - - DBO 1 - SH в - - Таблица 21.1 Описание Записывает ООН в DDRAM и устанавливает DDRAM адрес ООН в АС Устанавливает DDRAM адрес в ООН из АС и возвращает курсор в исходное место, если он не там. Содержимое DDRAM не меняется. Задает курсору направление движения и разрешает сдвиг по всему дисплею. Управляющий бит включения и выключения дисплея (D), курсора (С) и мигания курсора (В). Управляющий бит смещения курсора, дисплея и направления без изменения DDRAM. Задает длину данных интерфейса 8-бит/4-бита, количество линий дисплея 2 или 1 и тип шрифта дисплея 5x11 точек или 5x8 точек. Занимает время (270 кГц) 1,53 мс 1,53 мс 39 мкс 39 мкс 39 мкс 39 мкс
Таблица 21.1 (продолжение) Инструкция Установка адресов CGRAM Установка адресов DDRAM Чтение флага занятости и адресов Запись данных в RAM Чтение данных из RAM Код инсгрукц RS 0 0 0 1 1 R/W 0 0 1 0 1 DB7 0 1 BF D7 D7 DB6 1 АС6 АС6 D6 D6 DB5 АС5 АС5 АС5 D5 D5 DB4 АС4 АС4 АС4 D4 D4 ИИ DB3 АСЗ АСЗ АСЗ D3 D3 DB2 АС2 АС2 АС2 D2 D2 DB1 АС1 АС1 АС1 D1 D1 DB0 АСО АСО АСО DO DO Описание Устанавливает адреса CGRAM в адресном счетчике. Устанавливает адреса DDRAM в адресном счетчике. Флаг занятости (BF) дает понять, занят ли контроллер внутренними операциями. Можно прочитать и содержимое адресного счетчика. Запись данных во внутреннюю RAM (DDRAM/ CGRAM). Чтение данных из внутренней RAM (DDRAM/ CGRAM). Занимает время (270 кГц) 39 мкс 39 мкс 0 43 мкс 43 мкс
296 Компьютер в лаборатории радиолюбителя В режиме работы с 4 битами данные записываютсядважды, сначала старшая часть, затем младшая. В данном случае порт В достаточно свободен, можно было бы использовать 8-бито- вый режим, но часто используют тот вариант включения, что показан на схеме, поэтому я остановился на таком варианте включения дисплея. Отдельная функция команды нужна для перевода курсора, если это нужно, и для «возвращения домой». Всю программу я приведу ниже, а сейчас хочу сказать еще об одном. Оказалось удобным использовать функцию sprintf из библиотеки stdio, что потребовало включения заголовочного файла. Эта функция отличается от printf тем, что записывает перемен- ную в нужном формате в заданный буфер. ПРИМЕЧАНИЕ. Первоначально я не использовал эту функцию, поэтому собирался выводить значение в мил- ливольтах. Для этого я использовал массив для пяти символов. Позже я не менял массив, используя его в качестве буфера, работающего с функцией sprintf. Признаться, я был удивлен результату работы программы (рис. 21.24). Рис. 21.24. Вывод постоянного напряжения, измеренного АЦП модуля, на дисплей
Глава 21. STM32F103C8, устройство сигнализации и другие... 297 Вот программа полностью: /* Includes */ #include "main.h" ♦include r'stm32flxx_hal.h" Hnclude <stdio.h> /* USER CODE BEGIN Includes */ /* USER CODE END Includes */ //♦define lcd_rs (*GPIOC).GPIO_PIN_13 // чтобы не забывать о подключении //♦define lcd_e (*GPIOC) .GPIO_PIN_14 //♦define Icd_d4 (*GPIOB) .GPIO_PIN_12 //♦define Icd_d5 (*GPIOB).GPIO_PIN_13 //♦define Icd_d6 (*GPIOB).GPIO_PIN_14 //♦define Icd_d7 (*GPIOB) .GPI0J>IN_15 /* Private variables */ ADC_HandleTypeDef hadcl; /* USER CODE BEGIN PV */ /* Private variables */ uintl6J: volt = 0; char sVolt[5]; float o_yolt; /* USER CODE END PV */ /* Private function prototypes */ void SystemClock__Config (void); void Error_Handler(void); static void MX_GPIO_Init(void); static void MX_ADCl_Init(void); /* USER CODE BEGIN PFP */ /* Private function prototypes */ void lcd_init (void) ; void Icdjtritejstz(chaz*stz) ; void lcd_set_cvLZSor(uint8_t linefuint8^t pos); void Icdjvzitejcmd(\iint8_t cmd); void lcd_write_data(uint8_t data); /* USER CODE END PFP */ /* USER CODE BEGIN 0 */ /* USER CODE END 0 */ int main(void) { /* USER CODE BEGIN 1 */
298 Компьютер в лаборатории радиолюбителя /* USER CODE END 1 */ /* MCU Configuration */ /* Reset of all peripherals... */ HAL_Init(); /* Configure the system clock */ SystemClock_Config() ; /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_ADCl_Init(); 1ШС1-ХЖ2 = 5; lcd_init(); HALJ)elay(lOOO); /* USER CODE BEGIN 2 */ /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { HAL ADC_Staxt(Shadcl); volt = RALJiDC GetValue(Sbadcl); о volt ш volt*0.8058/1000; spxint£(sVolt, "Vdc: %1.4f", о volt); lcdjrrite_str (sVolt) ; HALJ)elay(5000); lcd_irrite_cmd(0x2); // возвращение домой /* USER CODE END WHILE */ /* USER CODE BEGIN-3-*A } /* USER CODE END 3 */ } /** System Clock Configuration */ void SystemClock_Config (void) { RCC_OscInitTypeDef RCC_OscInitStruct; RCC_ClkInitTypeDef RCC_ClkInitStruct; RCC_PeriphCLKInitTypeDef PeriphClklnit; /**Initializes the CPU, AHB and APB busses clocks */ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; RCC_OscInitStruct.HSIState = RCC_HSI_ON; RCC OscInitStruct.HSICalibrationValue = 16;
Глава 21. STM32F103C8, устройство сигнализации и другие... 299 RCC_OscInitStruct.PLL,PLLState = RCC_PLL_NONE; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_0K) { Error_Handler(); } /**Initializes the CPU, AHB and APB busses clocks */ RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_ CLOCKTYPE_SYSCLK |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APBlCLKDivider = RCC_HCLK_DIV1; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_ LATENCY_0) != HAL_0K) { Error_Handler(); } PeriphClklnit.PeriphClockSelection = RCC_PERIPHCLK_ADC; PeriphClklnit.AdcClockSelection = RCC_ADCPCLK2_DIV2; if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_0K) { Error_Handler(); } /**Configure the Systick interrupt time */ HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000); /**Configure the Systick */ HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK); /* SysTick_IRQn interrupt configuration */ HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0); ' } /* ADC1 init function */ static void MX_ADCl_Init(void) { ADC_ChannelConfTypeDef sConfig; /**Common config */ hadcl.Instance = ADC1; hadcl.Init.ScanConvMode = ADC_SCAN_DISABLE; hadcl.Init.ContinuousConvMode = DISABLE; hadcl.Init.DiscontinuousConvMode = DISABLE; hadcl.Init.ExternalTrigConv = ADC_SOFTWARE_START; hadcl.Init.DataAlign = ADC_DATAALIGN_RIGHT;
300 Компьютер в лаборатории радиолюбителя hadcl.Init.NbrOfConversion = 1; if (HAL_ADC_Init(&hadcl) != HAL_OK) { Error_Handler(); } /**Configure Regular Channel */ sConfig. Channel = ADC_CHANNEL_O; sConfig.Rank = 1; sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5; if (HAL_ADC_ConfigChannel(&hadcl, SsConfig) != HAL_0K) { Error_Handler(); /** Configure pins as * Analog * Input * Output * EVENT_OUT * EXT I */ static void MX_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStruct; /* GPIO Ports Clock Enable */ _HAL_RCC_GPIOC_CLK_ENABLE(); _HAL_RCC_GPIOD_CLK_ENABLE () ; _HAL_RCC_GPIOA_CLK_ENABLE (); • _HAL_RCC_GPIOB_CLK_ENABLE () ; /♦Configure GPIO pin Output Level */ HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13|GPIO_PIN_14, GPIO_PIN RESET); /♦Configure GPIO pin Output Level */ HAL_GPIO_WritePin(GPIOB, GPI0_PIN_12|GPI0_PIN_13|GPIO_ PIN_14|GPIO_PIN_15 |GPI0_PIN_3, GPIO_PIN_RESET); /♦Configure GPIO pins : PC13 PC14 */ GPIO_InitStruct.Pin = GPIO_PIN_13|GPIO_PIN_14; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL GPIO Init(GPIOC, &GPIO InitStruct);
Глава 21. STM32F103C8, устройство сигнализации и другие... 301 /*Configure GPIO pins : РВ12 РВ13 РВ14 РВ15 */ GPIO_InitStruct.Pin = GPIO_PIN_12|GPIO_PIN_13|GPIO_ PIN_14|GPIO_PIN_15; GPIO_InitStruct.Mode = GPI0_M0DE_0UTPUT_PP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); } /* USER CODE BEGIN 4 */ void lcd_write_data (uint8_t data) { uiut8_t hjdata; uint8_t l_data; h_data = (data » 4); l_data = data & OxOF; GPIOB->ODR = h_data«12; (*GPIOC).BSRR = GPI0_BSRR_BS14; HAL_Delay(l); GPIOC->BSRR = GPI0_BSRR_BR14; GPIOB->ODR = l_data«12; (*GPIOC).BSRR = GPI0_BSRR_BS14; HAL_Delay(l); GPIOC->BSRR = GPI0_BSRR_BR14; } void lcd_init(void) { GPIOC->BSRR = GPI0_BSRR_BR13; //rs = 0 lcd_write_data(0x28); // function set 4bit 21ine 5x8 dots HAL_Delay(l); lcd_write_data(OxC); // display on HAL_Delay(l); lcd_write_data(0x6); //entry mode set HAL_Delay(l); lcd_write_data(Oxl); //clear Oxl HAL_Delay(l); lcd_write_data(0x2); // return to home HAL_Delay(l); GPIOC->BSRR = GPIO_BSRR_BS13; //rs = 1 } void lcd_write_str(char*str) { do { lcd_write_data(*str) ; }while(*++str);
302 Компьютер в лаборатории радиолюбителя void Icd_write_and(uint8_t and) { GPI0C->BSRR = GPIO_BSBR_BR13; lcd_write_data (and); GPIOC->BSRR = GPI0_BSRR_BS13; ) void lcd_set_cuxsox (uint8_t Iine,vdnt8_t pos) { pos |= 0x80; if (line = 1) { pos += 0x40; ) lcd_write_and(pos); } /* USER CODE END 4 */ * @brief This function is executed in case of error occur- rence. * @param None * @retval None */ void Error_Handler(void) { /* USER CODE BEGIN Errorjtendler */ /* User can add his own implementation to report the HAL error return state */ while(1) /* USER CODE END Error_Handler */ } #ifdef USE_FULL_ASSERT /** * @brief Reports the name of the source file and the source line number * where the assert_param error has occurred. * @param file: pointer to the source file name * @param line: assert_param error line source number * @retval None */ void assert_failed(uint8_t* file, uint32_t line) { /* USER CODE BEGIN б */
Глава 21. STM32F103C8, устройство сигнализации и другие... 303 /* User can add his own implementation to report the file name and line number, ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ /* USER CODE END б */ } #endif * @} */ * 0} • */ / ** (C) COPYRIGHT STMicroelectronics *END OF FILE / ПРИМЕЧАНИЕ Обычно принято разделять программу на заголо- вочный файл и основной, но я не стал этого делать; более того, привел всю программу, выключая уже готовые ее части, чтобы было яснее, куда следует вставлять свои фрагменты кода. Их я выделил в тексте курсивом. Очевидно, что использование за- готовки избавляет от написания значительной ча- стшюда программы. Что.я и хотел показать. Если вам интересно провести аналогичный опыт, можете добавить кнопки, чтобы переключать измерение напряже- ния между измерением постоянного напряжения и перемен- ного, как это было сделано ранее. Для переменного напряже- ния можно выводить действующее значение синусоидального напряжения и напряжения прямоугольного меандра, для кото- рых существуют простые формулы пересчета от амплитудного значения к действующему. В Windows есть много разных программ для работы с моду- лем STM32F103C8. Вышеприведенную программу я использо- вал с Keil uVision5. Но сейчас скопировал свои фрагменты кода в System Workbench, не забыв настроить Debug Configuration,
304 Компьютер в лаборатории радиолюбителя Рис. 21.25. Отладка программы работы с дисплеем в System Workbench собрать проект, после чего указать файл с расширением .elf в диалоге настройки отладчика (Debug Configuration). И вот запуск отладки в System Workbench (рис. 21.25). ПРИМЕЧАНИЕ. ■ "\ Когда я покупал STM32F103C8 на Алиэкспресс, я заказал два модуля - при экспериментах всегда есть вероятность поломок. Позже мне помогло наличие двух модулей (оба живы и здоровы), когда появлялось что-то непонятное. Если вы намерены продолжить работу с этим успешным ARM-контроллером, то можете из одного модуля и дисплея сде- лать дополнительный отладчик. Соединив предыдущий вари- ант через USART с отлаживаемым модулем, можно работать при отладке так же, как это происходит в программе Arduino. Я не исследовал Linux на предмет всех доступных программ для работы с STM32F1G3C8, но есть одна программа, о кото- рой следует сказать. Причина этого проста: в этой программе можно создавать и приложения для компьютера, и приложе- ния для ARM-контроллера.
ГЛАВА 22 STM32F103C8 и CODE::BLOCKS в LINUX ROSA 10 Предваряя | начало работы I О том, как создавать приложения для компьютера в про- грамме Code::Blocks, вы можете прочитать в моих рассказах «О переводе одного руководства», которые можно найти на моем сайте [3]. В этих же рассказах есть руководство по языку Си++, которое я перевел, найдя его в Интернете, когда искал руковод- ство к CodeBlocks. При первом знакомстве с программой, уста- навливая все необходимое для работы с модулем, я встретил достаточное количество подводных камней, чтобы запутаться в порядке установки необходимых приложений. В дистрибу- тиве ROSA 8.1 у меня сейчас все работает. И было бы проще не возвращаться к вопросу о том, как и что... Но начну я, пожалуй, с того, как наладить работу про- граммы и модуля STM32 в дистрибутиве Linux. Программа STM32CubeMx уже установлена. И еще, после обновлений дис- трибутив стал идентифицироваться как ROSA 10. Я не против.
306 Компьютер в лаборатории радиолюбителя I Установка программы Code::Blocks и приложений Сама программа устанавливается простейшим образом — запускаем менеджер установки и удаления программ, вводим в строку поиска codeblocks (рис. 22.1). Рис. 22.1. Установка программы Code "Blocks Повторюсь, что пользователи советуют установить такой набор пакетов: ♦ gcc-arm-none-eabi ♦ binutils-arm-none-eabi ♦ libnewlib-arm-none-eabi Этих пакетов нет в готовом виде для дистрибутива ROSA. Признаться, и два последних пакета я так и не нашел. Но начать можно с установки компилятор, хотя он есть в программе System Workbench. По советам «бывалых» можно поискать компилятор в Интернете — достаточно ввести в поис- ковую строку arm-none-eabi (рис. 22.2). Но я хочу попробовать использовать пакет из программы System Workbench. Если компилятор работает с этой програм- мой, то должен работать и с Code::Blocks. По крайней мере, есть надежда, что будет работать.
Глава 22. STM32F103C8 и Code::Blocks в Linux ROSA 10 307 Рис. 22.2. Результат поиска компилятора для ARM в Интернете Я нахожу в разделе plugins компилятор (рис. 22.3). И копи- рую его в папку, которую назвал arm и разместил в домаш- ней директории. Пытаясь следовать советам, я «обыскиваю» Интернет в поисках второго пакета. ПРИМЕЧАНИЕ. Но нахожу его только в пакетах для дистрибу- тива Fedora 27. Правда, в готовом для установки виде. Однако для установки в другой дистрибутив. Что не мешает мне установить этот пакет. Нужно ли было это? Не могу сказать. В разделе /usr/bin появились компоненты компилятора, а другие разделы я не
308 Компьютер в лаборатории радиолюбителя Рис. 22.3. Файлы компилятора (и не только)
Глава 22. STM32F103C8 и Code::Blocks в Linux ROSA 10 309 Jam Gr.Huh Tcdav Рас. 22.4. Программа Makefile4CubeMx стал тщательно просматривать. Ведь для проверки, работает ли компилятор, нужно установить вспомогательную программу Makefile4CubeMx. Программа, насколько я могу судить, «переводит» шаблон, созданный программой STM32CubeMx для sw4stm32, в шаблон, который пригоден к использованию программой Code::Blocks. Поисковик (рис. 22.4), распаковка, установка. Чтобы установить эту программу, нужно назначить файл install в полученном наборе исполняемым, что часто прихо- дится делать, используя закладку Права, когда открыты свой- ства файла. При попытке двойным щелчком по файлу запустить уста- новку (иной раз помогает) ничего видимого не происходит, поэтому я переименовываю папку с программой, убрав пост- фикс master, и копирую в домашнюю директорию, где еще раз запускаю на установку в терминале: sudo . /install.
310 Компьютер в лаборатории радиолюбителя Рис. 22.5. Текст файла Makefile4CubeMx.py в текстовом редакторе ROSA Предварительно, как обычно, использую команду cd /home/Vladimir/ для перехода в домашнюю папку. Как я понимаю, установка создает в системных директо- риях ссылку на файл Makefile4CubeMx.py. Если открыть этот файл в текстовом редакторе (рис. 22.5), то следует обратить внимание на строки, указывающие расположение компиля- тора и утилиты для работы с программатором ST-Link. А для работы с программатором нужен пакет stlink. Я помню, что и в прошлый раз у меня что-то не получалось. В подтверждение этого в папке загрузок есть два варианта этого пакета. Через поисковик по запросу linux stlink можно найти пакет stlink-master. Загружаю, распаковываю, переношу в домашнюю папку и убираю постфикс master. Следуя совету по установке в файле Readme, использую предложенную команду, но... В этот ли раз, или раньше, появилась необходимость в дополнительной установке пакетов^. В менеджере установки программ пакетов, откликающихся на поиск, очень много. Я
Глава 22. STM52F105C8 и Code::Blocks в Linux ROSA 10 311 попытался выбрать базовые, а позже добавить пакеты до полу- чения решения проблем... Что-то не получается, поэтому я пробую установить дру- гой вариант stlink-1.3.1. Попытка убрать номер версии, чтобы не вводить его каждый раз в терминале, приводит к отказу. Приходится вернуть номер версии. В этот раз становится ясно, что не хватает файла libusb.h. Ищем пакет Hbusb-develop или что-то похожее. Пакеты такого рода содержат файлы, необхо- димые для разработчиков. Для многих сред разработки нужна установка таких пакетов. Аналогичный поиск я выполняю и для gtk-develop. Команда проходит после добавления файлов. Но... результатом всех усилий стало появление файла st-flash. Его я переношу командой sudo mv, предварительно обна- ружив в разделе Debug папки stlink-1.3.1, в папку/usr/local/bin: sudo mv st-flash /usr/local/bin/st-flash. Проба создать шаблон в CubeMx, запустить конвертер CubeMX2Makefile.py не дает желаемого результата. Помогает еще одно исправление в тексте этого файла — ввести полный путь к файлу компилятора. Рис. 22.6. Исправление текста конвертора CubeMX2Makefile
312 Компьютер в лаборатории радиолюбителя ■</>■ Рис. 22.7. Файл с расширением .cbp программы Code::Blocks Теперь работа файла конвертора завершается успешно. Появляется файл Code::Blocks (рис. 22.7). Этого результата я и добивался. Этот файл можно открыть двойным щелчком левой кла- виши мышки, что запускает программу Code::Blocks и импор- тирует шаблон, созданный программой STM32CubeMx. Однако попытка запустить сборку проекта для отладки вновь дает ошибку (рис. 22.8). Все ошибки отображаются в нижнем окне рабочего поля программы. Я поспешил. Необходимо настроить компилятор. Для этого открываем раздел настроек, Settings, где есть раздел Compiler (рис. 22.9). На закладке Toolchain executables следует указать все для сборки проекта: и компиляторы, и компоновщики, и отладчик. Рис. 22.8. Сообщение об ошибке при сборке проекта
Глава 22. STM32F103C8 и Code::Blocks в Linux ROSA 10 313 Рис. 22.9. Настройка компилятора для работы с микроконтроллером ARM Это еще не все. Используя команды (одну не вписанную в Readme) make debug и make release при переходе в папку stlink можно создать два раздела, в которых есть ссылки на библиотеки stlink. Эти три созданных файла (рис. 22.10) коман- дой sudo cp следует скопировать в раздел /usr/lib. Сталкиваясь с работой разных сред разработки программ в Linux, будь это программа для микроконтроллера или прило- жения Linux, я знаю, что потребуются некоторые усилия, чтобы привести программу к рабочему виду, который в полной мере тебя удовлетворяет. Начинающих пользователей Linux это пугает. Но любая универсальность, a Linux весьма универсаль- ная операционная система, связана с подобными трудностями. Следующая попытка приводит к новой проблеме (рис. 22.11). Я пробую добавить настройки компилятора (рис. 22.12). Есть раздел глобальных настроек.
314 Компьютер в лаборатории радиолюбителя Ш Ш В ттт шшш» Рис. 22.10. Файлы, которые надо перенести в раздел библиотек Рис. 22.11. Сообщение о новой ошибке Дополнительно я пробую еще раз использовать пакет stlink- master для создания двух папок простыми командами make debug и make release в терминале. Папки создаются в директо- рии stlink/build (рис. 22.13). В этот раз я внимательнее присматриваюсь к папкам Debug и Release. В них можно найти все утилиты для программатора ST-Link. Из этих папок я переношу в директорию /usr/local/ bin все файлы, относящиеся к stlink, их четыре. Но и это не помогло. По прошествии дня поиска решения проблемы, она реша- ется простым образом: комментированием нескольких строк в Makefile (рис. 22.14) проекта. Теперь проходит сборка проекта без ошибок и замечаний (рис. 22.15). За время работы с модулем STM32F103C8, а это
Глава 22. STM32F1O3C8 и Code::Blocks в Linux ROSA 10 315 Рис. 22.12. Глобальные настройки компилятора Рис. 22.13. Папки для отладки и выходного файла
316 Компьютер в лаборатории радиолюбителя Рис. 22.14. Изменение в файле сборки Рис. 22.15. Удачная сборка проекта
Глава 22. STM32F103C8 и Code::Blocks в Linux ROSA 10 317 несколько рассказов о нем, я повторял настройки программы Code "Blocks неоднократно. Я честно пытался запомнить все действия, включая неудачи и проблемы, я даже в последний раз записывал все действия (или почти все), но появление проблем заставляет совершать столько действий, что их и не упомнить, и не записать. Я не уверен, что описал все необходимое, хотя значительную часть, видимо, привел в этом рассказе. Более того, по прошествии некоторого времени все может изме- ниться — в прошлый раз некоторые проблемы отсутствовали. И, скорее всего, другой дистрибутив Linux потребует иных дей- ствий. Однако базовые установки, я надеюсь, останутся. Теперь в папке проекта появились файлы для загрузки и отладки (рис. 22.16). Но на этом приключения не заканчиваются. Для отладки следует еще настроить отладчик. Добавляем в отладку наш программатор (Settings-+Debugger, GDB/CDB Debugger, кнопка Create Config), назвав его ST-Link2. Затем, выделив его, указываем путь к файлу работы с отладчи- ком (рис. 22.17). Теперь добавим инструмент (в основном меню раздел Tools->Configure Tools). В диалоговом окне нажимаем кнопку шшш шйт I SHI Ш1ШШ ШЯШ Рис. 22.16. Файлы, созданные программой
318 Компьютер в лаборатории радиолюбителя Рис. 22.17. Диалог добавления отладчика -.- ;i Рис.22.18.Диалог настройки инструмента отладки Add, добавляем, скажем, бШШ^что потом.„нястраиваем (рис. 22.18) в диалоге настройки инструмента. Теперь все готово и к загрузке программы, и к ее отладке. Можно запустить наш инструмент stutil (основное меню
Глава 22. STM32F103C8 и Code::Blocks в Linux ROSA 10 319 Tools-+stutil). Должно появиться окно сервера gdb, которое можно свернуть, чтобы по окончании этапа отладки остано- вить работу утилиты, выключив ее обычным образом. Теперь можно запустить отладку (Debug-*Start/Continue), открыв, например, окно дисассемблера (Debug->Debugging Windows). И отладка работает (рис. 22.19). ПРИМЕЧАНИЕ. Можно еще добавить, что сборку проекта можно сделать для отладки, а можно сделать для гото- вой программы. Для этого достаточно переключить цель сборки (в окошке инструментальной панели, где сейчас обозначено Debug). Можно загрузить программу в микроконтроллер, используя в основном меню раздел Build-*Run или иконку инструменталь- ной панели с зеленым значком Play. Рис. 22.19. Отладка проекта
320 Компьютер в лаборатории радиолюбителя Рис. 22.20. Программа для прямой работы с программатором ST-Link И, если преодолеть необходимые настройки, то можно будет запустить stlink'gui. В предыдущей версии дистрибутива ROSA мне это удалось сделать без приключений. Эта утилита позво- ляет загружать рабочие файлы через программатор ST-LINK в модуль. Выглядит программа так (рис. 22.20). I Linux и Windows Программу, созданную в Linux можно открыть в Windows! Но настройки Code::Blocks в части расположения компилятора и других атрибутов проекта очень различны в этих операцион- ных системах. И в Windows достаточно программ для работы с модулем STM32F103C8. Можно использовать Keil uVision5 или System Workbench, чтобы избежать повторения приключений с установ- кой всего необходимого для работы в Code::Blocks с микроконтрол- лером. Можно использовать файлы исходного кода, чтобы внести изменения в шаблон, созданный программой STM32CubeMx.
ГЛАВА 23 ИСПОЛЬЗОВАНИЕ ПОРТА USB Почему USB? Одним из достоинств модуля STM32F103C8 является его способность работать с портом USB. В некоторых случаях это очень удобно. Об одном таком случае я хочу рассказать. Переводя книгу о создании осциллографа на основе модуля Arduino, я подумал, что неплохо бы рассказать о том, как это устроено. То есть, программа для Arduino была представлена, это так, но мои попытки связаться с автором на предмет раз- решения на перевод завершились неудачей. И, если автор будет против перевода, книгу с моего сайта придется удалить. А мне хотелось использовать для рассказа об осциллографе модуль STM32F103C8. Не для создания готовой приставки-осциллографа, ее лучше приобрести промышлен- ного производства, сегодня есть выбор, да и цена доступная. Но, как и что можно сделать, если захочется сделать ее своими руками. Подробный рассказ об опытах с осциллографом и модулем STM32F103C8 можно найти на моем сайте [3]. Здесь же будет описано то, как настроить модуль для работы с USB-портом.
322 Компьютер в лаборатории радиолюбителя I Подготовка проекта Для рассказа я использую программу System Workbench, a Code::Blocks я использовал для создания компьютерного при- ложения. Начинается подготовка с создания шаблона в STM32CubeMx. В этот раз настройка шаблона будет сложнее, чем в преды- дущих проектах. После запуска CubeMx выбираем создание нового проекта, выбираем модуль STM32F103C8. Настройку начинаем с задания кварца и выбора USB—^Device (рис. 23.1). Для раздела USB_DEVICE (в верхней части окна) сделаем выбор назначения устройства (рис. 23.2). Далее переходим на закладку Clock Configuration, кото- рая отмечена красным, предупреждая нас о необходимости настройки тактирования всех шин контроллера. Если вы знаете, что следует настроить, то можете не пользо- ваться подсказкой и предложением программы STM32CubeMx Рис. 23.1. Начало настройки шаблона для использования USB-nopma
Глава 23. Использование порта USB 323 Feripfcttrais ■& AOC ■ ■>• АЮС .1 Рис. 2J.2. Назначение устройства USB коммуникационным сделать автоматическую настройку (рис. 23.3). Но для первых проектов лучше согласиться с программой, нажав кнопку Yes. Следующая остановка — закладка Configuration. И пер- вое, что можно, если нужно, это настроить подключение USB (рис. 23.4). ПРИМЕЧАНИЕ. Здесь шоже - если вы знаете, что следует изме- нитцизмените, если нет, оставьте все как есть. Следующие настройки можно сделать в диалоге USB_ DEVICE, который появляется при нажатии на одноименную кнопку (рис. 23.5). Здесь вы можете в будущем, например, изменить название вашего устройства (рис. 23.6). Теперь можно сгенерировать шаблон проекта, указав его название, место, где он будет размещен, и программу sw4stm32, для которой проект создается. Завершим, как и положено, нажав кнопку Open Project.
324 Компьютер в лаборатории радиолюбителя Рис. 23.3. Настройка тактирования модулей и шин STM32 Рис. 23.4. Настройка подключения USB
Глава 23. Использование порта USB 325 Рис. 25.5. Кнопка диалога настройки устройства Puc. 23.6. Диалог настройки устройства Реализация II и проверка проекта II Развернув содержимое проекта, откроем файл main.c. Добавим массив для текста в раздел приватных переменных: uint8 t send[4] = "test";
326 Компьютер в лаборатории радиолюбителя И добавим код программы в раздел while(l): HALJDelay(lOOO); CDCJTransmit_FS(send,10); Откроем диалоговое окно настройки отладки (Run-*Debug Configuration). Укажем файл для отладки (рис. 23.7). Настроим на закладке Debugger загрузку с программ- ным сбросом, используя кнопку Show generation options (рис. 23.8). Рис. 23.7. Настройка отладки в окне диалога проекта Соберем программу (Project-+Build Project). Когда процесс сборки проекта, который занимает некоторое время, завер- шится, откроем папку проекта. Теперь запустим отладку (Run-*Debug), которая должна проходить, когда оживает инструментальная панель отладки с ее атрибутами запуска, паузы, пошаговых операций. Запуск иконкой инструментальной панели на исполнение не должен вызывать вопросов. Но, если нажать кнопку сброса на панельке модуля STM32F103C8, то повторный запуск отладки не полу- чится.
Глава 23. Использование порта USB 327 Рис. 23.8. Настройка отладчика Если у вас есть кабель для подключения модуля к порту USB с микро-разъемом для STM32F103C8, если вы ранее пыта- лись подключить модуль к порту USB, как это делали с моду- лем Arduino, то вы должны были увидеть что-то в этом роде (рис. 23.9). Но подключите ваш модуль сейчас. Загляните в диспетчер устройств, который в Windows 10 можно найти, щелкнув пра- вой клавишей мышки по «бывшей» кнопке Пуск (рис. 23.10). Окончательную проверку я предпочитаю устроить с помо- щью программы Data Visualizer. Убрав ненужный интерфейс, выбрав последовательный порт, где выберем порт COM4 после запуска программы, завершим эту проверку кнопкой Connect (рис. 23.11). И еще, если теперь подключить программатор ST-Link с подключенным модулем, запустить утилиту ST-link и нажать иконку подключения, то результат будет следующим (рис. 23.12). Аналогично будет вести себя и программа System Workbench. Но пусть вас это не пугает, если у вас есть переходник USB/TTL. Подключите его, подключите выводы Rx(A9) и Тх(А10) модуля
328 Компьютер в лаборатории радиолюбителя Рис. 23.9. Уведомление о неопознанном объекте Рис. 23.10. Диспетчер устройств операционной системы
Глава 23. Использование порта USB 329 У^тройст&о с последовательным интерфей Рис. 23.11. Проверка работы программы в Data Visualizer Рас. 23.12. Отказ,утилиты ST-Link от работы с модулем
330 Компьютер в лаборатории радиолюбителя Рис. 23.13. Использование программы Flash Loader •■Ы Рис. 23.14. Оживший модуль STM32F103C8
Глава 25. Использование порта USB 331 STM32F103C8 (мне с самодельным переходником приходится подключать кабель USB-порта, чтобы подать питание). ПРИМЕЧАНИЕ. Не забудьте переключить джампер для работы с СОМ-портом на плате STM32F103C8. Запустите программу Flash Loader (рис. 23.13) и пройдите все страницы диалога, используя кнопку Next. Память про- граммы будет стерта, а ваш модуль вновь будет опознаваться и утилитой ST-Link, и программой. Не забудьте только вернуть джампер на место. Теперь можно проверить, используя программу ST-Link, готов ли модуль к работе дальше (рис. 23.14).
ГЛАВА 24 ЗАКЛЮЧИТЕЛЬНАЯ Для всех проектов, описанных в предыдущих главах для модуля STM32F103C8, без сомнений лучше использовать более простые микроконтроллеры. Но мой давний знакомый исполь- зовал STM32 для робота, который управляется по радиоканалу с ноутбука или планшета, бегает и передает все, что видит (рис. 24.1). Если вы захотите попробовать работу с программируемыми роботами, то для первых опытов я, все-таки, советую использо- вать недорогой вариант на основе модуля Arduino. Например, такой (рис. 24.2). Модуль Arduino хорошо работает с множеством датчиков. С ним проще провести ряд опытов по освоению движения. Со временем, возможно, вы захотите заменить микрокон- троллер более мощным. Проще всего использовать модуль Рис. 24.1. Робот, использующий микроконтроллер STM32
Глава 24. Заключительная 333 Рис. 24.2. Недорогой движущийся робот STM32F103C8. Или замахнуться на микрокомпьютер Raspberry Pi. Можно придумать новые функции для робота, использовать новые датчики — все зависит от вашей фантазии, желания и настойчивости. Но в любом случае вам не обойтись без инстру- ментария на компьютере.
ПРИЛОЖЕНИЕ! ПОЛЕЗНЫЕ СОВЕТЫ, КАК ИЗБЕЖАТЬ ОШИБОК ПРИ РАБОТЕ С SYSTEM WORKBENCH СОВЕТ. Чтобы освоить работу с STM32F103C8 в про- грамме System Workbench или Code::Blocks, я ре- комендую использовать простейшую программу Blink, ПОМИГАТЬ СВЕТОДИОДОМ. С ней проще разобраться в настройках, в создании отладоч- ной программы и окончательного варианта программы. Все опыты следует проделать до того, как вы приступите к созда- нию своего «заветного» проекта. При написании этой книги я десятки раз повторял то, что уже проделывал раньше. Немного изменилась работа программ, а результатом стало появление ошибок, с каждой из которых предстоит раз- бираться. В этом приложении я хочу описать несколько оши- бок, из-за которых у меня не получался проект, а сообщения не всегда приводили к источнику ошибок. Первая ошибка очень проста — загружая проект, в спешке, не дождавшись завершения загрузки, начать что-то собирать или отлаживать. Следует дождаться завершения импорта ранее созданного проекта или завершения работы программы после ее вызова из STM32CubeMx: поглядывайте в правый нижний угол окна программы, где отображается процесс работы.
Приложение 1. Полезные советы 335 Вторая ошибка, которую я не раз совершал, это запуск про- граммы на отладку, когда программатор не включен. При этом появляется одно сообщение, а поверх него другое (рис. АЛ). Это сообщение появляется позже, а первым вы увидите такое сообщение (рис. А.2). Третья ошибка, с которой я сталкивался, — это попытка запустить отладку сразу по выходе из программы CubeMx (рис. А.З). iff-;г ??'е-:г-5дг u :s, >~Ч'- г'-лпи^ ict i^xcgr Рис.A.I. Сообщение при отсутствии программатора ST-Link Рис. А.2. Первое сообщение при выключенном программаторе
336 Компьютер в лаборатории радиолюбителя Рис.А.З. Сообщение об ошибке при отсутствии настройки отладчика Рис. А А. Последствие отладки после ошибки Если после этой ошибки выполнить настройку отладчика, указав файл с расширением .elf и собрать проект, то может поя- виться такое сообщение (рис. А.4). Но это сообщение появляется поверх предложения пере- йти к отладочному окну программы. И отладка проходит. Полезно после этого изменить время паузы, очистить про- грамму (Project-+Clear). И запустить отладку еще раз. Во время отладки вы можете видеть, как меняется состояние бита в регистре ODR; если посмотреть на плату, то видно, что и состо- яние светодиода меняется. После выхода из режима отладки,
Приложение 1. Полезные советы 337 Рис. А.5. Загрузка программы в микроконтроллер Рис. А.6. Попытка загрузки при переключении режимов Рис.А.7. Изменения в диалоге настройки конфигурации Run Configuration
358 Компьютер в лаборатории радиолюбителя нажав кнопку сброса на плате, можно увидеть, что время паузы изменилось. Если сразу после проверки в отладочном режиме запустить загрузку (Run-+Ruri), то в окне сообщений вы прочитаете что-то похожее на это (рис. A.S). Для проверки результата измените время паузы и запу- стите загрузку. Если теперь переключить режим из отладоч- ного Debug в режим Release, то попытка загрузить программу вызовет такую ошибку (рис. А.6). Если теперь заглянуть в папу проекта, то можно убедиться, что папка Release пуста. Откроем диалог Run Configuration. Внесем изменения в настройки (рис. А.7). Теперь папка Release не пуста. Есть и загрузочный файл, который, в крайнем случае, можно загрузить с помощью про- граммы ST-Link.
ПРИЛОЖЕНИЕ 2 SYSTEM WORKBENCH: СОЗДАНИЕ РАБОТАЮЩЕГО ПРОЕКТА STM32 ПРИМЕЧАНИЕ. В Приложениях 2-8 приводится Руководство пользователя System Workbench, созданное ав- тором книги по мотивам англоязычного сайта производителя программы. Рисунки нумеруются Б.1-Б.10. |Как начать работу с проектом Встроенный C/C++ проект — это C/C++ проект. Он досту- пен с помощью помощника по созданию проекта. Чтобы соз- дать новый встроенный и работающий Си проект, используйте File -> New -> Project и выберите C/C++ проект. Введите имя нового проекта, затем выберите «Асб STM32 MCU Project» в разделе «Executable». Дополнительно выберите «Асб STM32 MCU GCC» из отображенного списка инструментов для сборки проекта (компилятора, компоновщика и т. д.). Щелкните по кнопке Next для подтверждения и для пере- хода на страницу выбора модели.
340 Компьютер в лаборатории радиолюбителя I Создание проекта статической библиотеки STM32 Для создания статической библиотеки для STM32 исполь- зуйте File -> New -» Project и выберите С/С++-+С проект. Введите новое имя проекта, затем выберите «Асб STM32 MCU Project» в разделе «Static Library». Выберите инструменты сборки (toolchain) «Асб STM32 MCU GCC» из списка. Щелкните по кнопке Next для перехода к странице выбора модели. I Создание makefile проекта STM32 Если у вас есть собственный makefile, вы можете создать Makefile проект и скопировать ваш makefile в проект. Ваш makefile будет использован для сборки проекта. Для создания makefile проекта для STM32 используйте File —> New -» Project и выберите С/С++-+С проект. Введите новое имя проекта, затем выберите «Empty project» в разделе «Makefile project». Выберите инструменты сборки (toolchain) «Асб STM32 MCU GCC» из списка. Щелкните по кнопке Next для перехода к странице выбора модели. I Выбор модели устройства На этой странице выберите ваш целевой модуль на базе STM32 или выберите вашу собственную новую цель. Вы можете непосредственно выбрать модуль в селекторе «Board» или использовать фильтр списка для выбора серии устройства. Когда модуль выбран, некоторая информация о микрокон- троллере отобразится в таблице в нижней части окна.
Приложение 2. System Workbench: создание работающего проекта STM32 341 Для создания загрузочного проекта щелкните по кнопке Next, чтобы сконфигурировать установки проекта и импорти- ровать микропрограммное обеспечение (ST firmware). Для дру- гих типов проектов щелкните по кнопке Finish, чтобы завер- шить создание проекта. Если вы работаете с модулем собственной разработки и хотите добавить его в программу, щелкните по кнопке Create a new board. Больше информации вы найдете на странице «Создание пользовательского модуля». Выбор установок проекта и импорт | микропрограммного обеспечения (ST firmware) II На этой странице конфигурируется проект. Вы можете соз- дать полностью пустой проект, что означает, проект будет без поддержки ST микропрограммного обеспечения. Выберите «No firmware», задайте проект как пустой с минимальным скриптом компоновки и начальным кодом, чтобы разработать ваше приложение «с нуля» или чтобы вручную сконфигуриро- вать и наполнить проект исходным кодом микропрограммного обеспечения или кодом, который, например, сгенерирован ST Microexplorer. System Workbench for STM32 поддерживает процедуру импорта ST микропрограммного обеспечения. Если вы хотите создать проект с микропрограммным обеспечением, щелкните по типу библиотеки, с которой вы намерены работать: ♦ Standard Peripheral Library; ♦ Hardware Abstraction Layer. На первоначальном этапе создания проекта с выбранным модулем на странице помощника вам будет задан вопрос, хотите ли вы загрузить исходники микропрограммного обе- спечения модуля. Щелкните по Download target firmware, чтобы загрузить их с выбранной библиотекой периферии. Следом вы можете выбрать Extract all the firmware in a separate folder, папка микропрограммного обеспечения будет
342 Компьютер в лаборатории радиолюбителя импортирована в рабочее пространство (workspace), как «не собираемый проект», чтобы облегчить встраивание в ваш про- ект. По умолчанию эта часть проекта закрыта. I Встраивание микропрограммного обеспечения модуля в проект System Workbench for STM32 поддерживает механизм импорта драйверов модулей (CMSIS, периферии, утилит): ♦ или в ваш проект; ♦ или как импорт проекта внешней статической библиотеки. ПРИМЕЧАНИЕ. Это позволяет вам использовать все возможно- сти модуля. Чтобы разрешить работу этого механизма, выберите тип библиотеки микропрограммного обеспечения, который вам нужен (StdPeriph или Cube HAL), и отметьте Add low level drivers in project. Если вы выбрали встраивание драйверов в исходники рабо- тающего проекта, директории драйверов будут импортиро- ваны в директории вашего проекта. Если вы выбрали встраивание драйверов во внешнюю статическую библиотеку, драйверы будут импортированы во вновь созданный проект библиотеки. Если в рабочем про- странстве будет найден существующий проект библиотеки, эта библиотека будет использована вместо вновь созданной. Ссылки проекта и включенные значения будут заданы автома- тически.
Приложение 2. System Workbench: создание работающего проекта STM32 343 Известная | ошибка II При создании проекта может появиться следующее сооб- щение об ошибке: «Program "arm-none-eabi-gcc" not found in PATH». Это известная ошибка, которая объясняется на странице FAQ. Создание II пользовательского модуля I Если вы разрабатывали ваш собственный модуль, базирую- щийся на микросхеме STM32, System Workbench for STM32 пред- ложит вам создать пользовательские определения модуля. Чтобы создать новый модуль, щелкните по «Create a new custom board» на третьей странице помощника по созданию проекта вместо выбора существующего модуля. В этом случае отобразится новое окно. Вы можете импортировать новый модуль из определе- ний существующих модулей (формат xml) или создать новый модуль. При создании проекта с пользовательским модулем файл определений (*.xml) и OpenOCD скрипт (*.cfg) генерируются в директорию проекта. Обобщите эти файлы для экспорта модуля в другие рабочие пространства. Сгенерированный OpenOCD скрипт (исполняемый текстовый файл) может не соответствовать вашей цели, пожалуйста, отредактируйте его, чтобы адаптировать к вашему модулю.
344 Компьютер в лаборатории радиолюбителя |Из файла определений Выберите «Import from definition file», чтобы импортиро- вать новый модуль. I Определите пользовательский модуль Для определения пользовательского модуля пройдите пять шагов. Шаг 1. Выберите «Define new board», чтобы создать ваш новый модуль. Шаг 2. Введите имя нового модуля (запрещены специаль- ные символы и подчеркивания). Шаг 3. Выберите серию микросхемы STM32. Шаг 4. Выберите MCU, используемый в пользовательском модуле. Шаг 5. Выберите устройство отладки и интерфейс. I Конфигурирование установок сборки System Workbench for STM32 создает C/C++ предварительно настроенные проекты. Вы можете модифицировать или доба- вить опции сборки для проекта. Свойства можно получить для проектов, папок и отдельных файлов. Выберите объект свойств, щелкните правой кнопкой мышки по объекту и выберите «Properties».
Приложение 2. System Workbench: создание работающего проекта STM32 345 Настройка C/C++ Для определения установок сборки щелкните по «C/C++ Build» в окне свойств проекта и выберите «Settings». На этой панели вы может сконфигурировать инструменты сборки, артефакты сборки и установки последовательности операций. В таблице «Tool Settings» отображаются опции сборки и команды. Вы можете изменить последовательность сборки и добавить флаги дополнительных опций для компилятора, ком- поновщика и инструментария ассемблера. В таблице «Build Steps» можно добавить команды предваря- ющие сборку и завершающие ее. В таблице «Build Artifact» вы можете изменить имя и рас- ширение результата проекта. В таблице_«Таг§еЬ отображается выбранная цель. Не реко- мендуем менять цель проекта. Если вы работаете с ST firmware, множество опций больше не будет совпадать с вашим проек- том. Если вы хотите работать с другой целью, вам лучше создать новый проект, а затем скопировать подходящий исходный код. Путь! И СИМВОЛЫ II Эта страница включает путь и символы при сборке и ссылки C/C++ проекта, которые можно задать. Для доступа к этой странице щелкните по «C/C++ General» и выберите «Paths and Symbols». Хотя вы можете редактировать включенный путь и сим- волы, используя C/C++ Build-+Settings-+Tool Settings, мы реко- мендуем вам задать путь на этой панели, поскольку общий индексатор и настройки инструментов будут обновлены.
346 Компьютер в лаборатории радиолюбителя I Создание конфигурации отладки System Workbench for STM32 — Bare Metal издания — предо- ставляет отладочную программу для удаленной отладки вашей сборки проекта в целевом модуле. Чтобы создать новую конфигурацию отладки, щелкните правой клавишей мышки по проекту в окне Project Explorer, менеджере проекта, и выберите Debug As -> Debug configuration... Или выберите ваш проект, затем щелкните по стрелке справа от иконки отладки и выберите Debug configuration... Появится новое окно с поддерживаемой конфигурацией отладки. Щелкните по «Асб STM32 debugging», чтобы создать новую конфигурацию отладчика. Конфигурация отладчика автоматически заполнится. Если ваш проект был собран (бинарный файл обнаружива- ется в папке проекта), вы можете немедленно подключить ваш модуль и отлаживать ваш проект. Main Страница Main диалогового окна Debug идентифицирует про- ект и приложение, которое вы хотите запустить или отладить. Debugger Страница Debugger диалогового окна Debug позволяет вам выбрать отладчик и OpenOCD для использования при отладке приложения. Не меняйте значения, если хотите использовать инструменты из System Workbench for STM32 — Bare Metal. OpenOCD Вы можете модифицировать некоторые опции OpenOCD (подключение или настройку режима), щелкнув по кнопке Show generator options.
Приложение 2. System Workbench: создание работающего проекта STM32 347 ПРИМЕЧАНИЕ. Если у вас есть пользовательский скрипт OpenOCD, или если скрипт не обнаружен, вы мо- жете выбрать другой файл конфигурации. STLinkServer ST-Link Server — это приложение, позволяющее: 1. распространить интерфейс отладки единственного ST-Link модуля между несколькими ведущими приложениями. Обычно между отладочными инструментами и инструментами наблю- дения. Конечно, два отладочных устройства не могут управлять одновременно одним модулем, но оба могут иметь доступ к нему, если выбрать подходящие настройки соединения; 2. облегчить использование заданий отладки с несколькими модулями. ~ Разрешение «shareable ST-Link» активирует поток выполне- ния ST-Link Client. ПРИМЕЧАНИЕ. •эта опция может использоваться, если уста- новлен ST-Link Server; ♦ чтобы установить ST-Link server загляните в раздел установки; ♦ однажды активизированые подключенные моду- ли попадают в список; ♦ если нет подключенного модуля, сообщение ин- формирует пользователя. Программа просмотра таблиц подчиняется следующим пяти правилам, рассмотренным ниже. Правило 1. Эта возможность требует микропрограммное обеспечение ST-Link версии J28 или выше.
348 Компьютер в лаборатории радиолюбителя Правило 2. Только один модуль может быть выбран для конфигурации отладчика. Правило 3. Имя по умолчанию ассоциировано с модулем первого соединения. Это может быть настроено и останется постоянным между рабочими областями (workspaces). Правило 4. В порядке идентификации модуля между дру- гими модулями кнопка позволяет мигать светодиоду ассоции- рованного ST-Link (требуется версия J28). Правило 5. Кнопка обновления позволяет выбрать и обно- вить список подключенных модулей. Из-за ограничений USB операционной системой новый модуль не будет автоматичё- ски обнаружен ST-Link Server. Нужно ручное вмешательство пользователя, щелчок по кнопке обновления, чтобы обновить список. Startup (пуск) Страница Startup диалогового окна Debug позволяет вам конфигурировать команду инициализации отладчика, опции выполнения и добавить дополнительные команды запуска. Source (источник) Страница Source диалогового окна Debug позволяет вам задать локализацию файлов исходного кода, используемого при отладке С или C++ приложений. По умолчанию эта инфор- мация берется из пути сборки вашего проекта. Common (общее) Страница Common диалогового окна Debug позволяет вам задать место, в котором хранится ваша конфигурация запу- ска (run) и то, каков ваш доступ к ней, как поддерживается стандартный ввод и вывод, и разрешена ли работа в фоновом режиме или нет.
ПРИЛОЖЕНИЕ 3 SYSTEM WORKBENCH: ОТЛАДКА ПРОЕКТА ПРИМЕЧАНИЕ. Отладка отображается на «Debug perspective»: Эта страница состоит из инструментальной панели команд и обозревателей отладочного процесса. Отладочные | команды II 1. Инструкции пошагового режима. Инструкции нужны, чтобы перемещаться по коду шаг за шагом. В обозревателе (view) Disassembly пошаговый режим «привязан» к ассемблерному коду. 2. Skip all breakpoints. Команда нужна, чтобы отменить все точки останова, задан- ные ранее. 3. Step over. Команда нужна, чтобы перешагнуть (без захода) следую- щую функцию в текущей выполняемой строке кода (пока вы в приостановленном режиме).
350 Компьютер в лаборатории радиолюбителя 4. Step into. Команда нужна, чтобы войти в следующую функцию в теку- щей выполняемой строке кода (пока вы в приостановленном режиме). 5. Resume. Команда нужна, чтобы возобновить выполнение в данный момент приостановленное выполнение отладки. 6. Suspend. Команда нужна, чтобы остановить выполнение текущей цепочки отладки. В приостановленном режиме вы можете про- верить состояние стека. 7. Terminate. Команда нужна, чтобы прекратить выбранную отладку. 8. Disconnect. Команда нужна, чтобы оборвать соединение между отлад- чиком и удаленным отладочным инструментом. 9. Remove. Нужна, чтобы вытащить выбранный инструмент отладки (если работа с ним прекращена). I Обозреватели отладчика Debug Обозреватель Debug View позволяет вам управлять отлад- кой или запуском программы в System Workbench. Там ото- бражается окно стека для приостановленного выполнения и для каждой цели, которую вы отлаживаете. Каждая цепочка в вашей программе появляется как узел в дереве. Отображается процесс для каждой цели, которую вы запустили.
Приложение 3. System Workbench: отладка проекта 351 Console Обозреватель Console View отображает разные зависимости консольного типа, зависящие от типа разработки и текущего набора пользовательских установок. Breakpoints Breakpoints view — список всех установленных или сбро- шенных точек останова, показывает их место в исходном коде. Disassembly Disassembly View показывает загруженную программу в виде ассемблерного кода в смеси с исходным кодом для срав- нения. Текущая выполняемая строка выделяется стрелочным маркером и подсвечивается в обозревателе. Вы можете осуще- ствить следующие задачи в Disassembly view: ♦ задать точки остановки в начале каждой ассемблерной ин- струкции; ♦ разрешить или запретить остановки по точкам и настро- ить их свойства; ♦ сделать шаг через дизассемблерные инструкции вашей программы; ♦ совершить прыжок к заданной инструкции в программе. Variables Variables View отображает информацию о переменных, связанных со стеком, выбранным в Debug View. Когда отлажи- вается программа C/C++, переменные могли быть выбраны, чтобы иметь более детальную информацию, которая будет ото- бражена в области сведений (Detail Pane). Registers Registers из списка Debug perspective показывает инфор- мацию о регистрах в выбранном окне стека. Значения, что изменяются, подсвечиваются в окне Registers, когда ваша про- грамма останавливается.
352 Компьютер в лаборатории радиолюбителя I/O Registers В этом окне списка Debug perspective показывается инфор- мация о регистрах целевой периферии. Для визуализации зна- чений регистров дважды щелкните по ним. Регистры в режиме чтения выделены зеленым. Memory Окно Memory из списка Debug perspective позволяет вам наблюдать и модифицировать память вашего процесса. Память процесса представлена в виде списка так называемых мони- торов памяти. Каждый монитор представляет сегмент памяти, определяемый по его расположению, который называется базовым адресом. Каждый монитор памяти может отобра- жаться в разных предопределенных форматах данных — визу- ализации памяти. Отладчик поддерживает несколько типов визуализации — шестнадцатеричный (по умолчанию), ASCII, целые со знаком и беззнаковые целые. Визуализация по умол- чанию отображается автоматически при создании монитора.
ПРИЛОЖЕНИЕ 4 SYSTEM WORKBENCH: ИМПОРТ MBED ПРОЕКТА В SYSTEM WORKBENCH ДЛЯ STM32 Импорт mbed проекта в System Workbench для STM32 воз- можен, но довольно сложен: я попробую объяснить ниже, как это делается. В качестве примера я использую программу Nucleo_blinkjed для модуля NUCLEO-F411RE. На mbed web site Первая часть процедуры должна выполняться на mbed web site. Создайте вашу mbed I программу I Эта часть единственная, я думаю, которую я не должен объ- яснять...
354 Компьютер в лаборатории радиолюбителя I Импорт mbed-src библиотеки в нее Вам нужно импортировать mbed-src библиотеку, в против- ном случае вы получите предварительно скомпилированную библиотеку на этапе экспорта. Однако эта предварительно скомпилированная библиотека может быть скомпилирована с опциями, конфликтующими с аналогичными, что использует System Workbench для STM32. Это абсолютно верно для работы с плавающей точкой, поскольку есть три пути генерации операций с плавающей точ- кой, а два имеют не совместимые ABI на ARM: ♦ soft ABI, когда компилятор не использует FPU или регистр; ♦ softfp ABI, когда компилятор генерирует FPU инструкции, но передает параметры плавающей точки в регистры об- щего назначения; ♦ hardfp ABI, когда компилятор не только использует FPU инструкции, но также передает параметры плавающей точки в регистры FPU. ПРИМЕЧАНИЕ. Варианты soft и softfp ABI совместимы и могут интерпретироваться на тех же MCU (поддер- живается, если есть FPU или есть эмуляция под- держки исключений неверных инструкций). Однако hardfp ABI не совместима с другими двумя ABI. По умолчанию System Workbench для STM32 будет использовать hardfb ABI, поскольку это значительно эффективнее, чем softfp (дополнительное перемещение параметров из FPU регистров в регистры общего назначения или память подчас занимает больше времени, чем время необходимое собственно для рас- четов...).
ПРИЛОЖЕНИЕ 5 SYSTEM WORKBENCH: ЭКСПОРТ MBED ПРОГРАММ ДЛЯ GCC-ARM TOOLCHAIN Экспорт emblocks также возможен (и почти эквивалентен). Вы можете также экспортировать вашу программу в ZIP виде, но в этом случае вы получите поддержку для всех mbed-поддерживаемых процессоров и модулей, что приведет к двум неудобствам: 1. будет сгенерирован очень большой файл (около 30 Мб); 2. вы должны будете вручную выбрать, какие целевые библиотеки следует компилировать и использовать. На вашей | локальной PC II Оставшиеся процедуры будут выполняться на вашей локальной PC под System Workbench для STM32. Создайте I C++ проект I Вначале вы должны создать стандартный C++ проект (не соз- давайте С проект, поскольку mbed библиотека написана для C++):
356 Компьютер в лаборатории радиолюбителя ♦ New-* Project...-* C/C++-* C++ Project; ♦ создайте «Executable, выполняемый» Асб STM32 MCU про- ект, используя «Асб STM32 MCU GCC»; ♦ выберите нужный модуль (здесь STM32F4-based NUCLEO- F411RE); ♦ установите No firmware флажок (это должно быть в любом случае по умолчанию). Затем вы должны очистить созданный проект; причина в том, что мы не будем использовать некоторые из файлов, при- готовленные System Workbench для SMT32 в качестве MBED библиотеки, предоставляемой ею. Удалите автоматически предоставленный main.с файл, поскольку мы будем использовать тот, что определен под mbed. Удалите system_stm32f4xx.c файл, поскольку мы будем использовать тот, что предоставляется mbed.
ПРИЛОЖЕНИЕ 6 SYSTEM WORKBENCH: ИМПОРТ MBED-СГЕНЕРИРОВАННОГО ИСХОДНОГО КОДА Импорт I и конфигурация 1 Теперь мы импортируем программу, которая экспортиро- вана из mbed в src директорию вашего проекта и сконфигури- руем ее для правильной компиляции. Шаг 1. Щелкните правой клавишей мышки по src директо- рии вашего проекта: ♦ Import...; ♦ Archive File; ♦ выберите загруженный zip-файл; ♦ выберите директории и файлы для импорта; ♦ импортируйте src папку в ваш вновь созданный проект (папка должна быть выбрана по умолчанию,); ♦ импортируйте Nucleo_blink_led директорию; ♦ не импортируйте Nucleo_blink_led/mbed; А Щ- ПРИМЕЧАНИЕ. Это предварительно скомпилированная библио- тека вместе с заголовочными файлами, мы будем использовать те, что в mbed-src.
358 Компьютер в лаборатории радиолюбителя Рис.Б.1. Выбор файла ♦ не импортируйте Nucleo^blinkjed/mbed-src/targets/cmsis/ ТАКОЕТ^8ТМЯАКСЕТ^8ТМ32Р TOOLCHAIN_GCC_ARM папку; ПРИМЕЧАНИЕ. Эта папка содержит toolchain-зависимые файлы, которые конфликтуют с файлами, поддерживае- мыми System Workbench для STM32. ♦ вы можете оставить только main.c файл в Nucleo blinkjed; ♦ Finish. Другие файлы, как Makefile, не будут использоваться System Workbench для STM32. Вы можете выбрать что-то из этого для ссылок. Вы можете также определить игнорирование .hg вре-
Приложение 6. System Workbench: импорт исходного кода 359 менных метаданных, если вы используете другую систему управления исходниками; ПРИМЕЧАНИЕ. Заметьте, есть одна такая .hg директория в нескольких поддиректориях. В этом случае вы должны также игнорировать .hgignore файл в Nucleo blink led. Шаг 2. Укажите компилятору правильные заголовочные файлы. Это выполняется в свойствах проекта properties —► C/C++ General-* Paths and Symbols. Перейдите на закладку «Includes», где вы должны добавить разные директории, чтобы указать путь к Include. Вы можете либо ввести поддерживаемый путь, как это сде- лано ниже, либо использовать кнопку «Workspace...», чтобы про- смотреть ваш проект. Добавьте их в порядке, показанном ниже. Рис. Б.2. Структура zip-файла
360 Компьютер в лаборатории радиолюбителя СОВЕТ. Убедитесь, что каждая директория отмечена и как «Add to all configurations», и как «Add to all languages». Рис.Б.З. Настройка путей проекта Вы должны добавить следующие директории: ${Pro]DirPath}/src/Nucleo_blink_led/mbed~src/api ${ProjDirPath}/src/Nucleo_blink_led/mbed-src/hal ${ProjDirPath}/src/Nucleo_blink_led/mbed-src/targets/hal/ TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F411RE ${ProjDirPath}/src/Nucleo_blink_led/mbed~src/targets/hal/ TARGET_STM/TARGET_STM32F4 ${ProjDirPath}/src/Nucleo_blink_led/mbed-src/targets/ cmsis/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F411RE ${ProjDirPath}/src/Nucleo_blink_led/mbed-src/targets/ cmsis/TARGET_STM/TARGET_STM32F4 ${ProjDirPath}/src/Nucleo blink_led/mbed-src/targets/cmsis I Сборка и отладка вашей программы Ваш System Workbench для STM32 проект теперь правильно сконфигурирован. Вы можете собрать и отладить его обычным образом.
ПРИЛОЖЕНИЕ 7 SYSTEM WORKBENCH: ИМПОРТ ПРОЕКТА, СГЕНЕРИРОВАННОГО STM32CUBEMX, ПОД SYSTEM WORKBENCH Генерация и импорт | проекта CubeMx II Начиная с версии 4.7.0, STM32CubeMX может генерировать код для System Workbench для STM32. Однако интеграция сде- лана не полностью, и мы работаем над этим. Сейчас вы можете следовать инструкции ниже, чтобы импортировать проект из сгенерированного кода. Шаг 1. Создайте рабочую директорию (myworkspace> напри- мер). Это будет общая директория для System Workbench и STM32CubeMX. Шаг 2. В STM32CubeMX перейдите в настройки Project -> Settings ..., затем введите «Project Name» (такое как myproject). Измените «Project Location», указав место предыдущей рабо- чей директории. «Toolchain Folder Location» должно быть myworkspace/myproject. He забудьте выбрать «SW4STM32» в качестве вашей «Toolchain/ IDE» перед генерацией кода. Шаг 3. Установите Generate under root флажок, чтобы сгенери- ровать toolchain (языковые компоненты) файлы проекта в корне- вой пользовательской папке STM32CubeMX. Эта опция позволяет
362 Компьютер в лаборатории радиолюбителя извлечь выгоду из возможностей Eclipse, таких как копирование проекта в рабочее пространство Eclipse при импорте проекта или использование управляющих систем исходника (GIT, SVN,...) из рабочего пространства (workspace) Eclipse. Рис. Б А. Настройка проекта Шаг 4. Если файл .cproject связан с System Workbench, только дважды щелкните по нему, чтобы открыть System Workbench и импортировать сгенерированный проект в рабочее простран- ство (workspace). Если нет: ♦ попробуйте добавить связь. Откройте окно предпочте- - ний (preferences), щелкните по меню Window, затем по Preferences. В окне Preferences выберите System Workbench в дереве и щелкните по File Association, затем по кнопке Install; ♦ перейдите в следующий раздел, который описывает, как вручную импортировать сгенерированный STM32CubeMX проект.
Приложение 7. System Workbench: импорт проекта 363 Ручной импорт сгенерированного | STM32CubeMX проекта II Шаг 1. Откройте System Workbench для STM32, используя в качестве рабочей области myworkspace. Ваш менеджер проекта не должен содержать сгенерированного STM32CubeMX кода как проект. Рис. Б.5. Рабочая область проекта Шаг 2. Импортируйте сгенерированный STM32CubeMX проект следующим образом: Шаг 3. ♦ File» Import... ♦ выберите «Existing Projects into Workspace» из «General» группы; ♦ щелкните по «Browse», чтобы указать корневую директорию. Это должно установить ваше рабочее пространство по умол- чанию, если нет, введите место расположения workspace; ♦ список проектов обновится и отобразит ваш проект (myproject Configuration), выберите его. Начиная с CubeMX-4.13.0 имя проекта просто «myproject»; ♦ убедитесь, что опция "Copy projects into workspace» не от- мечена; ♦ щелкните по кнопке Finish. Теперь у вас работающий проект; однако есть небольшая потенциальная проблема, если вы используете более раннюю версию CubeMX, чем 4.13, ваш проект называется «myproject
364 Компьютер в лаборатории радиолюбителя Рис.Б.6. Выбор проекта для импорта Рис.Б.7. Указание рабочего пространства проекта
Приложение 7. System Workbench: импорт проекта 365 Configuration» с пробелом в названии; по крайней мере, это озадачит ОС (особенно Linux, да и Windows тоже)... Переименование сгенерированных файлов | (вплоть до CubeMX-4.12.0) I Если вы все еще используете старую версию CubeMX (вплоть до 4.1), чтобы обойти, хотя бы частично, проблему с именем проекта, вы должны переименовать сгенерированные файлы; этого больше не нужно, начиная с CubeMX-4.13.0. 1. Щелкните правой клавишей мышки по project —> Properties. 2. Перейдите к C/C++ Build -»Settings -► Build Artifact. 3. Уберите « Configuration» из имени артефакта (или дайте более подходящее имя). Рис. Б.8. Свойства проекта
366 Компьютер в лаборатории радиолюбителя СОВЕТ. Не переименовывайте ваш проект. Eclipse, ка- жется, ломает все связанные ресурсы, помечен- ные относительно проекта, когда проект пере- именовывается... I Настройка вашего проекта для отладки Теперь у вас работающий проект, который может компили- роваться корректно. Однако в CubeMX-4.7.0, или если вы не выбрали оценочный модуль в CubeMX-4.8.0, сгенерированный проект не включает описание модуля с полной информацией подключения отладки: пропущена информация отладочной пробы и отладочной связи. Вы, в итоге, не можете отлаживать проект обычным образом. Если вы попытаетесь отлаживать свой код, используя project ->Debug as -> Асб STM32 C/C++ Application... в первый раз, вы увидите диалрг, спрашивающий вас об отладочных характери- стиках вашего модуля. Рис. Б.9. Задание отладочных характеристик модуля
Приложение 7. System Workbench: импорт проекта 367 Вы можете либо выбрать существующий модуль, либо соз- дать новый. Вы можете также создать конфигурацию отладки и предо- ставить ее вручную. Шаг 1. Debug As -»Debug Configurations... Шаг 2. Создать новую Асб STM32 Debugging конфигурацию. Шаг 3. Выбрать ваш проект и исполняемый файл (если нужно). Шаг 4. Выбрать закладку Debugger. Шаг 5. Если есть красное сообщение об ошибке «NO SCRIPT FOUND» (скорее всего, в настоящее время), выберите «Manual spec», и предоставьте конфигурацию отладки: ♦ выбирая устройство отладки (ST-LinkV2 или V2-1 в зависи- мости от вашего модуля); ♦ выбирая интерфейс отладки (обычно SWD). Шаг 6. Теперь вы можете запустить отладчик. Рис. Б.10. Страница настройки отладчика
368 Компьютер в лаборатории радиолюбителя Другое решение — создать отладочную конфигурацию, затем выбрать подходящий отладочный скрипт вручную. Шаг 1. Debug As -» Debug Configurations... Шаг 2. Создайте новую Асб STM32 Debugging configuration. Шаг 3. Выберите ваш проект и исполняемый файл (если нужно). Шаг 4. Выберите закладку Debugger. Шаг 5. Если есть красное сообщение об ошибке «NO SCRIPT FOUND» (скорее всего, в настоящее время), выберите «Use local script». Предоставьте отладочный скрипт одним из трех способов. Способ 1. Перейдите на вашу директорию уста- новки System Workbench, затем к plugins\fr.ac6.mcu. debug_l. 1.0.201503121050\resources\openocd\scripts\board и поищите скрипт для вашего модуля (вы можете поискать также что-то вроде st-specific scripts в st_board). Это, как правило, путь к использованию стандартного ST модуля (eval, disco или nucleo). Способ 2. Вручную поищите подходящий модуль в ука- занной выше директории, затем вручную скопируйте его в основную директорию вашего проекта, затем перейдите (browse) туда и выберите его. Обычно это хороший путь перехода к пользовательскому модулю, который похож на ST модуль (часто EVAL модуль), включая тот же отладочный интерфейс. Способ 3. Возьмите отладочный скрипт пользователь- ского модуля, созданный тогда, когда создавался проект, использующий ваш пользовательский модуль (возможно, не микропрограммный проект с пустой main программой). Скопируйте сгенерированный System Workbench отладоч- ный скрипт в ваш проект и перейдите (browse) к нему. Это, как правило, удобно, если вы определяете ваш собствен- ный модуль, создать пользовательский модуль в сгенериро- ванном System Workbench тестовом проекте и попытаться использовать его вновь в сгенерированном STM32CubeMX проекте (см. «Создание пользовательского модуля»).
Приложение 7. System Workbench: импорт проекта 369 Шаг 6. Когда ваша конфигурация заработала, вы можете запускать ее, используя маленькую кнопочку bug в верхней части инструментальной панели (либо щелкнув по ней непо- средственно, либо использовать маленькую стрелку справа от нее, чтобы увидеть последнюю правильную отладочную кон- фигурацию). В любом случае вы найдете отладочный скрипт в директо- рии вашего проекта; с некоторыми сложными модулями вам, возможно, понадобится редактировать или пересоздавать его подобно тому, как это сделано в последнем решении выше.
ПРИЛОЖЕНИЕ 8 SYSTEM WORKBENCH ИСПОЛЬЗОВАНИЕ CCM ПАМЯТИ Некоторые STM32 CPU включают два банка памяти: ♦ стандартный SRAM; ♦ Core-Coupled-Memory (CCM, встроенная в ядро память), ко- торая может быть быстрее стандартной, но обычно мень- шего размера. В некоторых случаях выгодно размещать данные в этой области. Для этого есть несколько возможностей, зависящих от коли- чества памяти, которое нужно вашей программе. Во всех случаях вам потребуется вручную отредактировать файл скрипта компо- новщика (LinkerScriptld, исключая вариант, когда все сгенериро- вано CubeMx, где имя зависит от ссылки на микроконтроллер). I Проверка, декларирована ли ССМ Сначала вы должны просмотреть секцию MEMORY и, если ее нет, добавить строку: CCMRAM (rw) : ORIGIN = 0x10000000, LENGTH = 64К (конечно, вы должны проверить адрес ССМ блока; этот вариант от микроконтроллера STM32F429i).
Приложение 8. System Workbench: использование ССМ памяти 371 Размещение полных | разделов данных в ССМ II Затем вы должны решить, какой раздел должен быть рас- положен в ССМ. Размещение всех данных II инициализации в ССМ | Это совсем просто. Вы можете разместить все начальные данные в ССМ, изменив строку, которая читается } >RAM AT> FLASH в конце раздела .data на } >CCMRAM AT> FLASH Размещение всех нулевых данных | инициализации в ССМ II Вы можете также разместить все BSS (нулевые начальные) данные в CCRAM, изменив строку, которая читается } >RAM в конце раздела .bss на } >CCMRAM Размещение отдельных II переменных в ССМ II Вы можете разместить отдельные переменные в CCRAM области, хотя это может быть и несколько сложно.
372 Компьютер в лаборатории радиолюбителя I Размещение неинициализированных переменных в ССМ Вы можете очень просто разместить неинициализиро- ванные переменные в ССМ, добавив к их определению сек- цию атрибута, подобно тому, как для переменной in_ccmram_ buffer, которая продекларирована так: char in__ccram_buffer[1024] _attribute_((section(«ccmram»))); (Да, здесь двойные подчеркивания и двойные скобки в этом уродливом синтаксисе; в основном, чтобы быть уверен- ным, что вы не используете это по ошибке...). Если этого нет, вы должны создать раздел .ccmram: /* CCM-RAM section * IMPORTANT NOTE! * If variables placed in this section must be zero ini- tialized, * the startup code needs to be modified to initialize this section. */ .ccmram : { . = ALIGN(4); _sccmram = .; /* create a global symbol at ccmram start */ * (.ccmram) *(.ccmram*) . = ALIGN(4); _eccmram = .; /* create a global symbol at ccmram end */ } >CCMRAM Если он есть в вашем скрипте компоновщика, удосто- верьтесь, что переменная не инициализируется даже нулем, поскольку это вызовет пробел во флэш; дополнительно вы можете удалить АТ> FLASH позицию по умолчанию в конце секции определения .ccmram.
Приложение 8. System Workbench: использование ССМ памяти 373 Размещение ноль-инициализированных | переменных в ССМ II По умолчанию переменные, размещенные в CCMRAM по атрибутам, не могут быть инициализированы даже нулем. Если вам нужно инициализировать их нулем, вы должны слегка изменить startup_stm32xxxxx.S файл, чтобы добавить два нуль-инициализированных цикла (используя символы _sccmram и _eccmram), продублировав код для bss, только после его финального bcc FillZerobss; модифицировав файл подобно этому: ldr r2, =_sccmram b LoopFillZeroCcm /* Zero fill the ccmram segment. */ FillZeroCcm: movs r3, #0 str r3, [r2] adds r2, r2f #4 LoopFillZeroCcm: ldr r3, = _eccmram cmp r2, r3 bcc FillZeroCcm Размещение инициализированных | данных в ССМ II Наоборот, вы можете создать секции инициализированных данных, размещая инициализированные переменные в раз- деле .ccmidata. Вы должны вначале определить этот раздел в скрипте компоновщика: _siccmram = LOADADDR(.ccmram); /* May be already present */ /* Initialized CCM-RAM section • * IMPORTANT NOTE! * If initialized variables will be placed in this section,
374 Компьютер в лаборатории радиолюбителя * the startup code needs to be modified to copy the init- values. */ .ccmidata : { . = ALIGN(4); _sccmidata = .; /* create a global symbol at data start */ *(.ccmidata) /* .data sections */ *(.ccmidata*) /* .data* sections */ . = ALIGN(4); _eccmidata = .; /* define a global symbol at data end */ } >CCMRAM AT> FLASH Затем вы должны продублировать раздел данных, копируя код (используя символы _siccmram, _sccmidata и _eccmidata) сразу после bcc CopyDatalnit: /* Copy the ccm segment initializers from flash to SRAM */ movs rl, #0 b LoopCopyCcmlnit CopyCcmlnit: ldr r3, =__siccmdata ldr r3, [r3, rl] str r3, [rO, rl] adds rl, rl, #4 LoopCopyCcmlnit: ldr rO, =_siccmdata ldr r3, =_eiccmdata adds r2, rO, rl cmp r2, r3 bcc CopyCcmlnit I Размещение динамической памяти (heap) и стека в CCM Наконец, чтобы разместить heap и stack в CCMRAM (воз- можно после других данных), вы должны сделать только две небольшие модификации скрипта компоновщика (linker- script):
Приложение 8. System Workbench: использование ССМ памяти 375 1. перенаправить вывод ._user_heap_stack в область CCMRAM памяти вместо RAM; 2. перенаправить символ _estack в конец CCMRAM, заменив _estack = 0x20020000; /* end of RAM */ следующим (например, если CCMRAM проходит от 0x10000000 к OxlOOOFFFF, вновь заданные адреса можно изме- нить). estack = 0x10010000; /* end of CCMRAM */
ПРИЛОЖЕНИЕ 9 ЗНАКОМЬТЕСЬ: ПРОГРАММА MINIBLOQ ДЛЯ ПРОГРАММИРОВАНИЯ РОБОТОВ II MiniBloq - графический язык программирования I Arduino и простых роботов В книге упоминался робот, который программируется со смартфона. Без робота и смартфона говорить об этом нет смысла, но можно рассказать о похожейлрограммас графиче- ским языком программирования. Итак: введите в поисковую строку minibloq download, скачайте и установите программу. И скачивание, и установка происходят обычным образом. Устанавливается программа на диск С: в коневой каталог. Если программа не появится в основном меню (у меня Windows 10), то ее можно найти по адресу: C:\miniBloq.v0.83\mbq\v0.83\ miniBloq.exe. Запустите программу и выберите модуль (или робота), с которым вы намерены работать (рис. В.1). Вы можете изменить исходный язык интерфейса про- граммы: основное меню View->Properties. В нижней части левой панели появится окошко свойств, где вы можете выбрать русский язык. Вид программы изменится соответствующим образом. В прошлый раз, когда я столкнулся с программой, мне уда- лось запустить ее в Linux только с помощью Wine. Возможно, что-то изменилось, да и в разных дистрибутивах Linux все может получиться по-разному. Рассмотрим, как работа с этой программой выглядит для модуля Arduino Mega. После выбора модуля в следую-
Приложение 9.Знакомьтесь: программа MINIBLOQ 377 Рис.В.1. Первый запуск программы miniBloq щем окошке можно выбрать СОМ-порт. Если Arduino не под- ключено, а у вас есть хотя бы один СОМ-порт, то отобразится именно он. Иначе вы увидите виртуальный СОМ-порт вашего модуля Arduino. Выбор порта мы сделали. Что дальше? Первое знакомство II с miniBloq II Для первого знакомства я рекомендую обратиться к раз- делу основного меню Файл->Примеры. Программа предложит вам сохранить текущий проект в папке work, которая была соз- дана при установке программы в ее директории. Выбор при- меров большой, их все хорошо бы просмотреть, но не сейчас. Сейчас выберем самый простой пример (рис, В.2): Файл -> Примеры -> DuinoBot --► O.Blink -> Blinkmbqc. Если модуль у вас подключен, вы можете сразу загрузить программу: Компонент-+Пуск.
378 Компьютер в лаборатории радиолюбителя ШШЯж Ш Рис. В.2. Пример программы в miniBloq Преимущество этой программы в том, что вам не нужно добавочных компонентов — светодиод будет мигать на плате с интервалами в 300 миллисекунд. ПРИМЕЧАНИЕ. Заметьте, вам даже не пришлось выяснять, к ка- кому порту и выводу порта подключен светодиод на плате модуля Arduino. У вас могут возникнуть сомнения — некоторые продавцы загружают подобную программу в модуль Arduino перед про- дажей. Простейший вариант проверки, работает ли это ваша ирограмма;тшигпрограмма уже была загружена в модуль, изме- нить время паузы. Для этого щелкните левой клавишей мышки по элементу паузы и изменитеi значение в окошке (рис. В.З).
Приложение 9.Знакомьтесь: программа MINIBLOQ 379 Рис. В.З. Изменение длительности паузы Рис. В А. Подключение страницы кода
380 Компьютер в лаборатории радиолюбителя Рис.В.5. Код программы в miniBloq Изменив вторую паузу в про- грамме, повторите загрузку про- граммы в модуль. Если интервал мигания светодиода изменился, вы достигли своей цели. Более того, вы можете посмотреть, как выглядит программа на языке проекта Arduino. Выберите в основном меню (рис. В.4): Вид-+Созданный код. Откройте появившуюся закладку blink.cpp, вы увидите код, который можно скопировать в текстовый редактор. Возможно, текст кода придется подправить, но это хороший помощник в получении кода программы (рис. В.5). I Начинаем работать с программой miniBloq На рис. В.З вы можете видеть панель в правой части окна программы, которая именована как «Действия». Наведите курсор мышки на одно из окошек панели, чтобы увидеть под- сказку назначения этого элемента (рис. В.6). Просмотрите все блоки действий, можете попробовать собрать из них свою программу. Я не собираюсь создавать что-то сногсшибательное, я повторю программу Blink. После первого запуска программы, когда я открывал примеры, про- грамма предложила сохранить то, что было. Хотя и ничего не было, я сохранил файл с именем testl. Теперь я открою его: Файл->Открыть. I ВНИМАНИЕ. Не забудьте, что файл сохранился в папке work, созданной программой при установке, в директо- рии, где программа была установлена.
Приложение 9.Знакомьтесь: программа MINIBLOQ 381 Рис. В.6. Подсказка о назначении элемента панели действий Рис. В.7. Начало работы над своей программой Рабочее поле программы пока пусто. Щелкнем по первому элементу на панели «Действия». Подсказка говорит, что это элемент цикла while. Этот элемент появится в рабочем поле программы (рис- В.7). Любой цикл формируется в виде блока, где есть условие, и есть завершение блока. Стрелка справа от верхней части цикла должна указывать на возможность что-то добавить. В цвете эта стрелка красная. Если нажать на не нее, то появится панель выбора условия завершения цикла (рис. В.8). Здесь галочка соответствует условию true (или единица), а крестик — false (или ноль). Если вы помните, то бесконечный цикл выглядит как while(l), поскольку условие выполняется всегда. Добавим галочку к началу блока. Модуль с двумя стрелками на панели «Действия», посмо- трите подсказку, помогает добавить цифровой вывод в про- грамму. Щелкнув по этой иконке, добавим в программу эле- мент обращения к цифровым выводам портов. В его нижней части есть окошко, где прописывается конкретный вывод — достаточно щелкнуть по стрелке справа и выбрать этот вывод. А справа от этого модуля программы есть стрелка для выбора
382 Компьютер в лаборатории радиолюбителя Рис. В.8. Панель выбора условия завершения работы цикла состояния вывода, где галочка — это единица, а крестик — это ноль. После настройки вывода порта можно добавить паузу. Для этого есть элемент программы, иконка которого изображает часы. После щелчка по этому элементу он добавится в про- грамму. Как и предыдущий, этот компонент программы позво- ляет добавить параметр. То есть, щелчком по стрелке справа мы вызываем панель параметров, где в данном случае выби- раем добавление константы. После выбора константы в ее окошке можно ввести число. Если ввести 3000, затем достроить программу, а вы уже поняли, как это сделать, можно будет загрузить новую тестовую версию в модуль Arduino. Если вам понравилось работать с этой программой, то посмотрите примеры, создайте свои программы. Если нет, уда- лите программу. Главное, вы теперь знаете о ее существовании, что может пополнить вашу лабораторию на компьютере.
Использованные ресурсы сети Интернет и литература 1. http://qucs.sourceforge.net/ — сайт программы Qucs. 2. http://stm32cubemx.software.informer.corn/download/ — сайт, с кото- рого можно скачать CubeMx. 3. http://vgololobov.narod.ru/ — сайт автора книги. 4. http://vgololobov.narod.ru/arch/qs_tutorial_ru_pl.parti.rar — Gunthard Kraus «QucsStudio, руководство», часть 1, С. 27. 5. http://www.ac6-tools.com/downloads/SW4STM32/ — сайт, с которого можно скачать System Workbench. 6. http://www.electroclub.info/article/oosl.htm — статья про ООС. 7. http://www.yenka.com/ — сайт программы Yenka. 8. https://github.com/duro80/Makefile4CubeMX — ссылка для скачива- ния и рекомендаций по установке нужных пакетов. 9. https://github.com/duro80/Makefile4CubeMX.git — ссылка для скачи- вания и рекомендаций по установке нужных пакетов. 10. https://github.com/JRodrigoTech/Ultrasonic-HC-SR04 - Библиотека функций датчика HC-SR04 для Arduino. 11. Андреевская Т.М. Принцип построения схем автогенераторов. — М.:МГИЭМ,2004. 12. Белов А.В. Микроконтроллеры AVR в радиолюбительской прак- тике. — СПб.: Наука и Техника, 2007. 13. Белов А.В. Программирование ARDUINO. Создаем практические устройства + виртуальный диск. — СПб.: Наука и Техника, 2018. 14. Гололобов В.Н. Инструменты не бывают лишними «о моей новой книге» (по мотивам руководства пользователя EE-Sim) // Радиоежегодник — 2013. — № 23 - С. 2. 15. Гололобов В.Н. Arduino для любознательных* виртуальный диск. — СПб.: Наука и Техника», 2017. 16. Мохов А. Двухканальное четырех командное приемное устрой- ство. // Радио. - 1996. - № 1 - С. 40. 17. Мохов А. Передатчик для управления летающими моделями. // Радио. - 1997. - № 7. - С. 33. 18. Мохов А. Управление моделями по радио. //1996. — № 4 — С. 35. 19. Нефедов А.В., Гордеева В.И. Отечественные полупроводниковые приборы и их зарубежные аналоги.— М.: Радио и связь, 1990. 20. Трейстер Р. Радиолюбительские схемы на ИС типа 555. — М.: Мир, 1988.
^издательство Издательство «Наука и Техника» КНИГИ ПО КОМПЬЮТЕРНЫМ ТЕХНОЛОГИЯМ, МЕДИЦИНЕ, РАДИОЭЛЕКТРОНИКЕ Уважаемые читатели! Книги издательства «Наука и Техника» вы можете: > заказать в нашем интернет-магазине WWW.nit.COm.ril (более 100 пунктов выдачи на территории РФ) «Новый книжный» Сеть магазинов ТД«БИБЛИО-ГЛОБУС» Московский Дом Книги, «ДК на Новом Арбате» Московский Дом Книги, «Дом технической книги» Московский Дом Книги, «Дом медицинской книги» Дом книги «Молодая гвардия» > приобрести в Москве: тел. (495) 937-85-81 ,(499) 177-22-11 ул. Мясницкая, д. 6/3, стр. 1, ст. М «Лубянка» тел. (495) 781-19-00,624-46-80 ул.Новый Арбат, 8, ст. М «Арбатская», тел. (495) 789-35-91 Ленинский пр., д.40, ст. М «Ленинский пр.», тел. (499) 137-60-19 Комсомольский пр., д. 25, ст. М «Фрунзенская», ул. Б. Полянка, д. 28, стр. 1, ст. М «Полянка» тел. (499) 238-50-01 > приобрести в Санкт-Петербурге: Санкт-Петербургский Дом Книги Невский пр. 28, тел. (812) 448-23-57 Буквоед. Сеть магазинов тел. (812) 601 -0-601 > приобрести в регионах России: г. Воронеж, «Амиталь» Сеть магазинов г. Екатеринбург, «Дом книги» Сеть магазинов г. Нижний Новгород, «Дом книги» Сеть магазинов г. Владивосток, «Дом книги» Сеть магазинов г.Иркутск, «Продалить» Сеть магазинов г. Омск, «Техническая книга» ул. Пушкина, д.101 тел. (473) 224-24-90 тел. (343) 289-40-45 тел. (831) 246-22-92 тел. (423) 263-10-54 тел. (395) 298-88-82 тел. (381) 230-13-64 Мы рады сотрудничеству с Вами!