Файл: Разработка лабораторного стенда по программированию микроконтроллера stm.doc
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 23.11.2023
Просмотров: 242
Скачиваний: 4
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
СОДЕРЖАНИЕ
1.БАЗОВЫЕ ПОНЯТИЯ О МИКРОКОНТРОЛЛЕРАХ
1.3.Основные сведения о широтно – импульсной модуляции
2.ОПИСАНИЕ ЛАБОРАТОРНОГО СТЕНДА
2.1.Описание среды программирования
2.2.Разработка комплекса лабораторных работ
2.3.Указания по выполнению лабораторной работы 1
2.4. Характеристика лабораторной работы 2
2.5. Характеристика лабораторной работы 3
2.6. Характеристика лабораторной работы 4
2.7. Характеристика лабораторной работы 5
Применение микроконтроллеров в современном мире очень широко, так как используется достаточно мощное вычислительное устройство с широким спектром возможностей, построенного на всего одной микросхеме это в значительной степени снижает энергопотребление и стоимость устройств, построенных на его базе.
Микроконтроллеры используют для управления различными электронными устройствами и отдельными блоками:
-
в вычислительной технике – контроллеры для жестких/гибких дисков, в материнских платах, калькуляторах; -
электронике и разнообразных устройствах бытовой техники, в которой используется электронные системы управления – микроволновых печах, стиральных машинах, телефонах, различных роботах, в системах «Умный дом».
Микроконтроллеры также нашли широкое применение в промышленности:
-
устройства промышленной автоматики – от программируемого реле до ПЛК; -
системы управления станками.
1.1.Микроконтроллеры STM32
В данной разработке лабораторного стенда используются микроконтроллеры STM32. Выбор пал именно на эти контроллеры из-за наличия в них интегрированной периферии – расширенных таймеров, которые позволяют формировать ШИМ – сигнал для управления 3-фазными двигателями, а именно такой ШИМ является целью исследований в лабораторных работах.
Микроконтроллеры STM32 выполнены на базе ядра ARM Cortex. На первый взгляд разница между микроконтроллерами STM32 и микроконтроллерами другой фирмы не видна, набор встроенных УВВ (устройств ввода-вывода) такие как АЦП, таймеры общего назначения, I2C, SPI, CAN, USB и часы реального времени имеют и самые обыкновенные микроконтроллеры. Но если рассматривать каждое из этих УВВ более детально станет очевидно, что в STM32 они устроены гораздо сложнее. Например, АЦП – аналогово – цифровой преобразователь имеет разрядность в 12 бит, а также имеет встроенный датчик температуры и поддерживает несколько режимов преобразования входных данных. Таймеры оснащены блоками захвата и сравнения и могут быть использованы как отдельно, так и синхронно, что позволяет создавать большие массивы таймеров. В STM32, как было сказано ранее, имеются, так называемые, расширенные таймеры (advanced timers), их используют для управления электродвигателями. Для этого у них предусмотрено шесть комплементарных ШИМ-выводов с программируемым мертвым временем (dead-time) [20].
В отличие от других микроконтроллеров в STM32 предусмотрен модуль DMA – прямой доступ к памяти, каждый канал данного модуля может быть использован для передачи данных между регистрами любого из УВВ и запоминающими устройствами.
Еще одним плюсом микроконтроллеров STM32 является сочетание характеристик малого энергопотребления и довольно высокой производительности. Они способны работать всего лишь от 2В-ого источника питания на тактовой частоте 72Мгц и потреблять в активном состоянии всего лишь 36мА, если же использовать поддерживаемые ядром Cortex экономные режимы работы, то можно снизить энергопотребление до ничтожных 2мА.
За безопасность в данном типе микроконтроллеров отвечают два сторожевых таймера (watchdog), которые позволяют в случае ошибки исполнения программы перезагрузить микроконтроллер автоматически и продолжить выполнение.
При разработке лабораторного стенда использовались микроконтроллеры STM32F103C8T6 (рисунок 1) и STM32F407VGT6 (рисунок 3).
Рисунок 3 – Микроконтроллер STM32F407VGT6
Микроконтроллер STM32F103C8T6 имеет 64Кб Flash – памяти и тактовую частоту ядра 72МГц. Выполнен на базе процессора ARM Cortex M3 и имеет 32-х битную архитектуру. Имеет в наличии один расширенный таймер TIM1 с помощью которого можно генерировать 3-х фазный ШИМ сигнал.
Микроконтроллер STM32F404VGT6 имеет 1Мб Flash- памяти и тактовую частоту ядра 192Мгц. В отличие от предыдущего STM32F4VGT6 выполнен на базе процессора ARM Cortex M4, который так же имеет 32-х битную архитектуру. В наличие имеется уже два расширенных таймера, а также двухканальный ЦАП, который будет использоваться в исследованиях.
1.2.Особенности программирования микроконтроллеров STM32
Программирование микроконтроллеров STM32 сводится к написанию алгоритма программы на языке программирования и записи исполняемой программы в память контроллера. Для написания программ будет использоваться язык C (Си). C (Си) – компилируемый статически типизированный язык программирования общего назначения, разработанный в 1969—1973 годах сотрудником Bell Labs Деннисом Ритчи как развитие языка Би.
Вначале код пишется на понятном для человека языке в среде программирования IDE, затем с помощью компилятора переводится в, так называемый, машинный код и записывается с помощью программатора в память микроконтроллера.
Для программирования STM32 на языке C существует множество платных и бесплатных сред разработок. Также существуют компиляторы для различных языков. Но в данной разработке используется язык программирования Си, следовательно, и компилятор будет использоваться для этого языка.
Для того чтобы научиться разрабатывать программное обеспечение для микроконтроллеров, которые будут использованы в лабораторных работах, необходимо научиться общаться с ними на одном языке [17].
Комментарии
Комментарии необходимы для пояснения кода программы и не являются частью кода. Комментарии бывают многострочные и однострочные. Однострочные и многострочные комментарии подробнее рассмотрены в таблице 1. Таблица 1 – Виды комментариев
1.1.Микроконтроллеры STM32
В данной разработке лабораторного стенда используются микроконтроллеры STM32. Выбор пал именно на эти контроллеры из-за наличия в них интегрированной периферии – расширенных таймеров, которые позволяют формировать ШИМ – сигнал для управления 3-фазными двигателями, а именно такой ШИМ является целью исследований в лабораторных работах.
Микроконтроллеры STM32 выполнены на базе ядра ARM Cortex. На первый взгляд разница между микроконтроллерами STM32 и микроконтроллерами другой фирмы не видна, набор встроенных УВВ (устройств ввода-вывода) такие как АЦП, таймеры общего назначения, I2C, SPI, CAN, USB и часы реального времени имеют и самые обыкновенные микроконтроллеры. Но если рассматривать каждое из этих УВВ более детально станет очевидно, что в STM32 они устроены гораздо сложнее. Например, АЦП – аналогово – цифровой преобразователь имеет разрядность в 12 бит, а также имеет встроенный датчик температуры и поддерживает несколько режимов преобразования входных данных. Таймеры оснащены блоками захвата и сравнения и могут быть использованы как отдельно, так и синхронно, что позволяет создавать большие массивы таймеров. В STM32, как было сказано ранее, имеются, так называемые, расширенные таймеры (advanced timers), их используют для управления электродвигателями. Для этого у них предусмотрено шесть комплементарных ШИМ-выводов с программируемым мертвым временем (dead-time) [20].
В отличие от других микроконтроллеров в STM32 предусмотрен модуль DMA – прямой доступ к памяти, каждый канал данного модуля может быть использован для передачи данных между регистрами любого из УВВ и запоминающими устройствами.
Еще одним плюсом микроконтроллеров STM32 является сочетание характеристик малого энергопотребления и довольно высокой производительности. Они способны работать всего лишь от 2В-ого источника питания на тактовой частоте 72Мгц и потреблять в активном состоянии всего лишь 36мА, если же использовать поддерживаемые ядром Cortex экономные режимы работы, то можно снизить энергопотребление до ничтожных 2мА.
За безопасность в данном типе микроконтроллеров отвечают два сторожевых таймера (watchdog), которые позволяют в случае ошибки исполнения программы перезагрузить микроконтроллер автоматически и продолжить выполнение.
При разработке лабораторного стенда использовались микроконтроллеры STM32F103C8T6 (рисунок 1) и STM32F407VGT6 (рисунок 3).
Рисунок 3 – Микроконтроллер STM32F407VGT6
Микроконтроллер STM32F103C8T6 имеет 64Кб Flash – памяти и тактовую частоту ядра 72МГц. Выполнен на базе процессора ARM Cortex M3 и имеет 32-х битную архитектуру. Имеет в наличии один расширенный таймер TIM1 с помощью которого можно генерировать 3-х фазный ШИМ сигнал.
Микроконтроллер STM32F404VGT6 имеет 1Мб Flash- памяти и тактовую частоту ядра 192Мгц. В отличие от предыдущего STM32F4VGT6 выполнен на базе процессора ARM Cortex M4, который так же имеет 32-х битную архитектуру. В наличие имеется уже два расширенных таймера, а также двухканальный ЦАП, который будет использоваться в исследованиях.
1.2.Особенности программирования микроконтроллеров STM32
Программирование микроконтроллеров STM32 сводится к написанию алгоритма программы на языке программирования и записи исполняемой программы в память контроллера. Для написания программ будет использоваться язык C (Си). C (Си) – компилируемый статически типизированный язык программирования общего назначения, разработанный в 1969—1973 годах сотрудником Bell Labs Деннисом Ритчи как развитие языка Би.
Вначале код пишется на понятном для человека языке в среде программирования IDE, затем с помощью компилятора переводится в, так называемый, машинный код и записывается с помощью программатора в память микроконтроллера.
Для программирования STM32 на языке C существует множество платных и бесплатных сред разработок. Также существуют компиляторы для различных языков. Но в данной разработке используется язык программирования Си, следовательно, и компилятор будет использоваться для этого языка.
Для того чтобы научиться разрабатывать программное обеспечение для микроконтроллеров, которые будут использованы в лабораторных работах, необходимо научиться общаться с ними на одном языке [17].
Комментарии
Комментарии необходимы для пояснения кода программы и не являются частью кода. Комментарии бывают многострочные и однострочные. Однострочные и многострочные комментарии подробнее рассмотрены в таблице 1. Таблица 1 – Виды комментариев
| Комментарии | |
//Однострочный комментарий | | Если поместить // на любую строку, то компилятор проигнорирует весь текст после этого символа на данной строке. Обычно используется для пояснения определенной строки кода. |
/*Многострочный комментарий*/ | | Многострочные комментарии начинаются с /* и заканчиваются */. Многострочные комментарии необходимы при раскрытии целого блока кода, например описание программы. |
Переменные
Все константы и операторы располагаются в FLASH – памяти (ПЗУ, RAM, память программ), содержимое данной памяти остается неизменной в процессе работы программы. Для хранения данных, которые могут быть изменены в процессе выполнения программы используется оперативная память (ОЗУ, RAM, память данных), в данной памяти так же располагаются все переменные. Переменная – поименованная, либо адресуемая иным способом область памяти, адрес которой можно использовать для осуществления доступа к данным и изменять значение в ходе выполнения программы. Для ввода переменной в языке C используются следующие ключевые слова:
-
char – создает переменную размером 1 байт (8 бит), которая может принимать 256 значений. -
int – вещественный тип, размер создаваемой переменной будет зависеть от архитектуры используемого микроконтроллера, для STM32 размер будет равен 32 бита, и будет занимать в памяти микроконтроллера 4 байта. -
short – вещественный тип, размер переменной 16 бит, это означает что переменная может принимать 65536 значений и занимает в памяти 2 байта. -
long – вещественный тип, размер переменной 32 бита, это означает 32 значений и занимает в памяти 4 байта. что переменная может принимать 2 -
float – переменная используемая для операций с числами с плавающей запятой, занимает 4 байта. На действие с данным типом переменной необходимо затратить больше тактов процессора, то есть больше времени.
Для числовых переменных существуют модификаторы, которые указывают на наличие знака у переменной.
-
unsigned – указывает на то, что переменная не будет иметь знака то есть будет принимать только положительные значения, например unsignedcharсоздаст переменную с диапазоном значений от 0 до 255. -
signed – указывает на то, что переменная будет иметь знак, например signedchar создаст переменную с диапазоном значений от -128 до +128.
Для хранения строковых данных, а также для хранения большого количества однотипных значений удобно использовать массивы. Массив, как и переменная имеет тип, а также имеет свое уникальное имя. В отличии от переменной при определении массива необходимо указать количество входящих в него элементов. В дальнейшем к целому массиву можно обращаться просто, написав его имя, а к определенному элементу массива можно обратится по индексу элемента. Индекс элемента в массиве — это порядковый номер элемента, начиная с нуля.
Имена переменных, функций и констант в C должны выбираться исходя из следующих правил:
-
Имена должны начинаться с букв латинского алфавита (a – z, A – Z), либо со знака нижнего подчеркивания «_». -
В именах переменных, констант, а также функций разрешено использовать только буквы латинского алфавита, цифры (0 – 9), а также символ нижнего подчеркивания «_», другие символы использовать запрещено. -
В языке C регистр букв имеет значение, это означает что применяемые буквы нижнего регистра (a – z) и буквы верхнего регистра (A – Z) различны. Например, имена переменных: name, Name, NaMe – различны. -
Имена переменных, констант, функций могут иметь длину в соответствии со стандартом ANSIC не превышающую 32 символа. -
Идентификаторы для новых объектов не должны совпадать с ключевыми словами языка, а также с названиями библиотечных функций.
Если необходимо записать значение переменной в шестнадцатеричном виде, то используется знак «0x» (например, 0xAAA), если необходимо создать переменную в двоичном виде, то используется знак «0b» (например, 0b1001).
Различные виды переменных представлены в таблице 2.
Таблица 2 – Некоторые виды переменных
Введенная переменная | Область применения переменной |
unsigned char name_value1; | Данная переменная может использоваться когда, заранее известно что значение будет изменятся например в диапазоне от 0 до 100, не превышает размерность 1 байт, а также имеет только положительные значения. |
unsigned short name_value2; | Данная переменная может использоваться тогда когда, заранее известно что значение будет изменятся например в диапазоне от 50 до 5000, не превышает размерность 2 байт, а также имеет только положительные значения |
signed int name_value3; | Данная переменная подходит для диапазона значений например от -30 до +6000, имеет размерность 4 байта |
unsigned int name_array[100]; | Данный массив представляет собой набор из ста переменных типа unsignedintс именем name_array. |
Диапазон возможных значений для разных типов переменных представлен в таблице 3.
Таблица 3 – Диапазон значений для различных переменных
Тип переменной | Диапазон значений для unsigned | Диапазон значений signed | для |
char | От 0 до 255 | От -128 до +127 | |
short | От 0 до 65535 | От -32768 до +32767 | |
int (для Cortex – M3) | От 0 до 4294967295 | От – 2147483648 до +2147483647 | |
long | От 0 до 4294967295 | От – 2147483648 до +2147483647 | |
long long | От 0 до 18446744073709551615 | От -223372036854775808 до +223372036854775807 | |
Операторы
Для совершения операций над переменными существуют операторы действия:
-
«+» – оператор математического сложения, например, a+b, складывает две переменные a и b. -
«-» – оператор математического вычитания, например, a-b. -
«*» – оператор математического умножения, например, a*b, перемножает две переменные a и b. -
«/» – оператор математического деления, например, a/b. -
«%» – оператор остатка от деления, определяет остаток от деления, например, a%b, 6/4 =1.5, остаток от деления 0.5, значит при 6%4 = 0.5. -
«=» – оператор присваивания значения, например, a=b, присваивает переменной a значение переменной b. -
«<» – операция сравнение – меньше. -
«>» – операция сравнение – больше. -
«<=» – операция сравнение – меньше либо равно. -
«>=» – операция сравнение – больше либо равно. -
«==» – математическая операция сравнения – равно. -
«!=» – математическая операция сравнения – не равно. -
«++» – инкремент, например, a++, инкремент числа a, увеличение на единицу. -
«--» – декремент, например, a--, декремент числа a, уменьшение на единицу. -
«<<» – операция побитовый сдвиг влево, например, a<<b, сдвигает значениеa влево, на количество бит b, 23<<1, число 23 в двоичной системе счисления имеет вид 00010111, сдвигается на 1 влево, получается 0 0010 1110, что соответствует числу 46 в десятичной системе счисления. -
«>>» – операция побитовый сдвиг вправо, например, a>>b, сдвигает значение a вправо, на количество бит b, 23>>1, число 23 в двоичной системе счисления имеет вид 00010111, сдвигается на 1 вправо, получается 00001011, что соответствует числу 11 в десятичной системе счисления. -
«&» – операция поразрядовое логическое «И», например, a&b. Также данная операция называется логическим умножением. -
«|» – операция поразрядовое логическое «ИЛИ», например, a|b. Также данная операция называется логическим сложением. -
«» – операция логическое «НЕ», например, a, инвертирует значение переменной a, то есть логические нули всех разрядов становятся логическими единицами, а логические единицы становятся нулями.