Курсовая работа микропроцессорная техника. Разработка микроконтроллерного устройства управления шаговым двигателем с режимом микрошага
Скачать 2.4 Mb.
|
6 Проектирование принципиальной схемы устройстваСхема устройства состоит: - Униполярный шаговый двигатель 28BYJ-48; - Микроконтроллер PIC16F877A; - Драйвер двигателя ULN2003; - Шаговый двигатель. Принципиальная схема и спецификация устройства микроконтроллерного управления шаговым двигателем представлена в Приложение Б и Приложение В. Питание устройства осуществляется источником питания, подающим напряжение +5В, +12 В…40В. Микроконтроллер, предназначен для управления электронными устройствами. Использование в современном микроконтроллере достаточного мощного вычислительного устройства с широкими возможностями, построенного на одной микросхеме вместо целого набора, значительно снижает размеры, энергопотребление и стоимость построенных на его базе устройств. Центральная часть устройства – микроконтроллер PIC16F877A, работающий от тактового резонатора на частоте 20МГц. Для обмена данными с микроконтроллером и ЭВМ используется интерфейс UART. USART - это модуль последовательного ввода/вывода, который может работать в полнодуплексном асинхронном режиме для связи с терминалами, персональными компьютерами или синхронном полудуплексном режиме для связи с микросхемами ЦАП, АЦП, последовательными EEPROM и т.д. Диаграмма передачи данных по USART представлена на рисунке 4. Рисунок 4 – Диаграмма передачи данных по UART Модуль USART в контроллере PIC16F877A может работать в одном из трёх режимов: асинхронный, полный дуплекс, синхронный ведущий, полудуплекс, синхронный ведомый, полудуплекс. Биты 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. ПРИЛОЖЕНИЕ А. СТРУКТУРАЯ СХЕМА ПРИЛОЖЕНИЕ Б. ПРИНЦИПИАЛЬНАЯ СХЕМА ПРИЛОЖЕНИЕ В. СПЕЦИФИКАЦИЯ ПРИЛОЖЕНИЕ Г. АЛГОРИТМ РАБОТЫ 7> |