Униполярный шаговый двигатель

Просмотров: 2057


 

 

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

Классическая схема шагового двигателя

Принцип управления 4 обмоточного шагового двигателя заключается в коммутации обмоток двигателя. В инете я нашел три варианта

  1. one phase on – управление запиткой по одной фазе. В этом варианте мы получим самый экономичный режим работв, но и саму малую мощность.
  2. two phase on – управление запиткой двух обмоток сразу в это варианте потребление увеличивается в два раза соответственно и мощность вращения ротора, по оценкам на 40-50%.
  3. one and two phase on – это полушаговый режим работы, в принципе комбинация первого и второго метода.

 

Механизм управления обмотками

one phase on

two phase on

one and two phase on

Схема подключения для тестирования

 

Функция управления в режимах one phase on и two-phase-on

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

Я показываю, этот проект на 8 битном контроллере, что можно было понять, что при правильной организации работы, 8-битка PIC справляется с управление на уровне 32 битных микроконтроллеров других производителей.

Вспомогательные функции

Задание скорости перемещения шагового двигателя

void speed (uint8_t speedstep)
{
    if(speedstep<25)T2PR=25;
    else T2PR=speedstep;
}

Режим работы

void restep  (bool regimstep)
{
    if(regimstep) uprlfaz=3;       // регистр управления фазами
    else uprlfaz=1;             // регистр управления фазами
}

Основная функция управления

Запуск двигателя, направление и количество шагов

void steping (bool directionF, uint16_t stepF)
{
    // загрузка во внешние переменные
    if(stepF)
    {
        steps = stepF;
        direction = directionF;

        // запуск шагового
        T2TMR = 0x00;
        PIR4bits.TMR2IF =0;
        PIE4bits.TMR2IE = 1;
    }
}

Принцип работы, мы задаем количество шагов, направление и включаем прерывание от таймера Т2. Все остальное происходит автоматически. Для контроля выполнения позиционирования ШД, можно использовать сброс разрешения прерываний для таймера T2.

Если использовать МСС для конфигурации, то функцию прерываний от T2 надо модернизировать следующим образом:

void TMR2_ISR(void)
{
uint8_t maska;
//------------------------------------------------------------------------------
    maska = (uint8_t)(LATC&0xF0);           // загрузить текущее значение регистра и очистить биты для шагового
    if(!steps)
    {
        LATC = maska;                       //
        PIE4bits.TMR2IE = 0;
    }
    else
    {
        LATC = (uint8_t)(uprlfaz|maska);    // загрузить текущее значение для управления шаговым двигателем
        if(direction) // направление вращения
        {
            uprlfaz=(uint8_t)((uprlfaz >> 1) | (uprlfaz << 3));
        }
        else
        {
            uprlfaz=(uint8_t)((uprlfaz << 1) | (uprlfaz >> 3));
        }
        uprlfaz=(uint8_t)(uprlfaz&0x0F);    // очистить "лишнии биты"
//------------------------------------------------------------------------------
        steps--;                            // уменьшить шаг 
    }
//------------------------------------------------------------------------------
    // clear the TMR2 interrupt flag
    PIR4bits.TMR2IF = 0;

    if(TMR2_InterruptHandler)
    {
        TMR2_InterruptHandler();
    }
}

Что происходит во время прерывания? Программы в прерываниях должны выполняться с максимальной скорость, т.е. быть минимальной длины. Чтобы не мешать выполнять основное задание. В нашем случае задача состоит в том. что-бы во время прерывание изменить состояние порта и закончить прерывание. И это всё. Если мы будем переключать порт по битам, это будет долго, единственный вариант выполнить запись в порт сразу.

Мы считываем состояние порта (в нашем случае порт С) это необходимо, когда мы будем выполнять управление шаговым двигателем, надо не забывать, что двигатель использует, только часть выводов порта, а другую, часть надо оставлять не тронутой. Вот по этому мы считывает текущее состояние с очисткой бито шагового двигателя, затем суммируем с переменной которая определяет следующее положение ротора и загружаем в порт (Если количество шагов не равно нулю), далее в зависимости от бита направление делаем вращение битов в нашей перемененной подготавливая данные для следующего прерывания. Дополнительно корректируем нашу перемененную, т.к. сдвиг может изменить не только “рабочие” битв, но и “сторонние”. И последнее уменьшаем количество заданных шагов.

Пример тестовой программы для управления шаговым двигателем.

void main(void)
{
    CLRWDT();               // сброс сторожевого таймера
    // Initialize the device
    SYSTEM_Initialize();

    // If using interrupts in PIC18 High/Low Priority Mode you need to enable the Global High and Low Interrupts
    // If using interrupts in PIC Mid-Range Compatibility Mode you need to enable the Global and Peripheral Interrupts
    // Use the following macros to:

    // Enable high priority global interrupts
    //INTERRUPT_GlobalInterruptHighEnable();

    // Enable low priority global interrupts.
    //INTERRUPT_GlobalInterruptLowEnable();

    // Disable high priority global interrupts
    //INTERRUPT_GlobalInterruptHighDisable();

    // Disable low priority global interrupts.
    //INTERRUPT_GlobalInterruptLowDisable();

    // Enable the Global Interrupts
    INTERRUPT_GlobalInterruptEnable();

    // Disable the Global Interrupts
    //INTERRUPT_GlobalInterruptDisable();

    // Enable the Peripheral Interrupts
    INTERRUPT_PeripheralInterruptEnable();

    // Disable the Peripheral Interrupts
    //INTERRUPT_PeripheralInterruptDisable();
//------------------------------------------------------------------------------ 
    CLRWDT();               // сброс сторожевого таймера
bool nop;                   // флаг управления направлением
    
    // Настройка    
// задание скорости
    speed (25);
// задание режима работы по фазам
    restep  (one_phase_on);       // малая мощность
//    restep  (two_phase_on);       // большая мощность    
    
    
    // работа    
    // запуск шагового двигателя 
    steping (forward, 800);     // 
    
    CLRWDT();                   // сброс сторожевого таймера
    while(PIE4bits.TMR2IE);     // ожидать окончания вращения шагового   
    
    steping (backward, 400);    // 
//------------------------------------------------------------------------------
    while (1)
    {
        CLRWDT();               // сброс сторожевого таймера
        // Add your application code
        // вращяем вперед, назад на 50 шагов
        if(!PIE4bits.TMR2IE) // ждем окончания выполнения команды
        {
            if(nop)
            {
                nop=0;
                steping (backward, 50);    //  назад на 50 шагов
            }
            else
            {
                nop=1;
                steping (forward, 50);     // вперед на 50 шагов
            }
        }
    }
}



/**
 End of File
*/

Перед началом работы надо задать режим работы one phase on и two-phase-on и необходимую скорость вращения. Далее для перемещения двигателя на заданное количество шагов используем функцию steping.

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


 


Проект для тестирования

Значок

Униполярный шаговый двигатель - проект для тестирования 680.43 KB 11 downloads

В приводах различных устройств часто применяются...
Login Required Message:


Это может быть интересно


  • Цифровой спидометр для автомобиляЦифровой спидометр для автомобиля
    Просмотров: 10079  Универсальность печатной платы ch-c0030pcb позволяет создавать на её основе разнообразные устройства. Одним из таких устройств является электронный спидометр для автомобиля, в котором можно задать два компаратора скорости, например,  для …
  • DIXELL XWEB500D-EVO + RUT900 или как пробить NAT-серверDIXELL XWEB500D-EVO + RUT900 или как пробить NAT-сервер
    Просмотров: 944 Когда необходимо под какой нибудь контроллер имеющий вэб сервер в инет, то нужен статический IP, что оказалось проблемой при работе с операторами сотовых сетей, конкретно с оператором сети …
  • Часы-кухонный таймерЧасы-кухонный таймер
    Просмотров: 3697 Каждая кухня должна иметь кухонный таймер, который позволяет напоминать хозяйке когда проходить определенный промежуток времени. Например, печем пирог, варим яйца… , чтобы не смотреть постоянно на часы, установим таймер и …
  • Модуль CAN в микроконтроллерах PIC18Модуль CAN в микроконтроллерах PIC18
    Просмотров: 5523 Введение   CAN последовательный интерфейс связи, который эффективно поддерживает распределенное управление в реальном масштабе времени с высокой помехозащищенностью. Протокол связи полностью определен Robert Bosch GmbH, в спецификации требований …
  • Проект с использованием MCC часть 10Проект с использованием MCC часть 10
    Просмотров: 718 Алгоритм управления освещением от нажатия кнопки. Обработка удержания кнопки: Мы должны проверить кнопка в настоящий момент нажата и флаг удержания установлен, если да Проверить таймер удержания “отработал” – …
  • 12-BIT A/D CONVERTER WITH THRESHOLD DETECT на примере PIC24FJ128GA20412-BIT A/D CONVERTER WITH THRESHOLD DETECT на примере PIC24FJ128GA204
    Просмотров: 759 Введение. 12-битный модуль A/D Converter является усовершенствованной версией 10-битного модуля, предлагаемого на некоторых устройствах PIC24. Оба модуля являются преобразователями, в своих ядрах, с последовательным приближением (SAR), в окружении …
  • REFERENCE CLOCK OUTPUT MODULEREFERENCE CLOCK OUTPUT MODULE
    Просмотров: 445 REFERENCE CLOCK OUTPUT MODULE Модуль формирования опорного тактового сигнала Модуль опорного тактового сигнала обеспечивает возможность посылать сигнал синхронизации на тактовый опорный выходной контакт или контакты (CLKR) в зависимости от …
  • Гаджеты для домашней автоматики – Датчик приближенияГаджеты для домашней автоматики – Датчик приближения
    Просмотров: 1816 Управление светодиодным освещением – Датчик приближения. Данный гаджет предназначен для управления внутренним освещением мебели. Датчик позволяет определить закрытие или открытие дверцы или ящика и при этом включать или …
  • Проект с использованием MCC часть 14Проект с использованием MCC часть 14
    Просмотров: 722 С выводом данных на дисплей мы справились (но могу сразу сказать библиотеку графики к этой статьи пришлось доработать, поэтому в этом проекте она обновлена). У нас на текущем …
  • MCC PIC24 – модуль REAL-TIME CLOCK AND CALENDAR (RTCC)MCC PIC24 – модуль REAL-TIME CLOCK AND CALENDAR (RTCC)
    Просмотров: 370 RTCC предоставляет пользователю часы реального времени и функция календаря (RTCC), точность “хода” может быть откалибрована. Основные особенности модуля RTCC: • Работает в режиме глубокого сна. • Возможность выбора источника …



 

Поделись этим!

Catcatcat

catcatcat

Development of embedded systems based on Microchip microcontrollers.