Авторизация
Регистрация

Напомнить пароль

Регулятор оборотов микродрели на микроконтроллере ATtiny85

  1. Цена: $6.49 за 5шт
  2. Перейти в магазин
Здоровья всем читателям Муськи!
Благодаря этому замечательному сайту обзавелся множеством полезных вещей и знаний и в ответ решил написать первый отчет о недавно разработанном устройстве. В процессе разработки устройства столкнулся с рядом проблем и успешно их разрешил. Возможно, кому-то из коллег-новичков описание некоторых решений поможет в творчестве.
Для изготовления печатных плат обзавелся микродрелью и стойкой для нее, превращающей дрельку в сверлильный микростанок. Необходимость этого возникла после кучки переломанных сверл 0.5-1мм при использовании в шуруповерте и китайском дремеле. Но, как оказалось, пользоваться таким инструментом без регулятора оборотов невозможно. Регулятор решил сделать самостоятельно, попутно получив новые знания.

Радиолюбительский опыт у меня небольшой. В детстве по книге Борисова собрал несколько приемников, да моргалок на мультивибраторах. Потом пошли другие увлечения и дела.
А тут по случаю заметил Arduino, лихо наваял макетов метеостанций, роботов, и захотелось автоматизировать при помощи микроконтроллеров все, до чего дотянусь. Размеры контроллеров шли по убыванию размеров и облегчению встраивания – Arduino UNO, Arduino Pro Mini, потом кучка ATMega328P, и для самых мелких и простых устройств приобрел ATtiny85.
Тиньки покупал более года назад и они лежали и ждали свой очереди.

Скриншот заказа

(там еще термоусадка в заказе была, потому общая цена выше)

МК приехали как обычно в пакете с пупыркой, сами кучкой в отдельном полиэтиленовом пакетике. Лучше бы конечно в жестком коробке или в пенке, но и так ничего не погнулось и все рабочие.

Поначалу паял схемки на макетных платах, но почитав про ЛУТ, понял, что вполне реально и гораздо удобнее все собирать на нормальных печатных платах.
Также понемногу начал собирать полезный инструмент, среди которого оказалась микродрелька МД-3 с цанговым патроном и станочком для сверления мелких отверстий. Можно было бы конечно купить только цангу, а двигатель откуда-нибудь выковырять, но решил приобрести готовое в местном магазине.

Микродрель МД-3


bormaw.ru/catalog/Mikrodreli/Mikrodrel_MD-3/

Описание от продавца:
Микродрель МД-3 идеально подходит для школьников и начинающих радиолюбителей. У дрели присутствует кнопка включения, рабочее напряжение от 12 до 36В, установлен мощный вал. В комплекте идут сменные цанги для зажима свёрл диаметром от 0.1 до 4мм. Рекомендуется использовать с блоком питания 2А.
Технические характеристики:
— Напряжение питания номинальное………………………..…...…27В
— максимальное …………………………………............................…36В
— Частота вращения в номинальном режиме …………...3000 об/мин
— в максимальном режиме …………………..............……..….6000об/мин
— Потребляемый ток в номинальном режиме ………………....…1,5А
— Количество сменных цанг (0,6;1,5;2,0;2,4;3,0;3,5;4,0;)…7 шт.
— Маркировка штекера ………………………………………………...........……1+ 3 —
— Режим работы в номинальном режиме …………………………продолжительный
— в максимальном режиме ……………….......................…повторно-кратковременный
— Габариты: ……………………………………………………… 115х30х30мм

Стойка сверлильная, средняя

bormaw.ru/catalog/elektroinstrument/stoyka_sverlilnaya_srednyaya/

Расстояние от площадки до хомута 100 мм. Диаметр хомута 40/35/30/25мм на выбор.

Дрелька нашлась в московской конторе БОРМАШ, магазин у них я так понял где-то на рынке Cадовод, куда ехать совсем не хотелось, зато интернет-магазин за недорого мог доставить в ряд пунктов самовывоза в Москве. Доехало непривычно быстро по сравнению с али-ебеем, за день или два. Упаковано было знатно — в пупырку и картонную коробку.
Дрелька понравилась, патрон сидел на валу идеально ровно, на глаз биений сверла заметно не было. Только разъем питания не совсем подходящий и в шнуре красный провод = «минус». Поначалу подключил его на «+» и думал, что же оно так плохо сверлит, потом заметил, что вал крутится не в ту сторону.
Стойка выглядит довольно кустарно, но работе это не мешает. Поначалу дрелька опускалась несколько туго, но консистентная смазка на направляющих помогла. Люфта не заметно, твердосплавных сверл как в этом обзоре, только диаметром 0.8мм не сломал пока ни одного.
Но при попытке применения станочка, понял, что пользоваться дрелькой просто вотнув ее в заявленные 24В — нельзя. На таком, заявленном штатным, напряжении она разгонялась до таких оборотов, что например фанеру фанеру уже не сверлила, а жгла — шел дым и воняло. Опытным путем установил, что в разных режимах лучше сверлить на 9, 12, 15В. Задолбавшись подключать к дрельке разные БП, решил что ей нужен регулируемый БП в компанию.

Начал изучать регулируемые БП и наткнулся на статью о самых разнообразных регуляторах специально для дрелей:
radiokot.ru/lab/hardwork/31/
Сначала хотел делать на линейном регуляторе (схема Александъра Савова), но решил что это несовременно половиной мощности атмосферу греть.
Потом был вариант с ШИМом на четырех операционных усилителях по аналогии со статьей DI HALT про аналоговый реобас:
forum.easyelectronics.ru/viewtopic.php?p=132956#p132956
easyelectronics.ru/analogovyj-reobas.html
Еще заинтересовала статья из «Радио» №4 2013г. (А. ДЫМОВ, Блок управления микродрелью):
radioelectronika.ru/?id=901&mod=cxemi&sub_mod=full_cxema
Но в окончательном виде решил делать тот же ШИМ на микроконтроллере после того как изучил статью:
meandr.org/archives/27856
Cхема простая и кажется, что все продумано и разъяснено. Опять же тот же двигатель, что и у меня — ДПМ-30. Но решил использовать мелкую ATtiny85 вместо избыточного ATmega8 у автора. Бонусом к полезному инструменту станет освоение железа и программирования ATtiny.

Итак, самому себе было поставлено следующее ТЗ:
— в холостом режиме крутим на заранее определенных минимальных оборотах;
— при обнаружении начала сверления автоматически увеличиваем обороты до заранее определенного максимума;
— режим настройки для выставления как минимальных так и максимальных оборотов, мало ли, не всякому материалу форсаж дрели (как у автора) понравится;
— дополнительно — режим тупого ручного управления оборотами с крутилки, ибо в схеме все для этого уже есть (нужен лишь тумблер для включения режима), а может оказаться полезным в работе.

Значит, в основном повторяем схему из статьи А.Савченко по последней ссылке, а для удобства управления добавим индикаторов на светодиодах.

Возможные назначения выводов микроконтроллера:

Необходимые каналы ввода-вывода микроконтроллера:
— ШИМ выход управления оборотами дрели, в выходную цепь также включаем красный светодиод для индикации оборотов (а заодно для возможности отладки без подключения самой дрели);
— вход АЦП для обнаружения нагрузки на сверло;
— вход АЦП от переменного резистора уставки оборотов;
— вход от тумблера «Авто/Ручной»;
— вход от кнопки «Настройка»;
— выход на светодиод (зеленый) индикации состояния «Режим».

Итого, нужно 6 каналов в/в, а у восьминогой ATtiny — 2 пина питания, 1 пин Reset (его трогать не будем, чтобы не потерять возможность перепрограммировать МК), и только 5 ног ввода-вывода, да еще АЦП и ШИМ могут быть заведены только на некоторые из них. Значит, необходимо сэкономить ноги, назначив на одну из них несколько функций.

Традиционно, совмещают на одной ноге несколько клавиш используя матрицу резисторов, и программно, используя АЦП, разбирают, что же там было нажато. Так сделано, например, в Arduino LCD&KeyPad Shield (SKU: DFR0009) от DFRobot. Но тут необходимо учитывать, что нога АЦП — тоже дефицитный ресурс, которого может не оказаться.

Другой вариант — совместить кнопку и светодиод, для этого подходит любая нога МК. Большую часть времени вывод используется как выход, светя светодиодом, и только на короткие, незаметные глазу мгновения, переключается на вход для чтения состояние кнопки. Это решение может быть реализовано двумя способами.

Первый, более простой способ описан в конце этой статьи:
easyelectronics.ru/podklyuchenie-mikrokontrollera-likbez.html
Минимум компонентов, надежная работа, но есть и недостаток — при нажатии кнопки светодиод горит постоянно. В нашем случае, например, кнопка переключает режим, а светодиод его отображает, и, удерживая кнопку, мы не можем узнать переключился уже режим или еще нет.

Второй способ подключения кнопки и светодиода к одному выводу подсмотрен здесь
radio-hobby.org/modules/news/article.php?storyid=1173
Кнопка никак не влияет на работу светодиода, но есть особенность конструкции — в режиме входа при отжатой кнопке на резисторе и светодиоде, при протекании через них микроамперного тока, ограниченного внутренним подтягивающим резистором МК, должно падать не менее 3В для чтения логической единицы. Т.е. либо светодиод нужен высоковольтный (белый, синий), либо несколько последовательно, как и указано в статье. А при нажатии кнопки нога через резистор 5КОм (заметно меньше внутреннего подтягивающего к «+» питания) перетягивается на землю и читается логический ноль. В режиме выхода нажатие кнопки приводит лишь к вытягиванию из порта дополнительного 1мА тока, не влияя на питание светодиода.

В качестве индикатора режима было решено использовать зеленый 5мм китайский светодиод. Название модели, номинальный ток и напряжение были неизвестны. Самому замерить было некогда, просто заглянул в книжку «Занимательные проекты на базе микроконтроллеров tinyAVR. Дхананья Гадре, Нигул Мэлхотра», где в таблице говорилось, что на зеленом светодиоде падает 3.8В, даже больше чем на голубом, значит он нам вполне подходит. На это же напряжение был рассчитан и токоограничивающий резистор.
Забегая вперед скажу, что в процессе отладки устройства выяснилось, что светодиод горит излишне ярко, а кнопка не читается. Эксперимент показал, что на токе 10мА на светодиоде упало всего 2.1В. Как же так? Гугл ответил, что оказывается зеленых светодиодов бывает два типа, отличающихся внутренней химией и оттенком свечения, при этом у одного таки напряжение 3.8В, а у другого всего 2.1В! В качестве примера, вот в этом отчете в самом отчете и в этом комментарии зеленые светодиоды как раз разного типа. И перед применением зеленых светодиодов не помешает выяснить, какой конкретно тип у нас.
При номинальном напряжении 2.1В (а на малом токе напряжение еще меньше) на светодиоде невозможно прочитать лог. единицу с кнопки, а в режиме индикации через светодиод более 20мА потекло из-за неподходящего переменного резистора. Как была решена проблема — расскажу потом, а пока продолжим.

Еще соображения касаемо подключения ввода-вывода. Поскольку схемка будет работать в принципиально вибрирующем инструменте, решено было отказаться от установки МК в «кроватке» (хотя они и были закуплены вместе с тиньками) и запаять его в схему для надежности. А для прошивки предусмотреть на плате контакты ICSP. В случае же, если умудрюсь угробить МК при наладке — выпаять 8-ногий чип не большая проблема.

Также подумал, что нежелательно чтобы двигатель дергался при перепрошивке, а значит его надо подключать к выводам 2 или 3, свободным от ICSP, куда как раз может быть выведен ШИМ от Таймера 1. А к другой ноге МК (с АЦП)подключается конденсатор, фильтрующий импульсы с шунта, и он будет мешать сигналам перепрошивки, а значит тоже должен быть на 2 или 3 ноге.
Соответственно кнопки, индикатор и переменный резистор подключаются к 5,6,7 ногам. К ним же подключены штырьки для программатора. Во время перепрошивки, чтобы не помешать процессу и не спалить программатор, контакты кнопки, тумблера должны быть разомкнуты, а движок переменного резистора — в среднем положении. Соответствующее состояние будет обозначено на передней панели.

Тактироваться МК будет в внутреннего генератора на 1МГц, быстродействие и точность в этом проекте не важны.

Запитываться дрелька будет от импульсного БП от старого принтера на 18В 1,5А. Ток можно было бы и побольше, но что уж есть. Логику будет кормить большой 7805, которых в наличии пачка (в отличие от более уместного маломощного 78L05), и который держит большее входное напряжение.

Лирическое отступление про линейные стабилизаторы.
Надумал я кое-что проверить на макетке с Arduino Pro Mini и платкой питания «YwRobot 545043 Power MB V2». И не задумавшись, воткнул в нее этот же БП на 18В. Раздался знатный БАХ и кусок корпуса стабилизатора AMS1117-5.0 воткнулся мне в лоб, а из ардуины повалил дым. Опасное это занятие — ардуинство!

И поделом, по даташиту максимальное напряжение AMS1117-5.0 всего 12В, в отличие от 7805, у которого аж 35В. Удивительно еще, что находящийся следом AMS1117-3.3 не продолжил фейерверк, ведь судя по ардуине высокое таки прошло насквозь.

Для создания печатной платы устройства решено освоить программу Eagle CAD, не в последнюю очередь благодаря тому что для нее есть подробные инструкции, а также библиотеки ардуинских модулей. И в общем, все прошло удачно, были мелкие непонятки с интерфейсом (типа как скопировать элемент из одной библиотеки в свою для правки), но в целом все даже интуитивно понятно.

Первоначальный вариант схемы устройства:

(МК на схеме обозначен как TINY13, т.к. взят из библиотеки, и имеет с нашим 85 одинаковое расположение выводов (за исключением дополнительного ШИМ на 2,3 ногах))

Резисторы и конденсаторы решил применять типа SMD 0805, которые удалось купить на Ebay в виде удобной книжки с практически всеми номиналами резисторов и самыми ходовыми номиналами керамических конденсаторов. Хотел изначально найти детали побольше, типа 1206, чтобы легче паялись обычным паяльником, тем более до этого только с выводными имел дело и такая мелочь несколько пугала, но найти аналогичный ассорти-набор ни на Али, ни на Ебее не удалось. А покупать каждый номинал по отдельности получились бы уже совершенно другие деньги. И как показала практика, и с 0805 без опыта и фена — никаких проблем. Мажем площадку липким флюсом, ставим деталь пинцетом, прижимаем зубочисткой, чтоб к паяльнику не прилипла, тыкаем паяльник в один из выводов и она уже держится. А потом уже как следует пропаиваем оба вывода с проволокой припоя. Дешево, удобно и сверлить меньше.

Размещал компоненты по плате вручную, руководствуясь соображениями:
— элементы управления и индикации должны быть относительно удобно расположены;
— силовая часть должна быть разнесена с управляющей;
— силовые проводники надо делать короткими и широкими.

Без перемычек развести одностороннюю плату никак не удавалось, и решил делать перемычки не в виде тупых проволочек, а заменив часть резисторов на выводные, попутно пустив в дело второй набор резисторов, выводных, закупленных еще перед изучением темы SMD.

Для резисторов шунта, который еще непонятно какого сопротивления и мощности должен быть, предусмотрел как на плате площадки для последовательно-параллельного подключения SMD, так и контакты под внешний мощный резистор, если понадобится.

В результате развел вот такую плату. Размер 100*40 мм. Потом уже, держа в руках готовую, понял, что размеры можно было бы и подсократить, но на первый раз сойдет.

Сторона выводных элементов:

Сторона пайки:

Приступаем к производству. ЛУТить решил по отработаной товарищем DI HALT технологии.
easyelectronics.ru/sozdanie-pechatnoj-platy-metodom-lazernogo-utyuga.html
dihalt.ru/proverennaya-texnologiya-lazero-utyuzhnogo-metoda.html

Печатаем на лазернике рисунок на глянцевой фотобумаге Lomond для струйной печати. Но совать в новенький принтер совсем не предназначенную для него бумагу было стремно. Нашел в сети предупреждения, что глянцевое покрытие струйной бумаги может расплавиться, прилипнуть к печке и угробить принтер. Для уверенности провел эксперимент — покатал по поверхности этой бумаги нагретый до 200С паяльник (точную температуру печки так и не нашел, но около того), бумага чуть покоробилась, но ничего не плавилось и не прилипало — значит можно и в принтер.

Наутюжил рисунок на плату, смыл бумагу. На плате остался весьма качественный рисунок проводников и прилипший глянцевый слой бумаги. Автор технологии рекомендовал удалять его не сильно липкой изолентой, но как я ни старался, либо глянец ничуть не удалялся, либо вместе с ним отрывались проводники. Надписи тоже сразу на изоленту перешли. Намучившись, взял шило, и, процарапав между проводниками, содрал почти весь глянец. Дело тонкое и утомительное, надо что-то придумывать. Потом, делая вторую и третью платы, искал способ избавиться от проклятого глянца, но печать ни на журнальной странице, ни на основе самоклейки не давали такого качества рисунка, дорожки расплывались или отваливались. Но зато понял, что и глянец фотобумаги счищать под ноль не обязательно — достаточно хоть чуть процарапать между дорожками для доступа раствора к меди, а местами стравилось и без царапин, сквозь глянец.

Травить медь решил раствором перекиси водорода и лимонной кислоты как наиболее доступным составом. Возможные варианты химии для травления с расчетами можно посмотреть вот здесь
radiokot.ru/lab/hardwork/62/
Перекись взял из аптечки, куплена была года 3 назад, срок годности вышел года 2 как, думал уже выдохлась и работать вообще не будет. Однако ошибся, плату протравило весьма бодро — минуты за три. Вот результат:


Одна дорожка пострадала от царапания шилом, ее восстановил откусанным выводом резистора. Плюс незначительные прорехи от попытки применения изоленты. Надо обзавестись подходящим маркером, а пока где смог подмазал лаком.

Плату залудил паяльником с применением оплетки. Напаял детали.


Высокие латунные стойки вкрученные в друг друга с обоих сторон платы через крепежные отверстия – удобная штука, можно плату без корпуса во время монтажа и отладки ставить на стол любой стороной не опасаясь чего либо помять или замкнуть.

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

Конденсатор C2 на схеме подключенный к Reset запаивать не стал, т.к. он хоть и повышает надежность запуска устройства, но при перепрошивке МК может помешаться.

Микроконтроллер запаивал в последнюю очередь, перед этим подключив плату к БП и убедившись, что ничего сразу не выгорит и стабилизатор выдаст штатные 5В. Ничего не задымилось и потому подключаем на штырьки ICSP программатор и заливаем тестовую прошивку.

Прошивку для устройства будем писать в знакомой многим среде программирования Arduino, предварительно добавив в нее поддержку микроконтроллеров ATtiny, скачав набор библиотек и распаковав их в папку Arduino/hardware.

В качестве программатора выступила Arduino UNO с залитым скетчем Arduino-ISP из примеров, после заливки которого на линию Reset ардуины надо подключить конденсатор 10мкФ (чтобы программатор не перезагружался с началом передачи данных).
Подключение (ATtiny — Arduino UNO): MOSI — D11, MISO — D12, SCK — D13, RESET — D10, плюс линии 5В и GND.
Примеров программирования ATtiny85 было уже множество:
mysku.club/blog/aliexpress/39707.html
highlowtech.org/?p=1695

Тестовый скетч (приводить смысла не вижу) просто считывал состояния входных сигналов и отображал их на имеющихся выходных с подключенными светодиодами. Т.к. входных у нас 4 канала, а выходных только 2, пришлось провести проверку в несколько этапов.

Все заработало как и ожидалось, за исключением одного — не читалась кнопка, подключенная к одному каналу с зеленым светодиодом, а светодиод горел заметно ярче красного. Замеры тестером показали, что в состонии PB0 в качестве выхода через светодиод течет более 20мА и на нем падает всего 2.1В. А в состоянии входа с внутренней подтяжкой на ноге всего 1.74В при отпущеной кнопке и 0.6В при нажатой. Неудивительно, что постоянно читается 0. Низковольтный зеленый светодиод даже не светясь при протекании микроамперного тока просаживал напряжение на ноге. Теперь понятно для чего в исходной статье последовательно подключали 2 светодиода.

Но ставить второй светодиод светить внутрь коробки тупо в качестве балласта (и на лицевой панели 2 одинаковых тоже не нужны) показалось несколько кривым решением. Задумался как еще можно приподнять напряжение в цепи светодиода и вспомнил про ВАХ стабилитрона. Если подключить последовательно со светодиодом встречно ему стабилитрон на 2В (чтобы работал штатно, на обратной ветви ВАХ), то получится как раз то, что нам надо. Когда горит светодиод на токе 10мА — стабилитрон пробивается и не мешает протеканию тока, а лишь стабилизирует падающее на нем напряжение на заданном уровне. Нужно лишь заменить токоограничивающий резистор, из расчета, что нужно уже подавить напряжение Uрез=5В-2.1В-2.0В=0.9В на 10мА, т.е. R=90 Ом. А когда нога переключена на вход с подтяжкой — благодаря крутизне ветви ВАХ до момента пробоя перехода, стабилитрон эквивалентен высокоомному резистору и на нем упадет опять же около 2В, подняв напряжение на ноге МК при отпущеной кнопке до 4В, что уже прочитается как TRUE. При нажатии кнопки нога окажется подтянутой к 5В внутренним резистором сопротивленим около 40КОм (по моим расчетам), а к земле — резистором 5КОм (который зашунтирует цепь светодиода), т.е. на ней будет те же 0.6В и считается FALSE.
Подпаял стабилитрон навесом последовательно с резистором и кнопка заработала как надо.

Теперь настала очередь проверки работы ШИМ и тут тоже возникли проблемы. Стандартная ардуинская команда AnalogWrite(нога, заполнение) работать не желала. Значит что-то не так с библиотекой для тиньки. Полез шерстить даташит на МК и просторы интернета.

Выяснилось интересное:
— на выводы 5, 6 (PB0, PB1) могут быть выведены 2 канала ШИМ (OC0A, OC0B) работающие каждый со своей уставкой заполнения (но одинаковой частотой) от Таймера 0;
— на выводы 2, 3 (PB3, PB4) может быть выведен третий канал ШИМ работающий от Таймера 1, причем на ногу 3 может быть выведен прямой сигнал ШИМ (OC1B), а на ногу 2 — его же инверсная версия (/OC1B). Но вывод идет либо только на 3 ногу, либо на обе сразу. А нам надо ШИМ на 2 ноге, хотя бы инверсный (программно его инвертируем обратно), так что придется конфигурировать вывод на 2 и 3 ноги, и на 3 сигнал не пройдет только потому, что она объявлена входом.

Так вот, насколько я понял, в пакете поддержки ATtiny для Ардуино канал ШИМ от Таймера 1 может выводиться только на ногу 3. Видимо вывод его же инверсной версии посчитали излишеством. Придется сконфигурировать таймер и ШИМ самостоятельно (см. код, функция PWM3_init), вместо использования AnalogWrite.

Еще заметил, что при перенастройке Таймера 1 сбивается работа функции millis() – оказывается, по умолчанию для внутренних часов используется Таймер 1. Но можно перенастроить время на Таймер 0 при помощи макроопределения в файле Arduino\hardware\tiny\cores\tiny\core_build_options.h
/*
  For various reasons, Timer 1 is a better choice for the millis timer on the
  '85 processor.
*/
#define TIMER_TO_USE_FOR_MILLIS                   0

Чем мы и воспользуемся, поскольку Таймер 0 в этом проекте как раз полностью свободен.

Также возник вопрос по диапазону уставки оборотов, читаемой с переменного резистора. Автор исходной схемы добавил последовательно с переменником 10K постоянный резистор 36K, видимо из расчета чтобы код АЦП вписался в диапазон 0-255. Реально получилось 0-230, причем максимум плавал. А хотелось бы именно 0-255 для соответствия полной шкалы уставки с 8-битным ШИМом. Для этого я выпаял постоянник и заменил перемычкой на +5В, АЦП стал читать весь диапазон, а 4 младших бита отбрасываем программно. И зачем нужна была лишняя деталь?

После тестовых испытания каналов ввода вывода загружаем в микроконтроллер боевую прошивку, написанную на С в среде Arduino по мотивам исходников на Бейсике автора исходной схемы.

Текст программы
// Attiny85 at 1MHz

// Не забыть задать таймер 0 для millis и др!
// Arduino\hardware\tiny\cores\tiny\core_build_options.h -> TIMER_TO_USE_FOR_MILLIS 0

#include <EEPROM.h>

// Подключения
#define MODE_LED_PIN PIN_B0
#define MODE_BUT_PIN MODE_LED_PIN
#define PWM_LED_PIN  PIN_B3
#define AM_PIN       PIN_B1
#define SP_PIN       A1
#define CUR_PIN      A2

// Состояния
#define MODE_MANUAL     0
#define MODE_WAITING    1
#define MODE_SETUP_XX   2
#define MODE_SETUP_MAX  3
#define MODE_START      4
#define MODE_DRILLING   5
#define MODE_STOP       6

// Переменные
byte Mode = MODE_MANUAL;
byte ModeLedVal = LOW;
byte SetPoint = 0;
int CurrentFiltered = 0;
byte CurrentU8 = 0;
byte AMButton;
byte AMButtonFlt = LOW;
static byte ModeButton;
static byte ModeButtonFlt = HIGH; // начальные значение для 
static byte ModeButtonOld = LOW;  // исключения срабатывания при старте
static byte SetupStep = false;
unsigned long BlinkFromMs;
unsigned long StartFromMs;
unsigned long ModeFromMs;
byte W, W0, W1, W2, Wxx, Wmax, Uxx, Uon, Uoff;



void PWM3_init() {
  // Настройка ШИМ на PB3 (pin 2) используя Таймер 1
  TCCR1 = _BV (CS11) | _BV (CS10); // prescaler /4
  GTCCR = _BV (COM1B0) | _BV (PWM1B); // clear OC1B on compare
  OCR1B = 255; // начальное заполнение 0% (используем инверсный выход!)
  OCR1C = 255; // частота ШИМ = 1КГц (1 000 000 /4 /256)
}

void analogWrite_PB3(uint8_t duty_value) {
// analogWrite на PIN_B3
  OCR1B = 255-duty_value; // заполнение 0-255 (0-100%) (используем инверсный выход!)
}

byte ScanButton(void) {
  // Чтение кнопки подключенной к одному выходу со светодиодом
  // Ускоренная версия с восстановлением выхода и без отключений ШИМ
  byte value,port_bak;  
  port_bak = PORTB;           // сохранить выход
  DDRB &= ~(1<<MODE_BUT_PIN); // перевести в режим "вход"
  PORTB |= (1<<MODE_BUT_PIN); // подключить внутренний резистор
  delayMicroseconds(100);      // задержка на переходной процесс
  (PINB & (1<<MODE_BUT_PIN)) ? value=HIGH : value=LOW;    // чтение входа
  PORTB = port_bak;           // восстановить выход
  DDRB |= (1<<MODE_BUT_PIN);  // перевести в режим "выход"
  return value;
}

// Антидребезг кнопок
#define Debounce(varname,outvar,interval) \
static unsigned long __lastChange_##varname = 0; \
if (varname!=outvar) {\
  if( (millis()-__lastChange_##varname>interval )){ \
    outvar = varname;\
   }\
}\
else {\
  __lastChange_##varname=millis();\
}



// Инициализация
void setup() {                
  
  pinMode(MODE_LED_PIN, OUTPUT);  // основное состоние - индикация
  pinMode(PWM_LED_PIN, OUTPUT);
  PWM3_init();

  // восстанавливанием настройки из EEPROM если они там есть
  if (EEPROM.read(11)==0xAA) {
    Wxx = EEPROM.read(0);  
    Wmax = EEPROM.read(1);  
    Uon = EEPROM.read(2);  
    Uoff = EEPROM.read(3);  
  }
  else {
    // значения по-умолчанию
    Wxx = 1;  
    Wmax = 255;  
    Uon = 255;  // исключает старт до проведения настройки
    Uoff = 0;  
  }

  // Плавный разгон до холостого хода или ручной настройки
  if (digitalRead(AM_PIN)==HIGH)  
    W0 = Wxx;
  else {
    W0 = 255- (analogRead(SP_PIN) >> 2);  // 0-255, переменный резистор у нас инверсным получился
  }
  W1 = 0;
  for(W=0 ; W<=W0; W++) { 
    analogWrite_PB3(W);
    W1 = W1 + 4;
    delay(W1);
  }
  delay(800);

  Mode = MODE_WAITING;
}  



// Рабочий цикл
void loop() {

  // Индикация текущего режима морганием
  switch (Mode) {
    
    case MODE_MANUAL: 
      ModeLedVal = LOW;    // выключено
      break;

    case MODE_WAITING:  
        (ModeLedVal==HIGH) ? ModeLedVal=LOW : ModeLedVal=HIGH;    // в полнакала
      break;
    
    case MODE_START: 
    case MODE_DRILLING: 
    case MODE_STOP: 
      ModeLedVal = HIGH;    // на полную
      break;

    case MODE_SETUP_XX:   
      if ((millis()-BlinkFromMs > 400)) {  // редко
        (ModeLedVal==HIGH) ? ModeLedVal=LOW : ModeLedVal=HIGH;    
        BlinkFromMs = millis();
      }
      break;

    case MODE_SETUP_MAX:   
      if ((millis()-BlinkFromMs > 100)) {  // часто
        (ModeLedVal==HIGH) ? ModeLedVal=LOW : ModeLedVal=HIGH;    
        BlinkFromMs = millis();
      }
      break;
  } 
  digitalWrite (MODE_LED_PIN, ModeLedVal);


  // Тумблер Auto/Manual, в Auto размыкается и читается HIGH
  AMButton = digitalRead(AM_PIN);
  Debounce(AMButton, AMButtonFlt, 200);

  // Кнопка настройки, читается спецпроцедурой т.к. совмещена со светодиодом, при нажатии читается LOW
  ModeButton = ScanButton();
  Debounce(ModeButton, ModeButtonFlt, 200);
  SetupStep = (ModeButtonFlt==LOW) && (ModeButtonOld==HIGH);
  ModeButtonOld = ModeButtonFlt;

  // Крутилка
  SetPoint = 255- (analogRead(SP_PIN) >> 2);  // 0-255, переменный резистор у нас инверсным получился

  // Ток мотора
  //   Основной фильтр RC-цепочка 36K+68nF (постоянная времени 2.5мс, частота среза 65Гц)
  //   но на всякий дополним программным
  //   БИХ-фильтр НЧ первого порядка y(i) = y(i-1) + alpha*(x(i)-y(i-1))
  //   (он же Экспоненциальное скользящее среднее, EMA)
  //   в фильтре вместо float используем повышенную точность int, для  чего сдвигаем влево на свободные 5 бит (знак еще пригодится)
  //   умножение на дробный коэффициент alpha заменяем сдвигом вправо
  //   (6 = /64 = *0.016) 100 циклов - 80% значения, 200 циклов - 96% значения, 369 циклов - 99.6% значения
  //   (5 = /32 = *0.031)  50 циклов - 80% значения, 100 циклов - 96% значения, 179 циклов - 99.6% значения
  //   (4 = /16 = *0.063)  25 циклов - 80% значения,  50 циклов - 96% значения,  90 циклов - 99.6% значения
  //   (3 =  /8 = *0.125)  12 циклов - 80% значения,  25 циклов - 96% значения,  45 циклов - 99.6% значения
  //   период работы = АЦП 110мкс + программа = 0,2мс
  //   постоянная времени = 8*0,2мс = 1,6мс, частота среза 625Гц
  CurrentFiltered = CurrentFiltered + (((analogRead(CUR_PIN) << 5) - CurrentFiltered) >> 3);
  //   для простоты использования приводим к 0-255 
  //  (сдвиг обратно на 5 бит и 2 старших отбрасываем т.к. все интересное (холостой ход) <1В)
  CurrentU8 = byte (CurrentFiltered >> 5); 
  // если >1В чтобы не перепутать с малыми
  if ((CurrentFiltered >> 5) & 0x7F00) CurrentU8=255; 


  // Автомат состояний
  switch (Mode) {
    
    case MODE_MANUAL:  // Ручное регулирование крутилкой
      analogWrite_PB3(SetPoint);
      if (SetupStep)  
        Mode = MODE_SETUP_XX;
      if (AMButtonFlt==HIGH) { 
        // При переходе в автомат притормозим
        analogWrite_PB3(Wxx);
        StartFromMs = millis();
        Mode = MODE_STOP;
      }
      break;

    case MODE_WAITING:  // Ждем роста тока
      if (CurrentU8 > Uon) { 
        // Запуск
        StartFromMs = millis();
        analogWrite_PB3(Wmax);
        Mode = MODE_START;
      }
      if (SetupStep) 
        Mode = MODE_SETUP_XX;
      if (AMButtonFlt==LOW)   
        Mode = MODE_MANUAL;
      break;

    case MODE_START:  // Раскрутка
      if (millis()-StartFromMs > 300)
        Mode = MODE_DRILLING;
      if (AMButtonFlt==LOW)   
        Mode = MODE_MANUAL;
      break;

    case MODE_DRILLING:  // Сверлим, ждем падения тока
      if (CurrentU8 < Uoff) { 
        // Тормозим
        analogWrite_PB3(Wxx);
        Mode = MODE_STOP;
      }
      if (AMButtonFlt==LOW)   
        Mode = MODE_MANUAL;
      break;

    case MODE_STOP:  // Тормозим и ждем пока выйдем на ток ХХ
      if (CurrentU8 < Uon) { 
        // Замедлились
        if (millis()-StartFromMs > 300)
          // надежно
          Mode = MODE_WAITING;
      }
      else {
        StartFromMs = millis();
      }        
      if (AMButtonFlt==LOW)   
        Mode = MODE_MANUAL;
      break;

    case MODE_SETUP_XX:  // Настройка холостого хода
      Wxx = SetPoint;
      analogWrite_PB3(Wxx);
      if (SetupStep) {
        Uon = byte( 1.1 * CurrentU8 );
        EEPROM.write(0,Wxx);  
        EEPROM.write(2,Uon);  
        Mode = MODE_SETUP_MAX;
      }
      break;

    case MODE_SETUP_MAX:  // Настройка макс.оборотов
      Wmax = SetPoint;
      analogWrite_PB3(Wmax);
      if (SetupStep) {
        Uoff = byte( 1.1 * CurrentU8 );
        EEPROM.write(1,Wmax);  
        EEPROM.write(3,Uoff);  
        EEPROM.write(11,0xAA);
        // Тормозим        
        analogWrite_PB3(Wxx);
        StartFromMs = millis();
        Mode = MODE_STOP;
      }
      break;
      
    default:
      Mode = MODE_WAITING;
      return;
  }   
}


Готовый hex для не желающих компилировать в Arduino.

Подключаем в качестве шунта 5 ваттный резистор 2.2 Ом. Для защиты схемы от индуктивных выбросов напряжения на заднем фронте ШИМ подключаем параллельно мотору диод Шоттки SS34, а для подавления помех от коммутации обмоток – конденсатор 100нФ. И начинаем испытания по управлению мотором дрели.

Сразу достает зубодробильный вой ШИМа на 4КГц (1МГц/256). Добавляем настройку делителя /4 — сразу полегчало, хотя писк никуда не делся, но 1КГц почему-то переносится гораздо легче даже при продолжительной работе.

В ручном режиме обороты мотора нормально регулируются 0-100%, а в автоматическом АЦП цепи обратной связи все время читает MAX значение и ничего не работает. Попутно замечаю, что плата громко пищит даже при отключенном моторе. WTF?

Берем тестер, откапываем осциллограф и начинаем изучать, что же мы выдаем и чего получаем. И роняем челюсть. На шунте вместо пологих волн тока через индуктивность в начале импульсов ШИМ видим иголки в десятки вольт. Значит, через шунт течет импульсный ток в десяток ампер! Причем даже при отключенном двигателе. Не удивительно, что плата зазвенела. Но что же замыкает цепь без двигателя? Крошечный конденсатор 100нФ! Помехи при коммутации обмоток он может и подавит, а пока устраивает кратковременное КЗ на каждом периоде ШИМ! Вывод — помехоподавлящий конденсатор не совместим с ШИМ управлением и контролем с помощью шунта, надо убирать.

И тут до меня доходит, что эти высоковольтные выбросы идут почти прямо на АЦП тиньки (т.к. тут амплитудный детектор, то конденсатор на ноге заряжается до максимального напряжения в иголке и благополучно хранит его, т.к. разряд только через утечку диода). Тинька вроде пока помирать не собирается, но что с ее ногой? Приборы показывают постоянное напряжение на ноге 5.2В, выше напряжения питания, но куда делось остальное? Вспоминаем устройство порта МК — для борьбы с перенапряжениями в нем есть специально обученные диоды на «+» и «-« питания, стравливающие излишек в БП. Но встроенные диоды хилые и сильно рассчитывать на них не стоит.

Убираем чертов конденсатор, меряем ногой напряжения — работает! Надежные МК делает Atmel! Видимо спасло, что емкость конденсаторов невысока была, немного заряда прокачивали.

Без конденсатора иголки пропали, плата перестала музицировать, нога вроде реально меряет амплитуду тока ШИМ импульса. Запускаем процедуру настройки и пробуем сверлить. Вроде все как надо — при нагрузке добавляет обороты, при выходе сверла сбрасывает. Но не только — несколько раз в минуту самопроизвольно без нагрузки разгоняется и тормозится. Почему непонятно, приборы ничего не показывают. То ли нога подгорела, то ли емкость проводов генерит незаметные иголки как тот кондер, то ли помехи от того же коллектора лезут.

Тут решил бороться с проблемой кардинально, ибо обратил внимание, что больше ни в одной схеме пиковый детектор не используется. Наоборот, везде контролируется интегральное значение тока, пропущенное через RC-фильтры. И такие измерения как раз нечувствительны к помехам в виде единичных выбросов. Меняем диод на резистор — и амплитудный детектор превращается в ФНЧ.

Изменяемое АЦП напряжение упало сразу на порядок — действующее напряжение гораздо ниже амплитудного в случае сигнала в виде пологих волн с паузами между ними. Ловить пришлось напряжение около 0.2 В. Можно конечно было увеличить сопротивление шунта, но для того ли мы городили ШИМ, чтобы греть атмосферу. А еще при большом заполнении ШИМ и нагрузке на мотор можно получить перенапряжение. Потому придется работать с низким U холостого хода.

Реакция на нагрузку похоже тоже замедлилась. Разгон начинается примерно через полсекунды, но большой проблемы в этом не вижу — как раз сверло выставится и пройдет медь на малых оборотах. И больше никаких ложных стартов. Можно работать.

Финальная схема устройства:

Устройство было смонтировано в корпусе, в роли которого выступила герметичная электромонтажная «Коробка Тусо распаечная пластиковая без сальников 120х80х50 мм, IP55 серая 67052 Рувинил Россия». Хотелось найти более плоскую, но ничего типа 110*60*30 не нашел. Чтобы не разводить гирлянды на столе, скрутил регулятор с БП в единое целое. Кирпич получился знатный, но нам его и не в кармане носить. И хотя после сверления пары десятков отверстий, сколько-нибудь заметного наощупь нагрева ключевого полевика, шунта и стабилизатора заметно не было, насверлил немного вентиляции на дне и задней стенке.



Еще фото




С тех пор станочек с регулятором участвовал в создании еще 2 плат (сколько ему потребовалось сверлить можете глянуть по словам «AVR Fusebit Doctor». Его работой весьма доволен.

Еще хочу отметить, что твердосплавные сверла с Али имеют хвостовик 3.2 мм, а цанги были только 3.0 и 3.5 — в одну сверло не лезет, а в другой не зажимается. Намотал на сверло медной проволоки и кое-как вставил в 3.5 мм, но некрасиво. Если кто встречал цангу на 3.2 диаметром 6 мм (везде разве что дремелевские, со сточенным до 5мм хвостом), подскажите.

При смене сверл процедуру настройки приходится проходить заново – видимо на токе двигателя сказывается разный момент инерции «тощего» обычного сверла и твердосплавного с утолщенным хвостовиком. Но это делается быстро и не напрягает. Желающие могут добавить в прошивку сохранение профилей сверл :)

Неоднократно встречал совет сверлить платы под слоем воды, чтобы не дышать стеклянными опилками. У меня не получилось. Точно спозиционировать сверло, когда оно высоко, мешает преломление в воде, глазомер косячит. А когда сверло входит в воду, начинает идти рябь и вообще ничего не видно. Надо что ли остановленную дрель выставлять, а потом включать? В итоге, миску с водой просто поставил рядом и периодически макаю в нее плату – чтобы смочить и смыть опилки. В этом случае опилки сырые и тоже не летят, собираются конусом над отверстием.

И еще одно лирическое отступление, про мелкий крепеж.
В устройство решил поставить разъем питания типа «DS-225, Гнездо питания на панель». Для его крепления требовались винтики с гайками с резьбой 2.5мм. В кладовке ничего подходящего не нашлось, а тут еще вспомнил, что в другое поделие 2мм винтики требуются. Значит стоит пополнить коллекцию крепежа, чтобы в следующий раз ради гаечки на другой конец области не лететь. В строительных магазинах ничего меньше M3 не попадалось, значит надо искать специализированные.

Первым относительно удобным магазином оказался сетевой Крепмаркет
Внутри глаза разбежались от всяких полезностей, но вот незадача – самые малые винтики были только M2.5 одной длины, а вот гаек и шайб к ним нет и не бывает! Впечатлила продажа гаечек поштучно за 2р/шт и ссыпание всего купленного в один мешок-майку (мелких пакетиков для разных размеров не было). Опять же накладно брать про запас разных размеров.

Выручил другой магазин крепежа – «Метизы от А до…»
Вот там есть реально все в наличии, от М1.6, с разным шлицем и головой, с продажей поштучно и на вес, и по цене на порядок ниже предыдущего конкурента. Вот только надо сразу ехать в магазин-склад на ул.Плеханова, а то я поначалу зашел в магазин около метро Перово и сильно удивился озвученной цене. И выяснилось, что у них исключительно нержавейка, а за обычным крепежом надо ехать на перекладных в промзону.
Планирую купить +72 Добавить в избранное
+76 +152
свернутьразвернуть
Комментарии (128)
RSS
+
avatar
+3
  • Waver
  • 13 апреля 2016, 19:23
Раз уж упоминается московский магазин крепежей, добавлю, что не плохой магазин крепежей, метчиков и пр. есть на митинском радиорынке(год назад был точно), покупал винты м2(на вес) и метчики для них. Последний этаж торгового комплекса.
+
avatar
+1
"+" за прямые руки
+
avatar
+1
  • ksiman
  • 13 апреля 2016, 19:32
Правильно, что зашунтировали двигатель диодом.
+
avatar
+2
  • abs
  • 13 апреля 2016, 19:36
Какая резьба на патроне? Вместо унылых цанг отлично работает вот это
https://aliexpress.com/item/item/2016-Brand-New-Multi-Chuck-Keyless-for-Dremel-Rotary-Tools-0-3-3-2MM-Faster-Bit/32587596221.html,searchweb201602_3_10017_10005_10006_10034_10021_507_10022_508_10020_10018_10019,searchweb201603_9&btsid=c0f5b0e9-a564-4c1e-9247-cf46d6315261
Есть в 2-х вариантах М8Х0.75 и М7Х0.75
+
avatar
+1
Подтверждаю. Отличная вещь и очень удобная.
+
avatar
+1
  • sergk
  • 14 апреля 2016, 00:50
Цанги точнее, меньше бьют, что для мелких сверл очень полезно. В дремеле самозажимной патрон очень хорошая вещь, почему спрашивается его сразу не ставят?! А вот в такой как у автора маленькой сверлилке — сверла меняются редко, чаще всего вся плата сверлится одним диаметром, я использую 0,7-0,75 мм сверла. А крепежные уже можно рассверлить чем угодно, хоть шуруповертом или дремелем.
+
avatar
0
у меня на диолдовском гравере проксоновский патрон бьёт меньше чем родная цанга, так что — возможны варианты, как говорится.
+
avatar
0
  • demonk
  • 14 апреля 2016, 10:40
Спасибо! Интересная штука и стоит недорого чтобы взять на пробу, только патрон померяю.
+
avatar
0
  • Leopard
  • 13 апреля 2016, 19:43
Хм, можь посоветуете, имееется обычный китайский дремеля-гравер. Все круто акромя того что на низких оборотах (которые такто совсем не низкие — жгет пласмассу и дерево) Легко остановить диск при пилки, т.е. мало мощности. Может с этим помочь регулятор оборотов самодельный?
+
avatar
+1
  • sergk
  • 14 апреля 2016, 00:52
Регулятор не сделает ваш мотор мощнее. Наоборот мощность упадет.
+
avatar
0
  • Leopard
  • 14 апреля 2016, 06:30
Так мб проблема в том что дешманский встроенный регулятор сильно занижает мощу?
+
avatar
0
  • mikas
  • 14 апреля 2016, 07:40
Это проблемма всех гравёров без стабилизатора частоты оборотов. Хотите работать на малых оборотах берите Dremel 4000 или Dremel 4200, ну или Proxxon/
+
avatar
0
  • Leopard
  • 14 апреля 2016, 08:15
нельзя этот самый стабилизатор прикрутить к китайскому движку чтоли?
+
avatar
0
  • mikas
  • 14 апреля 2016, 09:03
Конечно можно, но его нужно делать под конкретный движок. Лет пять назад интересовался этим, на каком то форуме люди экспериментировали, не помню уже на каком. И чем там дело закончилось, не знаю. Я на эту идею плюнул и докупил себе Proxxon FBS 240/Е.
+
avatar
+1
  • Nkk
  • 13 апреля 2016, 19:43
Микродрель МД-3 идеально подходит для школьников
Золотые слова!!!
+
avatar
0
  • mooni73
  • 13 апреля 2016, 19:47
Интересно, ведь поскольку движок коллекторный он создает помехи с частотой кратной своим же оборотам. По идее, отслеживая их, можно сделать точный регулятор оборотов, независимый от нагрузки плюс режим хх.
+
avatar
0
  • ksiman
  • 13 апреля 2016, 19:49
Величина этой помехи сильно зависит от состояния коллектора и щёток и от величины нагрузки, поэтому её сложно выделить, необходимо будет придумывать систему её выделения с АРУ.
+
avatar
0
  • mooni73
  • 13 апреля 2016, 20:18
Не надо никакого ару, достаточно ограничения уровня и настройки по минимуму. Ничего сложного.
+
avatar
+1
  • ksiman
  • 13 апреля 2016, 20:26
В этом случае помимо коммутационных помех полезут искровые
+
avatar
0
Поставьте вместо сопротивления в шунт индуктивность или импульсный трансформатор и считайте импульсы от коллектора. Получите регулятор оборотов а не регулятор тока через двигатель. Такой регулятор оборотов делается даже без процессора — на двухбазовом диоде и семисторе при работе от переменного тока. Попробуйте реализовать с контроллером- сможете получить от 100 оборотов в минуту а сверху -зависит от быстродействие таймеров
С вашим упорством получится.
+
avatar
0
  • ksiman
  • 14 апреля 2016, 06:59
Я смотрел осциллографом форму тока якорной цепи — коммутационные скачки тока и искровые помехи сравнимы по величине.
+
avatar
0
  • Ednx
  • 14 апреля 2016, 09:33
Думаю что вряд ли — из-за неоднородности материалов ламелей и щеток частота помехи будет очень разная. У меня дрелька побольше, так я себе приделал оптический энкодет с принтера HP3920. А выход на рабочие обороты сделал проще — когда рукояткой опускаю голову, то при касании препятствия рукоятка через пружину просто убирает флажок из оптопары (кстати тоже вытащенной из этого принтера)
Автору однозначный + за упорность и пряморукость
+
avatar
0
  • Leopard
  • 13 апреля 2016, 19:56
дык а че не сверлить с пшиколкой от цветов?
+
avatar
0
что за пшикалка?
+
avatar
+2

с вариациями
+
avatar
0
  • Leopard
  • 14 апреля 2016, 06:32
она самая, удобная вещь с регулировкой струи, я с ней люминь пилю и не перегриваюсь
+
avatar
+4
  • klop
  • 13 апреля 2016, 20:34
Молодец! + Удивила упертость сделать на тиньке, преодолевая кучу препятствий и неудобств по сравнению с Ардуиной. Неужели разница в цене бутылки пива стоит таких трудов? :)
+
avatar
+3
  • DDimann
  • 13 апреля 2016, 20:50
Я так думаю, что автор бы еще бутылку доплатил.
Потому как решать задачу в ограниченных условиях всегда интереснее.
Цель — ничто, движение — все. ©
ЗЫ Сам таим был, уважаю.
+
avatar
-4
давайте на 4-ядерном атлоне сразу решать, фигли мелочиться-то?
+
avatar
+2
  • nzl
  • 13 апреля 2016, 20:43
Прикольно написанно, прям детектив прочел +
+
avatar
0
  • at_om
  • 13 апреля 2016, 20:50
Не осилил, но чувствуется талант, и ровные руки.
+
avatar
0
  • joy13
  • 13 апреля 2016, 21:09
Еще хочу отметить, что твердосплавные сверла с Али имеют хвостовик 3.2 мм, а цанги были только 3.0 и 3.5 — в одну сверло не лезет, а в другой не зажимается.
Я патрончик брал этот, в комплекте 7 цанг, в 5-ю (в порядке возрастания) такие сверла встают «как влитые». Стойка кстати такая-же :), только «допиленная» фторопластовыми втулками и площадкой из люминия (10мм).
+
avatar
0
а я нашел в сети проектик на 13 кажется тиньке с потенциометром и собрал не особо заморачиваясь. плавный старт и всё такое. полезная штука, весьма.

насчет писка — так а чего на 1МГц гонять-то? там же вроде и 8МГц есть, если без делителя?
+
avatar
0
  • ksiman
  • 13 апреля 2016, 21:36
Эта схема не может управлять ключом с высокой частотой, т.к. фронты на затворе будут завалены и он перейдёт практически в линейный режим работы.
+
avatar
0
вот я не помню, на скольки мегагерцах оно у меня работает, но транзистор не греется. накрайняк можно драйвер какой поставить, или биполярник в затвор.

вообще, вот ссылка, если я правильно вижу, то div8 не включается, значит частота 8 или сколько там 9.6 Мгц. при беглом просмотре комментов, я, как неспециалист, пришел к выводу что ШИМ там на 18кГц. могу ошибаться.
+
avatar
0
Поделитесь проектом ;)
+
avatar
0
да где-то на просторах нашел. сейчас уже и не вспомню.
думаю, это
+
avatar
0
  • vasilio
  • 13 апреля 2016, 21:37
недавно собрал похожее на 555 таймере и полевике IRF530. Прекрасно работает :)
+
avatar
0
с плавным пуском проблемы возможны.
+
avatar
0
  • Aloha_
  • 13 апреля 2016, 21:41
Можно было бы таймером 555 обойтись вместо тиньки. И при появлении нагрузки обороты бы поддерживала.
+
avatar
0
с чего бы ШИМу на 555 работать не так как ШИМУ на тиньке? обратной связи так и так нету. вот если какой-то тахометр прикрутить — тут уже интереснее.
+
avatar
0
  • demonk
  • 14 апреля 2016, 12:02
вот тут radiokot.ru/lab/hardwork/31/ есть схемка на 555 тоже с обратной связью по току, так что почему бы нет, но с МК — веселее :)
+
avatar
0
  • ksiman
  • 13 апреля 2016, 21:47
Я бы лучше сделал регулятор на базе логического N-канального полевика. Схема проще, доступная частота выше, нагрев меньше.
+
avatar
0
  • drv
  • 14 апреля 2016, 01:27
Тоже обратил внимание на то, что целесообразннее было бы использовать логический полевик (при текущей частоте ШИМ).
Но вот понятия «Схема проще» и «доступная частота выше» несколько несовместимы :)
Вы же не хуже здесь присутствующих знаете, что схема в этом случае может не только не упроститься, но и усложниться, особенно когда частота ШИМ поднимается. Тяжелый затвор логического полевика потребует наличие драйвера, иначе — нагрев и т.д.
+
avatar
+1
  • ksiman
  • 14 апреля 2016, 07:07
Сейчас ток заряда полевика около 6мА. При подключении полевика непосредственно к контроллеру, затворный ток можно спокойно увеличить до 30-40мА (через ограничивающий резистор 100 Ом). Учитывая, что входная ёмкость N-канального полевика меньше, чем P-канального (при одинаковых остальных параметрах), частоту переключения можно спокойно повысить до 10-20кГц, при этом шум будет снижен
+
avatar
0
  • demonk
  • 14 апреля 2016, 12:17
Тогда я так понимаю и мотор надо переносить наверх, между Vcc и полевиком.
А как быть с шунтом и измерением тока? Можно ли оставить его в цепи истока?
+
avatar
0
  • ksiman
  • 14 апреля 2016, 12:35
Двигатель переносится наверх.
Шунт подбирается так, чтобы падение напряжения на нём при пуске не превышало 2В и тогда проблем не будет
+
avatar
0
Интересно, если написать всё в другом IDE, поместится на attiny13?
Есть где то в закладках fusebit Doctor на arduino, можно делать reset обычным выводом, а потом сбрасывать фьюзы если что.
+
avatar
0
  • drv
  • 14 апреля 2016, 01:45
На 13ом тоже можно сделать. Даже делают. Код собираем в Атмел Студии. Ну и не забываем про всего лишь один таймер в 13-ом.
+
avatar
0
  • demonk
  • 14 апреля 2016, 10:54
Сейчас кода 2.8К, в 13 не влезет.
Если убрать остатки плавающей запятой (умножения в процедуре настройки) и ардуинские функции переписать, то наверняка удастся утрамбовать.
+
avatar
0
Ну это из под arduino IDE? Я знаю что она сильно код раздувает, то же мигание светодиодом написанное например в CVavr занимает считанные байты, а в arduino IDE уже под килобайт. Ссылок сравнения сейчас найти не могу, но читал про это не однократно.
+
avatar
0
  • demonk
  • 14 апреля 2016, 11:36
Ну само arduino IDE на код мало влияет, ибо по сути это Блокнот с кнопками вызова консольного компилятора. Причем компилятор (gcc) тот же, что и в родной среде AVR Studio и вроде достаточно эффективный. Если не использовать функции (и соответственно библиотеки) ардуины, которые достаточно громоздкие (зато надежные и удобные для пользования новичком), то разницы в результате быть не должно в разных IDE.
+
avatar
0
Функции типа analogRead, digitalWrite и остальные ардуиновские влияют.

arduino.ru/forum/programmirovanie/attiny13a-101-primenenie

Раза в два, а то и больше код раздувает.
+
avatar
0
  • demonk
  • 14 апреля 2016, 12:22
А кто вас заставляет их использовать?
В той же ардуино IDE прекрасно сработает PORTB |= (1<<PIN) и код уменьшится.
В регуляторе я использовал такое в критических местах, а ардуинские оставил ради лени и наглядности.
+
avatar
0
Меня ни кто не заставляет, у вас в коде они есть. Я начал с вопроса, который сейчас перефразирую — что если убрать все эти функции ардуиновские, влезет ли в attiny13 или attiny24? Интересует это потому, что они у меня есть. Этот вопрос может быть не напрямую к вам, (потому что если бы вы знали (или хотели) как правильно это сделать — сделали бы), а к тем кто знает.
+
avatar
0
тут всё сделано.
+
avatar
+2
  • demonk
  • 14 апреля 2016, 11:42
Не хватает кое-чего — автоматического добавления оборотов под нагрузкой.
+
avatar
0
зато схема — полный примитив ;) ну и в 13 тиньку влазит.
+
avatar
0
За обзор +, однозначно.

Но — два замечания. Первое — насчет «воя ШИМ». Позвольте, но у вас — Attiny85! Ее таймеры можно тактировать на целых 64 МГц (штатно, а при разгоне — до 80)! Разве не сам создатель этих контроллеров велел увести частоту ШИМ далеко за пределы слуха?

Ну а второе уже высказали выше, повторю: не логичнее ли отслеживать обороты по модуляции тока коллектора?
+
avatar
0
  • drv
  • 14 апреля 2016, 02:00
Автору есть куда двигаться в развитии своего решения :)
+
avatar
0
  • demonk
  • 14 апреля 2016, 11:26
Имеется в виду Asynchronous Mode таймера? Пока что оно за пределами моего понимания.
Учтите что проект вобщем-то учебный и недалеко ушел (и то — вынужденно) от ардуинского analogwrite на светодиод.
Отсюда и повторение чужой и достаточно простой схемы.
А еще побаивался высоких частот ШИМ, не зная справится ли полевик. Тем более он был под подозрением, т.к. выпаян из сдохшего инвертора монитора, где его близнец почил в бозе, а этот вроде был жив.
Может, когда поднаберусь знаний, и дойдут руки обновить прошивку девайсу. А железо точно не буду переделывать, ибо устраивает на 99% и есть идеи поинтереснее.
+
avatar
0
Автор, убери из своего фундаментального труда масло масляное «Этот способ может быть реализован двумя способами». Оно позбавило, тогда как сам труд заставляет снять шляпу!
+
avatar
0
  • Fredp
  • 14 апреля 2016, 06:19
Ну что сказать… во первых, зачет за книгу Борисова.

А на счет регулятора… Столько сил потратил что бы запилить 50ти рублевый ШИМ. Лучше бы из него сделал лабораторный блок питания, от него и дрель можно запитать и устройства.

Для интереса на контроллере ПИД прикрутить можно…
+
avatar
0
Какие дорогие наборы резисторов и конденсаторов… на али мне попадаются на много дешевле, без книжечки но на много дешевле.
+
avatar
0
Да и attiny85 какие то у вас дорогие, 85 руб каждая, за эти деньги (даже дешевле) можно Digispark купить
s.aliexpress.com/QFZjQreq
Или вот, тоже самое, 5 шт таких же голых attiny85, только дешевле
s.aliexpress.com/m6niEnYV
Или можно к вашим 100руб добавить и 10 шт купить, только в корпусе поменьше.

Такое ощущение что вы вообще покупаете самое первое в результатах поиска, не ищете дешевле
+
avatar
0
  • demonk
  • 14 апреля 2016, 11:57
Наборчики покупались в 2014 году и тогда ничего дешевле не попадалось, может сейчас есть лучше предложения.
Ну и не сказал бы что $36 / 1500р за 3700 радиодеталей, которые покроют почти все нужды и большую часть которых наверно еще внукам завещать можно будет, это сильно дорого.
Тиньки тоже понятно не самые дешевые. Но где то после 4 пропавшей бестрековой посылки меня достало и стал покупать (а) только у проверенных продавцов, (б) только с нормальным треком (доплачивая на том же бангуде за него $1.5). Ибо потерянные месяцы ожидания гораздо неприятнее 100руб разницы в цене.
+
avatar
0
Да и attiny85 какие то у вас дорогие, 85 руб каждая
Не увидел большой разницы между 5,12$ и 6,49$.

Выше уже не раз писали, что можно было сделать аналогичный регулятор на 555 таймере.
Вот где реально дешевле — 0,8$ за 20шт (или 0,49$ за 10шт).
+
avatar
0
Ну если около 20% для вас не разница, то я не знаю…
Я не про именно для этого устройства, я в целом за контроллеры
+
avatar
0
Ну если около 20% для вас не разница, то я не знаю…
ИМХО, когда речь идет о суммах, меньше 10 долларов, то разница в 20-30% — не существенна.
+
avatar
0
  • demonk
  • 14 апреля 2016, 15:08
Ну когда 20% = бутылка пива, то не всегда цена оказывается решающей.
Вон в соседней теме mysku.club/blog/aliexpress/39707.html#comment1356216
вообще МК в разы круче тиньки за 16р приводили.
Но для домашнего хобби 70р разницы не деньги, а знакомая архитектура экономит силы и время.
+
avatar
+1
  • dsr
  • 14 апреля 2016, 14:26
Я бы, как чайник, наверное, сначала бы все собрал и отладил на breadboard. В принципе, наверное, на нем(ней) можно все и оставить — для домашнего пользования…
Ну и минутка юмора — про сеть Крепмаркет: Основатель сетей магазинов «Крепмаркет» и «Мосхозторг» Сурен Зотов фигурирует в документах испанской специальной прокуратуры по делу, которое принято называть «делом о русской мафии в Испании».
+
avatar
0
  • DVANru
  • 14 апреля 2016, 16:05
О как!
+
avatar
0
  • demonk
  • 14 апреля 2016, 16:17
Хрень какая-то!
Стекловата в легких и мучительное сверление малюсенькой дырочки в алюминии на бешеных оборотах.
+
avatar
0
  • lsto
  • 11 мая 2016, 13:35
а где же ссылка на саму «боевую» прошивку (hex), фьюзы и т.д.?
+
avatar
0
  • demonk
  • 11 мая 2016, 16:51
И то и другое сформирует (скрытно от пользователя) среда Arduino при «загрузке» приведенного исходника в МК.
Если нужны и нет желания ставить ардуину, то при случае могу достать из нее файлики.
+
avatar
0
  • lsto
  • 11 мая 2016, 19:40
если возможно, будьте добры файлики. устанавливать ардуину, разбираться в ней с «нуля» как-то, пожалуй, тяжеловато (да и время). хотелось бы просто повторить устройство. спс.
+
avatar
0
  • demonk
  • 12 мая 2016, 22:29
Добавил
yadi.sk/d/_IsBW5YxrfiY7
+
avatar
0
  • lsto
  • 12 мая 2016, 22:42
спасибо. возможно стоит как-то добавить эту ссылку в саму статью.
+
avatar
0
  • lsto
  • 16 мая 2016, 13:51
demonk, загляните в ЛС.
+
avatar
0
  • lsto
  • 16 мая 2016, 19:48
в mega85 значительный объем памяти flash. неплохо было бы сделать управление (последовательно) одной кнопкой (как это сделано А. Дымовым). в алгоритме работы (мое мнение) при включении устройства для начального пуска двигателя стоить подать некое пусковое напряжение (например 1/3 Umax.) а затем снизить до мин. (предустановленных программно) оборотов. это позволит использовать более «широкий диапазон» двигателей т.к. многие двигатели запускаются при каком-то своем мин. напряжении а работать могут и при меньшем и соответственно меньших мин. оборотах.
возможно я запутанно объяснил, но надеюсь более-менее понятно.
+
avatar
0
  • demonk
  • 17 мая 2016, 11:11
Управление одной кнопкой мне кажется неудобным — сидеть ждать по 5 сек нужной фазы индикатора, а потом стучать морзянку вместо того чтобы просто повернуть крутилку. А проходить эту процедуру надо при каждой смене сверла.
И стартовый «пинок» тут врядли нужен — наоборот плавный разгон все делают. Это не вентилятор с массивной крыльчаткой и сопротивлением неподвижного воздуха, после проворота которых можно расслабиться. Тут нужен запас кинетической энергии, чтобы начать сверлить и сверло не встало до того как на нагрузку среагирует схема управления. Так что до совсем минимальных оборотов тормозиться нельзя, а не минимальные и вал на холостом ходу нормально раскрутят.
+
avatar
0
  • lsto
  • 17 мая 2016, 15:16
мнения (как всегда) разные.
примечание. в схеме А.Дымова процедура автонастройки производится лишь при смене… двигателя.
p.s. на данный момент пока не существует действительно достойной схемы автоматического управления дрелью, в каждой из них есть свои недостатки (в основном из-за разных применяемых двигателей). единственно надежной является обыкновенная дрель с кнопкой в которой обороты зависят от степени нажатия кнопки (никакой автоматики).
возможным конкурентом может стать автоматически регулируемый блок питания для регулировки оборотов двигателя, которых в разработке тоже пока не встречал
+
avatar
0
  • lsto
  • 17 мая 2016, 15:49
примерно такая структурная схема

Roc можно разместить в самом БП
преимущества данной схемы очевидны.
+
avatar
0
  • demonk
  • 17 мая 2016, 15:57
Ага, конечно! Его схема настолько умна, что сама настраивается на разные сверла и даже просит сменить двигатель. Шутка :)
То-то мне занятся нечем, кроме как тыкаться в регулятор после смены сверла. Но оказалось, ток холостого хода ощутимо отличается для обычного сверла и твердосплавного с толстым хвостовиком. И без перенастройки автомат колбасит. Можно конечно загрубить чувствительность, но тогда будет тупить при работе.
А если сверла одного типа и близких размеров, то видимо да, перенастройка не требуется.
+
avatar
0
  • lsto
  • 17 мая 2016, 16:15
устройство А.Дымова я собрал и испробовал лично. работает хорошо на разных сверлах Ø0,4...2,0 (толще не проверял, не нужно). Ваши предположения подтвердить не могу.
да и вес устройства крепления сверла вместе с патроном значительно превышает вес сверла (сверл).
+
avatar
0
  • demonk
  • 17 мая 2016, 19:02
Да, вероятно из-за массивности патрона/ротора разница в массе сверл может быть незамечена. А у меня (на вскидку) вес твердосплавного сверла сравним с патроном, а обычное вообще ничего не весит.
При этом отказываться от удобства твердосплава или докупать все его размеры — не тянет.
Кстати нашел таки исходники Дымова, математика там запутаная, но может разберусь на досуге.
+
avatar
0
  • lsto
  • 17 мая 2016, 20:46
устройство А.Дымова тоже зависимо от двигателя, но метод питания самого двигателя (постоянка при сохранении импульсного (ШИМ) режима работы транзистора) заслуживает внимания. недостаток — невозможность принудительного включения высоких оборотов, например для незначительного рассверливания отверстий (наприм. в 0,1 мм.).
А.Дымов писал и компилировал программу в WinAVR+AVR Studio 4.19.
+
avatar
0
  • demonk
  • 18 мая 2016, 10:48
Видел. Его постоянка получается из такого же ШИМа при помощи LC-фильтра, номиналы у которого такие, что надо искать по магазинам. И все только ради того чтобы мотор чуть тише гудел. И еще не факт что сам дроссель гудеть не будет. Подумал и решил не ставить — мотор сам по себе знатная индуктивность, а гул переживем.
+
avatar
0
  • lsto
  • 18 мая 2016, 12:15
да, дроссель это габарит и конденсатор тоже и причем высоковольтный (о подобном Вы упоминали в своей статье) и как вывод, все более убеждаюсь, (читаем выше 17 мая 2016, 15:16) — «единственно достойной конструкцией пока является обыкновенная дрель 220В с кнопкой в которой обороты зависят от степени нажатия кнопки».
+
avatar
0
  • demonk
  • 18 мая 2016, 12:42
Я не понял в чем особое достоинство дрели 220В, разве что в компактности исполнения регулятора? Там же тоже ШИМ при помощи простого симисторного диммера. А кнопка переменный резистор уставки крутит.
+
avatar
0
  • lsto
  • 18 мая 2016, 14:39
все верно. достоинство в том что это единое удобное устройство. нет в нем лего (шутка). Вилку в розетку и вперед.
+
avatar
0
  • testik
  • 27 мая 2016, 13:25
Уважаемый автор статьи. Вы несомненно проделали большую работу. Изучали существующие подобные устройства, изучали программирование в Arduino, разработали и испытали свое устройство. Если Вы хотели что бы устройство повторили, то для этого не стоило заставлять «повторителей» пройти весь Ваш путь. Можно было просто выложить схему и прошивку (кстати к прошивке МК прилагаются fuse), печатную плату для примера (уважающий себя радиолюбитель, как правило, разрабатывает свою), фото устройства (в этом преуспели). Для настройки под свой двигатель и возможных доработок устройства со стороны «повторителей» желательны исходники и среда (ваша программа не компилируется — всегда проверяю перед изготовлением чего-либо). Т.е. повторить Ваше устройство невозможно, поэтому никто и не повторил (сужу по комментариям) и подтвердить достоинства-недостатки кострукции тоже никто не может, увы.
В итоге. Назначение статьи непонятно (если только как реклама, то сойдет). Извините за возможную некорректность.
+
avatar
0
  • demonk
  • 27 мая 2016, 15:57
Ну как бы повторять 1-в-1, учитывая полученный опыт и советы в комментариях, я бы все же не советовал. Опять же я пока не тот авторитет в этой области, чтобы напрямую брать пример.
У устройства есть ряд недостатков и лучше по возможности их исключить: большие габариты, неоптимальная разводка платы, неоптимальный полевик и его драйвер, низкая частота ШИМ. Есть простор для творчества.
Но если очень хочется повторения как есть, то все для этого есть — и схема, и вариант платы, и прошивка (как в виде исходника, так и бинарника+fuse).
Простота схемы позволяет за 10 минут перерисовать ее в знакомой программе и развести плату под имеющийся корпус и детали. Потому выкладывать готовый проект орла особого смыла не вижу. Как бы потом не пришлось читать лекцию по открытию файлов и библиотек в этом орле.
Выкладывать саму Arduino IDE и библиотеку для Tiny тоже смысла не вижу. Все доступно, ссылки есть. Более, того, у многих уже установлена привычная версия и менять ее не хочется. Да, в другой версии ардуины и/или библиотеки проект может не скомпилироваться — все живет и меняется. Но как правило, это решается переименованием какой-либо функции или константы. Сам так много раз делал изучая чужие проекты. И прочитать сообщение об ошибке и принять соотв меры — это в общем то базовый навык разработчика. Опять же исходники вообще всего открыты, а сообщество огромно. Но на всякий приведу версии в которых точно все компилируется — arduino-1.0.2-windows + arduino-tiny-0100-0018.
Назначение статьи была все же не реклама, не пример идеального устройства и не попытка досконально разжевать все с нуля про программирование и конструирование. Хотел обратить внимание уважаемой публики на разновидность сверлилки (учитывая присутствие здесь множества самодельщиков), поделиться опытом по решению ряда конкретных проблем и получить от неравнодушных товарищей замечания по косякам и советы как надо было делать.
+
avatar
0
  • testik
  • 27 мая 2016, 18:02
Вы поступаете правильно говоря о недостатках, похвально. Даже становится интересно. Вы использовали arduino 1.0.2. Для 2016г. это достаточно старо как WindowsXP. Предполагаю что именно ее и использовали (ну м.б. Win7). На современных Windows (8...10) и нынешней Arduino скорее всего компиляция «напрямую» не получится. Т.е. без данных о среде Ваш проект мертв. Это я «поясняю» предыдущее мое сообщение для будущих Ваших статей и статьи еще будут т.к. Вы человек настойчивый что чувствуется.
+
avatar
0
  • demonk
  • 27 мая 2016, 18:40
По мне, пока инструмент решает поставленную перед ним задачу и не доставляет неудобств — он актуален вне зависимости от возраста. Вы еще молоток каждый год меняйте по причине несовременности.
Кстати оная arduino 1.0.2 работала таки в Windows XP, а после замены винды на 7 64бит была в нее скопирована и продолжила работать как ни в чем ни бывало, ибо не требует установки и портабельна. Если в новых версиях ардуины или винды поломали совместимость, то я могу вам только посочувствовать.
А про то что не указал свою версию — виноват, каюсь. А «проект мертв» разве что для тех, кто код чуть сложнее Blink'а прочитать не может.
+
avatar
0
  • testik
  • 27 мая 2016, 19:26
Вы меня не совсем поняли. Сочувствовать скорее нужно не мне (не в обиду). Я не намерен его повторять, не нужен. А сказать я хотел именно Вам — если проект не будет легко доступным для повторения (для возможного «повторителя» и Blink может быть «в тягость» да и суть проекта не в нем!), то повторения и не будет, не будет отзыва, не будет предложений и т.д. Если конечно не слукавили насчет неравнодушных товарищей и действительно интересны их мнения (не только теоретические как Вам высказывали выше). Удачи.
+
avatar
0
  • demonk
  • 31 мая 2016, 11:30
Под неравнодушными товарищами я имел в виду все же либо тех кому достаточно глянуть на фото, схему и текст программы (которые проще некуда), и таких оказалось достаточно, мнения интересные. Либо тех кому это реально надо и они разберутся сами или с моей помощью. Такие тоже были, отвечал на вопросы в личке. Все же там примерно 10 строк аппаратно-зависимого кода.
Писать всеобъемлющий букварь для мимопроходящих полных чайников, да под все ОС целей не было. Тем более тратить время на установку всяких десяток, распространенных не сильно больше макоси.
И чего это я потратил аж 2 часа, портируя Бейсик (с которым сталкивался последний раз в школе) в Ардуину, надо было А.Савченко попинать, за то что он «недостаточно доступный проект» сделал :)
+
avatar
0
  • testik
  • 31 мая 2016, 15:12
Вам виднее. Хотели мнение — я свое высказал. Нравится оно Вам или не нравится. Если воспринимать все отрицательно, то… лучше взгляните на мое первое сообщение лишь непредвзято и все.
Еще раз удачи
+
avatar
0
  • lion11
  • 15 июля 2016, 16:14
Хочу повторить данную конструкцию, но возникли вопросы:
1.В статье я не нашёл информации как проходить процедуру настройки под свёрла? или как работает режим настройки.
2.Можно ли эту схему повторить на ардуино мини? (просто есть в наличии)
+
avatar
0
  • demonk
  • 15 июля 2016, 17:57
1. Нажимаем кнопку «настройка». Светодиод редко моргает. Крутилкой настраиваем обороты на холостом ходу. Еще раз нажимаем кнопку «настройка» — программа запоминает обороты и ток ХХ для данного сверла. Светодиод начинает моргать быстро. Крутилкой выставляем максимальные обороты. Еще раз нажимаем кнопку «настройка» — программа запоминает обороты и ток на этих оборотах без нагрузки для данного сверла и возвращается в рабочий режим.

2. Можно:
а) Раскидать подключения на соотв. ноги (цифровые, аналоговые, ШИМ). Кнопку и светодиод — на разные чтобы не мучиться, ног избыток. Прописать в #define в начале программы.
б) Убрать процедуры PWM3_init() и analogWrite_PB3(). Вызовы analogWrite_PB3() заменить на обычные analogWrite.
в) Убрать процедуру ScanButton(). Кнопку настройки читать обычным digitalRead.
г) Возможно потребуется подстроить цифровой фильтр тока CurrentFiltered =… >> 3); т.к. частота ардуины в 16 раз выше.
+
avatar
0
  • lion11
  • 15 июля 2016, 21:13
Спасибо за ответ.
Теперь всё понятно по настройке.
Буду наверно заказывать ATtiny85, как я понял чтобы реализовать на ардуино мини надо перебирать весь скетч но я только начинаю осваивать ардуино и мне будет сейчас сложно это сделать.
+
avatar
0
  • lsto
  • 15 июля 2016, 19:54
Второй Ваш вопрос некорректен. Схема она и есть схема и ее нужно реализовать на той или иной печатной плате. Аrduino здесь ни при чем. Прошить ATTiny85 можно конечно и с помощью Вашей arduino, но можно и с помощью любого другого программатора, файл прошивки (hex) есть в статье.
+
avatar
0
  • lion11
  • 15 июля 2016, 21:16
Как же ардуино здесь не причём если скетч написан в среде Ардуино.
+
avatar
0
  • lsto
  • 16 июля 2016, 10:43
Если Вы собираетесь изменять скетч, то конечно arduino причем. А если повторить (как Вы и писали) и я это понял буквально, то ни при чем (просто прошиваете в ATTiny85 готовый hex)
+
avatar
0
  • lion11
  • 16 июля 2016, 11:35
Я написал — повторить на ардуино мини.
Это плата на другом микроконтроллере, по этому я поинтересовался можно ли собрать эту схему на другом микроконтроллере который установлен на плате под названием ардуино мини(т.к. есть в наличии такая плата).
+
avatar
0
  • lsto
  • 16 июля 2016, 13:02
в таком раскладе конечно (на любом подходящем AVR), что автор и сделал взяв за оригинал ATTiny13 пересобрав (и изменив) в arduino, так он решил (исходники не в arduino ), да и Вы сами правильно написали «надо перебирать весь скетч» (под другой MK).
+
avatar
0
  • lsto
  • 16 июля 2016, 13:34
сорри, не ATTiny13 а ATMega8 (сам запи… путался, может и сейчас)
+
avatar
0
  • old
  • 17 ноября 2016, 08:43
— скажите, пожалуйста, с блоком питания 12В работать будет?
— для отображения очень не хватает семисегментных индикаторов

+
avatar
0
  • demonk
  • 17 ноября 2016, 11:17
Будет, надо только выкинуть (закоротить) резистор R10 между затвором и коллектором, чтобы полевик раскачивался не половиной, а всем напряжением питания. Возможно еще шунт подобрать придется.
А чего там отображать то? Подаваемое на мотор напряжение видно по движку потенциометра, обороты МК замерить не может, невидимым остается разве что ток, но смысла в его отображении немного.
И добавление индикатора потребует замену МК на ATmega с десятком дополнительных ног, либо пару сдвиговых регистров и существенно усложнение ПО.
+
avatar
0
Собрал ваше устройство, но в наличии не оказалось С3 и R4 подходящего номинала.
Устройство работает не стабильно при C3=10nF R4=33kOm.
Можно как-то скорректировать их номинал в программе или под С3 100nF.
+
avatar
+1
  • demonk
  • 26 июня 2017, 18:20
C3=10nF R4=33kOm — мало, пролезут пульсации ШИМ и помехи с коллектора
под 100nF ничего корректировать не надо — частота среза 60 или 50 герц уже не принципиально, а задержку разгона увеличит на миллисекунду.
+
avatar
0
Т.е ставим С3=100nF R4=33kOm?
Может R4 еще подобрать другого номинала?
Если не затруднит подскажите какой T1 Вы ставили, я установил 2N5551 и IRF4905.
+
avatar
+1
  • demonk
  • 26 июня 2017, 18:51
Да.
Не надо, тут точность не требуется, достаточно чтобы пульсации сглаживало.
+
avatar
0
Получается следующая ситуация: если R15=2Om, то двигатель при сверлении повышает обороты и не сбрасывает, если R15=5Om, то двигатель не повышает обороты, если R15=1Om двигатель повышает обороты и сбрасывает, но при повышении происходит задержка где-то 0,5 — 1 секунда.
Может все таки как-то код подправить можно, помогите не совсем в этом разбираюсь.
+
avatar
+1
  • demonk
  • 27 июня 2017, 11:17
А процедура настройки после смены резисторов делалась? Она требуется обязательно, ибо ловим отклонения в 10% потребляемого мотором тока и даже при смене сверла можно выйти за уставку, не говоря уж о изменении в разы сопротивления шунта.
Опять же не помешает посмотреть вольтметром напряжение на C3 в разных режимах — холостого хода на разных оборотах и во время сверления на высоких оборотах. Разным моторам разный шунт нужен. Сопротивление должно быть достаточно большим, чтобы мы могли различить холостой ход на малых оборотах, но при этом не терять на нем значительной мощности и не превысить 5В на входе МК.
У меня тоже есть задержка, но заметно меньше секунды.
Программно можно подкрутить только в этих строчках:
Uon = byte( 1.1 * CurrentU8 );
Uoff = byte( 1.1 * CurrentU8 );
Здесь 1.1 — это те самые 10% отклонения тока от холостого хода, когда мы видим что появилась нагрузка, и что она пропала. Для повышения чувствительности можно этот к-т уменьшить, но увеличится вероятность реакции на помехи.
+
avatar
0
Спасибо большое за помощь.
Пробовал поставить R4=24KOm, задержки немного исчезли, но появились ложные срабатывания.
Подкрутил программно
Uon = byte( 1.1 * CurrentU8 );
Uoff = byte( 1.1 * CurrentU8 );
уменьшив отклонение на 2% сделал по 1.08
задержки уменьшились до вполне приемлемых, пробовал уменьшить до 1.06 появляются ложные срабатывания
Оставил пока 1.08.
Мерил напряжение на С3: на малых оборотах 0.2 В, под нагрузкой около 2-2,5 В, точнее отследить не получилось.
Остановлюсь пока на варианте с 1,08.
+
avatar
0
  • novik97
  • 08 декабря 2018, 19:43
Здравствуйте, ваш проект очень кстати. Буду признателен, если вы прикрепите файлы с платой (lay) отдельным архивом, и дадите на него ссылку.
+
avatar
0
Можете прошивку выложить в формате .ino или. pde для прошивки Digispark для Arduino ATTINY85 usb. Без русских символов в ней, пожалуйста.
+
avatar
0
  • demonk
  • 30 января 2019, 14:58
Пардоньте, но прогнать текст программы через какой-ньть транслитератор и сохранить в файлик можете и самостоятельно.
А вот Digispark в такой схеме работать не сможет — выводы используемые для ШИМ и АЦП в Digispark подключены к USB и конденсатор, необходимый для фильтрации пульсаций измеряемого тока, не даст передавать данные через USB, а стабилитрон не даст АЦП работать на всю шкалу
+
avatar
0
Загнать программу через USB и переделать Digispark согласно схеме отпаяв пару сопротов и припаяв крутилку с кнопкой не сложно. Но программу запустить и скомпилировать в Arduino. Вооще кто нибудь сделал этот проект? Хочуу на всем готовеньком аа-а.
+
avatar
0
Классно прошивку в формате .ino для Arduino наверно не увидим. А из формата .ino в программе Arduino получить прошивку .hex очень просто.
Кому интересно вот ссылки: www.instructables.com/id/12V-NE555-PWM-Controller/
www.instructables.com/id/NE-555-Motor-Speed-Control/
+
avatar
0
Добрый день! Demonk… решил сделать твою схемку регулировки оборотов дрельки… не нашел во всей статье какой транзистор Т1? и если можно файл Хекс для прошивки атини85 и, наверное достаточно, низкого и высокого байта конфигурации и EXTENDED байт тоже надо оказывается)… нашел какойто файл DrelMK.hex(папка) и еще Drel папку.
+
avatar
0
Здравствуйте. Повторил ваше изделие, не с первого раза завелось, но победил. Все хорошо, но раздражает визг микродрели на малых оборотах, нельзя ли это как нибудь исправить? Сам в программировании не силен. Спасибо
+
avatar
0
Доброго времени суток, собрал свой вариант, прошивку свою написал, детектор на диоде оставил, кондер 0,1мкф, шунт 1 Ом 2Вт. С резистором показания скачут больше, с диодом стабильней. У вас задержка из-за программного фильтра я так думаю, тоже с фильтрами парился пока резистор не поменял на диод. Зависимости от диаметра свёрел не заметил.




Пока в таком виде. Резистор поменяю на 2 шт. СМД 2Ом 1Вт
+
avatar
0
  • inei
  • 01 марта 2021, 18:02
Chpok-116, можете поделиться своим вариантом?
+
avatar
0
  • Chip74
  • 26 февраля 2022, 10:48
Доброго времени суток! зачем было расписывать всю эпопею и выкладывать куча схем если можно было выложить готовый проект и не морочить людям голову, сначало выложил одну схему потом «ой вот вам финальная схема»
+
avatar
0
  • Libra74
  • 22 марта 2022, 09:38
Доброго времени суток у кого то дачное изделие заработало отпишитесь пожалуйста, я его собрал и ни чего вообще, Как оно должно работать как настраивать не понятно в описании вообще
+
avatar
+1
  • tambu
  • 31 января 2024, 15:12
Таки повторил, собрал, и таки заработало после исследования и адаптации. На схеме что-то не так со стабилитроном. Опыт показал, что его надо развернуть. Все остальное работает. Прошивка автора тоже рабочая, можно сэкономить время и не писать свою.

Кто еще не понял — процедура настройки выполняется тактовой кнопкой.
1) нажимает кнопку — устанавливаем холостой ход (светодиод 1 мигает редко)
2) нажимаем на кнопку — устанавливаем полный рабочий ход (светодиод 1 мигает часто)
3) нажимаем на кнопку дрель переходит в режим автоматической работы (светодиод 1 горит постоянно)

Шунт подбирал по методике Меандра из статьи в ссылках.

Я делал свою плату на смд и разводил, чтобы была возможность подбирать шунт, диод шоттке и были человеческие разъемы. Моя плата скорее под фоторезист, чем под ЛУТ. При необходимости могу дать схему и лайауты платы. У меня все в easyEDA.

У меня есть проблема с чувствительностью по обратной связи, она то высокая, то низкая. Видимо лечится более тщательным подбором шунта. Но, в целом, все работает.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.