Первое знакомство с микроконтроллерами (16.07.2018). |
2018 - Июль | |||
16.07.2018 20:56 | |||
В ВУЗе, к слову, часто преподают предметы вроде "сигнальные микропроцессоры"; но преподаватели допускают одну и ту же ошибку: прежде чем чему-то обучать, - нужно объяснить дословно, зачем это нужно. Вместо этого же идет демонстрация какой-то микросхемы, которая зажигает какие-то светодиоды; и делая лабораторную работу, тихо офигеваешь от того, какой фигней занимаешься, вместо того, чтобы (подставить нужное). Микроконтроллер (МК), эта маленькая микросхема с 32 выводами, - полноценный миниатюрный компьютер, способный взаимодействовать с окружающей средой (разнообразные датчики, индикаторы, физические свойства электронных компонентов и т.д.). Он имеет свой процессор, ОЗУ, ПЗУ. В обычном ПК в роли ОС выступает Windows, Linux - с закрытым или сложным исходным кодом; в МК - ОС без интерфейса, стартующая при подаче питания. И эту ОС, фактически, создает сам пользователь: посредством программирования в среде Arduino, с минимальными требованиями к знанию языка. А раз сам создаешь оболочку для МК - можно заставить МК делать именно то, что нужно лично пользователю. Примеры применения уже реализовали коллеги на работе (копеечные решения серьезных вопросов, до 1-2 тысяч рублей): - климат-контроль в автомобиле: комплексная система управления вентиляторами в разных частях автомобиля. Имеются предпосылки к манипуляциям с мощностью кондиционера с помощью чего-то похожего; - система датчиков проникновения в окна на даче: срабатывание звукового оповещения без работы от батареек; - еще какая-то система управления в автомобиле, связанная с охлаждением двигателя; - начало системы "умный дом": отключение освещения при отсутствии движения в доме, для забывчивых. Если покупные системы "умный дом" глючат на тему датчиков движения (например, когда душ в ванной сам выключается - и, крутя задом, пытаешься заставить его заработать) - то здесь все глюки исправляешь ты сам. А можешь вместо 1 датчика поставить и 3, с отслеживанием их работы; как только 1 из 3 сломался - издавать писк. В итоге не требуется вызов мастеров, замена оборудования и прочие прелести, связанные именно с неспособностью изменения этого оборудования; - сам сейчас реализовал модернизированную микросхему 4060: двоичный генератор-счетчик-делитель аж с 20 выходами Q0...Q19; и это только начало. С точки зрения электроники, МК диктует следующие преимущества: - в МК имеются аналовые и цифровые входы/выходы. Один и тот же канал может переключаться: быть как входной или как выходной. МК ATmega328P имеет в своем составе 14 цифровых и 6 аналоговых каналов, ATmega8A-AU имеет суммарно 23 входа/выхода - какой нужно МК, такой и подобрать можно. С учетом того, что аналоговые каналы можно превращать в цифровые, - можно создавать свои микросхемы любой сложности. Особенно, если покупные микросхемы стоят дороже 75-120руб (об этом будет ниже). Часть цифровых каналов можно превращать в аналоговые выходы, они отмечены знаком "~"; - платы-переходники с корпуса TQFP32 на DIP32W существуют, и у них всегда контакты расположены в определенных позициях. Множество МК сделано именно в таком корпусе. Можно создать шаблон печатной платы для МК и использовать его в широком спектре задач - экономия времени при изготовлении печатных плат; - можно размещать МК в панельки DIP32W как разъемное соединение, как было сделано с микросхемой 4067, - что позволяет заменять МК без пайки; - наличие программатора в таких платах-переходниках позволяет изменять прошивку МК без разбора уже готового прибора - достаточно вывести разъем USB вне корпуса; - существует протокол SPI, позволяющий осуществлять внутрисистемное программирование МК. Пока штука, сложная в понимании; но, по сути, - это возможность создания внешнего программатора и управления десятками МК через 1 разъем USB. С точки зрения программирования, МК диктует следующие преимущества: - личный контроль поведения МК; - простой язык программирования (кастрированный C++) доступен лицам с начальными навыками программирования; - программно исправить ошибку проще, чем аппаратно. Ошибся в разводке платы, при ее изготовлении, и перепутал каналы местами? Перепутай их намеренно в программе, чтобы не тратиться на изготовление печатных плат. Рынок МК представлен некоторым разнообразием МК, но стоит сделать акцент на определенных моделях и определенных моментах: - набор "Arduino UNO" поставляется с большой печатной платой 50x65мм, на которой размещены все компоненты. Размер здесь - удобство при макетировании, при первом знакомстве. Вдобавок поставляется макетная плата, которая может использоваться и вне операций с МК (например, для удобной настройки потенциометров: зажимной механизм фиксации ножек). Набор покупался примерно год назад за 400руб - и успешно пылился на полке, т.к. не до него было; - когда потребуются же боевые задачи - нужен размер печатной платы поменьше. Для этого существует плата "Nano v3", стоящая на алиэкспрессе 125руб с МК ATmega328 (в чиподипе 440руб, естественно). Сам МК, если покупать отдельно, стоит 75руб/10шт. То есть, за изготовленную плату, обвес, разводку, переходник на DIP32W платится 50руб. Это - вопрос выбора: устанавливать в печатную плату МК с программатором (выгода пользователя) или создать свой программатор, шить в них МК, а устанавливать в оборудование - с помощью проходника TQFP32->DIP32W (выгода разработчика, оптимизация расходов, пространства и т.д.); - существуют МК уже в корпусе DIP28 (узком, например, ATmega8A-PU), большие по габаритам, стоят дороже на 10-20% своих собратьев в SMD-корпусах - но имеет возможность извлечения без пайки. Важно при работе с МК в корпусах SMD: TQFP32 это не PLCC32 из-за незаметного, но все же разного расположения контактов. Не существует проходников TQFP32, что не позволяет избавиться от переходника на DIP32W (это просто феерическая недоработка в сфере МК с данными корпусами!). А вот проходник PLCC32 - стоит всего 7руб, являясь при этом крайне удобной штукой при замене/перепрограммировании МК без пайки; - для МК существуют платы расширения. К примеру: есть плата, в которую вставляется Nano v.3, - и получается МК с удобными клеммниками на выходе. Есть кросс-плата для параллельной разводки каналов. Плат расширения много - и стоит именно отдельно на эту тему читать в интернете и смотреть, что продается; - в продаже есть Arduino Ethernet - подключение через сетевую карту без использования дополнительной платы расширения. Есть также Arduino Mega, Arduino Due (процессор 84МГц, 96КБ SRAM, 512КБ Flash, контроллер DMA - 13$), Arduino Leonardo. Arduino Mini - не имеет встроенного интерфейса USB, что уменьшает ее цену; ее перепрограммирование делается с помощью платы расширения Arduino Programmer; - пока удалось получить точность измерения напряжения в аналоговом порте до 2 знаков после запятой. Шаг измерения совпадает с шагом измерения плат аналогового ввода - 0.0048828125В. Техника безопасности и особенности среды программирования: - светодиоды на печатной плате МК очень яркие и слепят глаза. Я накрываю их куском резины, наблюдая за индикацией за отражениями светодиодов от поверхности печатной платы; - если исходный код содержит только переменные, или отдельная функция описана неправильно, или функция не имеет прототипа - вываливается ошибка 5 (1) при компиляции, и нужно самому думать, в чем дело; - в справке описываются сами функции, но подключаемые файлы .H не указаны. В итоге приходится смотреть в интернете, где лежит прототип той или иной функции; - среда не дает сохранять скетчи с русскими буквами и начинающиеся с цифр. Сохранение по полностью англоязычному пути может избавить от части проблем ошибки 5 (1). Скорее всего, нужно просто обновить среду с версии 1.8.1 на более новую; - лучше всего делать быстрый старт по книге MaxKit.ru "Быстрый старт. Первые шаги по освоению Arduino". Далее - перейти на книгу Саймона Монка "Программируем Arduino. Профессиональная работа со скетчами"; - при первом старте нужно вручную указать порт МК. У меня это COM4, несмотря на подключение по USB; - напряжение цифровых каналов - 5В; - именно Arduino Due имеет полноценные аналоговые выходы. В UNO это - выходы с широтно-импульсной модуляцией, меандр частотой порядка 980Гц; - несмотря на ток 40мА по даташиту, выходное напряжение что с аналоговых, что с цифровых выходов платы Arduino UNO - не стабилизированные 5В. В случае с подключением USB на выходе на холостом ходу было 4.47В, причина - длинный провод от USB ПК, подключенный разветвитель USB без внешнего источника питания. В случае с подключением батареи 12В - 4.97В. Теперь с нагрузкой на 40мА: с USB напряжение упало до 3.7В, с батареей 12В - до 4В. Для цифровых каналов это несущественно (логическим нулем считается напряжение 0.36...0.5В). А для аналогового выхода это epic fail; - только Due, за счет истинных аналоговых выходов, может генерировать, например, синусоидальный сигнал. (добавлено 17.07.2018) Вот еще идея возникла. Каждое утро достает солнце, которое светит на уличный термометр, - и он неверные данные показывает. Можно защитить термометр кожухом, но сам кожух раскалится и все равно повлияет на результат. Решением было бы разовое измерение температуры в 5 утра и ее фиксация на дисплее в течение 3 часов. В провод датчика при этом можно сделать врезку из проводков малой толщины, с целью беспрепятственного выхода проводов через балконную или оконную дверь. А сам датчик защитить полиэтиленом или тонким слоем водостойкого герметика. Из минусов среды - невозможно ставить остановы. И int 2 байта! Библиотека Necroleptic, призванная уменьшить энергопотребление микроконтроллера, работает неправильно. Delay(1000) не равно Necroleptic.delay(1000). (добавлено 20.07.2018) Если код сложен в отладке с помощью вывода в монитор порта - можно использовать другие C-подобные языки, где компилятор полноценен; например, Borland C++ Builder. Библиотека Prescaler, призванная уменьшить частоту процессора в 256 раз, - условно-рабочая. Возможно, она и понижает частоту процессора в 256 раз - но в этом случае выходит из строя delay, а trueDelay в составе библиотеки не обеспечивает замену данной функции. Время, деленное на 256 в delay, лишь примерно похоже на реальное время обычного delay. (добавлено 06.08.2018) Книга "Петин В.А. Проекты с использованием контроллера Arduino /Санкт-Петербург: БВХ-Петербург, 2014г" - отражает технические характеристики разных платформ Arduino, наборы плат расширений; что позволяет расширить кругозор. |
|||
Обновлено ( 06.08.2018 19:56 ) |