пятница, 19 апреля 2024 г.

Электровелосипед с безколлекторным двигателем

Всевозможные виды электротранспорта становяться всё более популярными (на момент написания данной статьи). На улицах городов уже давно появились гироскутеры, моноколеса, электросамокаты однако не везде есть достаточно хорошие дороги для данных видов транспорта т.к. у данных видов транспорта маленькие колеса для грунтовых не асфальтовых дорог. Электровелосипед подходит для большинства дорог и возможно что это самый проходимый транспорт т.к. он узкий и легкий то он может проходить даже по таким местам которые недоступны для автомобилей и квадроциклов. Оснастив электровелосипед мотором можно получить электровелосипед. Обычно для этого используют мотор-колеса. Однако, на момент написания данной статьи, они очень дорогие. Возможно из за своей популярности а также из за дороговизны редкоземельных магнитов являющихся составной частью данных моторов. Отдельные моторы с редкоземельными магнитами могут быть на порядки дешевле и тем не менее быть способными "тянуть" велосипед. Однако такие моторы, чаще всего, имеют слишком высокие обороты для того чтобы крутить колесо велосипеда напрямую. А также для этого им не хватает момента. Чтобы увеличить момент и понизить обороты можно использовать редуктор. Существует множество разнообразных видов редукторов но наиболее подходящие для велосипеда могут быть сделаны со шкивами и ремнями или с цепями и звездами. Редуктор с цепями подходит лучше т.к. занимает меньше места по ширине. Редуктор должен иметь некоторое количество ступеней т.к. без них для понижения оборотов понадобиться очень большая ведомая звезда. BLDC мотор может управляться готовым контроллером или самодельным. Если мотор трехфазный то скорее всего для него подойдет такой же контроллер как и для моторколеса с соответствующими параметрами (мощность, сопротивление обмоток и т.д.). В данном блоге имеются статьи о создании самодельного контроллера BLDC мотора. Внешний вид платы м.б. напр. такой как на фотографии:

Плата с данной фотографии ещё некоторое количество раз модифицировалась прежде чем начать работать в электровелосипеде но в конце концов электровелосипед всё таки заработал. Велосипедов в которых работал данный контроллер на самом деле 2. Первый показан на фоторгафии:
Данный контроллер успешно работал с данным велосипедом и аккумулятором на 24в а позже и на 29в. После контроллер был переставлен на другой велосипед. Тест которого можно посмотреть на видео:




Адрес биткоин кошелька для поддержки канала - bc1qlhrmmkh77x2lzhqe4lt9qwkglswj64tsqt2l5g


пятница, 15 марта 2024 г.

Системный таймер STM32

 Микроконтроллеры STM32 содержат некоторое количество таймеров. Таймеры делятся на типы и отличаются друг от друга. Существуют, ранее рассмотренные, таймеры общего назначения (напр. TIM2 и TIM3), продвинутые таймеры (TIM1 почти такие же как таймеры общего назначения но с большим количеством дополнительных функций), сторожевые таймеры и системные таймеры (обычно системный таймер только один). Системный таймер самый простой и может использоваться когда не нужен какой либо сложный функционал. Данный тип таймера имеет некоторое небольшое количество регистров. Например регистр счетчика. В этом регистре находиться число которое показывает до скольки досчитал данный таймер. Считать он может только вниз т.е. только декрементировать (уменьшать на единицу) число в данном регистре. Этот регистр 23х разрядный:


После того как число в этом регистре достигло нуля, происходит запись числа в этот регистр из регистра перезагрузки:

Т.е. можно сказать что в этом регистре находиться число того сколько раз считает таймер прежде чем произойдет его переполнение. После того как произошло переполнение, данного таймера, может быть вызвано прерывание. Чтобы разрешить прерывание нужно установить единицу в бит
1 регистра настройки таймера:

У данного таймера всего один регистр настройки в котором для настройки есть всего три бита. Также есть один флаг. Бит 1 (как было показано выше) отвечает за разблокировку прерывания по переполнению (других прерываний у данного таймера нет). Этот бит д.б. установлен в единицу чтобы прерывание срабатывало. Также есть бит 0 для включения таймера:
И бит 2 для выбора внутреннего источника тактирования:

единица, в данном бите, означает тактирование от внутреннего источника, ноль означает тактирование от внешнего источника. Т.е. для настройки таймера (если не нужно внешнее тактирование) все три бита нужно заполнить единицами. Предделителя у данного таймера нет поэтому снизить частоту возникновения прерывания можно например дополнительным программным счетчиком или же например установить внешнее низкочастонтное тактирование от например микросхемы - таймера 555 или от пина этого же микроконтроллера (правда в этом случае придется задействовать какой либо другой таймер если нужна точность). 
Видео по данной теме:



Адрес биткоин кошелька для поддержки канала - bc1qlhrmmkh77x2lzhqe4lt9qwkglswj64tsqt2l5g

суббота, 10 февраля 2024 г.

Переделка дальта 3D принтера в лазерный ЧПУ гравер

 FDM 3D принтеры стали популярными ЧПУ станками для изготовления прототипов а также даже производства настоящих полнофункциональных изделий и деталей в основном из пластмассы. Чаще всего 3D принтеры делают детали из PLA или ABS пластиков которые весьма дорогие (на момент написания данной стати) в состоянии прутка пригодного для FDM 3D принтера. Большинство FDM 3D принтеров легко переделать в лазерный гравер путем замены экструдера пластика на лазер. Для лазера (в отличии от например фрезера) не нужна жесткая конструкция + 3D принтер может менять фокусировку лазера в процессе работы, чего не могут даже некоторые лазерные граверы. Чтобы переделать 3D принтер в лазерный гравер нужно заменить хотенд принтера на лазерный модуль. Лазерные модули бывают разные. Лазеры бывают разных типов и мощностей. Самые дешёвые, компактые и легкие - это полупроводниковые лазеры они также уступают по мощности например CO2 лазерам но зато + к меньшим габаритам они имеют меньшую стоимость и могут быть установлены на дельта 3D принтеры типа Rostock mini. Обычно дельта на дельта принтеры не устанавливаются тяжелые головки но практика показала лазерный модуль оптической мощностью 5Вт (потребляемая мощность 40Вт) способный резать фанеру и пластик а также гравировать большинство материалов может работать с принтером Rostock mini.

Данный лазерный модуль имеет радиатор, вентилятор для охлаждения и одновременно сдувания дыма от разрезаемой поверхности для улучшения прохождения лазера до этой самой поверхности а также есть сопло которое направляет поток воздуха в разрезаемую точку чтобы лучше сдувать дым. Также есть защитная красная насадка для защиты глаз (на которую не стоит сильно полагаться) и плата управления с тремя выводами. Один вывод питания +12В, второй - земля GND 0В и вывод управления на который подается ШИМ с уровнями напряжения 0В и +5В. В комплекте шел кабель с разъемами. В кабеле 3 провода: красный +12В питания, черный 0В, желтый - ШИМ 0...+5В. Питание подключается к источнику от которого питается принтер. А желтый провод к одному из пинов контроллера RAMPS но только не к тому с которого выходит 12В например стола или вентилятора т.к. эти пины сожгут испортят плату. Нужен именно управляющий пин. Это может быть например свободный пин D4


 который предназначен для подключения сервомотора но также его можно использовать как обычный свободный GPIO командой например M42:

M42 P4 S150 ; включить пин D4 на гребенке с сервами с краю с ШИМом 150

Где M42 - это название команды, P4 - номер пина, S150 - уровень шима который м.б. от 0 (лазер полностью выключен и не работает) до 255 (лазер полностью включен и работает на пределе). К сожалению в прошивке Мерлина данная команда не синхронизированна с командой G1 перемещения головки в пространстве, поэтому резка и гравировка не будут точными а также в варианте прошивки для дельта принтера вообще нет команды с синхронизированной работой лазера и перемещением головки. К счастью данная прошивка является скетчем для ардуины Меги который можно подправить. Можно например добавить собственный нестандартный G код с синхронизацией лазера и перемещения головки в пространстве. Что и было сделано. В прошивке Мерлина есть файл "Configuration.h" в который вносятся изменения для настройки принтера. В данном файле изменяются специальные константы которые специально вынесены в данный файл для пользователя чтобы было удобнее и безопаснее чтобы не испортить случайно всю прошивку но добавить новую команду через этот файл нельзя. Добавить её можно в файле "Marlin_main.cpp". В данном файле есть функция "void process_commands()" внутри которой есть ветвление "switch((int)code_value())" внутри которого есть команды. Было замечено что в прошивке для дельта принтера Rostock mini G команды заканчиваются на G4 потом идет перерыв и начинаются с G10 которые заканчиваются на M командах. Для G команд и M команд существует какой общепринятый то стандарт и команда с синхронизацией должна иметь специальное обозначение что возможно позволит использовать для генерации кодов какую либо готовую программу. Однако поскольку для полного понимания прошивки и изучения стандарта нужно тратить время то для ускорения и упрощения можно просто добавить новую команду по аналогии с какой либо имеющейся и написать генератор G кодов самостоятельно. Чтобы добавить новую команду G5 нужно скопировать код:

и вставить после обработчика команды G4. Пример использования новой самодельной команды
 G5 X0 Y0 Z73 F300 P4 S150
означает переместиться в точку X0 Y0 Z73 со скоростью 300 и включить пин D4 с шимом 150.

Адрес биткоин кошелька для поддержки канала - bc1qlhrmmkh77x2lzhqe4lt9qwkglswj64tsqt2l5g

понедельник, 8 января 2024 г.

Инфракрасный лазерный дальномер GY-530 GY-VL53L0X

 Инфракрасный лазерный дальномер VL53L0X может быть подключен к плате Ардуино по шине I2C и использоваться для бесконтактного измерения расстояний от 50мм (проверено эксперементально (см. видео ниже)) до 2м с точностью до 1мм. Существуют также ультразвуковые дальномеры наподобии HC-SR04 но такие дальномеры больше подходят для обнаружения крупных препятствий в то время как VL53L0X способен обнаруживать препятствия толщиной с карандаш и возможно даже меньше. Инфракрасные дальномеры также обладают недостатками по сравнению с ультразвуковыми, например они менее далеко будут измерять поверхности хорошо поглощающие свет. Подключить дальномер VL53L0X к плате Arduino pro mini можно по схеме:



USB-UART конвертер нужен для передачи данных на компьютер чтобы компьютер мог монитором показать результат. А также для того чтобы загружать скетч в Ардуино. Схема соединения простая, модуль толерантен к напряжению +5В поэтому такая схема возможна. Для того чтобы можно было использовать данный модуль с платой Ардуино и программировать в среде Ардуино, нужно подключить библиотеку в данной среде. Для этого нужно зайти в менеджер библиотек поп пути Скетчь -> Подключить библиотеку -> Управлять библиотеками

В поисковой строке менеджера библиотек вписать название модуля или первые буквы его названия чтобы найти библиотеку, после чего нажать кнопку "установка"
Далее появится окно предлагающее установить ещё некоторое количество библиотек необходимых для работы основной библиотеки тут естественно нужно нажать кнопку "Install all"
если конечно данные библиотеки ещё не установлены.
После того как библиотеки будут установены, можно закрыть менеджер библиотек. Теперь можно открыть тестовый скетчь и загрузить его в плату
После того как скетчь загрузиться можно открыть монитор последовательного порта и измерять расстояние дальномером
Тестовый скетч не сложный:

в самом верху подключается заголовочный файл библиотеки, далее объявляется объект класса библиотеки, в основной функции setup() инициализируется последовательный порт, модуль и выводятся стартовые сообщения. В основном цикле имеется объект для получения данных с модуля (measure) ниже данный объект заполняется данными если расстояние удалось измерить то оно выводиться в последовательный порт если не удалось то выводитья сообщение об этом
в самом конце задержка для того чтобы цифры не сильно мельтишили на экране.
Видео по дальномеру:

Адрес биткоин кошелька для поддержки блога - bc1qlhrmmkh77x2lzhqe4lt9qwkglswj64tsqt2l5g