КИПиА ЯМАЛ

МДК.01.02 · Слесарь по КИПиА · 6-й разряд

Тема 2.4. Системы управления на базе микроконтроллеров

Однокристальные микроконтроллеры; архитектура ATmega8535; Flash, SRAM, EEPROM; порты ввода-вывода; таймеры T0/T1/T2, watchdog, прерывания, режимы энергосбережения, аналоговый компаратор, АЦП, SPI, USART, программирование AVR и основы языка C.

2 ч теории2 ч практики
📘 Электронный учебник

Раздел занятия

План

Объём: 2 часа теории + 2 часа лабораторно-практического занятия.

  1. Однокристальные микроконтроллеры и их отличительные особенности.
  2. Архитектура ядра и структурная схема ATmega8535.
  3. Flash, SRAM, EEPROM и порты ввода-вывода.
  4. Таймеры-счётчики T0, T1, T2 и сторожевой таймер.
  5. Прерывания и режимы пониженного энергопотребления.
  6. Аналоговый компаратор и 10-битный АЦП.
  7. Последовательные интерфейсы SPI и USART.
  8. Способы программирования, защита кода и конфигурационные параметры.
  9. Система команд, SREG и основы AVR-ассемблера.
  10. Структура программы на языке C, переменные, операции, циклы и массивы.
  11. Управление портами, таймерами и АЦП из программы на C.

Раздел занятия

Лекция

Полный конспект лекции на 2 часа

Системы управления на базе микроконтроллеров

Объём: 2 академических часа теории. Учебная модель — ATmega8535 семейства AVR.

1. Однокристальный микроконтроллер

Микроконтроллер объединяет вычислительное ядро, память и периферийные устройства на одном кристалле. В отличие от классической микропроцессорной системы, большая часть памяти, портов, таймеров и интерфейсов уже встроена. Это делает микроконтроллер удобным для локального управления технологическими узлами и приборами.

ATmega8535 содержит 8 КБ Flash-памяти программ, 512 Б SRAM, 512 Б EEPROM, 32 линии общего назначения, три таймера/счётчика, систему прерываний, SPI, USART, аналоговый компаратор, 8-канальный 10-битный АЦП и сторожевой таймер.

2. Ядро AVR и память

AVR использует набор рабочих регистров, напрямую связанных с АЛУ. Регистр состояния SREG содержит признаки результата операций и глобальный признак разрешения прерываний. Программа хранится во Flash; SRAM используется для переменных, стека и временных данных; EEPROM предназначена для параметров, которые должны сохраняться после отключения питания.

3. Порты ввода/вывода

Цифровой порт настраивается тремя основными регистрами. DDRx задаёт направление линии: вход или выход. PORTx задаёт выходной уровень, а для входа может включать внутреннюю подтяжку. PINx используется для чтения фактического состояния выводов.

DDRB |= (1 << PB0);     // PB0 — выход
PORTB |= (1 << PB0);   // установить 1
PORTB &= ~(1 << PB0);  // установить 0

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

4. Таймеры T0, T1 и T2

Таймеры считают тактовые импульсы и используются для задержек, периодических событий, измерения длительности, подсчёта внешних событий и формирования PWM. T0 и T2 имеют 8-битную разрядность, T1 — 16-битную. Предделитель уменьшает частоту счёта и увеличивает доступный интервал времени.

16-битный T1 удобен для измерения периода и длительности импульсов. Регистры сравнения и захвата позволяют реализовывать точные временные функции. T2 может использовать отдельные режимы, включая асинхронную работу.

5. Сторожевой таймер

Watchdog работает от отдельного источника времени. Если программа не обслужит его до истечения заданного интервала, будет сформирован сброс. Это средство восстановления после зависания, но оно не должно скрывать реальную причину сбоя.

6. Прерывания

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

7. Режимы пониженного энергопотребления

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

8. Аналоговый компаратор и АЦП

Аналоговый компаратор сравнивает два напряжения и формирует цифровой признак результата. Встроенный АЦП преобразует выбранное аналоговое напряжение в 10-битный код 0…1023. Для идеального расчёта можно использовать формулу D ≈ Uвх / Vref × 1023.

Uвх при Vref=5 ВКод
0 В0
1,25 В≈256
2,50 В≈512
3,75 В≈767
5,00 В1023

Эта часть связывает тему с ранее изученными АЦП: теперь выбор канала, опоры, запуск преобразования и обработка результата выполняются программой микроконтроллера.

9. SPI

SPI — синхронный последовательный интерфейс. Ведущий формирует SCK, линия MOSI передаёт данные от Master к Slave, MISO — в обратном направлении, SS используется для выбора ведомого и управления режимом Slave. SPI часто применяется для связи с памятью, внешними АЦП/ЦАП и другими периферийными устройствами.

10. USART

USART обеспечивает последовательный обмен и поддерживает синхронный и асинхронный режимы. В асинхронном режиме стороны должны согласовать скорость передачи и формат кадра. Для диагностики проверяют частоту тактирования, baud rate, количество бит данных, чётность и стоповые биты.

11. Программирование микроконтроллера

Программа на языке C или ассемблере преобразуется в машинный код, после чего записывается во Flash. Отдельно могут программироваться EEPROM и конфигурационные параметры. Защита кода ограничивает чтение и изменение содержимого. Неверная настройка конфигурации, например источника тактирования, способна привести к тому, что исправный микроконтроллер перестанет запускаться ожидаемым образом.

12. AVR-ассемблер

В рамках темы рассматриваются система команд AVR, нотация, директивы, SREG и способы адресации памяти. Основные группы команд: передача управления, проверки и пропуски, логические операции, сдвиги и операции с битами, арифметика, пересылка данных и системное управление.

13. Язык C для AVR

Программа на C содержит заголовки, функции, переменные, константы, операторы и комментарии. Для встроенного устройства типична функция main() и бесконечный рабочий цикл while(1). Побитовые операции применяются для настройки отдельных битов аппаратных регистров.

#include <avr/io.h>

int main(void)
{
    DDRB |= (1 << PB0);
    while (1) {
        PORTB ^= (1 << PB0);
    }
}

Управление портами, таймерами и АЦП выполняется через чтение и запись регистров периферии. Поэтому при поиске неисправности всегда проверяют и программу, и электрическую часть.

14. Пример системы управления

Типовая цепочка: датчик → АЦП → программа → алгоритм принятия решения → GPIO/PWM → исполнительное устройство. Микроконтроллер объединяет измерение, обработку, временные функции и обмен.

15. Диагностика

Если система не запускается, проверку ведут последовательно: питание и AVCC → RESET → источник тактирования и конфигурацию → GPIO → таймеры и периферию → программу. Для неверных показаний АЦП проверяют опорное напряжение, выбранный канал, аналоговый вход и масштабирование. Для ошибок USART — частоту тактирования и параметры кадра.

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

Открыть полный конспект PDF · Скачать Word

Раздел занятия

Практика

Лабораторно-практическая работа

Порты, таймеры, АЦП и программа управления ATmega8535

  1. Определить назначение основных узлов по структурной схеме.
  2. Разобрать настройку GPIO через DDRx, PORTx и PINx.
  3. Рассчитать период переполнения таймера T0 при заданной частоте и предделителе.
  4. Разобрать последовательность обработки прерывания.
  5. Рассчитать цифровой код 10-битного АЦП для заданного входного напряжения.
  6. Разобрать назначение линий SPI и обмен USART.
  7. Прокомментировать простые фрагменты программы на C для AVR.
  8. Выполнить назначенную работу на ПК с АОС «Системы КИПиА компрессорной станции».

Результат: заполненный бланк ЛПЗ и вывод о взаимодействии аппаратной части микроконтроллера и программы управления.

Лабораторно-практическая работа: Порты, таймеры, АЦП и программа управления ATmega8535

1. Назначение основных узлов по структурной схеме

ATmega8535 — низкопотребляющий 8-разрядный КМОП-микроконтроллер, построенный на усовершенствованной RISC-архитектуре AVR. Он выполняет большинство инструкций за один такт, достигая производительности, приближающейся к 1 MIPS на 1 МГц, что позволяет разработчику оптимизировать соотношение потребляемой мощности и скорости обработки. Структурная схема (Figure 2 в даташите) включает следующие функциональные узлы:

  • AVR CPU Core — ядро процессора, обеспечивающее выборку и исполнение инструкций.

  • Program Memory (Flash) — 8 Кбайт внутрисистемно программируемой флеш-памяти для хранения кода программы.

  • SRAM — 512 байт оперативной памяти данных.

  • EEPROM — 512 байт энергонезависимой памяти для хранения данных.

  • 32 × 8 General Purpose Registers — 32 восьмиразрядных регистра общего назначения, обеспечивающих однотактовый доступ и работу АЛУ.

  • ALU (Arithmetic Logic Unit) — арифметико-логическое устройство для выполнения вычислений и логических операций.

  • Status Register (SREG) — регистр состояния, содержащий флаги результатов операций.

  • Program Counter (PC) — счётчик команд, адресующий текущую инструкцию во Flash-памяти.

  • Stack Pointer (SP) — указатель стека, адресующий область стека в SRAM.

  • Instruction Decoder & Control Unit — дешифратор команд и устройство управления.

  • Interrupt Unit — блок обработки прерываний.

  • PORTA – PORTD — четыре 8-разрядных двунаправленных порта ввода-вывода (PA0–PA7, PB0–PB7, PC0–PC7, PD0–PD7) с цифровыми интерфейсами и драйверами/буферами.

  • ADC MUX & TWI Interface — аналоговый мультиплексор АЦП и интерфейс TWI (I²C).

  • Timers/Counters — три таймера/счётчика (T0, T1, T2).

  • Oscillator — тактовый генератор с внутренним калиброванным источником и выводами XTAL1/XTAL2.

  • Watchdog Timer — сторожевой таймер.

  • SPI — интерфейс последовательной периферии.

  • USART — универсальный синхронно-асинхронный приёмопередатчик.

  • Analog Comparator — аналоговый компаратор.

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

2. Настройка GPIO через DDRx, PORTx и PINx

Каждый вывод порта управляется тремя битами в трёх регистрах:

РегистрНазначение
DDRxData Direction Register — задаёт направление: 1 = выход, 0 = вход
PORTxПри выходе: 1 = высокий уровень, 0 = низкий. При входе: 1 = включение подтягивающего резистора, 0 = отключение
PINxЧтение фактического логического уровня на выводе (независимо от направления)

Алгоритм настройки вывода:

  1. Настройка на выход: записать 1 в соответствующий бит DDRx. Затем управлять уровнем через PORTx (1 — высокий, 0 — низкий).

  2. Настройка на вход: записать 0 в DDRx. Для включения внутреннего подтягивающего резистора записать 1 в PORTx; для отключения — 0.

  3. Чтение: состояние вывода всегда доступно через PINx.

Пример на C (мигание светодиодом на RC3):

c
#include <io.h> #include <delay.h> void main(void) { PORTC = 0x00; // начальное состояние — низкий уровень DDRC = 0x08; // PC3 — выход (бит 3 = 1) while (1) { PORTC = 0x08; // PC3 = 1 delay_ms(1000); PORTC = 0x00; // PC3 = 0 delay_ms(1000); } }

Здесь DDRC = 0x08 настраивает только третий бит (PC3) как выход, остальные остаются входами. PORTC = 0x08 устанавливает высокий уровень на PC3, PORTC = 0x00 — низкий.

3. Расчёт периода переполнения таймера T0

Таймер/счётчик 0 (T0) — 8-разрядный, считает от 0 до 255 (0xFF), после чего генерирует прерывание по переполнению. Период переполнения определяется формулой:

Tovf=N⋅256fclkTovf​=fclk​N⋅256​

где NN — коэффициент предделителя (1, 8, 64, 256, 1024), fclkfclk​ — тактовая частота.

Пример расчёта для fclk=4fclk​=4 МГц и N=1024N=1024:

Tovf=1024⋅2564 000 000=0,065536 с≈65,5 мсTovf​=40000001024⋅256​=0,065536 с≈65,5 мс

Это максимальная задержка, которую можно получить с T0 при данном предделителе. Для получения конкретной уставки TtimerTtimer​ начальное значение TCNT0 рассчитывается как:

TCNT0=256−Ttimer⋅fclkNTCNT0=256−NTtimer​⋅fclk​​

Например, для Ttimer=10Ttimer​=10 мс при N=1024N=1024 и fclk=4fclk​=4 МГц:

TCNT0=256−0,01⋅4 000 0001024=256−39=217TCNT0=256−10240,01⋅4000000​=256−39=217

Таким образом, записав 217 в TCNT0, получим задержку 10 мс. Максимальное время задержки с T0 при fclk=4fclk​=4 МГц и N=1024N=1024 составляет 65,5 мс; для получения больших задержек (например, 500 мс) необходимо накапливать несколько переполнений.

4. Последовательность обработки прерывания

Обработка прерывания в ATmega8535 происходит следующим образом:

  1. Возникновение события — аппаратное событие (переполнение таймера, завершение АЦП, внешний сигнал) устанавливает соответствующий флаг прерывания.

  2. Проверка разрешения — если установлен бит разрешения данного прерывания и глобальный бит I в регистре SREG, прерывание активируется.

  3. Сохранение контекста — аппаратно сохраняется адрес возврата (текущее значение PC) в стеке. Глобальный бит I автоматически сбрасывается, запрещая вложенные прерывания.

  4. Переход на вектор — PC загружается адресом вектора прерывания из таблицы векторов (для INT0 — адрес $001, для INT1 — $002 и т. д.). Каждый вектор занимает 2 байта и обычно содержит инструкцию перехода (RJMP) на подпрограмму обработки.

  5. Выполнение обработчика — выполняется пользовательская подпрограмма обслуживания прерывания (ISR). При необходимости в ней можно программно сохранить регистр SREG (в AVR он не сохраняется автоматически).

  6. Возврат из прерывания — инструкция RETI восстанавливает PC из стека и автоматически устанавливает бит I, разрешая прерывания.

Важно: после выхода из прерывания AVR всегда выполняет ещё одну инструкцию основной программы, прежде чем обслужить следующее ожидающее прерывание. Для организации вложенных прерываний необходимо в ISR вручную установить бит I в SREG.

5. Расчёт цифрового кода 10-битного АЦП

АЦП ATmega8535 — 10-разрядный, последовательного приближения, с диапазоном 0…1023 (1024 дискреты). Цифровой код рассчитывается по формуле:

ADC=VIN⋅1024VREFADC=VREF​VIN​⋅1024​

где VINVIN​ — входное напряжение, VREFVREF​ — опорное напряжение.

Пример: VREF=5VREF​=5 В, VIN=2,5VIN​=2,5 В:

ADC=2,5⋅10245=512ADC=52,5⋅1024​=512

Пример: VREF=2,56VREF​=2,56 В (внутренний источник), VIN=1,28VIN​=1,28 В:

ADC=1,28⋅10242,56=512ADC=2,561,28⋅1024​=512

В качестве источника опорного напряжения могут использоваться: напряжение питания AVCC, внутренний стабилизированный источник 2,56 В или внешнее напряжение на выводе AREF. Минимальное распознаваемое напряжение (разрешающая способность) при VREF=5VREF​=5 В составляет:

Umin=51024≈4,88 мВUmin​=10245​≈4,88 мВ

.

6. Назначение линий SPI и обмен USART

SPI (Serial Peripheral Interface)

SPI — высокоскоростной синхронный последовательный интерфейс. Задействованы три основные линии:

ЛинияВывод ATmega8535Назначение
SCKPB7Тактовый сигнал, генерируемый Master-устройством
MOSIPB5Master Output, Slave Input — данные от ведущего к ведомому
MISOPB6Master Input, Slave Output — данные от ведомого к ведущему

Дополнительно используется линия SS (Slave Select, PB4) для выбора ведомого устройства: при низком уровне на SS SPI активируется в режиме Slave. SPI также применяется для внутрисхемного программирования Flash и EEPROM при удержании RESET на низком уровне.

USART (Universal Synchronous/Asynchronous Receiver/Transmitter)

USART обеспечивает последовательный обмен данными в асинхронном и синхронном режимах, поддерживая полный дуплекс. Основные линии:

  • TXD — передача данных (выход)

  • RXD — приём данных (вход)

  • XCK — внешний тактовый сигнал (только для синхронного режима)

Скорость обмена задаётся регистром UBRR:

UBRR=fclk16⋅BAUD−1UBRR=16⋅BAUDfclk​​−1

Настройка USART включает: включение приёмника (RXEN) и передатчика (TXEN) в регистре UCSRB, выбор формата кадра (размер данных, чётность, стоп-биты) в UCSRC, установку скорости через UBRRH/UBRRL. Передача данных осуществляется записью в регистр UDR; при этом проверяется флаг UDRE (готовность буфера передачи).

7. Комментарии к фрагментам программы на C для AVR

Пример 1 — Настройка порта и мигание светодиодом:

c
#include <io.h> // Подключение определений регистров ввода-вывода #include <delay.h> // Подключение функций задержки void main(void) { PORTC = 0x00; // Установить все выводы PORTC в низкий уровень DDRC = 0x08; // Настроить PC3 как выход (бит 3 = 1) while (1) { // Бесконечный цикл PORTC = 0x08; // Установить PC3 в высокий уровень delay_ms(1000); // Задержка 1000 мс PORTC = 0x00; // Установить PC3 в низкий уровень delay_ms(1000); // Задержка 1000 мс } }

Программа настраивает вывод PC3 как выход и периодически изменяет его состояние, создавая мигание светодиода с периодом 2 секунды.

Пример 2 — Инициализация USART:

c
#define F_CPU 4000000UL // Тактовая частота 4 МГц #define BAUD 9600 // Скорость 9600 бод #define BRC ((F_CPU/16/BAUD) - 1) // Расчёт значения UBRR void USART_Init(void) { UBRRH = (BRC >> 8); // Старший байт UBRR UBRRL = BRC; // Младший байт UBRR UCSRB = (1<<RXEN)|(1<<TXEN); // Включить приёмник и передатчик UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); // 8 бит данных, 1 стоп-бит }

Здесь BRC вычисляется по формуле UBRR=fclk16⋅BAUD−1UBRR=16⋅BAUDfclk​​−1, что для 4 МГц и 9600 бод даёт BRC=25BRC=25. Бит URSEL в UCSRC необходим для доступа к регистру UCSRC (так как он разделяет адрес с UBRRH).

Пример 3 — Передача байта через USART:

c
void USART_Transmit(unsigned char data) { while (!(UCSRA & (1<<UDRE))); // Ожидание готовности буфера передачи UDR = data; // Загрузка данных в буфер — начало передачи }

Флаг UDRE устанавливается, когда буфер передачи пуст и готов принять новые данные.

8. Выполнение работы на ПК с АОС «Системы КИПиА компрессорной станции»

Выполнение данного пункта предполагает работу в специализированной автоматизированной обучающей системе (АОС), моделирующей функции контрольно-измерительных приборов и автоматики (КИПиА) компрессорной станции. В рамках работы необходимо:

  1. Ознакомиться с интерфейсом АОС — изучить мнемосхему компрессорной станции, панели управления и индикации.

  2. Выполнить назначенное задание — в зависимости от варианта это может быть: настройка уставок датчиков давления/температуры, имитация аварийных ситуаций, проверка работы исполнительных механизмов, анализ показаний АЦП при изменении входного сигнала.

  3. Сопоставить поведение аппаратной части (модель ATmega8535) с реакцией программы управления — убедиться, что при изменении входного аналогового сигнала соответствующим образом изменяется цифровой код АЦП, срабатывают пороги, выдаются управляющие воздействия на порты.

  4. Зафиксировать результаты в бланке ЛПЗ: значения уставок, коды АЦП, состояния портов, реакции системы.

Краткий вывод о взаимодействии аппаратной части микроконтроллера и программы управления

ATmega8535 представляет собой целостную микропроцессорную систему, в которой аппаратные модули (порты ввода-вывода, таймеры, АЦП, интерфейсы SPI/USART) управляются программно через специализированные регистры. Порты обеспечивают физическое подключение к внешним устройствам: регистры DDRx задают направление, PORTx управляют уровнем, PINx позволяют читать состояние. Таймеры генерируют временные интервалы и прерывания, позволяя программе выполнять периодические действия независимо от основного цикла. АЦП преобразует аналоговые сигналы датчиков в цифровой код по формуле ADC=VIN⋅1024VREFADC=VREF​VIN​⋅1024​, делая возможной обработку физических величин в реальном времени. Прерывания обеспечивают реакцию системы на события без постоянного опроса, повышая эффективность программы. Интерфейсы SPI и USART реализуют обмен данными с периферийными устройствами и системами верхнего уровня.

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




Раздел занятия

Тренажёр

Тренажёр для этой темы пока не подключён.

Раздел занятия

Документы

Раздел занятия

Отчёт

Проведена индивидуальная консультация по теме «Системы управления на базе микроконтроллеров» МДК.01.02 для слесаря по КИПиА 6-го разряда. Рассмотрены архитектура ATmega8535, организация памяти, порты ввода-вывода, таймеры, watchdog, прерывания, АЦП, SPI и USART, способы программирования и основы AVR-ассемблера и языка C. Выполнены практические задания по настройке портов, расчёту таймера и АЦП и анализу программы управления.