Шаговый двигатель: как посчитать сделанные шаги?

Vadim111
Offline
Зарегистрирован: 14.01.2015

Есть исполнительный механизм, который управляется шаговым двигателем. (допустим, это манипулятор робота)

Когда подается питание на всю конструкцию (и на управляющую Ардуину в том числе) то неизвестно, в каком положении находится этот манипулятор. Для того, чтобы узнать это в самом начале выполнения программы необходимо повернуть манипулятор в левое крайнее положение (до концевой кнопки), там произвести сброс некой переменной, а потом произвести поворот вправо (до другой концевой кнопки) и там записать новое значение переменной. Значением этой переменной должно быть количество шагов, которое сделал шаговик, проходя путь от левой кнопки до правой. В дальнейшем за позиционирование манипулятора будет отвечать число, которое находится в этом диапазоне. Но как можно посчитать количество сделанных шагов от одного события (сигнал от кнопки) до другого (сигнал от другой кнопки)? Смотрел стандартную библиотеку. Не нашел даже намека на подобную возможность.

Поделитесь хотя бы идеей, как это сделать. Может быть можно как-то иначе определить позицию манипулятора в момент подачи напряжения и не прибегать к концевым кнопкам?

(запись последнего положения манипулятора на флеш карту не совсем удобна: во-первых, потому что сложно, во-вторых, потому что нагромождает конструкцию ардуино шилдов и в-третьих, потому что питание робота может быть отключено аварийно безо всяких предварительных записей на карту)

 

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

 

Шаг=импульс,все просто! Когда делаете шаг,делаете 1 импульс ,дергаете ножку STEP драйвера;кто мешает сделать цикл while и инкрементом с каждым импульсом прибавлять к переменной значение?

//setup и т.п.
int steрs =0;
while(digitalRead(button) ==0){//пока кнопка не нажата
digitalWrite(STEP,HIGH);//один шаг
steps++
}

Как-то так

 

 

Michal
Michal аватар
Offline
Зарегистрирован: 26.04.2013

а инерцию исполнительного устройства вы конечно не учитываете. Это  я к тому, что при дальнейшем отслеживании координаты вашим методом расчетное положение не будет соответствовать фактическому. И ваш робот может двинуть когото по башке :)

хотя народ делает домашние станочки без обратной связи по положению. Количество импульсов на оборот задают и вперед :)

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

 

Инерцию отключить)гыг

Ограничители никто не отменял)

 

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Если шаговик не делает один шаг на один импульс- или это не шаговик или вы его перегрузили и не хватает мощьности или вы пытаетесь на нём быстро ехать, а он так быстор не умеет.

Michal
Michal аватар
Offline
Зарегистрирован: 26.04.2013

ну да, т.е вы гарантируете точное позиционирование без обратной связи по положению?

 

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

 

Хм...тогда щелевой фотопрерыватель и ленту для обратной связи)

 

vvadim
Offline
Зарегистрирован: 23.05.2012

Michal пишет:

ну да, т.е вы гарантируете точное позиционирование без обратной связи по положению?

 

 

Если нагрузки на шаговый двигатель не превышают его возможностей - то точное позиционирование.

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Michal пишет:

ну да, т.е вы гарантируете точное позиционирование без обратной связи по положению?

Да, именно так. А разные энкодеры ставят на серьёзную технику для контроля аварийных ситуаций. Как и концевики. А ходят всё равно по шагам.

mihailkorostele...
Offline
Зарегистрирован: 23.05.2013

Нужна обратная связь по фактическому положению исполнительного механизма! Чисто идея - на валу шагового двигателя установить энкодер.   

inspiritus
Offline
Зарегистрирован: 17.12.2012

 Энкодеры ставят на обычные движки , а у шагового двигателя Шаг есть точное перемещение, или ЭТо нельзя считать шаговиком .

"Нужна обратная связь по фактическому положению исполнительного механизма! Чисто идея - на валу шагового двигателя установить энкодер.   "  ----- МАСЛО МАСЛЯНОЕ!!!

 

vvadim
Offline
Зарегистрирован: 23.05.2012

там где пропуск шага является катастрофой - ставят.

mihailkorostele...
Offline
Зарегистрирован: 23.05.2013

inspiritus пишет:

 Энкодеры ставят на обычные движки , а у шагового двигателя Шаг есть точное перемещение, или ЭТо нельзя считать шаговиком 

Можно подобрать более "точный" энкодер, дающий несколько разрядов на один шаг шагового двигателя 

inspiritus
Offline
Зарегистрирован: 17.12.2012

Можно Что даст энкодер с точностью четверть шага, если точность позиционирования шаг?

inspiritus
Offline
Зарегистрирован: 17.12.2012

Короче хотите одевать презерватив на свечку одевайте :)

bwn
Offline
Зарегистрирован: 25.08.2014

trembo пишет:

Michal пишет:

ну да, т.е вы гарантируете точное позиционирование без обратной связи по положению?

Да, именно так. А разные энкодеры ставят на серьёзную технику для контроля аварийных ситуаций. Как и концевики. А ходят всё равно по шагам.

Все будет точно, пока шаловливые руки не покрутят в обесточенном состоянии (а они покрутят). Энкодер и запись в память  в этом случае вряд ли помогут. Вывод - в момент инициации отслеживать положение до концевого выключателя (дошли-вернулись) или изобретать что то резистивное.

bwn
Offline
Зарегистрирован: 25.08.2014

trembo пишет:

Michal пишет:

ну да, т.е вы гарантируете точное позиционирование без обратной связи по положению?

Да, именно так. А разные энкодеры ставят на серьёзную технику для контроля аварийных ситуаций. Как и концевики. А ходят всё равно по шагам.

Все будет точно, пока шаловливые руки не покрутят в обесточенном состоянии (а они покрутят). Энкодер и запись в память  в этом случае вряд ли помогут. Вывод - в момент инициации отслеживать положение до концевого выключателя (дошли-вернулись) или изобретать что то резистивное. Живой организм проснувшись, тоже ведь во времени и пространстве начинает определятся + манипуляторами двигать))))

inspiritus
Offline
Зарегистрирован: 17.12.2012

Естессенно калибровать "печку" потребуется обязательно. Вспомните старые матричные принтеры и их дыр дыр-дыр-дыр вначале , это и был поиск печки и обнуление счетчика шагов. На современных стоят коллекторные движки и энкодеры положения. Скорее дположение там вторично , скорее эта ленточка с микро-рисками синхронизация для головок. То есть голова едет со стабильной скоростью от конечника до конечника, а сопла плюются краской по синхроимпульсам от стробдатчика-линейного энкодера.

Vadim111
Offline
Зарегистрирован: 14.01.2015

Yarik.Yar пишет:

 

кто мешает сделать цикл while и инкрементом с каждым импульсом прибавлять к переменной значение?

//setup и т.п.
int steрs =0;
while(digitalRead(button) ==0){//пока кнопка не нажата
digitalWrite(STEP,HIGH);//один шаг
steps++
}

Как-то так

Как я сам не додумался?!!! Элементарно.

Всем большое спасибо.

Сверхточное позиционирование не требуется. Поэтому подсчет шагов вполне подойдет. Движок с понижающим редуктором с большим передаточным отношением, а нагрузка небольшая, поэтому выпадение импульсов маловероятно. Пока буду идти по этому пути.

 

Michal
Michal аватар
Offline
Зарегистрирован: 26.04.2013

ну если точное позиционирование нафиг не надо, то конечно без енкодера. У меня на заводе стояли координатки для сверления плат, так на них стояли шаговики и датчики по каждой оси.

Для однозначного вывода станка в координату ставят конечник. В зависимости от программного обеспечения станок по команде или вручную подходит к конечнику на быстром ходу. По нажатии на него вкл. медленная подача до схода с конечника. Вывод в "0 станка" считается законченым после получения первой "нулевой"  метки с енкодера.

По оси обычно ставят 5 конечников: 2 - концевики для электроавтоматики, аварийное отключение привода в +-, 2 - программное ограничение привода в +-, 1 - "ноль станка".