Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Методичка MCU

.pdf
Скачиваний:
18
Добавлен:
23.02.2015
Размер:
1.03 Mб
Скачать

}

Функцию можно реализовать также и с использованием массива из 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

вольт нужна для