Методичка MCU
.pdf}
Функцию можно реализовать также и с использованием массива из 8 элементов. Попробуйте самостоятельно.
Задание: написать программу для позиционирования вала двигателя на заданный угол. Для этого использовать соответствующий стенд. Не забывайте о том, что двигатель — система механическая, а значит — инерционная. Если менять напряжение на фазах слишком быстро — он просто не будет успевать поворачиваться.
При желании можно приспособить двигатель для управления открыванием форточки дома :-).
41
Конечные автоматы.
Очень важным понятием для автоматического управления являются так называемый конечные автоматы (или FSM — finite state machine). Собственно, они появились задолго до компьютеров и им подобных вещей. Наверное, многие из Вас знают, что такое шарманка и как она устроена; ктото, может быть, видел механические музыкальные шкатулки. На таком же принципе работало множество и промышленных установок, начиная с ткацких станков и заканчивая роботами, причем с довольно сложным поведением.
Такие механические FSM устроены так: имеется барабан, в некоторых местах не нем имеются либо отверстия, либо штырьки. Параллельно образующей цилиндра расположена линия датчиков — или контакты, или рычажки, или вибрирующие пластины (в шарманке). При вращении барабана его штырьки в определенной последовательности воздействуют на датчики, тем самым выполняя записанную на барабане программу.
Чтобы система могла быть представлена в виде FSM, нужно, чтобы ее поведение можно было разложить на число состояний. Имейте ввиду, что одинаковые по внешнему представлению состояния могут быть различными в представлении машины.
Возьмите, например, ручку (которая с кнопкой). Понажимайте на кнопку. Подумайте, на какие состояния ее можно разложить. Обратите внимание, что внешний вид «кнопка нажата» приводит к различным состояниям после отпускания: стержень может остаться в рабочем положении, а может и исчезнуть.
Итак, в FSM имеется набор состояний. Обычно их нумеруют, начиная с состояния ожидания.
Обычно у системы есть несколько входов и несколько выходов. Каждое состояние может быть представлено каким-то состоянием выходов.
Между состояниями могут осуществляться переходы по наступлению каких-то внешних событий, которые проявляются для системы как изменение состояний на входах.
Событием может являться и, например, окончание отведенного для состояния интервала времени. Обычно в реализации имеется таймер реального времени, и для каждого состояния в таблице указано максимальное время, в течение которого система может находиться в данном состоянии (как правило, если можно бесконечно долго, используют 0). Истечение этого времени обычно означает, что управляемая система не реагирует, как положено, пусть, например, состояние проявляется движением лифта вверх. И управляющая схема, зная типичную скорость движения и расстояние между датчиками на этажах, ожидает поочередного срабатывания датчиков. И если вдруг датчик не сработал за ожидаемое время (что может означать как просто неисправность датчика, так и то, что кабина за что-то зацепилась), система переходит в состояние аварийного останова (которое характеризуется безопасным поведением: как правило, все движущиеся механизмы останавливаются в текущем положении, чтобы не причинить вреда; нагреватели либо отключаются, либо поддерживают текущую температуру и т.п.). Такую ситуацию часто называют «таймаутом» (timeout).
42
Множество объектов из реальной жизни, из промышленных и экспериментальных установок может быть представлено в виде конечных автоматов. Тот же светофор — конечный автомат.
Существует множество способов представления FSM. Из них чаще всего встречаются табличный и графический.
Вот пример описания обычной двери при помощи графического способа
(http://en.wikipedia.org/wiki/Finite_state_machine):
Обычно состояние (state) обозначается кружочком (внутри обычно пишут номер состояния (1,2), его внешнее представление (Opened, Closed), название состояния (необязательно; в данном случае совпадает с внешним представлением).
Переход между состояниями отображается стрелкой. Рядом со стрелкой указывается условие перехода.
В начальный момент времени (запуск, Entry — вход), система установится в начальное состояние. В зависимости
от состояний входов, оно может быть различным: для двери мы видим, что если она была открыта, то переходим в состояние 1, а если закрыта — в 2.
Эту же систему можно представить и в табличном виде:
Немного более строгая запись такой таблицы называется «циклограммой». Циклограммы очень часто присутствуют в различной конструкторской документации.
Конечно, для сложных реальных систем количество состояний и переходов может быть очень большим.
Некоторые системы могут разбиваться на несколько почти независимых конечных автоматов, и состояние одних автоматов будет входом других.
В мире выпускается огромное количество так называемый PLC (Programmable Logic Controller) — программируемых логических контроллеров, которые используются для управления промышленными установками. Они имеют несколько входов для датчиков, несколько силовых выходов для исполнительных устройств и могут программироваться (как правило, с компьютера на достаточно простом, иногда даже и просто графическом языке) для выполнения произвольных циклограмм.
43
Квадратурный энкодер.
Рассмотрим устройство, которое, во-первых, само является конечным автоматом, а во-вторых, очень часто используется как устройство ввода. Это устройство — квадратурный энкодер (quadrature encoder, разновидность rotary encoder'a). Оно имеется в механических компьютерных мышках (2 или 3 штуки), и, например, в аудио-устройствах в качестве регулятора громкости или ручки настройки. Его отличительной особенностью является отсутствие ограничения для регулирования — можно крутить в одну сторону сколь угодно долго. QE часто устанавливают на вал двигателей, чтобы определять текущее положение вала, а так же скорость и направление его вращения.
Энкодеры бывают механические и оптические.
Оптические QE состоят из вала, диска с прорезями, закрепленного на валу и 2х датчиков. Для механических QE на вал просто нанесены контакты.
Принцип действия такой: когда вал вращается, датчики будут срабатывать не одновременно:
Существуют и так называемые
абсолютные энкодеры: их система контактов или
штрихов позволяет им выдавать непосредственно двоичный код,
соответствующий положению вала.
Возвращаясь к квадратурному энкодеру, заметим, что смена состояний на выходах зависит от направления вращения вала:
по часовой стрелке: PhaseAB100201311410 Против часовой стрелки:Phase AB110211301400
Видим, что, например, из состояния «0 1» он перейдет либо в «0 0», либо в «1 1», что будет соответствовать либо i++, либо i-- для переменной i, связанной с данным элементом управления. Точно так же и с остальными положениями. А переменная i в дальнейшем может использоваться для управления громкостью, яркостью, и т.п.
44
При программировании энкодер удобно реализовывать так:
// Process the encoder q = (PINA & 12)>>2; switch (encstate)
{
case 0: if (q==2) encval++; if (q==1) encval--; break; case 1: if (q==0) encval++; if (q==3) encval--; break; case 2: if (q==3) encval++; if (q==0) encval--; break; case 3: if (q==1) encval++; if (q==2) encval--; default:;
}
//for (encstate = 0; encstate < 9; encstate ++) //LED[encstate]+=encstate;
encstate = q;
// Process the encoder
Кстати сказать, 2 оптических датчика, расположенные в дверном проеме также ведут себя как энкодер. Они смогут определять не только «пытается ли кто-то пройти», но и направление: входит он или выходит. Соответственно, можно определить, сколько человек находится в комнате, и нужно ли им включать свет (если кто-то есть).
Задание для самостоятельной работы:
1.нарисовать в графическом представлении конечный автомат для лифта, установленного в 3х-этажном здании. На каждом этаже имеется кнопка и датчик наличия кабины. В кабине 3 кнопки с фиксацией. Управлять можно движением кабины вверх/вниз; также можно подать команду на отпускание кнопок.
2.Нарисовать в графическом представлении конечный автомат для устройства управления освещением для 2х помещений (светодиоды красный и зеленый), соединенных дверью (в проеме установлены 2 датчика: SB3, SB4). На 7-сегментных индикаторах должно отображаться кол-во человек в каждом помещении.
3.Написать программу для стенда, которая будет управлять освещением
в этих помещениях, отладить и подготовить к «прошивке».
Результат заданий 2 и 3 оценивается по работоспособности конечной программы в стенде.
45
Аналого-цифровой преобразователь.
Большинство сигналов в реальном мире имеют непрерывный ряд значений, лежащих в некотором диапазоне. Например, для управления процессом нам может потребоваться знание температуры в рабочей зоне устройства (в одной или нескольких точках). Для «оцифровки» сигнала, преобразования его из аналоговой в цифровую форму, применяются АЦП. В большинство микросхем серии ATMEGA встроен 10-битный аналогоцифровой преобразователь. Это значит, что мы можем без дополнительных компонентов подать аналоговый сигнал на определенный вывод микроконтроллера, и считать его величину (в вольтах) с дискретностью 10 бит, то есть, разбить диапазон возможных напряжений сигнала на 1024 интервала, и определить, в котором из них находится сигнал.
Перед АЦП, как правило, имеется мультиплексор, который позволяет измерить сигнал на одной из 6 (или 8) ножек. Работой АЦП можно управлять путем записи специальных значений в управляющие регистры.
Преобразование занимает некоторое время (существенно большее, чем время выполнения одной команды микроконтроллера), поэтому из программы требуется запустить преобразование, а затем дождаться завершения преобразования. После этого из регистра ADC можно считать полученный результат уже в цифровом виде. АЦП также может генерировать прерывание по окончании преобразования.
Для примера разработаем измеритель температуры в диапазоне от комнатной до 1200 градусов (диапазон определяется типом применяемого датчика). К сожалению, отсчетов АЦП всего 1024, а градусов в диапазоне 1180, поэтому простыми средствами мы сможем получить дискретность измерения температуры чуть больше 1 градуса. Это не так плохо, поскольку помимо дискретности, точность измерения ограничена еще и линейностью датчика, способом преобразования значения напряжения в температуру (а зависимость нелинейная!) и точностью калибровки, но, например, для измерения температуры тела в медицинских целях, такой дискретности недостаточно. Если нужно более точное измерение, то можно, например, уменьшить диапазон (для 20-400 градусов можем получить дискретность 0.5 градуса), либо использовать внешний АЦП с лучшим разрешением (существуют 24-битные АЦП — соответственно, имеющие более 16 млн. различных значений, соответственно, в идеале можно измерить напряжение в диапазоне 0-4.096 вольт с дискретностью 0.25 мкВ, и получить результат 1.0000000 ± 0.00000025 В (при идеальной калибровке)). Для увеличения разрешения встроенного АЦП можно применить способ «Oversampling», но останавливаться на нем без необходимости не будем.
Итак, проектируем измеритель температуры. Сначала нужно определиться с типом преобразователя, который будет переводить температуру в электрический сигнал. Как Вы, наверное, знаете, для этих целей можно использовать:
1) термопары. Относительно недорогие, но сигнал от них слабый, его требуется усиливать. Кроме того, требуется компенсация температуры «холодного» спая (термопара измеряет разность температур между
46
«холодным» и «горячим» спаями). Существует множество разновидностей термопар для работы в различных диапазонах температур. Самые распространенные — медь/константан (работает до 200-300 С) и хромель/алюмель (Ni / NiCr, type K, до 1200 С)
2)датчик сопротивления. Это может быть платиновый (Pt: Pt100, Pt1000, ТСП-50 (термометр сопротивления платиновый))или медный (Cu100, ТСМ-100) RTS (обладают неплохой линейностью, стабильностью и хорошей повторяемостью параметров от экземпляра к экземпляру), полупроводниковый PTC/NTC термистор (дешевый, но нелинейный и имеет большой разброс параметров между экземплярами). Как правило, также требует предварительного усиления и масштабирования сигнала. Существуют удобные почти линейные полупроводниковые датчики сопротивления, например KTY-83-111. Подключать их к микроконтроллеру очень просто.
3)P-n -переход диода или транзистора. Достаточно дешевый способ. Технологичный (встроить диод в процессор несложно). Но сигнал сильно нелинеен, имеет узкий диапазон значений и требует усиления.
4)Датчик с непосредственным цифровым выходом, например, DS18B20. Для его подключения не требуется АЦП. Посредством интерфейса Dallas 1-wire процессор может запросить, а датчик ответит, какая его температура. Датчики удобные, с небольшим разбросом параметров между экземплярами, каждый имеет уникальный 48-битный номер, можно подключить их до 128 штук на одну пару проводов, тем самым охватить, например, производственную линию. Однако они стоят порядка 30...50 руб/шт и измеряют температуру от -30 до +125 градусов.
Для наших учебных целей выберем термопару, а температуру ее холодного спая которой будем измерять датчиком KTY-83-111.
Сигнал с имеющегося датчика необходимо усилить.
Согласно Datasheet на наш микроконтроллер, встроенный АЦП имеет следующие параметры:
•10-bit Resolution – разрешение 10 бит (1024 значения от min до max)
•0.5 LSB Integral Non-linearity
•±2 LSB Absolute Accuracy
Эти 2 параметра определяют, насколько точным и линейным будет преобразование. LSB – это вес наименьшего бита, Less Significant Bit.
• 13 - 260 μs Conversion Time
Допустимое время преобразования одной выборки
• Up to 15 kSPS at Maximum Resolution
Максимальная частота преобразования — 15 тысяч Samplings Per Second – выборок в секунду.
•8 Multiplexed Single Ended Input Channels
•7 Differential Input Channels
47
• 2 Differential Input Channels with Optional Gain of 10x and 200x
Эти 3 строки показывают, как можно организовать ввод сигнала в АЦП: либо по 1...8 отдельным Single-ended (относительно общего) входам, либо по 7 дифференциальным входам (выбираем 1, и относительно его измеряем все остальные). Имеется возможность выбрать 2 входа, и сигнал на них усилить в 10 или в 200 раз. Как раз подошло бы для термопары (но мы используем внешний инструментальный усилитель)!
• Optional Left adjustment for ADC Result Readout
результат преобразования (10 бит) можно поместить в 16-битный регистр в старшие (Left Arranged Result), либо в младшие (RAR) 10 бит.
• 0 - VCC ADC Input Voltage Range
Допустимые значения напряжений на входе. 12 вольт, и даже 7 подавать нельзя — выйдет из строя.
• Selectable 2.56V ADC Reference Voltage
В качестве эталонного напряжения для max можно выбрать встроенный стабилитрон на 2.56 вольт. Тогда 1 LSB = 2.56 / 1024 = 2.5 mV. Такой стабилизатор называют «ИОН» (источник опорного напряжения) или «Reference».
• Free Running or Single Conversion Mode
АЦП может постоянно «молотить» с момента включения (Free running), либо провести измерение, и остановиться. Следующее измерение необходимо запускать командой ADCSRA |= (1 << ADSC);
•ADC Start Conversion by Auto Triggering on Interrupt Sources Запуск преобразования может быть вызван внешними событиями.
•Interrupt on ADC Conversion Complete
По окончании преобразования может быть вызвано прерывание. В режиме Free-running в прерывании можно обработать каждый результат.
• Sleep Mode Noise Canceler
Для уменьшения ошибок и шумов, на время преобразования остальная часть микроконтроллера может быть остановлена.
Таким образом, имеется универсальный настраиваемый АЦП разрядностью 10 бит, быстродействием до 15 000 выборок/с.
Для моделирования создайте проект.
48
Последовательный интерфейс RS-232.
Впроектируемом Вами устройстве может потребоваться линия связи
скомпьютером либо с другими устройствами. Как правило, для этих целей применяется один из последовательных интерфейсов передачи данных. «Последовательный» - означает, что все данные, бит за битом, передаются по одной лини данных. В настоящее время широко распространены внутрисхемные интерфейсы SPI, I2C, Dallas 1-wire. Внешние
интерфейсы — RS-232, RS-422/485, Ethernet. Интерфейс определяет правила взаимодействия устройств на нескольких уровнях:
1)Физическом: определяются среда передачи (один провод, дифференциальная пара проводов, оптический кабель, радиоэфир), уровни логических «0» и «1» (например, +3...+18 вольт для «0» и -3...-18 вольт для «1» как в RS-232), способ синхронизации данных: устройства должны четко понимать, где заканчивается один бит, и начинается второй; где начало и конец передачи кадра, и т. п. Для синхронизации могут использоваться отдельные провода (SCK в SPI), четко определенные временнЫе интервалы (в RS-232), или другие способы.
2)Определяются правила передачи байтов, контроля целостности данных, управления приемом-передачей (если одна среда разделена между несколькими устройствами, и они потенциально могут передавать данные одновременно, то нужно сделать так, чтобы они не мешали друг другу)
3)Определяется высокоуровневый протокол: как поддерживается диалог между устройствами, как передаются/принимаются полезные данные, как обрабатываются ошибки. Примеры таких протоколов: Profibus,
…
Удаленная настройка оборудования, передача данных телеметрии, управление процессами в распределенной системе могут осуществляться таким способом.
Мы будем соединять микроконтроллер с компьютером, чтобы использовать его как систему сбора данных. Реализовав протокол …, Вы сможете подключить его к LabView, и тем самым, например, автоматизировать эксперимент.
Краткие сведения о протоколе RS-232.
Для двунаправленной передачи данных по протоколу RS-232 требуются 3 провода: GND (общий), Rx (прием), Tx (передача). Данные передаются уровнями напряжения:
лог. «0»: +3...+18 V;
лог. «1»: -3...-18 V;
В состоянии покоя на линиях установлен «1» (например, -9 вольт). Для каждого передаваемого байта в линию поступает:
1)стартовый бит «0»
2)5, 6, 7 или 8 битов данных (настраивается), начиная со старшего
3)1 или 2 «стоповых» бита «0»
49
Важно, что бит имеет строго заданную длительность: так осуществляется синхронизация.
Имеется набор стандартных скоростей передачи данных: 300 600 1200 2400 (4800) (7200) 9600 14400 19200 28800 33600 57600 115200 бод. (в данном случае, 1 бод = 1 бит/секунду). Соответственно, при скорости 115 200 бод, длительность 1 бита будет 8.68 мкс.
Для промышленного оборудования наиболее распространенной скоростью является 9600 бод: t=10.42 мс.
Как правило, для скорости 9600 по протоколу RS-232 удается настроить связь на длине до 100м, а на 115200
– порядка 10м. Ограничение обусловлено параметрами линии: ее сопротивлением, емкостью и индуктивностью, а так же наличием внешних помех. Связь устойчива, если принимающей стороне удается правильно расшифровать принимаемые данные. «Область нечувствительности» от -3 до +3
вольт нужна для