Files
APS/Lectures/21. Microcontrollers.md
2023-12-11 21:11:00 +03:00

19 KiB
Raw Blame History

Лекция 21. Микроконтроллеры

Содержание

Микроконтроллер — это устройство, которое объединяет в себе процессор и ряд периферийных устройств и занимается управлением.

Электронные устройства можно условно разделить на несколько категорий:

  1. Различные встраиваемые системы (которые куда-то встраиваются; например, встроенные в микроволновку, холодильник или телевизор)
  2. Системы общего назначения (персональные компьютеры, ноутбуки, мобильные телефоны)

В 70-х годах компанией Texas Instruments произведен первый патент на тему микроконтроллеров: "Организация микро-ЭВМ на одной микросхеме". Фактически контроллер является микро-ЭВМ (системой, которая объединяет процессор, периферийные модули, память команд, память данных).

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

Контроллеры бывают различной разрядности.

  • 8-битные. Они используются для решения простых задач (например, для сравнения каких-то параметров);
  • 16-битные. Они используются для более сложных задач, чем 8-битные, где нужна большая точность (например, для управления каким-то двигателем);
  • 32-битные контроллеры выполняют какие-либо вычисления: решают алгоритмы, проводят анализ сигналов.

Чтобы проверить подходит ли данный контроллер для устройства можно купить его и самому проверить, а можно купить отладочный комплект (starter kit или учебный комплект).

Микроконтроллеры на примере PIC

Существуют различные семейства микроконтроллеров PIC. Они отличаются специализацией под определенные устройства и задачи.

Например в контроллерах семейства PIC16F19197 предусмотренно управление LCD-дисплеем.

Рассмотрим семейство PIC16F18446 (используется для подключения сенсоров, имеет низкое потребление энергии, маленький форм-фактор). Контроллеры данного семейства устанавливаются в маленькие устройства (может быть с батарейным питанием), которые получают значения с датчиков.

Помимо процессорного ядра на микросхеме находятся различные периферийные устройства. Например:

  1. 12-битные аналого-цифровые преобразователи (для преобразования непрерывного во времени аналогового сигнала, в котором информация кодируется в виде уровня напряжения, в цифровой сигнал, который кодируется ноликами и единичками);
  2. Компараторы (сравнивают аналоговые сигналы друг с другом);
  3. Конфигурируемые логические ячейки (CLC или Configurable Logic Cell);
  4. Флеш память программ, основная память;
  5. EEPROM (электрически перезаписываемая программируемая память);
  6. PWM (Pulse-width modulation или широтно-импульсная модуляция);
  7. Waveform generator (генерирует сигналы);
  8. Цифро-аналоговый преобразователь (ЦАП или DAG) и другие.

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

PIC16F18313

Рассмотрим микроконтроллер PIC16F18313. В документации можно узнать, что это за контроллер и что он умеет.

Например:

  • это RISC контроллер, поддерживающий 48 инструкций;
  • его входная тактовая частота — 32 MHz, минимальный тактовый цикл — 125 ns (величина критического пути);
  • Он имеет C-компилятор, систему прерываний, 16-уровневый стек для вызова подпрограмм, четыре 8-битых таймера, Watchdog Timer (когда таймер досчитывает до конца, он сбрасывает микроконтроллер, то есть перезапускает его. Он нужен для того, чтобы избежать зависаний во время работы) и т.д.

Данный микроконтроллер имеет 3 конфигурации: с 8-ю, 14-ю и 16-ю ножкам.

../.pic/Lectures/21.%20Microcontrollers/fig_01.png

Рис. 1. Микроконтроллер PIC16F18313 с 8-ю ножками.

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

../.pic/Lectures/21.%20Microcontrollers/fig_02.png

Рис. 2. Таблица подключения периферийных устройств для микроконтроллера PIC16F18313 с 8-ю ножками.

../.pic/Lectures/21.%20Microcontrollers/fig_03.png

Рис. 3. Схема микроконтроллера PIC16F18313.

У данного контроллера мы видим CPU (центральный процессор), Timing Generator, который формирует сигналы тактирования. Микроконтроллер выполнен по Гарвардской архитектуре, то есть у него разделена память команд и память данных. Порты ввода-вывода, периферийные устройства и память данных подключены к CPU общей шиной данных.

Для подключения микроконтроллера PIC16F18313 нужно между пинами питания (VDD (высокий потенциал) и VSS (нулевой потенциал или земля)) поставить конденсатор C2, а на вход MCLR собрать схему (Note 1).

../.pic/Lectures/21.%20Microcontrollers/fig_04.png

Рис. 4. Рекомендуемое минимальное подключение микроконтроллера PIC16F18313.

../.pic/Lectures/21.%20Microcontrollers/fig_05.png

Рис. 5. Тракт данных ядра (микроархитектура).

Память программ, на которую указывает PC. Из нее выходит 14-битная инструкция, которая попадает в регистр инструкций. Данные из регистра используются для адресации в RAM и в устроистве управления (Instruction Decode and Control), которое формирует управляющие сигналы для всех блоков процессора.

Также мы видим аккумуляторную архитектуру, то есть один из входов АЛУ — это регистр аккумулятор (W Reg).

Управление системой происходит по обращению к конкретным адресам:

../.pic/Lectures/21.%20Microcontrollers/fig_06.png

Рис. 6. Адреса регистров.

../.pic/Lectures/21.%20Microcontrollers/fig_07.png

Рис. 7. Форматы кодирования для микроконтроллера PIC16F18313.

Пример программирование 32-битного контроллера PIC. Для этого, после подключения питания (Bypass capacitors), подаем тактирование (SG636PCE 40MHz oscillator), подключаем микроконтроллер к программатору (RJ11 ICD3 Jack).

../.pic/Lectures/21.%20Microcontrollers/fig_08.png

Рис. 8. Схема подключения PIC32.

Программатор одной стороной подключается к микроконтроллеру, а другой к компьютеру.

../.pic/Lectures/21.%20Microcontrollers/fig_09.png

Рис. 9. Программатор.

../.pic/Lectures/21.%20Microcontrollers/fig_10.png

Рис. 10. Пример кода, для отладки микроконтроллера.

Микроконтроллеры на примере ARM

Посмотрим 32-битный ARM микроконтроллер STM32H723VE.

Видим, что у данного контроллера ядро Cortex-M7, он работает на частоте 550MHz, имеет 1 MB флэш-памяти, 564 KB оперативной памяти.

../.pic/Lectures/21.%20Microcontrollers/fig_11.png

Рис. 11. Характеристики микроконтроллера STM32H723VE.

Ядро умеет работать с числами с плавающей запятой.

Контроллер может работать с графикой, имеет режим low power (низкого энергопотребления), аналоговую периферию, 4 DMA (прямой доступ к памяти), 24 таймера, термометр, генератор случайных чисел.

../.pic/Lectures/21.%20Microcontrollers/fig_12.png

Рис. 12. Схема микроконтроллера STM32H723VE.

В верхнем левом углу видим ядро, у которого отдельные кэш данных и кэш инструкции. Из него выходят наружу интерфейсы JTAG и ETM.

К ядру подключены 2 блока памяти данных, память инструкций.

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

Программа для микроконтроллера stm32f10x на языке C

Данная программа управляет миганием светодиода, подключенного к 5 разряду порта B:

#include "stm32f10x.h"  //библиотека, созданная производителем микроконтроллеров

int main() {
    int i = 0;
    RCC->APB2ENR |= RCC_APB2ENR_IOPBEN  // включили тактирование порта B
    GPIOB->CRL   &= ~GPIO_CRL_CNFS;     // сконфигурировали порт, как выходной
    GPIOB->CRL   |= GPIO_CRL_MODES_0;   // задали скорость переключения порта

    while(1){
        i = 5000;
        while(i--);                     // уменьшает i до нуля
        GPIOB->BSRR = GPIO_BSRR_BS5;    // установить 5 разряд порта B в единицу
        i = 5000;
        while(i--);
        GPIOB->BSRR = GPIO_BSRR_BR5;    // установить 5 разряд порта B в ноль
    }
}

../.pic/Lectures/21.%20Microcontrollers/fig_13.png

Рис. 13. Структурная организация ARM7.

ARM7 — это классический представитель ядер для микроконтроллеров.

Он включает в себя:

  • Конвейер команд, подключенный к декодеру команд, который управляет всеми блоками тракта данных процессора;
  • 32-битное АЛУ, которое может записывать в регистровый файл либо выдавать свое значение на регистр адреса, чтобы обращаться к основной памяти;
  • Регистровый файл, один из регистров которого счетчик команд (PC), второй подключен к АЛУ.

У ARM7 старая архитектура. Она развивалась и появились новые ядра. Например, ARM9.

В него входят:

  • Регистрового файла;
  • Множество мультиплексоров, которые выбирают откуда и что пойдет на АЛУ;
  • АЛУ;
  • Shifter.

../.pic/Lectures/21.%20Microcontrollers/fig_14.png

Рис. 14. Структурная организация ARM9.

Cortex-A9 — более современное, чем ARM7 и ARM9, ядро. Он еще может встречаться в контроллерах.

У Cortex-A9 есть:

  • Кэш команд;
  • Блок предсказания переходов:
    • Глобальный буфер истории (Global history register);
    • Кэш конечных адресов перехода (Branch target buffer). В нем кэшируется адрес, куда будет произведен;
    • Стек адресов возврата;
  • Блок переименования регистров(переименование нужно для суперскалярности, устранения конфликтов read-after-write, write-after-write);
  • Окно диспетчеризации (очередь команд общая и она диспетчеризует куда пойдет следующая инструкция);
  • Исполнительные устройства (АЛУ с умножением, АЛУ, FPU — Floating Point Unit и другие).

../.pic/Lectures/21.%20Microcontrollers/fig_15.png

Рис. 15. Схема работы Cortex-A9.

Современные реализации микроконтроллеров могут включать в себя несколько ядер.

../.pic/Lectures/21.%20Microcontrollers/fig_16.png Рис. 16. Cortex-A7 и Cortex-A15.

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

Основные материалы лекции

  1. Ссылка на видеозапись лекции.

Дополнительные материалы к лекции

  1. Ссылка на сайт производителя микропроцессоров PIC.
  2. Ссылка на статью, в которой описана сборка однотактного процессора с архитектурой PIC.