пятница, 5 августа 2022 г.

Генератор прямоугольных импульсов на микроконтроллере Atmega8

Недавно искал схему несложного генератора прямоугольных импульсов для настройки своих радиоподелок, и на одном из сайтов нашел интересный простой проект на Arduino Nano с регулировкой в диапазоне от 5гц до 1мгц. 
Проект немного переделал под свои условия, Arduino Nano заменил на микроконтроллер ATmega8, а дисплей LCD 16х2 на M392, убрал подтягивающие резисторы на 10к которые показаны на схеме автора статьи, но подключил в коде командой PULLUP, примерно так – pinMode (10, INPUT_PULLUP) и также все эти входы инвертировал вместо HIGH установил для всех LOW.
Добавил пару конденсаторов на 20пф и кварц на 16мгц.
Немного изменил авторский код как описал выше и уже переделанную прошивку в формате hex выудил из запущенной программы Arduino IDE после компиляции там указан путь к этому файлу.
Прошивал микроконтроллер ATmega8 программой Avrdude, фьюзы выставил для внешнего кварца на 16мгц.
В программе DipTrace нарисовал схему со своими комплектующими конвертировал ее в рисунок платы и создал Gerber файл. Затем программой FlatCAM сгенерировал G-код для ЧПУ станка и изготовил плату. Фрезу взял концевую и немного большего диаметра чтобы ускорить процесс фрезеровки — это видно на фото.  Делюсь идеей и рисунками может кому пригодиться.
тест генератора на осциллографе
плата изготовлена на ЧПУ
установить галочку
путь к файлу hex
Программатор USBASP
фьюзы 

четверг, 1 апреля 2021 г.

Счетчик с таймером для пунктов проката и аттракционов

Устройство представляет собой таймер и счетчик для учета количества поездок, например при прокате детских электромобилей и мотоциклов. Для наглядности и проверки работоспособности я собрал две схемы из готовых модулей на макетной плате. В одной схеме управление осуществляется только кнопочными переключателями в другом с помощью кнопок и бесконтактного брелка RFID. Электронный брелок и карта RFID в моем случае имеют разные цифровые коды, код брелка использован для пуска устройства, а код карты для обнуления счетчика поездок, хранящихся в энергонезависимой памяти EEPROM. Устройства работают в двух временных интервалах 5 или 10 минут. 
Длительность движения выбирается заранее кнопочными переключателями в меню настроек, а пуск осуществляется бесконтактным RFID брелком, доступ к которому, имеет только персонал данного пункта проката, таким образом исключается бесконтрольный старт электромобиля. Информация о количестве поездок и время таймера отображается на экране дисплея, данные счетчика и число пусков записываются отдельно для 5 и 10 минутного режима работы. При желании счетчик можно обнулить в первом варианте вводом пароля во втором с помощью карта RFID. Данное устройство будет интересно предпринимателям или владельцам пунктов проката, как дополнительный способ защиты своего бизнеса от убытков и от недобросовестных работников аттракционов.

В первом варианте использовал модули: 

1. Плата Arduino Nano V3.0 ATMEGA328P 5v - 1шт.

2. Дисплей Oled 0,96 дюйма, 128X64 I2C SSD1306 - 1шт.

3. RTC часы DS1307 I2C EEPROM 24C32 - 1шт.

4. Релейный модуль на 5v - 1шт.

5. Панель с кнопочными переключателями – используется только 3 кнопки.

Во втором варианте дисплей заменен на LCD1602 с платой для подключения по шине I2C, и добавлен модуль RC522 на MFRC522 для считывания RFID брелков. 

Таймер-счетчик подключается к штатному аккумулятору электромобиля через 5 вольтовый стабилизатор, например вот через такой готовый модуль на базе LM317 DC-DC или подобные. Нормально разомкнутые контакты реле устройства подключаются, например в разрыв педали, ну конечно способ интеграции зависит от самой модели. 





Программный код управления создан в программе FLProg.




воскресенье, 9 февраля 2020 г.

Станок для намотки катушек на Arduino

Станок для намотки катушек медным проводом виток к витку, но теперь программируемый с электроприводом. Управляет станком микроконтроллер Atmega328P, а в качестве привода осей намотки и укладки были использованы два шаговых электродвигателя типа EM434 от старого принтера и два драйвера A4988. Для визуального отображения вводимых команд и настроек станка был применен жидкокристаллический дисплей LCD1602 с модулем для подключения по шине I2C. Настройка и ввод команд осуществляется шестью не фиксируемыми кнопками.
Основные настройки, отображаемые на экране. 
В первой строке: F - (frame height - высота катушки), W - (wire diameter - диаметр провода), L (layers number - число слоев), все значения вводятся в миллиметрах. Вторая строка информативная: N - (number turns - число витков) рассчитанное программой. C - (counter - счетчик) считает обороты с помощью щелевого оптического датчика во время исполнения программы. D - (direction travel - направление перемещения поводка), L - влево и R – вправо.
В зависимости от расположения провода перед пуском можно выбрать от какой стороны катушки начнется намотка, достаточно перед стартом нажать рычажок одного из двух конечных выключателей, и программа изменит направление вращения вала. Один концевой выключатель закреплен неподвижно на пластине с прорезью, а второй можно перемещать с помощью дополнительного длинного винта (шпилька М3х140 мм), здесь ходовая гайка вставлена в п-образный кронштейн, который в свою очередь скреплен с выключателем и при вращении винта меняется его положение. Регулировка необходима для ограничения хода и зависит от размера каркаса катушки или длины намотки. Контакты залиты клеевым пистолетом. Верхняя ось (шпилька М6х200мм) предназначена для крепления каркаса наматываемой катушки и нижняя ось (шпилька М6х200мм) по которой движется ходовая гайка внутри удлинённого п-образного кронштейна с другой стороны которого закреплен небольшой шкив поводок. Обе оси установлены на шариковых подшипниках 1000096.  Муфты для соединения валов шаговых двигателей с осями изготовлена из отрезков толстостенных трубок.
Внутренний диаметр которых рассверлен под размер валов и осей. Сбоку в стенке трубок просверлены по одному отверстию под резьбу и винт М3 для быстрой фиксации (прим. одна муфта имеет дополнительное резьбовое отверстие в него ввернут флажок для оптического датчика). С одного конца каждой трубки с торца вырезаны пазы и выступы получается, как кулачково-дисковая муфта. Рама станка выпилена из фанеры 9мм., все размеры произвольные только ширину брал от большой катушки см. фото. Шесть кнопок распаяны на узкой монтажной плате: (одна пусковая, две чтобы увеличить или уменьшить диаметр провода, одна кнопка для переназначения двух предыдущих, на добавить и убавить длину намотки, и две для изменения количества слоев. Перед пуском после ввода значения W-диаметр провода программа определит с какой скоростью необходимо перемещать поводок чтобы уложить провод виток к витку. Верхний мотор EM434 (200 шагов) драйвер A4988 настроен на полный шаг. Нижний мотор который без имени (100 шагов), для него на драйвере добавил перемычку для работы в режиме ½ шага. Микроконтроллер Atmega328P и модули A4988 размещены на монтажной плате (50х70 мм) на распаянных панельках под микросхемы. Также припаян 6-контактный разъем, который необходим для прошивки контроллера, например для правки кода или других изменений.
В качестве программатора использована плата Arduino Uno, настройка описана в предыдущей публикации. Также в одной из предыдущих статей описан способ подключения щелевого оптического датчика. Код управления станком создан с помощью программы для визуального программирования FLProg. см. рисунок выше. В качестве источника питания применен готовый импульсный сетевой адаптер 9В и ток 1А, на драйверы моторов подается 9В, а на логику и микроконтроллер Atmega328P, через небольшой модуль стабилизатор, выполненный на микросхеме LM317, настроенный на 5 вольт. Изначально действующая модель была собрана на пластиковой макетной плате на Arduino Nano, когда более-менее все отладил, после этого перезолил код в контроллер Atmega328P и спаял всю схему. Настройка станочка незакончена необходимо протестировать, работа продолжиться.






вторник, 19 ноября 2019 г.

Энкодер для электродвигателя


Сегодня поделюсь своим опытом, расскажу про устройство для управления электромотором с помощью программы которая может изменять направление вращения, задавать количество оборотов и удерживать установленное положение вала. Для сборки устройства я использовал мотор от струйного принтера, оптический диск с прорезями - такие продают на Али. Собрал подобие энкодера из двух щелевых оптических датчиков и четырех резисторов, также применил двухканальный релейный пятивольтовый модуль, а для визуального контроля использовал дисплей LCD 1602 с адаптером для шины I2C, еще добавил три не фиксируемых кнопки для ввода данных и все это подключил к Arduino Nano.
Направление вращения и положение вала относительно нуля задаются двумя кнопками, движение по часовой стрелке кнопка К1 вводятся положительные значения, а вращение против часовой стрелки кнопка К2 отрицательные значения, далее управляет всем этим процессом микроконтроллер в которой загружена небольшая программа, созданная с помощью визуального программирования в FLProg. В коде есть ненужные дополнительные проверки, которые можно убрать, но это рабочий образец, и я не стал пока нечего чистить и удалять.

Устройство немного напоминает сервопривод с обратной связью, есть функция удержания вала, например при попытке изменить положение вала вручную контроллер получает импульсы от энкодера и возвращает его на старое место. На экране дисплея отображаются вводимые значения это Set - установка, Re - число оборотов и Di - пройденное расстояние, допустим  в миллиметрах.
Предположим что это устройство подключено к некой оси станка чпу, тогда при кратковременном нажатии кнопки К1, на дисплее появится значение Set=1 и вал двигателя сделает Re=10 оборотов, а к примеру ось станка передвинется на расстояние Di=1 мм., если после этого нажать К2 и ввести Set=0, то вал мотора вернется в исходное положение, то есть в ноль с обратным вращением. Конечно же это все условно и пройденное расстояние, и обороты, все зависит от шага ходовых винтов станка, передаточных чисел редуктора и др.

Для ускоренного ввода значений необходимо удерживать кнопки. В программе есть ограничение 100мм. (см. блок сравнения в схеме), это значение можно увеличить, уменьшить или убрать вовсе, по задумке это границы рабочего хода оси чпу станка. Также можно выполнить сброс счетчика если одновременно нажать кнопки К1 и К2, а для сброса значений энкодера необходимо нажать кнопку К3.
В блоках деления для значений Re и Di в схеме FLProg, указаны делители (100 и 10) они установлены произвольно, но так как вал двигателя имеет инерцию то с уменьшением этих значений происходит эффект зацикливания. Если применить легкое торможение вала эффект пропадает. Двигатель работает от внешнего источника 5 вольт.
Оптические датчики установлены вплотную друг к другу и приклеены к металлической пластине в которой просверлено отверстие для крепления и регулировки положения для лучшего срабатывания питание 3,3 вольта. В схеме есть пользовательский блок Encoder которого нет программе FLProg, его я скачал отдельно.









Сейчас экспериментирую с вариантом, где уже будет ось станка, так что будет продолжение.





вторник, 24 сентября 2019 г.

Таймер реле цикличного действия

Таймер реле – цикличного действия для включения и отключения различных устройств через установленные промежутки времени.
Продолжение.
При добавление дополнительных функций таких как запись настроек в энергонезависимую память ускоренный ввод и полный сброс, которыми я хотел усовершенствовать предыдущий таймер см. начало здесь, появились трудности из-за ограничения флэш памяти микроконтроллера Atmega8, так как прошивка создается в программе визуального программирования FLProg и ее код необходимо чистить от ненужных срок для уменьшения размера файла.
Этим заниматься пока не буду, а для продолжения проекта микроконтроллер заменил на Arduino nano и уже в готовый ранее созданный код добавил описанные выше функции. Предварительно перед компиляцией в настройках FLProg сменил контроллер на Arduino nano см. рис. 
На видео готовый макет таймера, который управляет реле, особо не проверял возможны глюки, но при тестирование работал правильно, при обрыве питания установки сохранялись.
Использовал для этого микросхему памяти, расположенную на модуле часов. 
Ускоренный ввод - при кратковременном нажатие кнопок добавить и убавить по одной единице, а при удержании мгновенное изменение значений. 
Еще добавил полный сброс. Вовремя работы таймера необходимо перевести его в режим установки времени повторным нажатием кнопки пуск и после это нажать одновременно кнопки убавить и
добавить, после этого все значения обнулятся. Вторую строку дисплея использовал для вывода на экран различных информационных сообщений.
Для использования внешней микросхемы AT24C32 eeprom, необходимо в левой колонке дерева проекта в программе FLProg, отключить внутреннюю память и подключить внешнюю.
Пока все, возможно будут дополнения например, бегущая строка.
 

вторник, 10 сентября 2019 г.

Самодельный циклический таймер на микроконтроллере Atmega8


П
родолжаю предыдущую тему, про прошивки для микроконтроллеров созданные с помощью программы FLProg. Сегодня собрал макет простого циклического таймера на базе микроконтроллера фирмы Atmel Atmega8 для управления нагрузкой через электромеханическое реле.
Настройка таймера выполняется с помощью четырех кнопочных выключателей без фиксации, а текущая информация отображается на жидкокристаллическом дисплее. Одна кнопка ПУСК. Вторая кнопка ВЫБОР предназначена для инверсии следующих двух выключателей которыми вводится временной диапазон для управления состоянием силового реле к контактам которого подключена нагрузка. Отрезки времени для действия и бездействия устанавливаются с помощью двух кнопок ДОБАВИТЬ и УБАВИТЬ, время задается в секундах, например 120 = 2 минуты. Управление устройством можно выполнять также и во время работы, то есть на ходу, меняя временные отрезки манипулируя тремя кнопками выбор, добавить и убавить.
Для сборки таймера мне понадобились - микроконтроллер Atmega8, пятивольтовый одноканальный релейный модуль, макетная плата с проводами, четыре выключателя без фиксации, модуль часов реального времени DS3231, LCD дисплей с адаптером для шины i2c и Arduino UNO как программатор для заливки прошивки, созданной в программе FLProg способом который я описывал в предыдущей статье.. 
Циклический таймер имеет обратный отсчет, после установки временных интервалов и пуска отсчет начинается с состояния отключено - OFF. На экране дисплея в первой строке отображается установленное значение (например OFF=80) это время когда напряжение на нагрузке отсутствует далее идет обратный отсчет до значения OFF=0 и затем следует автоматический переход в режим ON - включено (например ON=57), то есть нагрузка будет включена в течении 57 секунд, по окончанию отсчета таймер снова переключится в режим OFF=80 и все повторится. При повторном нажатии кнопки ПУСК таймер завершит текущий цикл и остановиться. Вторая строка экрана SET – УСТАНОВИТЬ (например, SET=57), предназначена для ввода и отображения временных промежутков, в первой колонке время работы во второй время простоя, после запуска эта строка гаснет. Кнопка ВЫБОР меняет назначение переключателей УБАВИТЬ и ДОБАВИТЬ, для ввода значений в режиме ON или OFF.
Прошивку загрузил в микроконтроллер Atmega8 с помощью платы Arduino UNO используя её в качестве программатора. Блок схема таймера изображена на рисунке выше, создана в FLProg. Перед загрузкой код немного почистил в редакторе от ненужных переменных, которые создаются автоматически при компиляции в FLProg, чтобы немного уменьшить размер скетча.
Примечание: Секунды тактируются от модуля часов, но вовремя длительной работы заметил, что время немного плавает, пока не понял почему, возможно причина в ненадежных контактах на макетной плате или в коде, но свои функции таймер выполняет стабильно.
Некоторые элементы для программы Fritzing в которой создан рисунок проект из модулей позаимствовал здесь.
Пример работы таймера:

Продолжение следует…
Постараюсь добавить в код программы запись настроек таймера во внешнюю энергонезависимую память eeprom типа AT24C64, хотя можно использовать для этого такую же микросхему AT24C32 которая уже размещена на модуле часов DS3231, при потере питания установки будут сохраняться. Также нужно добавить функцию полный сброс. Функцию ускорения ввода. Буду пробовать.

среда, 28 августа 2019 г.

FLProg Arduino Atmega8 и немного Visual Studio

Здравствуйте. Немного поднаторев в программе FLProg и научившись составлять простые алгоритмы для прошивки Arduino разных версий типа uno, nano, mini решил попробовать прошить микроконтроллер ATmega8, но не с помощью USBasp, а используя в качестве программатора все ту же Arduino UNO, а саму прошивку написать, пользуясь визуальным языком программирования FLProg. Собрав с различных сайтов много полезной информации, приступил к реализации своего проекта. И вот как я это сделал и что в итоге получилось в картинках.
Первым делом с официального сайта загрузил и установил последнюю версию FLProg версия 5.3.0, в ней есть, библиотеки и сама среда для разработки прошивок Arduino IDE версия 1.8.9 интегрирована, так что ее отдельно устанавливать не пришлось.










1.После установки программы подключил Arduino UNO к USB порту, нашел папку (у меня здесь по умолчанию C:\Program Files (x86)\FLProg\ideV3) и запустил файл «arduino exe». Теперь все готово для создания программатора на базе UNO.













2.В меню «Инструменты - Плата» выбрал «UNO», программатор «AVRISP mkll» и «Порт COM5» возможно у вас номер порта будет другой.


















3.Далее в меню «Файл-Примеры» выбрал скетч «ArduinoISP»


















4. Затем перешел к пункту меню «Скетч» и нажал  «Загрузка» или что тоже самое стрелка в кружке. Все прошивка залита, программатор готов.













5. Далее перешел в меню «Файл – Настройки» здесь я нечего не менял только в поле «Дополнительные ссылки для Менеджера плат» вставил вот эту ссылку (https://raw.githubusercontent.com/sleemanj/optiboot/master/dists/package_gogo_diy_atmega8_series_index.json) и нажал  окей.















6. И снова выбрал «Инструменты-Плата» далее перешел в раздел «Менеджер плат» там нашел установочный пакет, он был в самом низу, как показано на картинке 7.














7. Сейчас у меня он уже установлен, а у вас будет кнопка установить в правом углу жмем ее, ждем и после инсталляции это окно закрываем.

















8. Опять перехожу в «Инструменты-Плата» и ищу ATmega8/A и выбираю ее.














9. Теперь снова к пункту «Инструменты - Программатор» и меняю его нажатием с «AVRISP mkll» на «Arduino as ISP» вот так.













10. Если все правильно, то должны появиться дополнительные настройки микроконтроллера, здесь я нечего не менял. Теперь временно отключаю питание UNO и подключаю к ней ATmega8 (мануал здесь) он заранее размещен на макетной плате и согласно верхнего рисунка соединяю к нему шесть проводов. Проверяю все ли правильно и снова подаю питание, в меню «Инструменты» см. картинку 10 жму «Записать загрузчик».


















11. Наконец-то микроконтроллер ATmega8 готов к заливке. Пробую скетч с мигающим светодиодом, все работает, но надо что-то посерьёзнее. Подключаю LCD дисплей 1602 к шине I2C через плату конвертер. Нужно соединить два провода для питания VCC, GND (ножки 7 и 8) и два провода к пинам A4-SDA, A5-SCL микросхемы ATmega8 (ноги 27 и 28 соответственно). Пробую записать скетч из примеров, перехожу «Файл-Примеры» выбираю программку «LiquidCrystal_I2C – BlinkingCursor» 11 рисунок.
















12. Далее в меню «Скетч» выбираю и жму «Загрузить через программатор», перемигивание светодиодов на UNO свидетельствует о том, что идет загрузка файла.


















Через несколько секунд на дисплее появился текст с мигающим курсором и без см. фото ниже, и надпись в программе загрузка завершена, рисунок 13, если нет ничего, то необходимо настроить контрастность на плате I2C.


















Все отлично работает. Закрываю программу Arduino IDE и отключаю устройство.














Дополнительно уже к этой схеме добавляю часы реального времени DS3132 также к шине I2C, еще соединяю три кнопки без фиксации для  управления таймером одним контактом к минусу другим к ножкам микроконтроллера D2, D3, D4 и пятивольтовое реле два провода к питанию, а третий управляющий провод к пину D7 мк. ATmega8.















Снова включаю и теперь уже запускаю программу FLProg, создаю входы и выход выбираю в настройках часы и дисплей и пробую составить алгоритм работы простого таймера, который будет включать и отключать нагрузку через реле по истечению установленного времени,  ранее я уже делал что-то подобное, но для Arduino Nano в ней флэш памяти 32к а в ATmega8 не более 8к с учетом загрузчика.
















Ну вот, кажется, вариант таймера готов. Триггеров, экранов, переменных, всего надо поменьше и вот ОН момент. Нажимаю Компилировать, пока все идет хорошо.


















Появилось окно программы Arduino IDE, здесь выбираю «Скетч» и жму «Загрузить через программатор», еще несколько секунд ожидания и прошивка записана в микроконтроллер. Появилась надпись загрузка завершена и размеры файла, я так полагаю что залез впритык, рисунок 16.


















Немного о работе таймера. Время задается в секундах в верхней строке,  например для 3-х минутного отчета необходимо набрать 180 секунд. Управление тремя кнопками - одна кнопка пуск, две другие добавить и убавить на одну секунду, при одновременном  нажатие последних происходит сброс счетчика. В нижней строчке идет прямой отчет в формате часов. Визуально в конце заметно раннее срабатывание реле на 1с., но при старте показания на дисплее тоже отстают, так что есть компенсация.
Работа таймера на видео.

И напоследок еще хочу немного сказать про программу «Visual Studio 2019». Очень удобная для отладки редактирования и уменьшения файла если включить Release.
Пробовал такой вариант. Составляю программку в FLProg компилирую и пытаюсь «Загрузить через программатор», а она не лезет, тогда из окна Arduino IDE копирую код скетча в буфер и вставляю его в окно Visual Studio включаю конфигурацию Release и нажимаю зеленую стрелочку «Пуск», есть файл стал легче, пошла загрузка.














Чтобы Visual Studio работала с Arduino и микроконтроллерами, необходимо установить в меню «Расширения» см. на рисунке дополнительный пакет, настроить связи, подключить библиотеки и теперь создаваемые прошивки можно записывать напрямую из VS в Ардуину в моем случае в Атмегу8.

P.S. Это моя шпаргалка, а то через месяц все забуду.

Архив

Популярные сообщения