Nik_Rihkov 0 6 февраля, 2006 Опубликовано 6 февраля, 2006 · Жалоба Этот алгоритм который я приводил в самом начале работает с перебоями, я проверял длительность импульсов на 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);), какое минимальное значение задержки можно задать с использованием Sleep() ? Если можно приведите пример своих алгоритмов по работе с ШД ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tanya 4 7 февраля, 2006 Опубликовано 7 февраля, 2006 · Жалоба 2 VslavX Большое спасибо за ответ. Да, с равноускоренным разгоном я ошибся. Сейчас прикинул на бумажке, действительно если нагрузка инертная, при постоянной мощности - паузы должны менятся как обратный квадратный корень. А если как в нашем случае - с постоянным напряжением и наличием индуктивности обмоток то как обратный кубический корень. Оба вроде бы должны быстро вычислятся с помощью сложения-умножения. Со стабильностью шагов, думаю проблем не возникнет - планируем поставить ПЛИС с такт. частотой 100МГц, и тогда никаких прерываний, загруженных процессоров и т.п. :) А вот вы написали про синхронизацию шагов со скоростью - это как? Вообще - как можно отслеживать вращение? т.е. нужно делать какой-то механический энкодер, или можно просто смотреть на какой-нибудь сдвиг тока по фазе? По поводу постоянной мощности на валу. Это правильно не всегда. Вот при малой скорости мощность ограничивается максимальной силой (током) в обмотке. Поэтому при небольших скоростях получается сам собой режим постоянного ускорения. А под синхронизацией автор подразумевал, наверное, зависимость ускорения от текущей скорости. Иными словами - ускорение x скорость = const Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VslavX 0 7 февраля, 2006 Опубликовано 7 февраля, 2006 · Жалоба А вот вы написали про синхронизацию шагов со скоростью - это как? Когда-то давно я "для себя" принял модель ШД в виде этакого линейного ускорителя заряженных частиц. То есть полюс сердечника ("частица") последовательно проходит полюса статора ("кольца ускорителя"). И полюса статора должны менять фазу синхронно с прохождением сердечника, чтобы получилось ускорение. Поскольку расстояние между полюсами одинаковое, то чем быстрее движется сердечник, тем чаще надо изменять фазу. Вот и все что я имел ввиду под синхронизацией - длительность шага должна быть обратно пропорциональна текущей скорости. Вообще - как можно отслеживать вращение? т.е. нужно делать какой-то механический энкодер, или можно просто смотреть на какой-нибудь сдвиг тока по фазе? Отслеживать, конечно, можно (правда практически мне этого делать не приходилось). Но ШД хороши именно тем что если вы соблюдаете режимы, то всегда можно точно (+-люфт) сказать положение двигателя. Посмотрите, например, любой ударный или струйный принтер Epson - головки обычно на ШД-приводе и только один датчик (иногда - два) крайнего положения. И при печати и смене направления движения головы эти датчики далеко не на каждый проход задействуются (потому как - время надо тратить - скорость печати упадет) - то есть точность позиционирования сохраняется и достаточно высокая - 150-300dpi по крайней мере). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VslavX 0 7 февраля, 2006 Опубликовано 7 февраля, 2006 · Жалоба По поводу постоянной мощности на валу. Это правильно не всегда. Вот при малой скорости мощность ограничивается максимальной силой (током) в обмотке. Поэтому при небольших скоростях получается сам собой режим постоянного ускорения. Конечно не всегда. Это очень приблизительная аппроксимация и много чего не учитывает - например, рост механического сопротивления сил трения с ростом скорости. А если ток с самого начала (в покое) ограничивается омическим сопротивлением обмоток - то ни о какой стабилизации тока и режиме постоянной мощности речи не идет. У нас "в режиме разгона при постоянной мощности" типовая ситуация - 8..12 вольтовый двигатель запитывается через мост с чоппером, который питается от 40..50V, и тогда все нормально - ток ограничивается именно стабилизатором. Да еще этот ток стабилизатора обычно управляется, минимум две-три ступени "удержание-номинал-взлетный режим", так что получается быстро, экономично и двигатели не греются. Правда, чипы управления обычно дорогие ($3-$10), так что такие схемы применяются не всегда. Вообще, в последнее время, "нормальные" производители механизмов, которые номинально предполагают разгон (а не старт-стоп с места) прикладывают таблички разгона-торможения - если интересно - через недельку (как пойду на работу) могу закинуть такую табличку изменения шагов в процентах от номинала при разгоне. Там разгон до скоростей раза в 4 превышающих старт-стопные (хотя, это, конечно, зависит от двигателя/нагрузки). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
defunct 0 8 февраля, 2006 Опубликовано 8 февраля, 2006 · Жалоба какое минимальное значение задержки можно задать с использованием Sleep() ? Sleep() - 1ms минимальная не гарантированная задержка. В Windows она может затянуться на несколько минут, т.к. в системе есть потоки с более высоким приоритетом чем поток вашей программы. На время тестирования закрывайте все приложения. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nik_Rihkov 0 8 февраля, 2006 Опубликовано 8 февраля, 2006 · Жалоба Sleep() - 1ms минимальная не гарантированная задержка. В Windows она может затянуться на несколько минут, т.к. в системе есть потоки с более высоким приоритетом чем поток вашей программы. Вся проблема заключается именно в этом, самая малая (ощутимая) задержка 15мс , а если поставить 1мс то результат тот же что и при 15мс. Как задать более меньшую задержку, есть другие способы ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BVU 0 8 февраля, 2006 Опубликовано 8 февраля, 2006 · Жалоба Возможно полезна будет ссылка: http://kazus.ru/shemes/showpage/0/843/1.html Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VslavX 0 8 февраля, 2006 Опубликовано 8 февраля, 2006 · Жалоба Sleep() - 1ms минимальная не гарантированная задержка. В Windows она может затянуться на несколько минут, т.к. в системе есть потоки с более высоким приоритетом чем поток вашей программы. Вся проблема заключается именно в этом, самая малая (ощутимая) задержка 15мс , а если поставить 1мс то результат тот же что и при 15мс. Как задать более меньшую задержку, есть другие способы ? Можно использовать функцию QueryPerformanceCounter. В приложении - исходники простых функций задержек на указанное число милли- и микросекунд для Win32 и VC6. Единственное что - Win32 - вытесняющая многозадачность, поэтому функции гарантируют только что пройдет _минимум_ указанного времени. Несколько повышает точность измерения интервалов поднятие приоритета потока. Но вообще, если Вам надо точно управлять ШД, то про Win32 лучше забыть. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nik_Rihkov 0 10 февраля, 2006 Опубликовано 10 февраля, 2006 · Жалоба Уважаемый "VslavX" вы присоеденили бытый архив! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VslavX 0 11 февраля, 2006 Опубликовано 11 февраля, 2006 (изменено) · Жалоба Уважаемый "VslavX" вы присоеденили бытый архив! Да вроде бы - нормальный архив. Только что скачал и без проблем распаковал на другом компьютере (не на том с которого отправлял). Winrar - версия 3.0. Ну держите тогда в развернутом виде. (При copy/paste в текст сообщения (как из Far так и VC) чего-то кракозяблятся русские комментарии :( - так что снова попробую аттач) Любопытно, что файл с расширением ".c" почему-то приаттачить не получается - переименовал в ".txt", получилось. Сплошные глюки, однако :( Изменено 11 февраля, 2006 пользователем VslavX Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dronT78 0 12 февраля, 2006 Опубликовано 12 февраля, 2006 (изменено) · Жалоба По поводу точности управления 1. Sleep согласно Posix определяет что задержка не может быть меньше указаного значения, но может быть сколь угодно больше :) 2. Windows не Posix-совместимая система так что дела еще хуже 3. Есть интересная статья Разгон и торможение Windows NT 4. QueryPerformanceCounter прекрасная весчь как раз показывает реальное время выполнения Sleep - на APIC ядрах задержки кратны 15мс, при выключенном APIC - 10мс 5. Тестовый код для таймера можно утянуть здесь И не забудьте что даже если поток один - он все равно переключается раз в 15 (10?) мсек и когда включится дальше - знает только Bill Gates :) P.S. Есть однако попытки противостоять злобным буржуям Будут успехи - пишите! Изменено 12 февраля, 2006 пользователем dronT78 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
INT1 0 13 февраля, 2006 Опубликовано 13 февраля, 2006 (изменено) · Жалоба Динамические х-стики ШД от FLМ для различных режимов можно посмотреть на сайте производителя: http://www.fullingmotor.com/ есть полезная инф. на : http://www.electroprivod.ru Изменено 13 февраля, 2006 пользователем INT1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dronT78 0 14 февраля, 2006 Опубликовано 14 февраля, 2006 (изменено) · Жалоба Поглядите еще связку timeBeginPeriod timeEndPeriod Минимальное значение разрешающей способности 1 мс реально - зависит от операционки и определяется через timeGetDevCaps High Precision Event Timers поддерживаются только в XP Вот ссылка на Microsoft У меня более менее правильные результаты показывает при установке timeBeginPeriod(1) начиная с 3 мсек (Sleep(3)) с погрешностью до 1 мсек в большую сторону при тестах на AMD Athlon 64 3700+ WinXP SP2 и отсутствии загрузки другими процессами Изменено 14 февраля, 2006 пользователем dronT78 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Stanley 0 9 марта, 2006 Опубликовано 9 марта, 2006 · Жалоба на самом деле Тут еще можно посмотреть полезную инфу по шаговым двигателям....переодически добавляют что-то новое! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться