Files
APS/Lectures/21. Microcontrollers.md
markast555 469f42e7f5 Корректировка конспектов лекций (#131)
* Корректировки конспектов лекций

* Корректировка конспекта лекции 5

* Корректировка конспекта лекции 8

* Корректировка конспекта лекции 9

* Корректировка конспекта лекции 10

* Корректировка конспекта лекции 11

* Корректировка конспекта лекции 12

* Корректировка конспекта лекции 13

* Корректировка конспекта лекции 12

* Корректировка конспекта лекции 14

* Корректировка конспекта лекции 16

* Корректировка конспекта лекции 17

* Корректировка конспекта лекции

* Корректировка конспекта лекции 20

* Корректировка конспекта лекции 21

* Корректировка конспекта лекции 22

* Корректировка конспекта лекции 23

* Корректировка конспекта лекции 13

* Корректировка конспекта лекции 12

* Корректировка конспекта лекции 20
2025-06-22 16:54:22 +03:00

232 lines
19 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Лекция 21. Микроконтроллеры
## Содержание
- [Лекция 21. Микроконтроллеры](#лекция-21-микроконтроллеры)
- [Содержание](#содержание)
- [Микроконтроллеры на примере PIC](#микроконтроллеры-на-примере-pic)
- [PIC16F18313](#pic16f18313)
- [Микроконтроллеры на примере ARM](#микроконтроллеры-на-примере-arm)
- [Программа для микроконтроллера stm32f10x на языке C](#программа-для-микроконтроллера-stm32f10x-на-языке-c)
- [Основные материалы лекции](#основные-материалы-лекции)
- [Дополнительные материалы к лекции](#дополнительные-материалы-к-лекции)
> *Микроконтроллер* — это устройство, которое объединяет в себе процессор и ряд периферийных устройств и занимается управлением.
Электронные устройства можно условно разделить на несколько категорий:
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. Цифро-аналоговый преобразователь (ЦАП или DAC) и другие.
Микроконтроллеры внутри рассматриваемого семейства отличаются размером памяти, количеством ножек, аналогово-цифровых преобразователей и максимальной аналогово-цифровой разрешающей способностью.
### PIC16F18313
Рассмотрим микроконтроллер PIC16F18313. В [документации](https://ww1.microchip.com/downloads/aemDocuments/documents/MCU08/ProductDocuments/DataSheets/40001799F.pdf) можно узнать, что это за контроллер и что он умеет.
Например:
- это RISC контроллер, поддерживающий 48 инструкций;
- его входная тактовая частота — 32 MHz, минимальный тактовый цикл — 125 ns (величина критического пути);
- Он имеет C-компилятор, систему прерываний, 16-уровневый стек для вызова подпрограмм, четыре 8-битых таймера, Watchdog Timer (когда таймер досчитывает до конца, он сбрасывает микроконтроллер, то есть перезапускает его. Он нужен для того, чтобы избежать зависаний во время работы) и т.д.
Данный микроконтроллер имеет 3 конфигурации: с 8-ю, 14-ю и 16-ю ножкам.
![../.pic/Lectures/21.%20Microcontrollers/fig_01.png](../.pic/Lectures/21.%20Microcontrollers/fig_01.png)
*Рис. 1. Микроконтроллер PIC16F18313 с 8-ю ножками.*
Для каждой конфигурации имеется табличка, в которой расписано, для чего может использоваться каждый конкретный вывод.
![../.pic/Lectures/21.%20Microcontrollers/fig_02.png](../.pic/Lectures/21.%20Microcontrollers/fig_02.png)
*Рис. 2. Таблица подключения периферийных устройств для микроконтроллера PIC16F18313 с 8-ю ножками.*
![../.pic/Lectures/21.%20Microcontrollers/fig_03.png](../.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](../.pic/Lectures/21.%20Microcontrollers/fig_04.png)
*Рис. 4. Рекомендуемое минимальное подключение микроконтроллера PIC16F18313.*
![../.pic/Lectures/21.%20Microcontrollers/fig_05.png](../.pic/Lectures/21.%20Microcontrollers/fig_05.png)
*Рис. 5. Тракт данных ядра (микроархитектура).*
Память программ, на которую указывает PC. Из нее выходит 14-битная инструкция, которая попадает в регистр инструкций. Данные из регистра используются для адресации в RAM и в устроистве управления (Instruction Decode and Control), которое формирует управляющие сигналы для всех блоков процессора.
Также мы видим аккумуляторную архитектуру, то есть один из входов АЛУ — это регистр аккумулятор (W Reg).
Управление системой происходит по обращению к конкретным адресам:
![../.pic/Lectures/21.%20Microcontrollers/fig_06.png](../.pic/Lectures/21.%20Microcontrollers/fig_06.png)
*Рис. 6. Адреса регистров.*
![../.pic/Lectures/21.%20Microcontrollers/fig_07.png](../.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](../.pic/Lectures/21.%20Microcontrollers/fig_08.png)
*Рис. 8. Схема подключения PIC32.*
Программатор одной стороной подключается к микроконтроллеру, а другой к компьютеру.
![../.pic/Lectures/21.%20Microcontrollers/fig_09.png](../.pic/Lectures/21.%20Microcontrollers/fig_09.png)
*Рис. 9. Программатор.*
![../.pic/Lectures/21.%20Microcontrollers/fig_10.png](../.pic/Lectures/21.%20Microcontrollers/fig_10.png)
*Рис. 10. Пример кода, для отладки микроконтроллера.*
## Микроконтроллеры на примере ARM
Посмотрим 32-битный ARM микроконтроллер [STM32H723VE](https://www.st.com/en/microcontrollers-microprocessors/stm32h723ve.html).
Видим, что у данного контроллера ядро Cortex-M7, он работает на частоте 550 MHz, имеет 1 MB флэш-памяти, 564 KB оперативной памяти.
![../.pic/Lectures/21.%20Microcontrollers/fig_11.png](../.pic/Lectures/21.%20Microcontrollers/fig_11.png)
*Рис. 11. Характеристики микроконтроллера STM32H723VE.*
Ядро умеет работать с числами с плавающей запятой.
Контроллер может работать с графикой, имеет режим low power (низкого энергопотребления), аналоговую периферию, 4 DMA (прямой доступ к памяти), 24 таймера, термометр, генератор случайных чисел.
![../.pic/Lectures/21.%20Microcontrollers/fig_12.png](../.pic/Lectures/21.%20Microcontrollers/fig_12.png)
*Рис. 12. Схема микроконтроллера STM32H723VE.*
В верхнем левом углу видим ядро, у которого отдельные кэш данных и кэш инструкции. Из него выходят наружу интерфейсы JTAG и ETM.
К ядру подключены 2 блока памяти данных, память инструкций.
У микроконтроллера много различных шин, работающих на разных скоростях, что необходимо для увеличения эффективности питания и работы. Например, периферия работает на более низких скоростях, а значит для нее нет необходимости делать лишние тактирования, которые происходили бы на высокоскоростной шине.
### Программа для микроконтроллера stm32f10x на языке C
Данная программа управляет миганием светодиода, подключенного к 5 разряду порта B:
```C
#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](../.pic/Lectures/21.%20Microcontrollers/fig_13.png)
*Рис. 13. Структурная организация ARM7.*
ARM7 — это классический представитель ядер для микроконтроллеров.
Он включает в себя:
- Конвейер команд, подключенный к декодеру команд, который управляет всеми блоками тракта данных процессора;
- 32-битное АЛУ, которое может записывать в регистровый файл либо выдавать свое значение на регистр адреса, чтобы обращаться к основной памяти;
- Регистровый файл, один из регистров которого счетчик команд (PC), второй подключен к АЛУ.
У ARM7 старая архитектура. Она развивалась и появились новые ядра. Например, ARM9.
В него входят:
- Регистровый файл;
- Множество мультиплексоров, которые выбирают откуда и что пойдет на АЛУ;
- АЛУ;
- Shifter.
![../.pic/Lectures/21.%20Microcontrollers/fig_14.png](../.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](../.pic/Lectures/21.%20Microcontrollers/fig_15.png)
*Рис. 15. Схема работы Cortex-A9.*
Современные реализации микроконтроллеров могут включать в себя несколько ядер.
![../.pic/Lectures/21.%20Microcontrollers/fig_16.png](../.pic/Lectures/21.%20Microcontrollers/fig_16.png)
*Рис. 16. Cortex-A7 и Cortex-A15.*
При использовании двух ядер, одно может быть менее производительным чем другое, но при этом потреблять меньше энергии и использоваться в сценариях, где не нужна высокая эффективность. Переключения между ядрами позволяет балансировать между затратами на энергию и производительностью.
## Основные материалы лекции
1. [Ссылка](https://www.youtube.com/watch?v=Z0ohQdYn2VU&list=PL0def37HEo5KHPjwK7A5bd4RJGg4djPVf&index=21) на видеозапись лекции.
## Дополнительные материалы к лекции
1. [Ссылка](https://www.microchip.com/en-us/products/microcontrollers-and-microprocessors/8-bit-mcus/pic-mcus) на сайт производителя микропроцессоров PIC.
2. [Ссылка](https://onedrive.live.com/?authkey=%21AIXUSz0MyutL6hs&cid=1FF28DEC684C2C56&id=1FF28DEC684C2C56%2181801&parId=1FF28DEC684C2C56%2181696&o=OneUp) на статью, в которой описана сборка однотактного процессора с архитектурой PIC.