Управление шаговиками AF Motor и т.д.

Kislorof
Offline
Зарегистрирован: 30.10.2012

Собственно вот какие вопросы начали появляться - в принципе, шаговик шагает. Но тут вылезла куча вопросов:

1. Как управлять токами - т.е. где и как можно задать токи шаговика в режиме шага и в режиме удержания? 

2. стандартный мотор 1,8 градуса - 200 шагов. В режиме микрошага и шага получаем разные расстояния. В режиме шага 200 шагов это как и должно быть 360 градусов, в режиме микрошага - 360+45. Соответственно говорить о пропуске шагов не приходится т.к. это стабильно на разных скоростях повторяется. 

3. Разгон. Если плавно менять скорость - двигатель разгоняется всё равно не плавно, а рывками - т.е. если даже мы скорость увеличиваем на 1 постоянно, то обороты двигателя растут не пропорционально, а как ьы рывками. 

4. Максимальные обороты - опять же двигатель разгоняется как то не очень сильно даже с плавным разгоном.... 

maksim
Offline
Зарегистрирован: 12.02.2012

1. Нигде и никак, для этого есть драйвера шаговиков, которые могут регулировать ток.
2. Отсутствует вопрос.
3. Отсутствует вопрос. Воспользоваться поиском по сайту.
4. Отсутствует вопрос. Воспользоваться поиском по сайту.

AlexFisher
AlexFisher аватар
Offline
Зарегистрирован: 20.12.2011

Никак токи не регулируются. Если используется "правильный" драйвер (например на LM297+LM298 по полной схеме из даташита), то они могут ограничивать ток по заданному уровню. При желании, можно его задавать с ардуины, но нужно слегка доработать схему.

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

Kislorof
Offline
Зарегистрирован: 30.10.2012

В общем нашел засаду в AFStepper - там какая-то беда с режимом удержания, или в моём шилде - это и хочется выясить.

Суть опыта такая: гоняю по 20 шагов туда-сюда и смотрю что бы было идеальное совпадение. 

#include <AFMotor.h>
AF_Stepper motor(200, 2);

void setup() {
 motor.setSpeed(100);
}

void loop() {

  motor.step(200,FORWARD, SINGLE); 
delay(20);
  motor.step(200,BACKWARD, SINGLE);  

motor.release();
delay(1200);
}

В таком варианте совпадение 100%, но если убрать строку motor.release(); перед задержкой - т.е. оставить двигатель в режиме удержания - то начинает сбираться и уже не возвращается в исходную точку. Кто-то сталкивался с таким? Или у кого нибудь есть мысли почему такое получается?

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

AlexFisher
AlexFisher аватар
Offline
Зарегистрирован: 20.12.2011

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

Kislorof
Offline
Зарегистрирован: 30.10.2012

Ну с нагрузкой то конечно собьется, а так чего ему сбираться -  вдь целыми шагами шагаю.

AlexFisher
AlexFisher аватар
Offline
Зарегистрирован: 20.12.2011

Мотор сбивается за счет собственной намагниченности. Режим SINGLE соответствует полушаговому режиму (8 фаз), если не ошибаюсь, полный шаг - DOUBLE (4 фазы)

Kislorof
Offline
Зарегистрирован: 30.10.2012

В дабл тоже сбивается((((

AlexFisher
AlexFisher аватар
Offline
Зарегистрирован: 20.12.2011

На любых скоростях? Может он при старте сбивается? Пробовали библу по ссылке, которую я давал?