Управление скоростью вращения шагового двигателя кнопками.
Управление скоростью вращения шагового двигателя кнопками.
Добрый вечер.
Пытаюсь реализовать такую идею - Шаговый двигатель вращается в одну сторону постоянно, при помощи кнопок нужно менять скорость вращения. ШД для того, чтобы скорость была небольшой 2-20 оборота в минуту, при том стабильной.
Проект содержит 28ВYJ-48 с драйвером ULN2003, 2 кнопки, блок 7-сегментных индикаторов на TM1637. Индикатор - по сути показометр, для понимания скорости вращения в попугаях.
Беда в том что по отдельности все работает - кнопками управляется счетчик, значение корректно отображается на показометре, но стоит в схему включить ШД, все встает колом. Счетчик не считает, двигатель не крутиться вовсе.
Пробовал всякие варианты включения,не помогает. Думал тока не хватает, но если параллельно включить ШД, не создавая связь, а указав напрямую скорость вращения ШД - все крутится все мигает.
Кроме того пробовал вместо кнопок генератор - все шикарно, генератор начитает генерировать, счетчик считать, двигатель ускоряться.
Стоит начать пробовать управлять генератором, включив в схему кнопку - (в разных вариантах) все перестает работать.
Пробовал исключать индикатор вовсе, либо данные наблюдал в serial port, не помогает. Как только кнопки и ШД каким либо образом соединены - все перестает работать.
Для понимания часть моих эквилибров в приложенном файле. Примечаний не писал, так вроде все понятно.
Платы все разом не компелируются, нужно по одной включать.
Помогите, а?! Или ткните ссылкой где давно все обсосано, сам не нашел! Неделю форум курил!
Пытаюсь реализовать такую идею - Шаговый двигатель вращается в одну сторону постоянно, при помощи кнопок нужно менять скорость вращения. ШД для того, чтобы скорость была небольшой 2-20 оборота в минуту, при том стабильной.
Проект содержит 28ВYJ-48 с драйвером ULN2003, 2 кнопки, блок 7-сегментных индикаторов на TM1637. Индикатор - по сути показометр, для понимания скорости вращения в попугаях.
Беда в том что по отдельности все работает - кнопками управляется счетчик, значение корректно отображается на показометре, но стоит в схему включить ШД, все встает колом. Счетчик не считает, двигатель не крутиться вовсе.
Пробовал всякие варианты включения,не помогает. Думал тока не хватает, но если параллельно включить ШД, не создавая связь, а указав напрямую скорость вращения ШД - все крутится все мигает.
Кроме того пробовал вместо кнопок генератор - все шикарно, генератор начитает генерировать, счетчик считать, двигатель ускоряться.
Стоит начать пробовать управлять генератором, включив в схему кнопку - (в разных вариантах) все перестает работать.
Пробовал исключать индикатор вовсе, либо данные наблюдал в serial port, не помогает. Как только кнопки и ШД каким либо образом соединены - все перестает работать.
Для понимания часть моих эквилибров в приложенном файле. Примечаний не писал, так вроде все понятно.
Платы все разом не компелируются, нужно по одной включать.
Помогите, а?! Или ткните ссылкой где давно все обсосано, сам не нашел! Неделю форум курил!
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- Сержант
- Сообщения: 129
- Зарегистрирован: 11 сен 2015, 20:58
- Имя: Панаётис
Управление скоростью вращения шагового двигателя кнопками.
Николай обрати внимание какой полярности подаёшь на входы 5 и 6, раз они у тебя подтянуты?
Отправлено спустя 4 минуты 34 секунды:
И поставь блок прохождения по переднему сигналу на входах. наружную подтяжку поставь, сними инверсию на входах так же
Отправлено спустя 4 минуты 34 секунды:
И поставь блок прохождения по переднему сигналу на входах. наружную подтяжку поставь, сними инверсию на входах так же
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Управление скоростью вращения шагового двигателя кнопками.
Ну как я и думал так и получилось.Panagiotis писал(а): 20 янв 2019, 21:01Николай обрати внимание какой полярности подаёшь на входы 5 и 6, раз они у тебя подтянуты?
1. Не работает.
2. Убираем подтяжку имеем - антенну - а как следствие не контролируемое переключение.
3. Меняем параметры входа - подтягиваем к земле - убираем инверсию - имеем тоже что с инверсией и подтяжкой к плюсу.
Извини дорогой Панаётис, но эта твоя идея не сработала. Есть еще идеи?
Результат тот же - убираем связь в flprog - при том что оставляем гальваническую - и все работает, с любым исполнением кнопок.
Но скорость не регулируем. Как только подключаем в flprog - все тухнет. Кнопки не кнопят, ШД не ШДит.
- eugeneb
- Лейтенант
- Сообщения: 486
- Зарегистрирован: 15 авг 2016, 11:20
- Откуда: Нижний Новгород
- Имя: Евгений
- Благодарил (а): 1 раз
Управление скоростью вращения шагового двигателя кнопками.
Надо схему...
С уважением,
Евгений Бобков
Евгений Бобков
- rw6cm
- Полковник
- Сообщения: 2372
- Зарегистрирован: 06 сен 2015, 20:25
- Имя: Владимир
- Поблагодарили: 41 раз
Управление скоростью вращения шагового двигателя кнопками.
Проблема в совместимости шагового с блоком 1637, быстрей всего придется делать индивидуальный подход для этих блоков.
Win10-64, FLProg (portable)
Управление скоростью вращения шагового двигателя кнопками.
Я тоже так думал. Исключал показометр из схемы. Но он ни как не влияет.rw6cm писал(а): 21 янв 2019, 15:59Проблема в совместимости шагового с блоком 1637, быстрей всего придется делать индивидуальный подход для этих блоков.
Пробовал UART, брал данные из разных точек. Но несовместимость между кнопками в любом исполнении и ШД.
[spoiler]
Пробовал Кнопки счетчик данные в UART, Все работает. Как тока ШД в схему включаю - все тухнет. Данные не идут. Если вместо кнопок включаю генератор - все работает. [/spoiler]
Схема всяких моих инсинуаций - приложена.
Добавил комментарии в названии плат. Все платы отключены нужно включать по одной.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
- rw6cm
- Полковник
- Сообщения: 2372
- Зарегистрирован: 06 сен 2015, 20:25
- Имя: Владимир
- Поблагодарили: 41 раз
Управление скоростью вращения шагового двигателя кнопками.
[ref]Matafon[/ref],
в таких схемах надо разруливать очень тщательно, чтобы одно другому не мешало
в таких схемах надо разруливать очень тщательно, чтобы одно другому не мешало
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Win10-64, FLProg (portable)
Управление скоростью вращения шагового двигателя кнопками.
Спасибо!
Схемка заработала, цыфирь меняется, скорость меняется. Есть одно НО. При достижении "0" перестает реагировать на кнопки. "Больше" не делается.
Тут мне интуитивно понятно, но знаний глубоких нет!rw6cm писал(а): 21 янв 2019, 22:01в таких схемах надо разруливать очень тщательно, чтобы одно другому не мешало
Схемка заработала, цыфирь меняется, скорость меняется. Есть одно НО. При достижении "0" перестает реагировать на кнопки. "Больше" не делается.
- rw6cm
- Полковник
- Сообщения: 2372
- Зарегистрирован: 06 сен 2015, 20:25
- Имя: Владимир
- Поблагодарили: 41 раз
Управление скоростью вращения шагового двигателя кнопками.
Да, не учел ) надо было вместо детектора числа брать сигнал с кнопок через ИЛИ.
Но можно и так только добавить условие отключения ШД при ноле.
А чтобы не было следующего вопроса, "почему двигатель при 0 остается под питанием" добавил блок отключения.
Описание Здесь
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Win10-64, FLProg (portable)
Управление скоростью вращения шагового двигателя кнопками.
Огромное спасибо!
Все работает!
Хоть в моем проекте не надо ШД стоять, но все же заодно разобрался как и где библиотеку поменять, вырос среди себя!
Все работает!




Хоть в моем проекте не надо ШД стоять, но все же заодно разобрался как и где библиотеку поменять, вырос среди себя!
-
- Сержант
- Сообщения: 129
- Зарегистрирован: 11 сен 2015, 20:58
- Имя: Панаётис
Управление скоростью вращения шагового двигателя кнопками.
Извиняюсь если не на столько внятно написал! наружную подтяжку поставь. А более внимательно можно было прочитать? Не в коем случае я не ссылаюсь знатоком я тоже новичок в этом деле. Как выше написанном Вами работает в варианте с генератором! Обратите внимание на то что Вы нам написали. Кроме того пробовал вместо кнопок генератор - все шикарно, генератор начитает генерировать, счетчик считать, двигатель ускоряться.
- rw6cm
- Полковник
- Сообщения: 2372
- Зарегистрирован: 06 сен 2015, 20:25
- Имя: Владимир
- Поблагодарили: 41 раз
Управление скоростью вращения шагового двигателя кнопками.
В данном случае это не играет роли.
Здесь алгоритм старта ШД с нулевой скоростью, в нем программа входит в бесконечный цикл ожидания записи в порт ШД,
в этот момент она не может слушать прием с других портов (кнопок),
а кроме кнопок, другого условия выхода из цикла нет (В схеме с генератором он является условием). Вот и получается висяк

Достаточно поставить условия исключающее работу ШД при ноле, и все будет работать.
[spoiler] [/spoiler]
[ref]Matafon[/ref],
Если не надо полное отключение схему можно упростить.
[spoiler] [/spoiler]
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Win10-64, FLProg (portable)
Управление скоростью вращения шагового двигателя кнопками.
Дорогой Panagiotis!Panagiotis писал(а): 23 янв 2019, 19:50наружную подтяжку поставь. А более внимательно можно было прочитать?
Ты чего, обиделся что ли? Это зря. Тут же дискуссия! И не смотря на то что все используют одинаковые термины, все понимают их немного по разному, по тому что мыслят по разному! Тем, на мой взгляд и отличаются люди от микроконтроллеров. И это хорошо! Не держи на меня зла, я не хотел ни кого обидеть!
По внешней подтяжке я мыслил так (возможно ошибаюсь) - при внутренней подтяжке на входе высокий уровень(1) когда нажимаем кнопку, уровень становится низким ( 0). Символ инверсия все меняет до наоборот, при нажатой кнопке на - входе 1. При внешней подтяжке -на входе 0 и при нажатии кнопки на входе 1. Таким образом нет разницы, так как при нажатии кнопки на входе 1! Возможно я ошибаюсь.
Кроме того я взял и попробовал, так как сомневался в своих умозаключениях, в результате получил подтверждение в того о чем догадывался.
Таким образом, я не сразу начал "умничать" в ответе тебе, а начал умничать по результатам эксперимента.


Тем не менее идея твоя была для меня свежей и воодушевила, не страшно что не получилось. Как говориться - отрицательный результат тоже результат.
С наилучшими пожеланиями!
Отправлено спустя 51 минуту 46 секунд:
Спасибо rw6cm !
Если честно но я попробовал это сделать первым делом. Как мне показалось, с отключенной опцией остановки двигателя, на малых оборотах ШД грелся. Может показалось но я вернул все как было. Вещь полезная.
Есть вопрос из не понятого - что "дает выполнение по условию" платы с показометром?
Я пробовал и время задержки таймера менять и "тупо" включить в схему разницы не заметил. Можешь растолковать?
Управление скоростью вращения шагового двигателя кнопками.
Просто как в пословице - "...виновата невестка..." Это подальшая поддержка выдвинутой гипотезы-Matafon писал(а): 26 янв 2019, 08:38Есть вопрос из не понятого - что "дает выполнение по условию" платы с показометром?
В блоке TM1637 есть такая строка- if ((DataIn != preData) || (dpByte != pre_dpByte) || (Bright != Brightness)) { единожды выполняется код блока, если данные изменились} , такой себе детектор изменения данных. Это-же делает Ув. [ref=#ff8000]rw6cm[/ref], на плате, но уже вне блока, при этом отключая ШД. При этом приоритет выполнения ТМ1637 остается выше приоритета ШД благодаря RS -триггеру. От чего уходили к тому вернулись. Но как говорится : [spoiler title= "...если всё работает"] [/spoiler] - к чему эта вся болтовня?rw6cm писал(а): 21 янв 2019, 15:59Проблема в совместимости шагового с блоком 1637, быстрей всего придется делать индивидуальный подход для этих блоков.

У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось Labu559 26 янв 2019, 10:29, всего редактировалось 1 раз.
Управление скоростью вращения шагового двигателя кнопками.
Labu559 Спасибо.
У меня сложилось впечатление что я понял, приблизительно.
В конечном итоге схема стала такой. Еще раз спасибо rw6cm !
[spoiler] [/spoiler]
У меня сложилось впечатление что я понял, приблизительно.

В конечном итоге схема стала такой. Еще раз спасибо rw6cm !
[spoiler] [/spoiler]
У вас нет необходимых прав для просмотра вложений в этом сообщении.
- rw6cm
- Полковник
- Сообщения: 2372
- Зарегистрирован: 06 сен 2015, 20:25
- Имя: Владимир
- Поблагодарили: 41 раз
Управление скоростью вращения шагового двигателя кнопками.
И у вас все хорошо работает? ))
Попытаюсь объяснить и [ref]Matafon[/ref], и [ref]Labu559[/ref],
[spoiler]
Есть понятие "цикл" и есть девайсы сильно от него зависящие, и ШД как раз к ним относится,
и есть девайсы, которые программно, или своей инертностью, увеличивают этот цикл, (UART, I2C, ModBus, использование delay, итд),
и 1637 не исключение. Так вот такие девайсы надо развязывать работой в циклах, иначе не чего хорошего не выйдет.
Василий, то что вы дописали выполнять по изменению, не запрещает обновлять данные дисплея каждый цикл, что и происходит.
У меня же обращение к дисплею идет один цикл (или 1мс если использовать таймер) и только при изменении нужных данных.
Это разные вещи). Можно и без таймера, но в тяжелых проектах, с большим количеством инфы (допустим на 2004 дисплеях)
не успевает за цикл обрабатываться вся инфа. Чтобы много не писать приведу пример из которого все станет ясно.
В примере 2сек ШД работает по "вашему" 2сек по "мойму"
[ref]Matafon[/ref], Вот и сравните разницу. [spoiler title=для Labu559]
Василий не в обиду, измените в настройке блока названия. Все таки SDA, SCL и DIO, CLK хоть по смыслу похожи,
но все же совершенно разные вещи, SDA, SCL привязаны жестко к железу и не подлежат изменению (если только больше одного порта I2C)
Учитывая что у меня нет и не было 1637, пришлось лезть в библиотеку чтобы понять что же это на самом деле.
Сам допускаю часто ляписы, где по невнимательности где по незнанию, думаю вы меня поймете.
[/spoiler]
[/spoiler]
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Управление скоростью вращения шагового двигателя кнопками.
Сравнил.
Так и так работает.
В моей схеме как будто мотор "троит" или зубья в редукторе все повыламывались....
двухсекундный пример позволил сравнить когда "в одной руке одно а в другой другое". Визуально не заметно, а когда в руках моторчик, сильно есть разница.

- rw6cm
- Полковник
- Сообщения: 2372
- Зарегистрирован: 06 сен 2015, 20:25
- Имя: Владимир
- Поблагодарили: 41 раз
Управление скоростью вращения шагового двигателя кнопками.
Не знаю что у вас за шд, (быстрей всего питаете от юсб через нанку, и ШД не хватает питания нормально раскрутится)Matafon писал(а): 26 янв 2019, 12:33В моей схеме как будто мотор "троит" или зубья в редукторе все повыламывались....
Визуально не заметно,
но на 28byj-48 с отдельным питанием даже на глаз видна серьезная разница.
Видео
Win10-64, FLProg (portable)
Управление скоростью вращения шагового двигателя кнопками.
Спасибо, вполне осознаю, что могу ошибаться. Потому принимаю все Ваши доводы как надлежащее, и очень рад, что поиск истины на нашем форуме не переходит в область у кого длиннее... Надеюсь, что наш диалог будет взаимополезным и приятным. [spoiler title=Для начала сделаю лирическое отступление или немножко флуда.]
Увы, почти так но...rw6cm писал(а): 26 янв 2019, 11:32измените в настройке блока названия. Все таки SDA, SCL и DIO, CLK хоть по смыслу похожи, но все же совершенно разные вещи, SDA, SCL привязаны жестко к железу и не подлежат изменению
Serial DAta и SerialCLock жёстко привязаны к запатентованому фирмой Philips Semiconductors интерфейсу связи между интегральными схемами Inter-Integrated Circuit ( IIC ), которую любители «профессионального» сленга обозвали I2C, а любители не платить роялти правообладателю патента, обозвали своими 2Wire, TwoWire, TWI.
Выводы своих устройств сама Philips (NXP) называет в соответствии со стандартом. Сторонние производители называют по- стороннему от стандарта- DataIn/Out, CLocK.
В случае TM1637D4beta6 - соблюдена терминология автора этого сообщения, с которого (первого рабочего скетча) я начинал незабываемое путешествие в мир ТМ-ов.

В финальном блоке TM1637LabUW мне уже никто «не мешал обозвать» по Datasheet.
Вот ещё один пример из той же оперы, от которого нам должно стать веселее жить. комментарии правда лишние? [/spoiler]
Уважаемый Владимир, со всем, что Вы сказали я полностью и безоговорочно согласен а вот с реализацией.... Разберём по-подробней?rw6cm писал(а): 26 янв 2019, 11:32...Так вот такие девайсы надо развязывать работой в циклах, иначе не чего хорошего не выйдет.
Василий, то что вы дописали...
То, что я дописал (детектор изменения данных) как раз и запрещает выполнение тяжёлого кода обработки данных String и перезагрузки 97-байтовой таблицы знакогенератора ASCII из флэш в оперативную память МК в каждом цикле ф-и Loop(). Два детектора одних данных, но в разных типах Integer и String, и управлением одним и тем же блоком кардинально повлияют на ситуацию?
Я же изобразил диаграму состояний Входов/Выходов (I/O) на рисунке под спойлером в Вашем проекте. Так вот во временном интервале зелёного цвета разрешена одновременная работа и дисплея и ШД интервалом 500мсек (задержка отключения таймера) состояние Вх/Вых HT-HighTimer, а в синем интервале запрещена тоже обоим до срабатывания детектора, красный интервал- сработал детектор и разрешил диплей и после 1 цикла (сработал приоритетный сброс триггера)разрешил ШД (смотрим порядок компиляции блоков, нумерацию). Но даже если интервал будет, как наверное задумывалось, разницей между сбросом триггера и срабатыванием таймера (взводом триггера) и разрешением на работу дисплея до конца текущего цикла (или 1мсек , которой не увидел в проекте), а ШД как в настройках таймера 500мсек (если я правильно понял Вашу идею как планировалось управлять), то на это же время действует разрешение выполнения платы с дисплеем, а за счёт сброса триггера и последующего взведения ШД получит даже меньше времени на выполнение. Но и это не всё. Ни единственный цикл Loop() ни 1 мс не помешает выполняться коду дисплея, если ему понадобится больше выделеного на это время. Ведь таймер запустил отсчёт этой самой милисекунды (записал своё текущее состояние, т.е. выполнил начальную надлежащую часть своего кода) , передал право выполняться остальному коду и покорно ждёт своей очереди, чтобы сравнить своё состояние с данными ф-и millis()которая получает от хардового таймера МК (который уже независимый от кода) и отключить дисплей. А эта очередь может прийти когда угодно, через 10 мксек или через 100 мсек , в зависимости от скорости выполнения остального кода, в том числе и дисплея, который получил разрешение от нашего софтового таймера-блока и забил на всех, пока не выполнит свой код, до следующего цикла Loop и получения или неполучения нового разрешения на выполнение. И следующий цикл Loop не наступит, пока не закончится текущий цикл. Прерывания не предусмотрены, операторы GoTo тоже, а значит всё идёт от начала до конца и отмена действия или смена сценария выполнения произойдёт в следующем цикле Loop().rw6cm писал(а): 26 янв 2019, 11:32У меня же обращение к дисплею идет один цикл (или 1мс если использовать таймер
Конечно эта вся моя мышиная возня не имеет никакого смысла, так как решение похоже найдено, при этом с Вашей помощью. Извините за потраченное время.
С уважением Lab_U55!
У вас нет необходимых прав для просмотра вложений в этом сообщении.
- rw6cm
- Полковник
- Сообщения: 2372
- Зарегистрирован: 06 сен 2015, 20:25
- Имя: Владимир
- Поблагодарили: 41 раз
Управление скоростью вращения шагового двигателя кнопками.
[ref]Labu559[/ref],
[spoiler title=немножко флуда]
Но рас мы пользуемся этим сленгом, зачем вводить еще и в нем путаницу, не проще назвать вещи своими именами?
А вообще дело Ваше, просто посоветовал.
(в моих первых блоках названия были еще хуже, спустя время сам теперь гадаю, что я имел в виду в этих названиях )))
[/spoiler]
Что касаемо таймера уже писал, в данном случае он не нужен, в начале были сомнения , т.к не было такой матрицы, но когда понял что
блок 1637 вносит только задержки, а вешает нулевая скорость ШД, лишнее отбросил.
Что касаемо подробного разбора "полета" Вы заблуждаетесь )
[spoiler]
Мне не получится объяснить доходчиво, т.к не владею терминологией языка Си.
Могу дополнить в свое первое обращение к Вам:
Пример: Согласно вашей теории не должно быть разницы, но по факту она огромна.
А там сами решайте... [/spoiler]
[spoiler title=немножко флуда]
Не спорю что ноги растут из одного места)Labu559 писал(а): 26 янв 2019, 19:47Serial DAta и SerialCLock жёстко привязаны к запатентованому фирмой Philips Semiconductors интерфейсу связи между интегральными схемами Inter-Integrated Circuit ( IIC ), которую любители «профессионального» сленга обозвали I2C, а любители не платить роялти правообладателю патента, обозвали своими 2Wire, TwoWire, TWI.
Но рас мы пользуемся этим сленгом, зачем вводить еще и в нем путаницу, не проще назвать вещи своими именами?
А вообще дело Ваше, просто посоветовал.
(в моих первых блоках названия были еще хуже, спустя время сам теперь гадаю, что я имел в виду в этих названиях )))
[/spoiler]
Что касаемо таймера уже писал, в данном случае он не нужен, в начале были сомнения , т.к не было такой матрицы, но когда понял что
блок 1637 вносит только задержки, а вешает нулевая скорость ШД, лишнее отбросил.
Что касаемо подробного разбора "полета" Вы заблуждаетесь )
[spoiler]
Мне не получится объяснить доходчиво, т.к не владею терминологией языка Си.
Могу дополнить в свое первое обращение к Вам:
Чтобы блок работал один цикл, if должен быть снаружи блока а не внутриrw6cm писал(а): 26 янв 2019, 11:32Василий, то что вы дописали выполнять по изменению, не запрещает обновлять данные дисплея каждый цикл,
Пример: Согласно вашей теории не должно быть разницы, но по факту она огромна.
А там сами решайте... [/spoiler]
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Win10-64, FLProg (portable)
Кто сейчас на конференции
Сейчас этот форум просматривают: grin-mpx и 1 гость