Всем привет! Это снова я. Возможно дело дойдёт и до семисегментных индикаторов. Но это не точно.
Есть у меня задумка обойтись в производстве плат без трафарета для нанесения паяльной пасты. Хотя штука очень удобная! Провел разок шпателем по нержавейке и дело в шляпе. Качество и внешний вид пайки не идёт вообще ни в какое сравнение с тем, что я могу сделать дрожащей рукой! И правой и левой, и третьей. Главное не забыть все потом отмыть. Но трафарет, даже без жёсткой рамки, штука не из дешёвых. 4-8 тысяч наших родных денег за такое удовольствие минимум. На две платы, чтобы просто попробовать, достаточно расточительно.
Что есть на рынке?
Первым делом я решил посмотреть, что может предложить мне AliExpress. По запросу "дозатор паяльной пасты" поиск выдаёт огромное количество ручных "давилок" рычажного типа, какие-то точные лабораторные шприцы и хит сезона - вакуумные автоматические дозаторы всех форм и размеров, все на одно лицо, только с разными названиями и ценой. На станок такой, конечно, можно прикрепить, но это нужна ещё одна воздушная линия. Да и это же пневматика и как-то не верится, что можно будет точно дозировать пасту, не настраивая предварительно всю систему дольше, чем припаять просто паяльником и припоем без всех этих паст бесовских.
А как вообще делают другие?
Поиск в Яндексе так же предложил великое множество рычажных механизмов, вакуумные дозаторы и, что уже ближе, дозатор, использующий винтовую пару и шаговый двигатель! Это мне понравилось.
Реализация.
В большинстве самодельных конструкций используются униполярный шаговый двигатель со встроенным редуктором 28byj-48. Почему бы и нет? Простейшее управление, хороший момент, не большие габариты и отличная цена. К тому же он уже лет десять лежит в коробочке от стартового набора ардуино, так ни разу и не подключенный.
Так как я собрался устанавливать дозатор на PnP станок, размеры посадочного места для дозатора должны совпадать с уже имеющихся на каретке креплением. Там установлен шаговый двигатель типоразмера nema11 с полым валом. От него и буду отталкиваться.
Двигатель 28byj-48, как я уже сказал, униполярный. А это значит, что вращение достигается последовательной подачей питающего напряжения на каждую из обмоток, имеющих общий провод. Обычно это делается при помощи микросхемы ULN2003. Это сборка из транзисторов Дарлингтона. Хорошая и не дорогая микросхема. Но под рукой её не оказалось. Я измерил ток на обмотка при напряжении питания и получилось всего 130мА. Да тут и обычного биполярного транзистора хватит. Например BC817. С хорошим трехкратным запасом.
Переключать транзисторные ключи буду не дорогим микроконтроллером ch32v003. Потребуется 4 выхода на ключи, один на внешнее управление, ну и не плохо было бы добавить какую то индикацию. Например forward/reverse.
Набросал тестовую схему в KiCad, используя те элементы, которые были в наличии.
Развел микроскопическую печатную плату под ЛУТ, но самого главного- утюга, не нашлось. Придется с этим повременить. Сделаю тест работы устройства на отладке и навесным монтажом. Углубляться в прошивку для нее не будем. Всё в следующий раз.
Прошивка.
Тут недавно вышла новая версия MounRiver Studio. Основана она на VScode, по всей видимости. Выглядит красиво и приятно.
В этот раз наметим план будущей прошивки:
- Настроить порты.
- Проинициализировать таймер для перебора выходов двигателя.
- Отслеживать нажатие кнопки.
- Реализовать функцию управления шаговым двигателем с вводными параметрами такими как скорость и направление.
- Сделать индикацию.
Настройка портов.
Нам нужно настроить 6 пинов(светодиоды и шаговый двигатель) как выход и один как вход(кнопка).
void GPIO_INIT(void){
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); // тактирование порта C
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; //GPIO_C_6
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_30MHz; // скорость переключения порта
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //настройка порта как выход
GPIO_Init(GPIOC, &GPIO_InitStructure); // и собираем всё в кучу.
...
}
Таким же образом настраиваются остальные порты.
Таймер.
void TIM_Init(int interval){
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);// инициализация таймера
TIM_CounterModeConfig(TIM1, TIM_CounterMode_Up);// режим прямого счета
TIM_SetAutoreload(TIM1, interval);// настройка автоперезагрузки
TIM_PrescalerConfig(TIM1, 48000 - 1, TIM_PSCReloadMode_Immediate); //прескаллер
TIM_Cmd(TIM1, ENABLE); //разрешение работы таймера
}
Тут всё как в статье про индикаторы. Но пока без таймера.
Остальные пункты подробно будут расписаны уже тогда, когда я разживусь утюгом.
Теперь можно что-то попробовать покрутить.
int main(void){
SystemCoreClockUpdate();
Delay_Init();
GPIO_INIT();
//TIM_Init(2); //пока что без таймера.
while(1){
GPIO_WriteBit(GPIOC, GPIO_Pin_6 ,1);//подаем напряжение на первую обмотку
Delay_Ms(10);//;немного ждем
GPIO_WriteBit(GPIOC, GPIO_Pin_6 ,0);//отключаем обмотку.
GPIO_WriteBit(GPIOC, GPIO_Pin_4 ,1);//включаем следующую.
Delay_Ms(10);//;немного ждем
... // и так по кругу все 4
}
Тест на шприце с флюсом.
Почему на флюсе? Он давится намного легче и он есть под рукой. С выходным валом редуктора шаговика шпилька М5 соединяется муфтой как используются в 3д принтерах.
Осталось всё замакетировать и попробовать.
Заключение.
В этот раз удалось протестировать конструкцию на работоспособность. Но это, пока что, прототип. Нужно доделать плату, закрепить на станок и попробовать нанести уже не флюс, а паяльную пасту, используя оборудование OpenPnP и слой паяльной пасты на какой-нибудь платы. Ещё было бы хорошо сделать настройки для разных шприцов и индикацию режима на корпусе дозатора. Кнопку "принудительный откат" и турбо режим для использования дозатора для флюса в ручном режиме. Дописать прошивку и поработать над универсальностью.
Проект, доведенный до рабочего и функционального состояния будет описан в следующей статье и все необходимые для повторения файлы будут размещены в телеграм чате канала. Всем спасибо за внимание! Как всегда буду рад комментариям.