Главная страница

Курсовая работа микропроцессорная техника. Разработка микроконтроллерного устройства управления шаговым двигателем с режимом микрошага


Скачать 2.4 Mb.
НазваниеРазработка микроконтроллерного устройства управления шаговым двигателем с режимом микрошага
АнкорКурсовая работа микропроцессорная техника
Дата05.05.2023
Размер2.4 Mb.
Формат файлаdocx
Имя файлаkursovoy_proekt_MT.docx
ТипРеферат
#1111389
страница3 из 3
1   2   3

6 Проектирование принципиальной схемы устройства


Схема устройства состоит:

- Униполярный шаговый двигатель 28BYJ-48;

- Микроконтроллер PIC16F877A;

- Драйвер двигателя ULN2003;

- Шаговый двигатель.

Принципиальная схема и спецификация устройства микроконтроллерного управления шаговым двигателем представлена в Приложение Б и Приложение В.

Питание устройства осуществляется источником питания, подающим напряжение +5В, +12 В…40В.

Микроконтроллер, предназначен для управления электронными устройствами.

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

Центральная часть устройства – микроконтроллер PIC16F877A, работающий от тактового резонатора на частоте 20МГц.

Для обмена данными с микроконтроллером и ЭВМ используется интерфейс UART.

USART - это модуль последовательного ввода/вывода, который может работать в полнодуплексном асинхронном режиме для связи с терминалами, персональными компьютерами или синхронном полудуплексном режиме для связи с микросхемами ЦАП, АЦП, последовательными EEPROM и т.д. Диаграмма передачи данных по USART представлена на рисунке 4.



Рисунок 4 – Диаграмма передачи данных по UART

Модуль USART в контроллере PIC16F877A может работать в одном из трёх режимов:

  1. асинхронный, полный дуплекс,

  2. синхронный ведущий, полудуплекс,

  3. синхронный ведомый, полудуплекс.

Биты SPEN (RCSTA<7>) и TRISC<7:6> должны быть установлены в '1' для использования выводов RC6/TXICK и RC7/RX/DT в качестве портов универсального синхронно-асинхронного приемопередатчика. Модуль USART поддерживает режим детектирования 9-разрядного адреса для работы в сетевом режиме.

Рассмотрим схему передачи данных по шине UART (рисунок 5).



Рисунок 5 – Структурная схема передачи данных

Загруженные данные в регистр буфера TXREG переместятся в сдвиговый регистр TSR. Для этого должны быть соблюдены некоторые условия. Одно из них то, что в данный момент шина должна быть свободна. То есть мы получили последний стоповый бит предыдущей передачи и после этого сразу же данные из буфера TXREG перемещаются в регистр TSR, если данные в буфере TXREG присутствуют. После этого генерируется прерывание TXIF, если оно разрешено битом TXIE регистра PIE1. И, как только биты переместятся в TSR, при условии, что передача разрешена установкой бита TXEN, данные начнут передаваться с ножки TX.

Схема приема данные представлена на рисунке 6.



Рисунок 6 – Структурная схема приема данных

При приёме данные с ножки RX поступают в регистр RSR. После получения стопового бита данные поступают в регистр RCREG, после чего генерируется прерывание RCIF, которое можно разрешить или запретить включением или выключением бита RCIE в регистре PIE1. Установится флаг прерывания RCIF, который затем программно сбрасывать не нужно, он сбросится аппаратно при чтении регистра RCREG.

Регистр RCREG имеет двойную буферизацию. Поэтому мы можем принять два байта в регистр RCREG и третий в регистр RSR, так что запас некоторый у нас есть, так как байты могут приходить в момент занятости шины или ещё в какой-то момент, когда мы их принять полноценно не можем, вот тогда-то нам и поможет данная буферизация.

Также стоит рассмотреть, как мы можем установить требуемую скорость передачи данных USART. Для тактирования шины USART используется генератор BRG. Данный генератор управляется значением регистра SBRG, а также включением или выключением бита BRGH.

Скорость рассчитывается следующим образом (рисунок 7).



Рисунок 7 – Скорость передачи данных

Вычисляется не скорость (она известна), а значение, которое будет вноситься в регистр SPBRG. Для этого нужно воспользоваться готовой таблицей, которая дана в технической документации микроконтролера.

Микроконтроллер PIC16F877A подключается к ЭВМ с помощью переходника FT232RL, так как у ПК нет разъёма для USART. Блок-схема преобразователя представлена на рисунке 8.



Рисунок 8 – Структурная схема переходника FT232RL

Униполярный шаговый двигатель модели 28BYJ-48 с напряжением питания 5В подключен к микроконтроллеру через микросхему ULN2003.

Микросхема ULN2003a — это транзисторная сборка Дарлингтона с выходными ключами повышенной мощности, имеющая на выходах защитные диоды, которые предназначены для защиты управляющих электрических цепей от обратного выброса напряжения от индуктивной нагрузки.

Каждый канал (пара Дарлингтона) в ULN2003 рассчитан на нагрузку 500 мА и выдерживает максимальный ток до 600 мА. Входы и выходы расположены в корпусе микросхемы друг напротив друга, что значительно облегчает разводку печатной платы. Входы управления ключами могут непосредственно присоединяться к выходам микросхем как TTL, так и CMOS-логики.

Структурная схема драйвера представлена на рисунке 9.



Рисунок 9 – Структурная схема драйвера ULN2003

Тактирование МК происходит с помощью подключение кварцевого резонатора ZQ1 к соответствующим выводам. C1 и C2 образуют делитель напряжения, действующего между электродами резонатора. Причём напряжение, поступающее с конденсатора C1 на вход усилителя, противофазно напряжению, поступающему на конденсатор C2 c выхода усилителя. Таким образом, обратная связь через контур, образованный кварцевым резонатором и конденсаторами C1 и C2, положительная.

Резистор R1 используется для регулировки частоты вращения ротора шагового двигателя, он подключен к АЦП, меняя напряжение питания, изменяется значение числа в регистре, что в свою очередь изменяет частоту вращения ротора.

7 Разработка программного кода устройства

// CONFIG

#pragma config FOSC = HS        // Биты выбора генератора (HS oscillator)

#pragma config WDTE = OFF       // Включение сторожевого таймера (WDT выключен)

#pragma config PWRTE = OFF      // Таймер включения питания (PWRT выключен)

#pragma config BOREN = ON       // Сброс по включению питания (РOR включен)

#pragma config LVP = OFF        // Низковольтное (Одиночное) Включение последовательного программирования в цепи (у RB3/PGM пина функция PGM; низковольтное программирование включено)

#pragma config CPD = OFF        // Защита кода памяти данных EEPROM (Защита кода памяти данных EEPROM выключена)

#pragma config WRT = OFF        // Включение записи Flash памяти программы (защита от записи отключена; вся программная память может быть записана с помощью управления EECON)

#pragma config CP = OFF         // Бит защиты кода флэш-памяти программы (Защита кода выключена)

  

#include

#include

 /* Определение, связанное с оборудованием */

 #define _XTAL_FREQ 200000000 // Частота резонатора, используемая в задержке

#define speed 1 // Диапазон скорости 10 to 1  10 = lowest , 1 = highest

#define steps 250 // Сколько шагов это займет

#define clockwise 0 // Макрос направления по часовой стрелке

#define anti_clockwise 1 // Макрос направления против часовой стрелки
 / * Функции и определения, связанные с устройством */

 void system_init (void); // Эта функция инициализирует порты.

void full_drive (char direction); // Эта функция будет управлять двигателем в режиме полного привода

void half_drive (char direction); // Эта функция будет управлять двигателем в режиме полупривода

void wave_drive (char direction); // Эта функция будет управлять двигателем в режиме волнового привода

void ms_delay(unsigned int val); // Эта функция создает необходимую задержку

 

/** Начало основной функции */

 

 void main(void)

{

system_init();

while(1){

/* Привод двигателя в режиме полного привода по часовой стрелке */

for(int i=0;i
{

            full_drive(clockwise);

}

ms_delay(1000);

 

/* Привод двигателя в режиме полного привода против часовой стрелки */

for(int i=0;i
{

            wave_drive(anti_clockwise);

            //full_drive(anti_clockwise);

}

ms_delay(1000);

}

}

 

/* Функция инициализации системы для установки вывода на Ввод или Вывод*/

 

void system_init (void){

    TRISB = 0x00;     // ПОРТ B как выходной порт

    PORTB = 0x0F;

}

 

/* Это приведет двигатель в полный привод в зависимости от направления */

 

void full_drive (char direction){

    if (direction == anti_clockwise){

        PORTB = 0b00000011;

        ms_delay(speed);

        PORTB = 0b00000110;

        ms_delay(speed);

        PORTB = 0b00001100;

        ms_delay(speed);

        PORTB = 0b00001001;

        ms_delay(speed);

        PORTB = 0b00000011;

        ms_delay(speed);

    }

    if (direction == clockwise){

        PORTB = 0b00001001;

        ms_delay(speed);

        PORTB = 0b00001100;

        ms_delay(speed);

        PORTB = 0b00000110;

        ms_delay(speed);

        PORTB = 0b00000011;

        ms_delay(speed);

        PORTB = 0b00001001;

        ms_delay(speed);

    }

        

}

 

/* Этот метод будет управлять двигателем в режиме полупривода с помощью направления ввода */

 

void half_drive (char direction){

    if (direction == anti_clockwise){

        PORTB = 0b00000001;

        ms_delay(speed);

        PORTB = 0b00000011;

        ms_delay(speed);

        PORTB = 0b00000010;

        ms_delay(speed);

        PORTB = 0b00000110;

        ms_delay(speed);

        PORTB = 0b00000100;

        ms_delay(speed);

        PORTB = 0b00001100;

        ms_delay(speed);

        PORTB = 0b00001000;

        ms_delay(speed);

        PORTB = 0b00001001;

        ms_delay(speed);

    }

    if (direction == clockwise){

       PORTB = 0b00001001;

       ms_delay(speed);

       PORTB = 0b00001000;

       ms_delay(speed);

       PORTB = 0b00001100;

       ms_delay(speed); 

       PORTB = 0b00000100;

       ms_delay(speed);

       PORTB = 0b00000110;

       ms_delay(speed);

       PORTB = 0b00000010;

       ms_delay(speed);

       PORTB = 0b00000011;

       ms_delay(speed);

       PORTB = 0b00000001;

       ms_delay(speed);

    }

}

 /* Эта функция будет управлять двигателем в режиме волнового привода с помощью направления ввода */

 

void wave_drive (char direction){

    if (direction == anti_clockwise){

        PORTB = 0b00000001;

        ms_delay(speed);

        PORTB = 0b00000010;

        ms_delay(speed);

        PORTB = 0b00000100;

        ms_delay(speed);

        PORTB = 0b00001000;

        ms_delay(speed);

    }

     if (direction == clockwise){

        PORTB = 0b00001000;

        ms_delay(speed);

        PORTB = 0b00000100;

        ms_delay(speed);

        PORTB = 0b00000010;

        ms_delay(speed);

        PORTB = 0b00000001;

        ms_delay(speed);

    }

}

 /* Этот метод создаст необходимую задержку */

 

void ms_delay(unsigned int val)

{

     unsigned int i,j;

        for(i=0;i
            for(j=0;j<1650;j++);

}

ЗАКЛЮЧЕНИЕ

В результате работы разработано микроконтроллерное устройство управления шаговым двигателем на основе микроконтроллера PIC16F877A.

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

Была разработана структурная, функциональная и принципиальная схема устройства, разработан алгоритм программы и программа для микроконтроллера.
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

1. СТО СГАУ 02068410-004-2018. Стандарт организации. Общие требования к учебным текстовым документам [Текст] – Самара: СГАУ, 2018. – 29 с.

2. Шаговый двигатель 28BYJ-48 [Электронный ресурс]: документация. URL: https://amperka.ru/product/stepper-motor-28byj-48-5v

3.Микроконтроллер PIC16F877A [Электронный ресурс]: документация. URL: https://ru.mouser.com/_/?Keyword=PIC16F877A&bws=1

4. Драйвер ULN2003A [Электронный ресурс]: документация. URL: https://www.chipdip.ru/product/uln2003a

5. Кварцевый резонатор HC-49S [Электронный ресурс]: документация. URL: https://www.chipdip.ru/product/20mhz-hc-49s

6. Кенио Т. Шаговые двигатели и их микропроцессорные системы управления [Текст] / Кенио Т., 1987.

7. Магда Ю.С. Микроконтроллеры PIC: архитектура и программирование [Текст] / Магда Ю.С. - ДМК-Пресс, 2009.

8. Катцен С. PIC-микроконтроллеры. Все что вам необходимо знать [Текст] / Катцен С. - Додэка-XXI, 2008.

9. Яценков В. С. Микроконтроллеры Microchip. Практическое руководство [Текст] / Яценков В. С. - Горячая линия-Телеком, 2002.

10. Белов А. В. Создаём устройства на микроконтроллерах [Текст] / Белов А. В. - Наука и Техника, 2007.

ПРИЛОЖЕНИЕ А. СТРУКТУРАЯ СХЕМА



ПРИЛОЖЕНИЕ Б. ПРИНЦИПИАЛЬНАЯ СХЕМА



ПРИЛОЖЕНИЕ В. СПЕЦИФИКАЦИЯ



ПРИЛОЖЕНИЕ Г. АЛГОРИТМ РАБОТЫ

1   2   3


написать администратору сайта