roboforum.ru

Технический форум по робототехнике.

 

Управление шаговиком.

Обсуждаем рождающиеся мысли и результаты экспериментов.

Управление шаговиком.

Сообщение P_Ruslan » 18 авг 2012, 19:16

Знаю, тема уже везде и всеми закрыта и дошла до логического конца, но немного подумал я почти случайно вывел формулу управления в полушаговом режиме униполярным шаговым двигателем.
Код: Выделить всёРазвернуть
0001
0011
0010
0110
0100
1100
1000
1001

Так? Прикинул что каждый НЕпарный шаг и меет суму следующего и предыдущего шага, а каждый парный увеличивается на 2^n. вкратце, Формула для однострочного кода переключения шагов.:
Код: Выделить всёРазвернуть
Nx=(2^(x/(деление без остачи)2))+(|x%(остача от деления)2-1|(2^(x/2-1))+x/8(количество полушагов цикла)

Все громоздко и не практично, но выгодно при точном позиционированию. Но все равно, волнует вопрос: формула для шаговика, простая и провереная, switch/case не предлагать.

Добавлено спустя 12 минут 53 секунды:
Nx=(2^(x/2))+(|x%2-1|(2^(x/2-1)))+x/8
Аватара пользователя
P_Ruslan
 
Сообщения: 94
Зарегистрирован: 12 июл 2011, 00:49
Откуда: Лебедин, Сумская обл. Украина
Skype: PoRuVl
прог. языки: Basic (VB, Blitz), Pascal, Delphi 7, C++
ФИО: Пономаренко Руслан Владимирович

Re: Управление шаговиком.

Сообщение ALS » 19 авг 2012, 03:24

а чего стесняетесь использовать вставки на ассемблере ?
для PIC-а это выглядит так

Код: Выделить всёРазвернуть
#asm
PIN_TABLE
   addwf   PCL,f
   retlw   b'00000001'
   retlw   b'00000011
   retlw   b'00000010
   retlw   b'00000110
   retlw   b'00000100
   retlw   b'00001100
   retlw   b'00001000
   retlw   b'00001001

//точка входа
   incf   step,f      //тут приращение шага на единицу
//   decf   step,f      //или, наоборот, его уменьшение
//чтение из таблицы соответствующего кода
   movf   step,w
   andlw   0x07
   call   PIN_TABLE
//... и вывод его в порт
   movwf   PORTB
#endasm

т.о получаем всего 12слов в памяти программ и НЕИМОВЕРНУЮ скорость выполнения
и без всякой хитровы*анной математики
Аватара пользователя
ALS
 
Сообщения: 443
Зарегистрирован: 24 окт 2011, 23:32
Откуда: Севастополь
прог. языки: асм

Re: Управление шаговиком.

Сообщение Dmitry__ » 19 авг 2012, 04:43

Я ваще нарушился с формулой для шаговика :crazy:
Если не понятно на асм (ALS, жестокий ты)

Код: Выделить всёРазвернуть
const u8 step[8] =
{ b'00000001',
  b'00000011',
  b'00000010',
  b'00000110',
  b'00000100',
  b'00001100',
  b'00001000',
  b'00001001'
};

void КрутимШаговик(void)
{
    u8 i;

    for (i = 0; i < 8; i++)
        Порт = step[i];
}



Код виртуальный, не помню где как бинарный тип записывается :pardon:
Аватара пользователя
Dmitry__
 
Сообщения: 6046
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Re: Управление шаговиком.

Сообщение P_Ruslan » 19 авг 2012, 20:23

Я как раз и ухожу от такого решения, я пишу на СВАВР для АВРок, да, можно сделать по всемирно извесному, всеми провереному методу, но мне как раз и хотелось бы сделать через формулу, я ж писал, что буду пытаться уйти от переключения режимов, тоесть не хочу видеть в коду готовый сигнал (b'00001001) а чтоб формула все выставляла. Знаю, не рационально и изобретаю велосипед, но хочу сделать именно формулу, мне нужно оптимизирова её.
Аватара пользователя
P_Ruslan
 
Сообщения: 94
Зарегистрирован: 12 июл 2011, 00:49
Откуда: Лебедин, Сумская обл. Украина
Skype: PoRuVl
прог. языки: Basic (VB, Blitz), Pascal, Delphi 7, C++
ФИО: Пономаренко Руслан Владимирович

Re: Управление шаговиком.

Сообщение Dmitry__ » 19 авг 2012, 20:59

Обьясни зачем? Академический интерес?
Если компилятор мега супер умный, то он сделает в результате таблицу.
А так это просто пипец что будет, разглядывая ассемблерный код: Nx=(2^(x/2))+(|x%2-1|(2^(x/2-1)))+x/8

Можно еще алгоритм гусеницы применить (сдвигающий регистр), чем не академ интерес? Одна константа и сдвигающий регистр.
Вообще, это больше комбинаторика чем алгебра.

Добавлено спустя 13 минут 3 секунды:
Ой, только сейчас заметил как ты управляешь шаговиком :shock:
Вообще-то в шаговом двигателе всегда 2 обмотки под током...
Т.е так тоже будет работать, но будет давать разное усилие, в зависимости от шага.
Аватара пользователя
Dmitry__
 
Сообщения: 6046
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Re: Управление шаговиком.

Сообщение cjA » 22 авг 2012, 08:51

Не тпутай человека, униполярник и биполярник- разные по смыслу моторы

Добавлено спустя 55 секунд:
от фазы
cjA
 
Сообщения: 468
Зарегистрирован: 19 мар 2010, 20:11

Re: Управление шаговиком.

Сообщение Dmitry__ » 22 авг 2012, 12:18

cjA писал(а):Не тпутай человека, униполярник и биполярник- разные по смыслу моторы

По смыслу они совершенно одинаковые моторы.
В униполярном проще драйвер и все, создавать токи в полюсах мотора надо точно такие же как и в биполярном. Устройство двигателей одинаковое. Разное только намотка.
Четырехобмоточный двигатель превращается в любой тип (униполярный/биполярный) простым переключением обмоток :pardon:
http://electroprivod.ru/bipolar.htm
А вот токи в шаговом двигателе надо создавать так:
forum16/topic11317-15.html#p236257 :)

Добавлено спустя 18 минут 9 секунд:
Вообще, табличка переключения обмоток из первого поста - бред какой-то
Хоть по поисковику и нахожу такие таблички в инете, с названием режима - полушаговый.
Как бы не располагались фазы униполярника a,b,c,d в этой табличке, получается что на два конца одной обмотки двигателя (при определенной комбинации) подается одновременно напряжение. Т.к. в униполярнике 2 обмотки одной фазы намотаны в противоположные стороны, то создаваемые магнитные поля в этих обмотках компенсируют друг друга.
Или надо идти спать :pardon:

Добавлено спустя 9 минут 48 секунд:
опс, табличка не бред, если фазы: a c b d , то нормально :oops:
Аватара пользователя
Dmitry__
 
Сообщения: 6046
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург


Вернуться в Идеи

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5

Mail.ru counter