Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > C++

Ответ
 
Опции темы
Старый 29.01.2017, 05:57   #1
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Как заставить шаговый двигатель шагать

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



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

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);
  }
  

А ещё, подскажите, какая у подобных двигателей предельная скорость?
(Offline)
 
Ответить с цитированием
Старый 29.01.2017, 10:25   #2
RegIon
Элита
 
Аватар для RegIon
 
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,157
Написано 502 полезных сообщений
(для 1,012 пользователей)
Ответ: Как заставить шаговый двигатель шагать

Они иногда включаются блоками по 2,


Но первый вариант у тебя не проканает, так как двигатель униполярный
А иногда по хитрой схеме:
http://vt-tech.eu/articles/cnc/50-stepper-motors.html
А можешь юзать библиотеку, ну или роглядеть на нее. http://iarduino.ru/file/148.html
__________________
Сайт: http://iexpo.ml
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Phantom (29.01.2017)
Старый 29.01.2017, 15:51   #3
mr.DIMAS
Дэвелопер
 
Аватар для mr.DIMAS
 
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений
(для 1,540 пользователей)
Ответ: Как заставить шаговый двигатель шагать

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

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

(Offline)
 
Ответить с цитированием
Эти 3 пользователя(ей) сказали Спасибо mr.DIMAS за это полезное сообщение:
Phantom (29.01.2017), St_AnGer (29.01.2017), Жека (29.01.2017)
Старый 29.01.2017, 19:25   #4
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Ответ: Как заставить шаговый двигатель шагать

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

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

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. Что он означает? Что на гейт нельзя подавать больше трёх вольт? Или, что от трёх вольт он гарантировано открывается? Я их всегда пятью вольтами открывал, пока ни один не сгорел. У меня почему-то в голове отложилось, что его пятью вольтами открывать надо, а сейчас смотрю и не понимаю.
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо Phantom за это полезное сообщение:
Артем Валерьевич (01.02.2017), mr.DIMAS (29.01.2017)
Старый 29.01.2017, 21:40   #5
mr.DIMAS
Дэвелопер
 
Аватар для mr.DIMAS
 
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений
(для 1,540 пользователей)
Ответ: Как заставить шаговый двигатель шагать

Смотреть нужно сюда

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

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

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

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

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

Threshold voltage это другое - https://en.wikipedia.org/wiki/Threshold_voltage
Вкратце это такое напряжение, при котором в канал между стоком и истоком инжектируется достаточное количество электронов, для начала протекания тока.
Миниатюры
Нажмите на изображение для увеличения
Название: Снимок.JPG
Просмотров: 1214
Размер:	30.5 Кб
ID:	22631  Нажмите на изображение для увеличения
Название: 2.JPG
Просмотров: 1214
Размер:	40.9 Кб
ID:	22632  
__________________

(Offline)
 
Ответить с цитированием
Эти 3 пользователя(ей) сказали Спасибо mr.DIMAS за это полезное сообщение:
impersonalis (30.01.2017), Phantom (29.01.2017), St_AnGer (29.01.2017)
Старый 29.01.2017, 22:13   #6
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Ответ: Как заставить шаговый двигатель шагать

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

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

Последний раз редактировалось Phantom, 29.01.2017 в 23:15.
(Offline)
 
Ответить с цитированием
Старый 29.01.2017, 23:43   #7
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: Как заставить шаговый двигатель шагать

сделать приблуду, которая снимает круговые панорамы?
mr. Dimas мне уже запилил как-то раз)
__________________
бложик | geom.io | твиттер | faded | демо 1 2 | роботы | лайтмаппер
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо Mr_F_ за это полезное сообщение:
Phantom (30.01.2017), St_AnGer (30.01.2017)
Старый 29.01.2017, 23:43   #8
mr.DIMAS
Дэвелопер
 
Аватар для mr.DIMAS
 
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений
(для 1,540 пользователей)
Ответ: Как заставить шаговый двигатель шагать

2Mr_F_
Что ты делаешь, прикрати

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

(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо mr.DIMAS за это полезное сообщение:
Phantom (30.01.2017), St_AnGer (30.01.2017)
Старый 30.01.2017, 00:02   #9
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Ответ: Как заставить шаговый двигатель шагать

Сообщение от Mr_F_ Посмотреть сообщение
mr. Dimas мне уже запилил как-то раз)
ЛОЛ, а я думал, что придумал ноу-хау, а оказывается люди уже это сделали давно.

Сообщение от mr.DIMAS Посмотреть сообщение
Докупи еще 2 движка и сделай трехосевой фрезеровочный станок. Или докупи еще один и сделай самодельный плоттер для рисования маркером. moka руку роботизированную делал, помнится.
Да вроде незачем это всё, да и времени займёт дофига. Надо подумать ещё.
(Offline)
 
Ответить с цитированием
Старый 30.01.2017, 01:32   #10
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Ответ: Как заставить шаговый двигатель шагать

А это нормально, что двигатель нагревается так, что на нём можно яйца жарить?
(Offline)
 
Ответить с цитированием
Старый 30.01.2017, 01:57   #11
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: Как заставить шаговый двигатель шагать

Сообщение от mr.DIMAS Посмотреть сообщение
Смотреть нужно сюда
Как током дёрнуло. Вспомнил как писал курсач по электронике (лет 10 назад) и по миллиметровочке ползал по подобным графикам Нифига уже не помню
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 30.01.2017, 02:07   #12
mr.DIMAS
Дэвелопер
 
Аватар для mr.DIMAS
 
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений
(для 1,540 пользователей)
Ответ: Как заставить шаговый двигатель шагать

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

(Offline)
 
Ответить с цитированием
Старый 30.01.2017, 09:37   #13
Evgen
Разработчик
 
Аватар для Evgen
 
Регистрация: 12.01.2011
Адрес: Moscow
Сообщений: 419
Написано 68 полезных сообщений
(для 100 пользователей)
Ответ: Как заставить шаговый двигатель шагать

Думаю такой движок можно и через Lm293d крутить, главное чтобы ток и напряжение не выходили за пределы. Макс напряжение до 36 вольт, ток 0,4А на канал. Через транзисторы мне кажется это не путь для начинающих.
(Offline)
 
Ответить с цитированием
Старый 30.01.2017, 20:31   #14
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Ответ: Как заставить шаговый двигатель шагать

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

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

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

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

Упомяну лишний раз, что пока мои потуги носят исключительно экспериментальный характер, поэтому претензии на изобретение колеса не принимаю.
(Offline)
 
Ответить с цитированием
Старый 30.01.2017, 23:06   #15
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Ответ: Как заставить шаговый двигатель шагать

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


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com