Управление шаговым двигателем микропроцессорной системой
Управление шаговым двигателем микропроцессорной системой
Введение
Развитие микроэлектроники и широкое применение её изделий в промышленном производстве, в устройствах и системах управления самыми разнообразными объектами и процессами является в настоящее время одним из основных направлений научно-технического прогресса.
Использование микроэлектронных средств в изделиях производственного и культурно-бытового назначения не только приводит к повышению технико-экономических показателей изделий (стоимости, надёжности, потребляемой мощности, габаритных размеров) и позволяет многократно сократить сроки разработки и отодвинуть сроки "морального старения" изделий, но и придаёт им принципиально новые потребительские качества (расширенные функциональные возможности, модифицируемость, адаптивность и т.д.).
За последние годы в микроэлектронике бурное развитие получило направление, связанное с выпуском однокристальных микроконтроллеров, которые предназначены для "интеллектуализации" оборудования различного назначения. Однокристальные микроконтроллеры представляют собой приборы, конструктивно выполненные в виде БИС и включающие в себя все оставшиеся части "голой" микро-ЭВМ: микропроцессор, память программ и память данных, а также программируемые интерфейсные схемы для связи с внешней средой. К настоящему времени более двух третей мирового рынка микропроцессорных средств составляют именно однокристальные микроконтроллеры.
В данном курсовом проекте необходимо разработать микропроцессорную систему, осуществляющую управление шаговым двигателем.
1. Описание работы устройства
Контроллер ШД, реализуемый на базе микроконтроллера серии МК51, представляет собой устройство позволяющее управлять ШД в шаговом режиме, режиме плавного ускорения и торможения.
Рис.1 Функциональная схема системы
В данное устройство входит клавиатура состоящая из 12 клавиш, индикатор и драйвер ЩД.
При включении питания системы, она начинает опрашивать клавиатуру. После ввода числового значения с клавиатуры система выводит его на индикатор и затем отрабатывает введенное число шагов путем выдачи последовательности импульсов с нарастающей, а затем убывающей частотой на драйвер ШД.
2. Разработка принципиальной схемы
Необходимо определить перечень устройств и элементов, которые будут входить в аппаратную часть.
При выборе микроконтроллера руководствуемся тем, что для нашей системы необходим наиболее простой контроллер на базе МК51, выбираем микроконтроллер AT89C51 с 4 килобайтами внутреннего ПЗУ фирмы Atmel, как наиболее подходящий по цене и возможностям.
Микроконтроллер семейства АТ89 фирмы Atmel представляет собой восьмиразрядную однокристальную микроЭВМ с системой команд MCS-51 фирмы Intel. Микроконтроллеры изготавливаются по КМОП (CMOS) технологии и имеют полностью статическую структуру.
§ Полностью статический прибор - диапазон рабочих частот от 0 Гц до 24 Мгц
§ Двухуровневая блокировка памяти программ
§ ОЗУ емкостью 128 байтов
§ 31 программируемых линий ввода/вывода
§ 2 16-разрядных таймера/счетчика событий
§ Пять источников сигнала прерывания
§ Промышленный (-40°С...85°C) и коммерческий (0°C...70°C) диапазоны температур
§ 40-выводные корпуса PDIP и SOIC
Описание:
КМОП микроконтроллер АТ89С51, оснащенный Flash программируемым и стираемым ПЗУ, совместим по системе команд и по выводам со стандартными приборами семейства MCS-51. Микроконтроллер содержит 4 Кбайта Flash ПЗУ, 128 байтов ОЗУ, 32 линии ввода/вывода, два 16-разрядных таймера/счетчика событий, полнодуплексный порт (UART), пять векторных двухуровневых прерываний, встроенный прецизионный аналоговый компаратор, встроенные генератор и схему формирования тактовой последовательности. Программирование Flash памяти программ ведется с использованием напряжения 12 В, ее содержимое может быть защищено от несанкционированных записи/считывания. Имеется возможность очистки Flash памяти за одну операцию, возможность считывания встроенного кода идентификации. Потребление в активном режиме на частоте 12 МГц не превышает 15 мА и 5,5 мА при напряжении питания 6 В и 3 В, соответственно.
Назначение выводов:
VCC: напряжение Питания.
GND: общий провод.
Порт 1: Восьми битный квази двунаправленный порт ввода/вывода: каждый разряд порта может быть запрограммирован как на ввод, так и на вывод информации, независимо от состояния других разрядов.
Порт 2: Восьми битный квази двунаправленный порт, аналогичный Р1; кроме того, выводы этого порта используются для выдачи адресной информации при обращении к внешней памяти программ или данных.
Порт 3: Восьми битный квази двунаправленный порт, аналогичный Р1; кроме того, выводы этого порта могут выполнять ряд альтернативных функций, которые используются при работе таймеров, последовательного порта ввода-вывода, контроллера прерываний и внешней памяти программ и данных.
Вывод порта Альтернативная функция
P3.0 RXD (вход последовательного порта)
P3.1 TXD (выход последовательного порта)
P3.2 INT0 (внешнее прерывание)
P3.3 INT1 (внешнее прерывание)
P3.4 T0 (таймер 0 внешний ввод)
P3.5 T1 (таймер 1 внешний ввод)
Порт 0: Восьми битный квази двунаправленный порт ввода/вывода информации: при работе с внешними ПЗУ и ОЗУ по линиям порта в режиме временного мультиплексирования выдается адрес внешней памяти, после чего осуществляется передача или прием данных.
RST: вход сброса. На всех выводах ввода/вывода устанавливается сигнал логической 1, как только RST перейдет в состояние логической 1. Высокий логический уровень на входе RST должен удерживаться в течении двух машинных циклов для надежного сброса устройства.
XTAL1 и XTAL2 - вход и выход, соответственно, инвертирующего усилителя, который может быть настроен для использования как внутренний генератор, как показано в Рис. 3. Может использоваться кварцевый или керамический резонатор.
Рабочая температура ............................................................ -55°C +125°C
Температура хранения ......................................................... -65°C +150°C
Напряжение на любом выводе относительно земли ............. -1.0В +7.0В
Максимальное напряжение питания ....................................... 6.6В
Выходной ток (лог 0) ..................................................................25.0 мАПодключаем вход RST через конденсатор на +5 В. В качестве конденсатора С6, выбираем конденсатор марки К50-6-50В-1мкФ10%. Для подключения осциллятора выбираем конденсаторы С7, С8 марки КМ-5Б-160В-30 пФ 10%, и кварц РК374 МД-6-ВС (11.059200 МГц).
Выбор индикатора:
Среди 7-сегментных ЖКИ - модулей наибольшее распространение получили модули на основе контроллера HT1611 (или HT1613). Они имеют 10 знакомест и управляются по последовательной шине.
Назначение выводов AL-801LCD
1 12/24 переключение формата времени
2 Vss общий
3 SK тактовая линия шины
4 DI линия данных шины
5 HK переключение часы/индикатор
6 S1 установка времени
7 S2 выбор режима установки времени
8 TMR сброс таймера
9 Vdd напряжение питания
Блок-схема алгоритма работы индикатора:
При использовании модуля в микроконтроллерной системе только для отображения загружаемых по последовательной шине символов, требуется соединить вывод HK с общим проводом, а выводы 12/24, S1, S2 и TMR оставить свободными. Временная диаграмма передачи данных по последовательной шине приведена на рисунке, где ta - время установки данных (>1 мкс), tb - время удержания данных (>2 мкс), tc - интервал между символами (>5 мкс).
Данные подаются на линию DI и защелкиваются по спаду тактовых импульсов на линии SK. Символы отображаются в крайней правой позиции, уже имеющиеся на индикаторе символы сдвигаются влево. После того, как все необходимые данные переданы, линию SK следует оставить в состоянии низкого логического уровня, чтобы предотвратить автоматический переход модуля в режим отображения значения таймера.
Каждый символ кодируется 4-мя битами, поэтому всего имеется 16 символов.
Нужно отметить, что напряжение питания индикатора сильно влияет на контрастность. При низком напряжении контрастность недостаточна, а при большом засвечиваются погашенные сегменты. Оптимум находится в промежутке 1.50 ... 1.65 В. Распространенная схема питания, где в качестве источника образцового напряжения используются диоды в прямом включении (рисунок a), не позволяет получить оптимальную контрастность, так как двух диодов оказывается мало, а трех - много. Тем более, желательно иметь возможность регулировки этого напряжения. Простая схема на одном транзисторе позволяет получить нужное напряжение питания и регулировать его (рисунок b).
Учитывая очень низкий ток потребления индикатора можно обойтись и простым резисторным делителем, если входное напряжение питания постоянно. Описанные схемы питания не являются экономичными и подходят, например, для устройств с сетевым питанием. Система питания автономного устройства может быть очень сложной, и конкретные решения зависят от специфики задачи. Одним из вариантов может быть питание устройства от элемента напряжением 1.5 В, от которого индикатор питается непосредственно. Микроконтроллерная часть устройства питается от того же элемента через повышающий DC-DC преобразователь.
Для согласования логических уровней можно применить разные схемы. Учитывая тот факт, что входы DI и SK имеют внутренние подтягивающие резисторы, можно обойтись просто диодами (рисунок a). Преимущество такого способа заключается в том, что согласование не будет зависеть от напряжения питания микроконтроллера. Однако такой способ имеет и недостаток. Ввиду больших номиналов подтягивающих резисторов уровни на входах будут довольно медленно достигать состояния логической единицы, что потребует значительного снижения скорости обмена. Поэтому предпочтительнее для согласования использовать резисторные делители (рисунок b).
Необходимо отметить, что в течение примерно 2 сек после включения питания модуль не воспринимает данные, передаваемые ему по последовательной шине. Поэтому всегда должна быть задержка между включением питания и началом обмена.
Выбор драйвера ЩД:
Довольно популярной микросхемой, реализующей ШИМ-стабилизацию тока, является L297 фирмы SGS-Thomson. Совместно с микросхемой мостового драйвера L293 или L298 они образуют законченную систему управления для шагового двигателя.
Микросхема L297 сильно разгружает управляющий микроконтроллер, так как от него требуется только тактовая частота CLOCK (частота повторения шагов) и несколько статических сигналов: DIRECTION - направление (сигнал внутренне синхронизирован, переключать можно в любой момент), HALF/FULL - полушаговый/полношаговый режим, RESET - устанавливает фазы в исходное состояние (ABCD = 0101), ENABLE - разрешение работы микросхемы, V ref - опорное напряжение, которое задает пиковую величину тока при ШИМ-регулировании. Кроме того, имеется несколько дополнительных сигналов. Сигнал CONTROL задает режим работы ШИМ-регулятора. При его низком уровне ШИМ-регулирование происходит по выходам INH1, INH2, а при высоком - по выходам ABCD. SYNC - выход внутреннего тактового генератора ШИМ. Он служит для синхронизации работы нескольких микросхем. Также может быть использован как вход при тактировании от внешнего генератора. HOME - сигнал начального положения (ABCD = 0101). Он используется для синхронизации переключения режимов HALF/FULL. В зависимости от момента перехода в полношаговый режим микросхема может работать в режиме с одной включенной фазой или с двумя включенными фазами.
3. Алгоритм
4. Описание программы
Данная программа состоит из основной программы 6 подпрограмм:
1. В основной программе мы производим опрос клавиатуры, путем загрузки в порт маски опроса по столбцам и проверяем появление логического нуля на выходах соответствующих строк.
keyboard1:
mov p1,#11101111b
jnb p1.3,n1
jnb p1.2,n4
jnb p1.1,n7
jnb p1.0,enter
mov p1,#11011111b
jnb p1.3,n2
jnb p1.2,n5
jnb p1.1,n8
jnb p1.0,n0
mov p1,#10111111b
jnb p1.3,n3
jnb p1.2,n6
jnb p1.1,n9
jnb p1.0,step
jmp keyboard
2. В процедурах обработки нажатия кнопок мы записываем в буфер набранные числа и выводим их на индикатор. Так же мы оперируем счетчиком нажатий, ограничивая количество набранных цифр до 5.
n1: cjne r4,#4,incr
xch A,r4
jz keyboard
dec A
xch A,r4
mov r2,#1
call LCD
mov r1,#indikator
mov @r1,#1
jmp keyboard
3. Процедура формирования задания на двигатель производится в обработчике кнопки enter. В начале массив из цифр в буфере преобразуется в число хранящееся в паре регистров, путем последовательного умножения в циклах введенной цифры на 10 столько раз, сколько разрядов имеет эта цифра. И последовательное сложение полученных результатов. Далее получены результат делится на 2 чтобы получить треугольную форму задания. Далее вызываются подпрограммы управления частотой.
enter1: push 0h
push 2h
push 6h
push 7h
mov r0,#indikator
mov A,@r0
n10000: mov r2,4
mov B,#10
mul AB
djnz r2,n10000
mov r6,A
mov r7,B
n1000: mov r2,3
mov B,#10
inc r0
mov A,@r0
mul AB
djnz r2,n1000
add A,r6
mov r6,A
mov A,B
add A,r7
mov r7,A
n100: mov r2,2
mov B,#10
inc r0
mov A,@r0
mul AB
djnz r2,n100
add A,r6
mov r6,A
mov A,B
add A,r7
mov r7,A
n10: mov r2,1
mov B,#10
inc r0
mov A,@r0
mul AB
djnz r2,n10
add A,r6
mov r6,A
mov A,B
add A,r7
mov r7,A
inc r0
mov A,@r0
add A,r6
mov r6,A
mov A,r7
mov B,2
div AB
mov r7,B
mov A,r6
mov B,2
div AB
mov r6,B
call freq_plus
call freq_minus
pop 0h
pop 2h
pop 6h
pop 7h
ret
4. Процедура вывода на экран.
LCD: push 0h
push 1h
push 2h
mov r1,#4
mov A,r0
swap A
mov r0,A
LDL: mov A,r0
rlc A
jc LD1
LD0: clr p2.0
jmp STR
LD1: setb p2.0
STR: setb p2.1
mov r2,#5
HNG1: djnz r2,HNG1
clr p2.1
mov r2,#10
HNG2: djnz r2,HNG2
djnz r1,LDL
mov r2,#25
HNG3: djnz r2,HNG3
pop 0h
pop 1h
pop 2h
ret
5. Процедура нарастания частоты. Суть данной процедуры состоит в том чтобы установить на ножке порта Р0.0 логическую единицу и держать ее весь промежуток работы таймера. Эта операция выполняется с последующим инкрементированием таймера, что позволяет получить нам нарастающую частоту изменения состояния ножки порта. Так же в подпрограмму встроен счетчик импульсов чтобы отрабатывать задание, получаемое при нажатии кнопки enter. Так же имеется ограничитель максимальной частоты.
freq_plus: push 0h
push 1h
push 6h
push 7h
mov r0,#0h
mov r1,#0ffh
inc r7
main: call pulse
djnz r6,main
djnz r7,main
jmp en
pulse: setb P0.0
call timer
clr P0.0
call test
ret
timer: mov tmod,#1
mov th0,r0
mov tl0,r1
setb tr0
wait: jbc tf0,ok
sjmp wait
ok: clr tr0
ret
test: cjne r0,#0ffh,dal
ret
dal: inc r0
ret
en: mov A,r0
mov r5,A
pop 0h
pop 1h
pop 6h
pop 7h
ret
6. Процедура уменьшения частоты. Работает аналогично процедуре увеличения частоты с тем лишь отличием, что в данной процедуре значение таймера декрементируется. Так же эта подпрограмма начинает работу именно с той частоты, на которой закончила работу подпрограмма увеличения.
Так как основной задачей программы является формирование импульсных последовательностей заданного количества импульсов с нарастающей частотой, а затем и убывающей, то можно предположить, что проверкой правильности работы программы могут служить графики этих последовательностей построенные в microVision. Эти графики приведены ниже.
График импульсной последовательности с нарастающей частотой:
График импульсной последовательности с убывающей частотой:
7. Список использованной литературы
1. А.В. Фрунзе. Микроконтроллеры? Это же просто! Т.1. - М.: ООО “ИД СКИМЕН”, 2002. - 336 с.
2. В.В. Сташин, А.В. Урусов, О.Ф. Мологонцева. Проектирование цифровых устройств на однокристальных микроконтроллерах. - М.: Энергоатомиздат, 1990. - 224 с.