forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   C++ (http://forum.boolean.name/forumdisplay.php?f=22)
-   -   Как заставить шаговый двигатель шагать (http://forum.boolean.name/showthread.php?t=20546)

Phantom 29.01.2017 05:57

Как заставить шаговый двигатель шагать
 
Булка, помоги. Подключил шаговый двигатель к AVR. Подаю в цикле по очереди напряжение на каждую из четырёх катушек (блок питания 12V 2A), но шагает как-то не очень уверенно. Может нужно подавать сигнал как-то хитрее? Например, питать по две соседних катушки одновременно, таким образом получится восемь состояний, а не четыре. Заодно предложите варианты, куда его можно применить, чтобы зря не валялся.



Ах да, почему тема в С++? Ну потому что раздела для электронщиков нет. Но зато у меня есть для вас КОД:

PHP код:

int main(void) {
  
  
PORTC &= ~((<< 0) | (<< 1) | (<< 2) | (<< 3));
  
DDRC |= ((<< 0) | (<< 1) | (<< 2) | (<< 3));
  
  while (
1) {
    
PORTC &= ~(<< 0);
    
PORTC |= (<< 1);
    
_delay_ms(10);
    
PORTC &= ~(<< 1);
    
PORTC |= (<< 2);
    
_delay_ms(10);
    
PORTC &= ~(<< 2);
    
PORTC |= (<< 3);
    
_delay_ms(10);
    
PORTC &= ~(<< 3);
    
PORTC |= (<< 0);
    
_delay_ms(10);
  }
  


А ещё, подскажите, какая у подобных двигателей предельная скорость?

RegIon 29.01.2017 10:25

Ответ: Как заставить шаговый двигатель шагать
 
Они иногда включаются блоками по 2,


Но первый вариант у тебя не проканает, так как двигатель униполярный
А иногда по хитрой схеме:
http://vt-tech.eu/articles/cnc/50-stepper-motors.html
А можешь юзать библиотеку, ну или роглядеть на нее. http://iarduino.ru/file/148.html

mr.DIMAS 29.01.2017 15:51

Ответ: Как заставить шаговый двигатель шагать
 
2Phantom
Ты правильно фазы подключил? Может одну фазу перепутал и вал вроде вращается, но как-то "неуверенно" именно из-за этого. И еще - у тебя для управления стоят полевики вроде, и вот если это обычный полевик (например IRFZ44N) то у них напряжение полного открывания около 15 В, ему просто не хватает 5 В от микроконтроллера для полного открывания. В таком случае применяют транзисторы с суффиксом L - IRFL014 например - они имеют напряжение открывания 5 В и сделаны как раз для управления с МК.

У шаговиков без стабилизации тока в обмотке максимальная частота шагов 1600 Гц (но сильно падает крутящий момент). На частотах выше 1000 Гц, применяют стабилизацию тока в обмотках, т.к. ток не успевает нарасти до максимального значения из-за конечной индуктивности обмотки - из-за этого двигатель может пропускать шаги.

Phantom 29.01.2017 19:25

Ответ: Как заставить шаговый двигатель шагать
 
В общем-то зря всех взбаламутил, всё работает, даже пальцами остановить не могу. Оказывается, я случайно пятью вольтами вместо двенадцати запитал. При слишком малых задержках между тактами около 1 мс не вращается, только жужжит.

Пробовал ещё управлять восемью состояниями:

PHP код:

int main(void) {
  
  
PORTC &= ~((<< 0) | (<< 1) | (<< 2) | (<< 3));
  
DDRC |= ((<< 0) | (<< 1) | (<< 2) | (<< 3));
  
  while (
1) {
    
PORTC &= ~(<< 0);
    
_delay_ms(2);
    
PORTC |= (<< 2);
    
_delay_ms(2);
    
PORTC &= ~(<< 1);
    
_delay_ms(2);
    
PORTC |= (<< 3);
    
_delay_ms(2);
    
PORTC &= ~(<< 2);
    
_delay_ms(2);
    
PORTC |= (<< 0);
    
_delay_ms(2);
    
PORTC &= ~(<< 3);
    
_delay_ms(2);
    
PORTC |= (<< 1);
    
_delay_ms(2);
  }



Вот то же самое на картинке:



Так вообще мягонько так идёт, аж насмотреться и наслушаться не могу!

Транзисторы взяты с материнки: P0903BDG. Чо-то глянул сейчас даташит, а там параметр Gate Threshold Voltage максимум 3V. Что он означает? Что на гейт нельзя подавать больше трёх вольт? Или, что от трёх вольт он гарантировано открывается? Я их всегда пятью вольтами открывал, пока ни один не сгорел. У меня почему-то в голове отложилось, что его пятью вольтами открывать надо, а сейчас смотрю и не понимаю.

mr.DIMAS 29.01.2017 21:40

Ответ: Как заставить шаговый двигатель шагать
 
Вложений: 2
Смотреть нужно сюда

Тут каждая кривая дана для своего напряжения между затвором и истоком, как видишь при 5 вольтах максимальный ток ограничен 90 А что означает что транзистор полностью открыт т.к. максимальный ток у него 50 А. Следовательно транзистору подходит управление от 5 В - что логично - он ведь с материнки снят.

Теперь смотрим например зависимость для распространенного IRFZ44N.

У него при 5 В ток ограничен 7 А при максимальном 49 А. Следовательно транзистор не открывается полностью, полное открывание происходит при напряжении на затворе от 10 до 15 В. Поэтому этому транзистору не подходит управление от микроконтроллера.

Я сам с этим часто сталкивался - вроде берешь мощный транзистор - дергаешь его через мк - а он, собака, греется как печка - сразу понятно что он работает в линейном режиме, повышаешь напряжение на затворе и все! транзистор холодный.

Цитата:

Что на гейт нельзя подавать больше трёх вольт?
Можно. Смотри на Vgs - там максимум +-20 В. Выше подашь - транзистор можно будет выбрасывать.

Threshold voltage это другое - https://en.wikipedia.org/wiki/Threshold_voltage
Вкратце это такое напряжение, при котором в канал между стоком и истоком инжектируется достаточное количество электронов, для начала протекания тока.

Phantom 29.01.2017 22:13

Ответ: Как заставить шаговый двигатель шагать
 
Всё, понял. Давно не лазил по даташитам на транзисторы. Значит правильно отложилось в голове, год назад их выпаивал с материнки, тогда и разбирался с их параметрами.

Теперь главный вопрос: Что можно на нём интересного запилить? Может насадить на него фотоаппарат и сделать приблуду, которая снимает круговые панорамы?

Mr_F_ 29.01.2017 23:43

Ответ: Как заставить шаговый двигатель шагать
 
Цитата:

сделать приблуду, которая снимает круговые панорамы?
mr. Dimas мне уже запилил как-то раз)

mr.DIMAS 29.01.2017 23:43

Ответ: Как заставить шаговый двигатель шагать
 
2Mr_F_
Что ты делаешь, прикрати :-D

2Phantom
Докупи еще 2 движка и сделай трехосевой фрезеровочный станок. Или докупи еще один и сделай самодельный плоттер для рисования маркером. moka руку роботизированную делал, помнится.

Phantom 30.01.2017 00:02

Ответ: Как заставить шаговый двигатель шагать
 
Цитата:

Сообщение от Mr_F_ (Сообщение 311612)
mr. Dimas мне уже запилил как-то раз)

ЛОЛ, а я думал, что придумал ноу-хау, а оказывается люди уже это сделали давно. :-D

Цитата:

Сообщение от mr.DIMAS (Сообщение 311613)
Докупи еще 2 движка и сделай трехосевой фрезеровочный станок. Или докупи еще один и сделай самодельный плоттер для рисования маркером. moka руку роботизированную делал, помнится.

Да вроде незачем это всё, да и времени займёт дофига. Надо подумать ещё.

Phantom 30.01.2017 01:32

Ответ: Как заставить шаговый двигатель шагать
 
А это нормально, что двигатель нагревается так, что на нём можно яйца жарить?

impersonalis 30.01.2017 01:57

Ответ: Как заставить шаговый двигатель шагать
 
Цитата:

Сообщение от mr.DIMAS (Сообщение 311610)
Смотреть нужно сюда

Как током дёрнуло. Вспомнил как писал курсач по электронике (лет 10 назад) и по миллиметровочке ползал по подобным графикам :rolleyes: Нифига уже не помню :mad:

mr.DIMAS 30.01.2017 02:07

Ответ: Как заставить шаговый двигатель шагать
 
Цитата:

А это нормально, что двигатель нагревается так, что на нём можно яйца жарить?
Неа, смотри в даташите максимально допустимый ток через фазу. Само собой реальный ток не должен превышать максимально допустимого, это кстати вторая причина почему стоит использовать стабилизаторы тока для питания ШД.

Evgen 30.01.2017 09:37

Ответ: Как заставить шаговый двигатель шагать
 
Думаю такой движок можно и через Lm293d крутить, главное чтобы ток и напряжение не выходили за пределы. Макс напряжение до 36 вольт, ток 0,4А на канал. Через транзисторы мне кажется это не путь для начинающих.

Phantom 30.01.2017 20:31

Ответ: Как заставить шаговый двигатель шагать
 
Цитата:

Сообщение от Evgen (Сообщение 311620)
Думаю такой движок можно и через Lm293d крутить, главное чтобы ток и напряжение не выходили за пределы. Макс напряжение до 36 вольт, ток 0,4А на канал. Через транзисторы мне кажется это не путь для начинающих.

Да я б не сказал, что я новичок. Правда с шаговым двигателем впервые имею дело.

Заменил все четыре вывода на восьмибитный ШИМ, использовав два таймера AVR с синхронным запуском. Таким образом появились следующие возможности:
1) можно уменьшить мощность, чтобы уменьшить нагрев;
2) можно дробить целые шаги не только на половинчатые, но и на меньшие.

Пробовал шагать по 1/32, 1/16, 1/8 и 1/4 шагов. Работает, но не чётко, чётко встаёт только в целые и половинчатые шаги. Наверняка это можно было понять, почитав теорию и даташит на двигатель, но пощупать руками и посмотреть глазами - это ж другое дело. :-D Кстати сказать, вроде бы я искал даташит на этот двигатель в прошлом году и не нашёл. Он из принтера, бумагу протягивал.

Кроме прочего, чтобы сохранить импульс, но снизить при этом мощность, я применил следующий подход: при каждом шаге уровень ШИМ на нужных выходах сначала выставляю на максимальный уровень, а спустя две миллисекунды убавляю вдвое. Мне кажется, так чётче шагает. На низких оборотах нагрев заметно спал, но всё равно тёплый. На высоких оборотах понятное дело всё равно будет нагреваться, потому что на отдых остаётся меньше времени.

Упомяну лишний раз, что пока мои потуги носят исключительно экспериментальный характер, поэтому претензии на изобретение колеса не принимаю. ;)

Phantom 30.01.2017 23:06

Ответ: Как заставить шаговый двигатель шагать
 
Кажись понял, почему двигатель в микрошаговом режиме не чётко шагает. Нужно формулу синуса применить, а я линейно уровень между соседними катушками меняю. Надо переделать и попробовать посмотреть что получится.


Часовой пояс GMT +4, время: 18:47.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot