Pull to refresh

Comments 35

Попробуйте подтянуть enable до плюса питания, возможно дергается из-за того, что в момент включения все ноги МК находятся в Hi-z состоянии и ловят любую наводку. Еще у вас sleep и reset висит в воздухе.
Sleep и Reset заведены друг на друга, как и предлагается делать разработчиком (по инструкции).

По поводу поднять enable до плюса питания поясните пожалуйста? Двигатель «дергается» в случае, если питание на логику и на мотор подается одновременно. Если сначала поднять питание на логику, а через пару секунд на двигатель — все хорошо. Но это значит, что надо ставить реле, а этого делать не хотелось. Или есть другие варианты?

поднять до плюса, это значит подтянуть резистором. Чтобы там был надежный уровень когда выход контроллера «болтается в воздухе».
Ну как минимум в даташите Sleep подтянут резистором к земле. В вашем случае, если вы не планируете управлять Reset и Sleep с МК, нужно подтянут их резисторами порядка 10кОм к питанию. Дело в то, что это логические входы и если верить даташиту, там нет внутренних резисторов подтяжки. Значит любая наводка будет приводить к сбросу и/или засыпанию микросхемы.
Ну это диаграмма так, на поиграться. Для всех логических входов уровень должен быть задан по умолчанию. Лучше читать даташит, смотреть типовые схемы включения там. Только будте внимательны, там тоже могут накосячить. Если бы вы делали по дашатиту (т.е. притянули sleep к земле и подключили к МК), у вас бы тоже ничего не дергалось.

Подтянуть sleep к плюсу и управлять им с МК — тоже выход. Ничего дергаться не будет.
Не, не помогает :( Подтянул и Sleep, и Reset и Enable к плюсу через 10 кОм — результат нулевой. Попробовал к земле — то же самое. И по отдельности и вместе подтягивал, при старте двгатель ровно три раза делает шаг вперед — шаг назад.
В даташите, кстати, Sleep и так притянут к плюсу, только через 100 кОм. А Enable к земле.
Может что-то есть в даташите от самого A4988, но сходу никаких конкретных рекомендаций по этому поводу не нашел.
Может глупость спрошу, но моежт быть Step имеет смысл подтянуть?
Надо проверить код инициализации контроллера. Может он у вас кратковремеено дергает ногой, когда вы порты настраиваете. В атмельках легко на это попасться.

Sleep на приложенной схеме притянут к плюсу потому что там он так управляется с МК. Пока МК явно не опустит его вниз, драйвер будет спать. То же самое с Enable, пока контроллер его явно не поднимет — драйвер будет игнорировать управляющие сигналы.

Если же у вас Sleep не управляется с МК, то его надо подтянуть к земле, тогда драйвер никогда не будет засыпать. Если оставить его подтянутым з плюсу — то он всегда будет спать, и вы никак не сможет им управлять.

Step не имеет смысла подтягивать, если вы используете Enable и он у вас правильно работает. Пока вы не переведете Enable в активный режим, драйвер будет игнорировать сигналы на Step.

Поэтому, посмотрите всё-таки как вы инициализируете порты в МК. Возможно, вы записываете в регистр настройки в нексколько этапов, поэтому сначала пин переводится в output, а потом уже выставляется нужное значение. Или сначала вы настраиваете один пин, не обратив внимание что при записи байта в регистр, вы также перенастраиваете соседние пины.
По поводу инициализацйии — очень может быть, проверю. Скорее всего именно в этом дело, так как я сначала назанаю режимы всех пинов через pinMode(), а потом уже задаю уровни :(( Переделаю через обращение к порту.

По поводу управляющих сигналов — на сколько я могу судить по даташиту на А4988, все как раз наоборот (см. стр. 7 и 10). Для работы Sleep и Reset должны быть подняты, а Enable опущен. Видимо поэтому в даташите от Polulu и редлагается замыкать Sleep на Reset (который единственный болтается в воздухе). А Enable заведен на землю.
Так?
Да, я просто не обратил внимания, что эти все три управляющих линии инверсные.

Так что, да, для нормальной работы N_Sleep и N_Reset должны быть высокие, а N_Enable — низким. Соотвественно, если эти линии не управляются чем-то (например, МК), то они должны быть подтянуты к активным уровням. Если есть внешнее управление, то лучше что бы при запуске они были выключены, соотвествнно нужно их подтягивать к противоположным уровням.
Ага, хорошо. То есть, Sleep и Reset завожу через 10 кОм на землю и после инициализации поднимаю с МК, а Enable наоборот, завожу через 10 кОм на плюс и опускаю после инициализации, так?
Ну да, получается что так. Правда, использовать все три линии — это оверкилл, наверное.
Вполне допустимо оставить только Enable, например. Остальные просто оставить подтянутыми к плюсу.

Хотя, если есть лишние ноги на МК — то почему бы не порулить всеми тремя линиями. Только не забудьте, что после поднимания N_Sleep надо полождать милисекунду, пока зарядятся charge pump.

Enable наверное стоит опускать в самом конце инициализации, когда вы уже готовы управлять двигателем.
Все, разобрался… Больше не дергается. Ну что, двойка нам всем!!!
Столько времени потратили, а ответ оказался абсолютно скучным и не интересным :( Поражаюсь, почему я раньше то этого не заметил!
Не надо по возможности использовать 13-ый пин на Arduino Uno. На нем висит светодиод, которым ардуинка три раза моргает в процессе загрузки. И похоже происходит это все еще до того как код прошивки вообще получает управление. Step и Dir висят в воздухе, не инициализированы, там конечно шумы и наводки и в это время Ардуинка сама три раза дергает 13-ый пин. Вот и и получается дерганье. Даже если подтянуть Enable к плюсу. В процессе прошивки наблюдается тоже самое. Правильно рассужда?

В общем завел Enable на 3-й пин — все прекрасно! Тишина и покой.
Вероятно идея заземлить Step тоже сработала бы. Но сейчас уже лень все назад перепаивать.
С грустью в душе пошел собирать девайс и исправлять схему.
Да, назадача. Ну значит, минус в карму Arduino. Зачем тратить время на мигание при загрузке, надо сразу отдавать управление скетчу.
В таком случае подтяжка никак не поможет, управление светодиодом пересилит любую разумную подтяжку. Светодиодом arduino дергает еще на этапе загрузчика, и только после загрузчика начинает выполнятся код написаный вами.
Разумный выход один — перевесить на другой порт.

Ага, вижу, спасибо. В другом проекте пригодиться :)
Одно хочу заметить: микрошаги работают неточно. Всегда. Это надо учитывать.
В данном случае абсолютная точность позиционирования — совершенно не важна. Фокусировка — всегда процесс итерационный. Мало того, при разной температуре фокус будет разный. Удобно запоминать примерную позицию в шагах, это экономит время. Грубо говоря, мы имеем дело с системой с обратной связью, где эта самая связь осуществляется человеком. Пропустили микрошаг — ну шагнем еще раз.

В другом моем проекте, по механизации монтировки — точность позиционирования важна, но как показала практика — не она бутылочное горлышко, хотя там я использую моторы с редукторами, что дает около 33000 шагов на оборот в режиме 1/32 микрошага и обеспечивает достаточную точность. Но об этом позже, в другой статье.
А, разве там мотор нужен настолько мощный? Я вот видел в тепловентиляторе 5-вольтовый шаговый двигатель с редуктором. и он гораздо меньше размерами и потреблением.
У данного фокусера крутящий момент около 2 кг/см при комнатной температуре. Второй фокусер, который я мехнизировал крутиться на много легче — 0.5 кг/см. Там и моторчик пошел поменьше.
Для беспроводного пульта можно использовать копеечные NRF24L01, доступно, довольно просто. Дальности вполне хватает для таких целей. Посмотрите, полезная штука.
Посмотрел, спасибо. Цен особенно радует, из серии 3 штучи на десяточку :) Закажу.
Погоди-погоди, я еще только запрягаю :)

Ну вот например:
<img src="" alt=«image»/>
Ок, ждем продолжения )
Это кроп, или ресайз? ))
И то и дргуое. И ISO 800. И честно говоря — это превьюха. Труба не успела остыть, фокус на серии поплыл :(( А на вторую уже времени не хватило — стремительно рассветало.
Это называется стрельбой из пушки по воробьям!
Ладно бы, фокусер при помощи простой ПЗСки вычислял полуширины звезд и автоматом настраивался! А так — ардуйня безболезненно заменяется на генератор на 555-м чипе. И все довольны. Функционал совершенно такой же, а прошивать МК не нужно. И дешевле! И меньше паять!

P.S. чтобы двигатель не дергался при инициализации, EN драйвера надо явно подтягивать! А пока он болтается в воздухе, возможно все, что угодно!
1. Почему именно Ардуино — будет во второй части. Если можно, дайте ссылку на ваш вошлебный генератор.
2. Как показано на схеме от производителя, Enable заведен на землю. А Sleep на 5V. Болтается только RESET.
3. Полуширины звезд в городской застройке — вещь бесполезная. А в САО, КрАО, Хабле, Гайе и т.д. моеми потугами вряд ли заинтеруются :) Тогда уж вычислять угол между лучами маски Бахтинова. В любом случае для этого надо научиться управлять зеркалкой, обрабатывать снимки, идентифицировать зведы и уже потом вычислять полуширины. Ну то есть практически переписать BackyardEOS. То есть это вопрос не к решению, а к постановке задачи, а она была иной. Да и зачем это делать? Напишу ASCOM-драйвер, буду пользоваться готовыми решениями. Хотя честно признаться, энтузиазм малось поостыл. Фокусировка уже стала простым и быстрым дело, куда как более приятным, чем привязке к полярной оси.
3. Тьфу, не уголы между лучами конечно, а отклонение центрального луча. Не проснулся :)
Классная тема!

Про монтировку расскажите?
Спасибо! :)
Планирую, скорее всего сразу после нового года. Сейчас занимаюсь чисткой и оптимизацией. Задача оказалось на порядок (если не на два) сложнее и интереснее.
Sign up to leave a comment.

Articles