Здоровья всем читателям Муськи!
Благодаря этому замечательному сайту обзавелся множеством полезных вещей и знаний и в ответ решил написать первый отчет о недавно разработанном устройстве. В процессе разработки устройства столкнулся с рядом проблем и успешно их разрешил. Возможно, кому-то из коллег-новичков описание некоторых решений поможет в творчестве.
Для изготовления печатных плат обзавелся микродрелью и стойкой для нее, превращающей дрельку в сверлильный микростанок. Необходимость этого возникла после кучки переломанных сверл 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.me/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, с разным шлицем и головой, с продажей поштучно и на вес, и по цене на порядок ниже предыдущего конкурента. Вот только надо сразу ехать в магазин-склад на ул.Плеханова, а то я поначалу зашел в магазин около метро Перово и сильно удивился озвученной цене. И выяснилось, что у них исключительно нержавейка, а за обычным крепежом надо ехать на перекладных в промзону.
aliexpress.com/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
С вашим упорством получится.
Автору однозначный + за упорность и пряморукость
с вариациями
Потому как решать задачу в ограниченных условиях всегда интереснее.
Цель — ничто, движение — все. ©
ЗЫ Сам таим был, уважаю.
насчет писка — так а чего на 1МГц гонять-то? там же вроде и 8МГц есть, если без делителя?
вообще, вот ссылка, если я правильно вижу, то div8 не включается, значит частота 8 или сколько там 9.6 Мгц. при беглом просмотре комментов, я, как неспециалист, пришел к выводу что ШИМ там на 18кГц. могу ошибаться.
думаю, это
Но вот понятия «Схема проще» и «доступная частота выше» несколько несовместимы :)
Вы же не хуже здесь присутствующих знаете, что схема в этом случае может не только не упроститься, но и усложниться, особенно когда частота ШИМ поднимается. Тяжелый затвор логического полевика потребует наличие драйвера, иначе — нагрев и т.д.
А как быть с шунтом и измерением тока? Можно ли оставить его в цепи истока?
Шунт подбирается так, чтобы падение напряжения на нём при пуске не превышало 2В и тогда проблем не будет
Есть где то в закладках fusebit Doctor на arduino, можно делать reset обычным выводом, а потом сбрасывать фьюзы если что.
Если убрать остатки плавающей запятой (умножения в процедуре настройки) и ардуинские функции переписать, то наверняка удастся утрамбовать.
arduino.ru/forum/programmirovanie/attiny13a-101-primenenie
Раза в два, а то и больше код раздувает.
В той же ардуино IDE прекрасно сработает PORTB |= (1<<PIN) и код уменьшится.
В регуляторе я использовал такое в критических местах, а ардуинские оставил ради лени и наглядности.
Но — два замечания. Первое — насчет «воя ШИМ». Позвольте, но у вас — Attiny85! Ее таймеры можно тактировать на целых 64 МГц (штатно, а при разгоне — до 80)! Разве не сам создатель этих контроллеров велел увести частоту ШИМ далеко за пределы слуха?
Ну а второе уже высказали выше, повторю: не логичнее ли отслеживать обороты по модуляции тока коллектора?
Учтите что проект вобщем-то учебный и недалеко ушел (и то — вынужденно) от ардуинского analogwrite на светодиод.
Отсюда и повторение чужой и достаточно простой схемы.
А еще побаивался высоких частот ШИМ, не зная справится ли полевик. Тем более он был под подозрением, т.к. выпаян из сдохшего инвертора монитора, где его близнец почил в бозе, а этот вроде был жив.
Может, когда поднаберусь знаний, и дойдут руки обновить прошивку девайсу. А железо точно не буду переделывать, ибо устраивает на 99% и есть идеи поинтереснее.
А на счет регулятора… Столько сил потратил что бы запилить 50ти рублевый ШИМ. Лучше бы из него сделал лабораторный блок питания, от него и дрель можно запитать и устройства.
Для интереса на контроллере ПИД прикрутить можно…
s.aliexpress.com/QFZjQreq
Или вот, тоже самое, 5 шт таких же голых attiny85, только дешевле
s.aliexpress.com/m6niEnYV
Или можно к вашим 100руб добавить и 10 шт купить, только в корпусе поменьше.
Такое ощущение что вы вообще покупаете самое первое в результатах поиска, не ищете дешевле
Ну и не сказал бы что $36 / 1500р за 3700 радиодеталей, которые покроют почти все нужды и большую часть которых наверно еще внукам завещать можно будет, это сильно дорого.
Тиньки тоже понятно не самые дешевые. Но где то после 4 пропавшей бестрековой посылки меня достало и стал покупать (а) только у проверенных продавцов, (б) только с нормальным треком (доплачивая на том же бангуде за него $1.5). Ибо потерянные месяцы ожидания гораздо неприятнее 100руб разницы в цене.
Выше уже не раз писали, что можно было сделать аналогичный регулятор на 555 таймере.
Вот где реально дешевле — 0,8$ за 20шт (или 0,49$ за 10шт).
Я не про именно для этого устройства, я в целом за контроллеры
Вон в соседней теме mySKU.me/blog/aliexpress/39707.html#comment1356216
вообще МК в разы круче тиньки за 16р приводили.
Но для домашнего хобби 70р разницы не деньги, а знакомая архитектура экономит силы и время.
Ну и минутка юмора — про сеть Крепмаркет: Основатель сетей магазинов «Крепмаркет» и «Мосхозторг» Сурен Зотов фигурирует в документах испанской специальной прокуратуры по делу, которое принято называть «делом о русской мафии в Испании».
Стекловата в легких и мучительное сверление малюсенькой дырочки в алюминии на бешеных оборотах.
Если нужны и нет желания ставить ардуину, то при случае могу достать из нее файлики.
yadi.sk/d/_IsBW5YxrfiY7
возможно я запутанно объяснил, но надеюсь более-менее понятно.
И стартовый «пинок» тут врядли нужен — наоборот плавный разгон все делают. Это не вентилятор с массивной крыльчаткой и сопротивлением неподвижного воздуха, после проворота которых можно расслабиться. Тут нужен запас кинетической энергии, чтобы начать сверлить и сверло не встало до того как на нагрузку среагирует схема управления. Так что до совсем минимальных оборотов тормозиться нельзя, а не минимальные и вал на холостом ходу нормально раскрутят.
примечание. в схеме А.Дымова процедура автонастройки производится лишь при смене… двигателя.
p.s. на данный момент пока не существует действительно достойной схемы автоматического управления дрелью, в каждой из них есть свои недостатки (в основном из-за разных применяемых двигателей). единственно надежной является обыкновенная дрель с кнопкой в которой обороты зависят от степени нажатия кнопки (никакой автоматики).
возможным конкурентом может стать автоматически регулируемый блок питания для регулировки оборотов двигателя, которых в разработке тоже пока не встречал
Roc можно разместить в самом БП
преимущества данной схемы очевидны.
То-то мне занятся нечем, кроме как тыкаться в регулятор после смены сверла. Но оказалось, ток холостого хода ощутимо отличается для обычного сверла и твердосплавного с толстым хвостовиком. И без перенастройки автомат колбасит. Можно конечно загрубить чувствительность, но тогда будет тупить при работе.
А если сверла одного типа и близких размеров, то видимо да, перенастройка не требуется.
да и вес устройства крепления сверла вместе с патроном значительно превышает вес сверла (сверл).
При этом отказываться от удобства твердосплава или докупать все его размеры — не тянет.
Кстати нашел таки исходники Дымова, математика там запутаная, но может разберусь на досуге.
А.Дымов писал и компилировал программу в WinAVR+AVR Studio 4.19.
В итоге. Назначение статьи непонятно (если только как реклама, то сойдет). Извините за возможную некорректность.
У устройства есть ряд недостатков и лучше по возможности их исключить: большие габариты, неоптимальная разводка платы, неоптимальный полевик и его драйвер, низкая частота ШИМ. Есть простор для творчества.
Но если очень хочется повторения как есть, то все для этого есть — и схема, и вариант платы, и прошивка (как в виде исходника, так и бинарника+fuse).
Простота схемы позволяет за 10 минут перерисовать ее в знакомой программе и развести плату под имеющийся корпус и детали. Потому выкладывать готовый проект орла особого смыла не вижу. Как бы потом не пришлось читать лекцию по открытию файлов и библиотек в этом орле.
Выкладывать саму Arduino IDE и библиотеку для Tiny тоже смысла не вижу. Все доступно, ссылки есть. Более, того, у многих уже установлена привычная версия и менять ее не хочется. Да, в другой версии ардуины и/или библиотеки проект может не скомпилироваться — все живет и меняется. Но как правило, это решается переименованием какой-либо функции или константы. Сам так много раз делал изучая чужие проекты. И прочитать сообщение об ошибке и принять соотв меры — это в общем то базовый навык разработчика. Опять же исходники вообще всего открыты, а сообщество огромно. Но на всякий приведу версии в которых точно все компилируется — arduino-1.0.2-windows + arduino-tiny-0100-0018.
Назначение статьи была все же не реклама, не пример идеального устройства и не попытка досконально разжевать все с нуля про программирование и конструирование. Хотел обратить внимание уважаемой публики на разновидность сверлилки (учитывая присутствие здесь множества самодельщиков), поделиться опытом по решению ряда конкретных проблем и получить от неравнодушных товарищей замечания по косякам и советы как надо было делать.
Кстати оная arduino 1.0.2 работала таки в Windows XP, а после замены винды на 7 64бит была в нее скопирована и продолжила работать как ни в чем ни бывало, ибо не требует установки и портабельна. Если в новых версиях ардуины или винды поломали совместимость, то я могу вам только посочувствовать.
А про то что не указал свою версию — виноват, каюсь. А «проект мертв» разве что для тех, кто код чуть сложнее Blink'а прочитать не может.
Писать всеобъемлющий букварь для мимопроходящих полных чайников, да под все ОС целей не было. Тем более тратить время на установку всяких десяток, распространенных не сильно больше макоси.
И чего это я потратил аж 2 часа, портируя Бейсик (с которым сталкивался последний раз в школе) в Ардуину, надо было А.Савченко попинать, за то что он «недостаточно доступный проект» сделал :)
Еще раз удачи
1.В статье я не нашёл информации как проходить процедуру настройки под свёрла? или как работает режим настройки.
2.Можно ли эту схему повторить на ардуино мини? (просто есть в наличии)
2. Можно:
а) Раскидать подключения на соотв. ноги (цифровые, аналоговые, ШИМ). Кнопку и светодиод — на разные чтобы не мучиться, ног избыток. Прописать в #define в начале программы.
б) Убрать процедуры PWM3_init() и analogWrite_PB3(). Вызовы analogWrite_PB3() заменить на обычные analogWrite.
в) Убрать процедуру ScanButton(). Кнопку настройки читать обычным digitalRead.
г) Возможно потребуется подстроить цифровой фильтр тока CurrentFiltered =… >> 3); т.к. частота ардуины в 16 раз выше.
Теперь всё понятно по настройке.
Буду наверно заказывать ATtiny85, как я понял чтобы реализовать на ардуино мини надо перебирать весь скетч но я только начинаю осваивать ардуино и мне будет сейчас сложно это сделать.
Это плата на другом микроконтроллере, по этому я поинтересовался можно ли собрать эту схему на другом микроконтроллере который установлен на плате под названием ардуино мини(т.к. есть в наличии такая плата).
пи… путался, может и сейчас)— для отображения очень не хватает семисегментных индикаторов
А чего там отображать то? Подаваемое на мотор напряжение видно по движку потенциометра, обороты МК замерить не может, невидимым остается разве что ток, но смысла в его отображении немного.
И добавление индикатора потребует замену МК на ATmega с десятком дополнительных ног, либо пару сдвиговых регистров и существенно усложнение ПО.
Устройство работает не стабильно при C3=10nF R4=33kOm.
Можно как-то скорректировать их номинал в программе или под С3 100nF.
под 100nF ничего корректировать не надо — частота среза 60 или 50 герц уже не принципиально, а задержку разгона увеличит на миллисекунду.
Может R4 еще подобрать другого номинала?
Если не затруднит подскажите какой T1 Вы ставили, я установил 2N5551 и IRF4905.
Не надо, тут точность не требуется, достаточно чтобы пульсации сглаживало.
Может все таки как-то код подправить можно, помогите не совсем в этом разбираюсь.
Опять же не помешает посмотреть вольтметром напряжение на C3 в разных режимах — холостого хода на разных оборотах и во время сверления на высоких оборотах. Разным моторам разный шунт нужен. Сопротивление должно быть достаточно большим, чтобы мы могли различить холостой ход на малых оборотах, но при этом не терять на нем значительной мощности и не превысить 5В на входе МК.
У меня тоже есть задержка, но заметно меньше секунды.
Программно можно подкрутить только в этих строчках:
Uon = byte( 1.1 * CurrentU8 );
Uoff = byte( 1.1 * CurrentU8 );
Здесь 1.1 — это те самые 10% отклонения тока от холостого хода, когда мы видим что появилась нагрузка, и что она пропала. Для повышения чувствительности можно этот к-т уменьшить, но увеличится вероятность реакции на помехи.
Пробовал поставить 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.
А вот Digispark в такой схеме работать не сможет — выводы используемые для ШИМ и АЦП в Digispark подключены к USB и конденсатор, необходимый для фильтрации пульсаций измеряемого тока, не даст передавать данные через USB, а стабилитрон не даст АЦП работать на всю шкалу
Кому интересно вот ссылки: www.instructables.com/id/12V-NE555-PWM-Controller/
www.instructables.com/id/NE-555-Motor-Speed-Control/
Пока в таком виде. Резистор поменяю на 2 шт. СМД 2Ом 1Вт