плавный пуск DC мотора с ручной регулировкой оборотов( коряво работает)
- Войдите на сайт для отправки комментариев
Добрый день, форумчане! Прошу помощи или дельного совета по моей проблеме. Суть такова: есть китайский 775 движок на 150 Ватт, питается от 24 вольт( стоит в ЧПУ станке CNC 1610), ему нужно устройство плавного пуска- чтоб БП в защиту по току не уходил, и станок не подпрыгивал)). Решил собрать данное устройство на arduino, принцип работы следующий- при поступлении на 5 пин команды включения шпинделя от платы станка, на 9 выводе ардуинки появляется 8 бит ШИМ ( на затвор мощного полевика), его значение растёт до максимума(255) в течении какого-то времени( движок набирает обороты), и держится, пока на 5 пине уровень 5 вольт. как только на 5 пине 0, шим выключается. это всё одновременно с ростом шим выводится в виде аналоговой шкалы( прогресс-бар) на дисплей 1602, есть 2 кнопки + и - для регулировки скорости вручную после выхода в режим. А теперь проблема- оно не работает как написано: либо только вручную, либо плавный старт, но без индикации. Скетч прилагаю, сильно не пинайте( что-то писал сам, что-то взял из готового)
Похоже очередной изобретатель "вечного двигателя" не знакомый с законами физики.
Похоже очередной изобретатель "вечного двигателя" не знакомый с законами физики.
Потому что есть целый курс института, как регулировать двигатели постояного тока. На который вы похоже забили.
хорошо, тогда как обеспечить плавный старт движка с использованием контроллера? есть что конкретно по делу сказать? как, по вашему в станке обороты движка регулируются, есть там мощный полевик стоит без радиатора? ШИМ, причём довольно шустрый. Обгадить каждый может, а вот подсказать - тут надо мозг включать
это ручная регулировка, заполнение шкалы по мере возрастания скорости
Ну вы видели движки на промышленных станках. Мощность размеры.Почему стоят коробки переключения скоростей. А теперь двигатели для вентиляции. Там ничего этого нет. Вы что ставите движок для обдува? или сверления. Похоже для сверления. И что я вижу. маломощный игрушечный моторчик, игрушечный контроллер и похоже "игрушечный мозг" ,а желания и требования уже не игрушечные.
ПС: Куйня у вас выйдет со всем этим.
как обеспечить плавный старт движка
Взять специализированную микросхему "драйвер коллеторного DC мотора" работающую с нуными током и напряжением и уже ею управлять из контроллера. Микросхему можно выбрать, поковырявшись по спискам производителей и посравнивав хракетиристики и цены. Пример подобного списка
Это будет не на коленке из дерьма и палок, а нормальное профессиональное решение.
Уважаемый, 33 и 43 строка в взаимоисключающие, поэтому есть смысл в 43 строке использовать else. А вот автоматического увеличения скорости я так и не увидел...
готовое решение, купленное в магазине- напрочь убивает желание заниматься творчеством, проще тогда всё покупать, следуя Вашей логике. А если кто не в теме, что это и зачем нужно- вот ссторонняя ссылка, там и видео есть( делаю подобное устройство)http://www.cnc-club.ru/forum/viewtopic.php?f=147&t=19734 там в каждый G-код добавляется хренова гора строк.....но зачем это нужно каждый раз писать
брат! Ты попал на мрачное состояние форумчан. ;) Конечно DC мотор прекрасно регулируется ШИМом, и вполне себе через полевик. Только код у тебя полное говно, но это можно поправить.
готовое решение, купленное в магазине- напрочь убивает желание заниматься творчеством, проще тогда всё покупать,
.....но зачем это нужно каждый раз писать
if
(digitalRead(pinGRBL)==HIGH) {
//если на входе сигнал от "дятла"
- тут остается тока гадать, что там за сигнал и с чем его ...
- ТС, мы же тут не ясновидящие, чтобы к нам с неба падали алгоритмы работы вашего станка
//if(state) {//не вдуплил нах оно тут нужно
-вот уже подозреваю, что это состояние старт или работа
сигнал от " дятла" это тупо логическая 1- включить шпиндель(дятел- это плата станка woodpecker)
готовое решение, купленное в магазине- напрочь убивает желание заниматься творчеством
А готовое решение, выклянченное на форуме - наоборот, способствует творческому росту!
Попробуйте так. из за отсутствия библилтеки - не прверял
код рабочий, только всё вместе не работает, вот тут и прошу помочь, разобраться с кодом, указать на косяки, готовое решение никто не будет писать под конкретную задачу
vosara ,щас попробую запустить
Ну понятие что такое рабочий код , что говнокод, а что простое гавно индивидуально.
Рассказывать Вам про цифровой автомат и решение через него- зачем. Это же придушит ваше "творчество" на корню.
в коде включается реле потому, что у меня при плавном запуске прогресс бар ничего не отображает, только при управлении с кнопок
т а если шпиндель вращается, там что 0 ?
нет, там "0" только когда приходит команда выключить шпиндель. пришлось извращаться с реле, ибо не пойму как это совместно запустить
не отображает так что с того, зачем отображать?
можете понизить стартовые обороты, выставить их не макс, а средние, а потом уже рулить ручками.
непонятно, зачем создавать себе проблему на ровном месте
судя по коду, двигатель на разгон должн выходить около 1,5 сек и из-за этого нужно городить огород?
ну, не умею я писать красивые коды, не умею.....хотелось и плавный старт и регулировку с отображением процесса, не используя разные там хитрые микросхемы и промышленные решения. изначально задумка была с энкодером, но там вообще тёмный лес с этими прерываниями и портами
Попробуйте так. из за отсутствия библилтеки - не прверял
Спасибо за поправку-попробовал, работает,отображается и движок пускается, только быстро....
понял в чём была моя ошибка, надо было везде использовать ранее объявленные переменные i и speedMot, а не создавать новые, INPUT_PULLUP я не ставил у себя, потому что подтяжка уже внешними резисторами на портах.
стал на вывод ШИМ осциллографом, там уровень резко возрастает при подаче управляющего сигнала, вручную- там именно шим, но без управляющего сигнала, не работает. Как сделать if(digitalRead(pinGRBL)==HIGH) {//если на входе сигнал от "дятла"- необязательным условием запуска? ибо контроллер в цикле ждёт пока не появится этот сигнал, и соответственно ничё не работает
стал на вывод ШИМ осциллографом, там уровень резко возрастает при подаче управляющего сигнала, вручную- там именно шим, но без управляющего сигнала, не работает. Как сделать if(digitalRead(pinGRBL)==HIGH) {//если на входе сигнал от "дятла"- необязательным условием запуска? ибо контроллер в цикле ждёт пока не появится этот сигнал, и соответственно ничё не работает
А ты в ручном режиме хочешь без контроллера тоже управлять? Я не понял.
иногда бывает нужно, без запуска G-кода, включить движок
стал на вывод ШИМ осциллографом, там уровень резко возрастает при подаче управляющего сигнала, вручную- там именно шим, но без управляющего сигнала, не работает. Как сделать if(digitalRead(pinGRBL)==HIGH) {//если на входе сигнал от "дятла"- необязательным условием запуска? ибо контроллер в цикле ждёт пока не появится этот сигнал, и соответственно ничё не работает
Ну, дык, алгоритм писать, аднака.
Ну, дык, алгоритм писать, аднака.
ну дык он написан, ток кривой, как .......
ну дык он написан, ток кривой, как .......
Не, уважаемый, написана кривая программа, а алгоритм как раз не написан. Алгоритм - это, в идеале, такая схема с квадратиками и ромбиками, а также связи между ними. Ромбик - "дятел стукнул?" -ДА -НЕТ, на ДА прямоугольник "Включаем реле, включаем ШИМ" и т.д.
иногда бывает нужно, без запуска G-кода, включить движок
Тогда вот:
Тут, если сигнал от контроллера пропал, значение мощности остается на месте для ручного изменения и если появился - тоже, расти начнет с того же места, где была в момент включения "дятла", как ты его назвал.
Если во время автоматического роста нажать + или -, то система перейдет в ручной режимне, не перейдет, это от старого осталось. ;)))
Сейчас подправил, должен работать правильно. Пробуйте и анализируйте
Он, либо есть, либо нет. Кривого алгоритма не бывает, бывает поток сознания. А значит, этот поток надо переделать в алгоритм, исключив все неопределенности.
P/S Пока корябал, уже ответили.
спасибо, буду пробовать и анализировать
Я так понял что ручное управление выполняется только когда станок уже запущен, а если надо в выключеном состоянии запустить ручное то надо немного подправить код. Пишите
стал на вывод ШИМ осциллографом, там уровень резко возрастает при подаче управляющего сигнала, вручную- там именно шим.
попробуйте для себя составить блоксхему алгоритма работы, все состояния системы в ней отразить. ИМХО. вы пока не представляете всей логики, которая вам нужна, а если бы представляли попытались бы впихнуть ее в код.
напишите кусок кода с плавным разгоном и торможением до установленого потенциометром значения, что бы при старте не рвал с места, а плавно набирал. Используйсте какой-нибудь таймер, ну на край делей.
(из-за делей будут проблемы с кнопками)
Вам бы разделить вашу задачу на части, и научиться писать код (понимать что пишете) для каждого элемента.
Тут, если сигнал от контроллера пропал, значение мощности остается на месте для ручного изменения и если появился - тоже, расти начнет с того же места, где была в момент включения "дятла", как ты его назвал.
не совсем. Пропадание сигнала-обязательное выключение движка, включение может быть и автоматом плавно и с кнопок вручную, а выключение всегда - иначе будет авария
Тут, если сигнал от контроллера пропал, значение мощности остается на месте для ручного изменения и если появился - тоже, расти начнет с того же места, где была в момент включения "дятла", как ты его назвал.
не совсем. Пропадание сигнала-обязательное выключение движка, включение может быть и автоматом плавно и с кнопок вручную, а выключение всегда - иначе будет авария
запрограммировать можно хоть чорта лысого, но это противоречит желанию управлять вручную.
Если сигнала от контроллера нет, то движок остановлен, так? И как эта ситуация алгоритмически отличается от простого желания управлять руками?
Есть варианты: например прошло время, или дополнительная кнопка, или еще что-то, но нужно определить, чем ситуации различны.
Вот такой вариант поведения.
1. Если из выключенного состояния мотор запущен руками, то система не реагирует на сигнал от "дятла", пока скорость не выставлена в НОЛЬ;
2. Если мотор запущен в автомате от "дятла", то, даже если скорость изменить руками, при выключении "дятла" мотор остановится.
Вроде все, как ты хотел?
спасибо , отлично!, переформатили полностью мой код, теперь работает как хотелось, ток ничё не пойму, что за что отвечает?
Перед сном увидел. Сейчас отвечу, если еще что, то завтра. Я старый больной человек. ;))) Мне еще час на кислороде перед сном лежать.
Да, ты угадал. x>>4 то же самое, что и x/16. Но 256/16=16. Это вместо map().
255 - код символа "черный квадрат", который ты зачем-то пытался сделать пользовательский. Он и так есть в стандартном знакогенераторе китайского экрана, да и нашего МЭЛТ тоже.
Да, уже совсем почти ушел, но нужно скзать, что мотором, типовым ардуиновским ШИМом - плохо управлять - гудит. 20 КГц - не обязательно, но 8-10 - было бы позитивно. Если не найдешь сам правильную библиотеку, то тут, на форуме, есть от ЕвгенияП ШИМ на любых частотах. Если и это не найдешь, я тебе завтра покажу, как это делать.
И силовой Мосфет драйвером рули. Это микросхема такая, Гугли "драйвер нижнего плеча MOSFET". Иначе при высокой частоте ШИМ, он греться начнет.
я себе собрал генератор DDS на ардуино, с этого форума, офигенный аппарат