This shows you the differences between two versions of the page.
| ru:examples:motor:stepper [2010/12/26 19:54] – создано eduardtlmk | ru:examples:motor:stepper [Unknown date] (current) – removed - external edit (Unknown date) 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== Шаговый двигатель ====== | ||
| - | // | ||
| - | |||
| - | ===== Теория ===== | ||
| - | |||
| - | [{{ : | ||
| - | |||
| - | Шаговые двигатели широко применяются в приложениях, | ||
| - | |||
| - | * С переменным магнитным сопротивлением (высокая точность, | ||
| - | * С постоянным магнитом (низкая точность, | ||
| - | * Гибридный (высокая точность, | ||
| - | |||
| - | У шаговых двигателей с переменным магнитным сопротивлением зубчатые обмотки и зубчатый ротор из железа. Максимальная сила тяги возникает при перекрытии зубьев обоих сторон. В шаговых двигателях с постоянным магнитом, | ||
| - | |||
| - | Независимо от модели шагового двигателя для создания одного полного оборота вала (360 градусов) требуется сотня коммутационных шагов. Для обеспечения стабильного и плавного движения используют подходящую управляющую электронику, | ||
| - | |||
| - | ~~PB~~ | ||
| - | |||
| - | **Униполярный шаговый двигатель** | ||
| - | |||
| - | [{{ : | ||
| - | |||
| - | Униполярный шаговый двигатель имеет пять или шесть проводов. В соответствии со схемой привода запускается разом только одна четвертая обмоток. Линии //Vcc// обычно соединяются с положительным питающим напряжением двигателя. Концы обмоток 1a, 1b, 2a, и 2b соединяются при коммутации через транзисторы только с землей, | ||
| - | |||
| - | **Биполярный шаговый двигатель** | ||
| - | |||
| - | [{{ : | ||
| - | |||
| - | Биполярный шаговый двигатель отличается от униполярного шагового двигателя тем, что полярность обмоток изменяется во время коммутации. Разом активируется половина обмоток, | ||
| - | |||
| - | Необходимые коммутации полного шага и полушага шаговых двигателей с обоими видами обмоток отображает следующая таблица. Так как в случае драйвера униполярного шагового двигателя происходит только отпирание транзисторов, | ||
| - | |||
| - | ^ ^ | ||
| - | ^ Шаг ^ 1A ^ 2A ^ 1B ^ 2B ^ 1A ^ 2A ^ 1B ^ 2B ^ | ||
| - | ^ | ||
| - | | 1 ^ 1 | 0 | 0 | 0 ^ + | - | - | - | | ||
| - | | 2 | 0 ^ 1 | 0 | 0 | - ^ + | - | - | | ||
| - | | 3 | 0 | 0 ^ 1 | 0 | - | - ^ + | - | | ||
| - | | 4 | 0 | 0 | 0 ^ 1 | - | - | - ^ + | | ||
| - | ^ | ||
| - | | 1 ^ 1 | 0 | 0 | 0 ^ + | - | - | - | | ||
| - | | 2 ^ 1 ^ 1 | 0 | 0 ^ + ^ + | - | - | | ||
| - | | 3 | 0 ^ 1 | 0 | 0 | - ^ + | - | - | | ||
| - | | 4 | 0 ^ 1 ^ 1 | 0 | - ^ + ^ + | - | | ||
| - | | 5 | 0 | 0 ^ 1 | 0 | - | - ^ + | - | | ||
| - | | 6 | 0 | 0 ^ 1 ^ 1 | - | - ^ + ^ + | | ||
| - | | 7 | 0 | 0 | 0 ^ 1 | - | - | - ^ + | | ||
| - | | 8 ^ 1 | 0 | 0 ^ 1 ^ + | - | - ^ + | | ||
| - | |||
| - | ===== Практика ===== | ||
| - | |||
| - | Цель упражнения запустить биполярный шаговый двигатель, | ||
| - | |||
| - | Для управления биполярным шаговым двигателем в библиотеке Домашней Лаборатории есть функция // | ||
| - | |||
| - | <code c> | ||
| - | // | ||
| - | // Подготовка управления биполярного шагового двигателя | ||
| - | // | ||
| - | void bipolar_init(void) | ||
| - | { | ||
| - | DDRB |= 0x0F; | ||
| - | PORTB &= 0xF0; | ||
| - | } | ||
| - | |||
| - | // | ||
| - | // Передвижение биполярного шагового двигателя полушагами | ||
| - | // | ||
| - | void bipolar_halfstep(signed char dir, | ||
| - | unsigned short num_steps, unsigned char speed) | ||
| - | { | ||
| - | unsigned short i; | ||
| - | unsigned char pattern, state1 = 0, state2 = 1; | ||
| - | |||
| - | // Утверждение направления +- 1 | ||
| - | dir = ((dir < 0) ? -1 : +1); | ||
| - | |||
| - | // Осуществление полушагов | ||
| - | for (i = 0; i < num_steps; i++) | ||
| - | { | ||
| - | state1 += dir; | ||
| - | state2 += dir; | ||
| - | |||
| - | // Создание шаблона | ||
| - | pattern = (1 << ((state1 % 8) >> 1)) | | ||
| - | (1 << ((state2 % 8) >> 1)); | ||
| - | |||
| - | // Обозначение выхода | ||
| - | PORTB = (PORTB & 0xF0) | (pattern & 0x0F); | ||
| - | |||
| - | // Создание паузы для ожидания выполнения шага | ||
| - | sw_delay_ms(speed); | ||
| - | } | ||
| - | |||
| - | // Остановка двигателя | ||
| - | PORTB &= 0xF0; | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | Использование функций демонстрирует пример программы, | ||
| - | |||
| - | <code c> | ||
| - | // | ||
| - | // Тест-программа биполярного шагового двигателя | ||
| - | // модуля «Двигатели» Домашней Лаборатории | ||
| - | // | ||
| - | #include < | ||
| - | |||
| - | // | ||
| - | // Основная программа | ||
| - | // | ||
| - | int main(void) | ||
| - | { | ||
| - | // Настройка двигателя | ||
| - | bipolar_init(); | ||
| - | |||
| - | // Бесконечный цикл | ||
| - | while (true) | ||
| - | { | ||
| - | // Вращение в одну сторону 200 полушагов со скоростью 30 мс/шаг | ||
| - | bipolar_halfstep(+1, | ||
| - | |||
| - | // Вращение в другую сторону 200 полушагов со скоростью 30 мс/шаг | ||
| - | bipolar_halfstep(-1, | ||
| - | } | ||
| - | } | ||
| - | </ | ||