реклама на сайте
подробности

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Алгоритм управления шаговым двигателем ?
rihkov
сообщение Feb 6 2006, 19:52
Сообщение #16


Участник
*

Группа: Новичок
Сообщений: 52
Регистрация: 25-01-06
Пользователь №: 13 617



Этот алгоритм который я приводил в самом начале работает с перебоями, я проверял длительность импульсов на LPT логическим анализатором, и всё работает в разнобой, то один импульс длиннее других то два, и т.п.
Переделал вот так:

Код
while(a)
   {
      
       SetPortVal(0x378,1,1);
       Sleep(valstep);

       SetPortVal(0x378,2,1);
       Sleep(valstep);

       SetPortVal(0x378,4,1);
       Sleep(valstep);

       SetPortVal(0x378,8,1);
       Sleep(valstep);

   }


И установил режим порта в SPP , работает один к одному (тоесть все импульсы одинаковые), но теперь проблема с изминением частоты ( с задержкой Sleep(valstep)wink.gif, какое минимальное значение задержки можно задать с использованием Sleep() ?
Если можно приведите пример своих алгоритмов по работе с ШД ?
Go to the top of the page
 
+Quote Post
Tanya
сообщение Feb 7 2006, 08:21
Сообщение #17


Гуру
******

Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883



Цитата(ivan2006 @ Feb 6 2006, 22:43) *
2 VslavX
Большое спасибо за ответ.

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

Со стабильностью шагов, думаю проблем не возникнет - планируем поставить ПЛИС с такт. частотой 100МГц, и тогда никаких прерываний, загруженных процессоров и т.п. smile.gif

А вот вы написали про синхронизацию шагов со скоростью - это как?
Вообще - как можно отслеживать вращение? т.е. нужно делать какой-то механический энкодер, или можно просто смотреть на какой-нибудь сдвиг тока по фазе?

По поводу постоянной мощности на валу. Это правильно не всегда. Вот при малой скорости мощность ограничивается максимальной силой (током) в обмотке. Поэтому при небольших скоростях получается сам собой режим постоянного ускорения.
А под синхронизацией автор подразумевал, наверное, зависимость ускорения от текущей скорости. Иными словами - ускорение x скорость = const
Go to the top of the page
 
+Quote Post
VslavX
сообщение Feb 7 2006, 09:20
Сообщение #18


embarrassed systems engineer
*****

Группа: Свой
Сообщений: 1 083
Регистрация: 24-10-05
Из: Осокорки
Пользователь №: 10 038



Цитата(ivan2006 @ Feb 6 2006, 21:43) *
А вот вы написали про синхронизацию шагов со скоростью - это как?

Когда-то давно я "для себя" принял модель ШД в виде этакого линейного ускорителя заряженных частиц. То есть полюс сердечника ("частица") последовательно проходит полюса статора ("кольца ускорителя"). И полюса статора должны менять фазу синхронно с прохождением сердечника, чтобы получилось ускорение. Поскольку расстояние между полюсами одинаковое, то чем быстрее движется сердечник, тем чаще надо изменять фазу. Вот и все что я имел ввиду под синхронизацией - длительность шага должна быть обратно пропорциональна текущей скорости.

Цитата(ivan2006 @ Feb 6 2006, 21:43) *
Вообще - как можно отслеживать вращение? т.е. нужно делать какой-то механический энкодер, или можно просто смотреть на какой-нибудь сдвиг тока по фазе?

Отслеживать, конечно, можно (правда практически мне этого делать не приходилось). Но ШД хороши именно тем что если вы соблюдаете режимы, то всегда можно точно (+-люфт) сказать положение двигателя.
Посмотрите, например, любой ударный или струйный принтер Epson - головки обычно на ШД-приводе и только один датчик (иногда - два) крайнего положения. И при печати и смене направления движения головы эти датчики далеко не на каждый проход задействуются (потому как - время надо тратить - скорость печати упадет) - то есть точность позиционирования сохраняется и достаточно высокая - 150-300dpi по крайней мере).
Go to the top of the page
 
+Quote Post
VslavX
сообщение Feb 7 2006, 09:43
Сообщение #19


embarrassed systems engineer
*****

Группа: Свой
Сообщений: 1 083
Регистрация: 24-10-05
Из: Осокорки
Пользователь №: 10 038



Цитата(Tanya @ Feb 7 2006, 10:21) *
По поводу постоянной мощности на валу. Это правильно не всегда. Вот при малой скорости мощность ограничивается максимальной силой (током) в обмотке. Поэтому при небольших скоростях получается сам собой режим постоянного ускорения.

Конечно не всегда. Это очень приблизительная аппроксимация и много чего не учитывает - например, рост механического сопротивления сил трения с ростом скорости.
А если ток с самого начала (в покое) ограничивается омическим сопротивлением обмоток - то ни о какой стабилизации тока и режиме постоянной мощности речи не идет. У нас "в режиме разгона при постоянной мощности" типовая ситуация - 8..12 вольтовый двигатель запитывается через мост с чоппером, который питается от 40..50V, и тогда все нормально - ток ограничивается именно стабилизатором. Да еще этот ток стабилизатора обычно управляется, минимум две-три ступени "удержание-номинал-взлетный режим", так что получается быстро, экономично и двигатели не греются. Правда, чипы управления обычно дорогие ($3-$10), так что такие схемы применяются не всегда.
Вообще, в последнее время, "нормальные" производители механизмов, которые номинально предполагают разгон (а не старт-стоп с места) прикладывают таблички разгона-торможения - если интересно - через недельку (как пойду на работу) могу закинуть такую табличку изменения шагов в процентах от номинала при разгоне. Там разгон до скоростей раза в 4 превышающих старт-стопные
(хотя, это, конечно, зависит от двигателя/нагрузки).
Go to the top of the page
 
+Quote Post
defunct
сообщение Feb 8 2006, 00:03
Сообщение #20


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(rihkov @ Feb 6 2006, 21:52) *
какое минимальное значение задержки можно задать с использованием Sleep() ?


Sleep() - 1ms минимальная не гарантированная задержка. В Windows она может затянуться на несколько минут, т.к. в системе есть потоки с более высоким приоритетом чем поток вашей программы.
На время тестирования закрывайте все приложения.
Go to the top of the page
 
+Quote Post
rihkov
сообщение Feb 8 2006, 07:52
Сообщение #21


Участник
*

Группа: Новичок
Сообщений: 52
Регистрация: 25-01-06
Пользователь №: 13 617



Цитата
Sleep() - 1ms минимальная не гарантированная задержка. В Windows она может затянуться на несколько минут, т.к. в системе есть потоки с более высоким приоритетом чем поток вашей программы.


Вся проблема заключается именно в этом, самая малая (ощутимая) задержка 15мс , а если поставить 1мс то результат тот же что и при 15мс. Как задать более меньшую задержку, есть другие способы ?
Go to the top of the page
 
+Quote Post
BVU
сообщение Feb 8 2006, 07:57
Сообщение #22


Профессионал
*****

Группа: Свой
Сообщений: 1 301
Регистрация: 30-11-04
Из: Россия, Н.Новгород
Пользователь №: 1 264



Возможно полезна будет ссылка:
http://kazus.ru/shemes/showpage/0/843/1.html


--------------------
Не корысти ради, не в целях наживы, а во исполнение велений души!
Go to the top of the page
 
+Quote Post
VslavX
сообщение Feb 8 2006, 09:26
Сообщение #23


embarrassed systems engineer
*****

Группа: Свой
Сообщений: 1 083
Регистрация: 24-10-05
Из: Осокорки
Пользователь №: 10 038



Цитата(rihkov @ Feb 8 2006, 09:52) *
Цитата

Sleep() - 1ms минимальная не гарантированная задержка. В Windows она может затянуться на несколько минут, т.к. в системе есть потоки с более высоким приоритетом чем поток вашей программы.


Вся проблема заключается именно в этом, самая малая (ощутимая) задержка 15мс , а если поставить 1мс то результат тот же что и при 15мс. Как задать более меньшую задержку, есть другие способы ?

Можно использовать функцию QueryPerformanceCounter. В приложении - исходники простых функций задержек на указанное число милли- и микросекунд для Win32 и VC6. Единственное что - Win32 - вытесняющая многозадачность, поэтому функции гарантируют только что пройдет _минимум_ указанного времени. Несколько повышает точность измерения интервалов поднятие приоритета потока. Но вообще, если Вам надо точно управлять ШД, то про Win32 лучше забыть.
Go to the top of the page
 
+Quote Post
rihkov
сообщение Feb 10 2006, 20:05
Сообщение #24


Участник
*

Группа: Новичок
Сообщений: 52
Регистрация: 25-01-06
Пользователь №: 13 617



Уважаемый "VslavX" вы присоеденили бытый архив!
Go to the top of the page
 
+Quote Post
VslavX
сообщение Feb 11 2006, 09:19
Сообщение #25


embarrassed systems engineer
*****

Группа: Свой
Сообщений: 1 083
Регистрация: 24-10-05
Из: Осокорки
Пользователь №: 10 038



Цитата(rihkov @ Feb 10 2006, 22:05) *
Уважаемый "VslavX" вы присоеденили бытый архив!

Да вроде бы - нормальный архив. Только что скачал и без проблем распаковал на другом компьютере (не на том с которого отправлял). Winrar - версия 3.0.
Ну держите тогда в развернутом виде.
(При copy/paste в текст сообщения (как из Far так и VC) чего-то кракозяблятся русские комментарии sad.gif - так что снова попробую аттач) Любопытно, что файл с расширением ".c" почему-то приаттачить не получается - переименовал в ".txt", получилось. Сплошные глюки, однако sad.gif

Сообщение отредактировал VslavX - Feb 11 2006, 09:26
Go to the top of the page
 
+Quote Post
dronT78
сообщение Feb 12 2006, 17:04
Сообщение #26


Частый гость
**

Группа: Свой
Сообщений: 97
Регистрация: 19-11-05
Из: dront78@jabber.snc.ru
Пользователь №: 11 092



По поводу точности управления

1. Sleep согласно Posix определяет что задержка не может быть
меньше указаного значения, но может быть сколь угодно больше smile.gif

2. Windows не Posix-совместимая система так что дела еще хуже

3. Есть интересная статья Разгон и торможение Windows NT

4. QueryPerformanceCounter прекрасная весчь как раз показывает реальное время выполнения Sleep - на APIC ядрах задержки кратны 15мс, при выключенном APIC - 10мс

5. Тестовый код для таймера можно утянуть здесь

И не забудьте что даже если поток один - он все равно переключается раз в 15 (10?) мсек и когда включится дальше - знает только Bill Gates smile.gif

P.S. Есть однако попытки противостоять злобным буржуям

Будут успехи - пишите!

Сообщение отредактировал dronT78 - Feb 12 2006, 17:12


--------------------
Сколько волка не корми - слон все равно больше.
Go to the top of the page
 
+Quote Post
INT1
сообщение Feb 13 2006, 05:37
Сообщение #27


deleted
****

Группа: Свой
Сообщений: 555
Регистрация: 28-08-05
Пользователь №: 8 024



Динамические х-стики ШД от FLМ для различных режимов можно посмотреть на сайте производителя:
http://www.fullingmotor.com/
есть полезная инф. на :
http://www.electroprivod.ru

Сообщение отредактировал INT1 - Feb 13 2006, 05:55
Go to the top of the page
 
+Quote Post
dronT78
сообщение Feb 14 2006, 16:45
Сообщение #28


Частый гость
**

Группа: Свой
Сообщений: 97
Регистрация: 19-11-05
Из: dront78@jabber.snc.ru
Пользователь №: 11 092



Поглядите еще связку
timeBeginPeriod
timeEndPeriod
Минимальное значение разрешающей способности 1 мс
реально - зависит от операционки и определяется через timeGetDevCaps
High Precision Event Timers поддерживаются только в XP
Вот ссылка на Microsoft
У меня более менее правильные результаты показывает при установке
timeBeginPeriod(1) начиная с 3 мсек (Sleep(3)) с погрешностью до 1 мсек в большую сторону
при тестах на AMD Athlon 64 3700+ WinXP SP2 и отсутствии загрузки другими процессами

Сообщение отредактировал dronT78 - Feb 14 2006, 17:01


--------------------
Сколько волка не корми - слон все равно больше.
Go to the top of the page
 
+Quote Post
Stanley
сообщение Mar 9 2006, 09:21
Сообщение #29





Группа: Новичок
Сообщений: 3
Регистрация: 5-09-05
Пользователь №: 8 240



на самом деле Тут еще можно посмотреть полезную инфу по шаговым двигателям....переодически добавляют что-то новое!
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 21:03
Рейтинг@Mail.ru


Страница сгенерированна за 0.0164 секунд с 7
ELECTRONIX ©2004-2016