Файл: Разработка лабораторного стенда по программированию микроконтроллера stm.doc

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 23.11.2023

Просмотров: 242

Скачиваний: 4

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

СОДЕРЖАНИЕ

ВВЕДЕНИЕ

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 – Виды комментариев

1.3.Основные сведения о широтно – импульсной модуляции

2.ОПИСАНИЕ ЛАБОРАТОРНОГО СТЕНДА

2.1.Описание среды программирования

2.2.Разработка комплекса лабораторных работ

2.3.Указания по выполнению лабораторной работы 1

2.4. Характеристика лабораторной работы 2

2.5. Характеристика лабораторной работы 3

2.6. Характеристика лабораторной работы 4

2.7. Характеристика лабораторной работы 5

2.8. Характеристика лабораторной работы 6

ЗАКЛЮЧЕНИЕ

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ


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

Микроконтроллеры используют для управления различными электронными устройствами и отдельными блоками:

  • в вычислительной технике – контроллеры для жестких/гибких дисков, в материнских платах, калькуляторах;

  • электронике и разнообразных устройствах бытовой техники, в которой используется электронные системы управления – микроволновых печах, стиральных машинах, телефонах, различных роботах, в системах «Умный дом».

Микроконтроллеры также нашли широкое применение в промышленности:

  • устройства промышленной автоматики – от программируемого реле до ПЛК;

  • системы управления станками.

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 используются следующие ключевые слова:

  1. char – создает переменную размером 1 байт (8 бит), которая может принимать 256 значений.

  2. int – вещественный тип, размер создаваемой переменной будет зависеть от архитектуры используемого микроконтроллера, для STM32 размер будет равен 32 бита, и будет занимать в памяти микроконтроллера 4 байта.

  3. short – вещественный тип, размер переменной 16 бит, это означает что переменная может принимать 65536 значений и занимает в памяти 2 байта.

  4. long – вещественный тип, размер переменной 32 бита, это означает 32 значений и занимает в памяти 4 байта. что переменная может принимать 2

  5. float – переменная используемая для операций с числами с плавающей запятой, занимает 4 байта. На действие с данным типом переменной необходимо затратить больше тактов процессора, то есть больше времени.

Для числовых переменных существуют модификаторы, которые указывают на наличие знака у переменной.

  1. unsigned – указывает на то, что переменная не будет иметь знака то есть будет принимать только положительные значения, например unsignedcharсоздаст переменную с диапазоном значений от 0 до 255.

  2. signed – указывает на то, что переменная будет иметь знак, например signedchar создаст переменную с диапазоном значений от -128 до +128.

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


Имена переменных, функций и констант в C должны выбираться исходя из следующих правил:

  1. Имена должны начинаться с букв латинского алфавита (a – z, A – Z), либо со знака нижнего подчеркивания «_».

  2. В именах переменных, констант, а также функций разрешено использовать только буквы латинского алфавита, цифры (0 – 9), а также символ нижнего подчеркивания «_», другие символы использовать запрещено.

  3. В языке C регистр букв имеет значение, это означает что применяемые буквы нижнего регистра (a – z) и буквы верхнего регистра (A – Z) различны. Например, имена переменных: name, Name, NaMe – различны.

  4. Имена переменных, констант, функций могут иметь длину в соответствии со стандартом ANSIC не превышающую 32 символа.

  5. Идентификаторы для новых объектов не должны совпадать с ключевыми словами языка, а также с названиями библиотечных функций.

Если необходимо записать значение переменной в шестнадцатеричном виде, то используется знак «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







Операторы

Для совершения операций над переменными существуют операторы действия:

  1. «+» – оператор математического сложения, например, a+b, складывает две переменные a и b.

  2. «-» – оператор математического вычитания, например, a-b.

  3. «*» – оператор математического умножения, например, a*b, перемножает две переменные a и b.

  4. «/» – оператор математического деления, например, a/b.

  5. «%» – оператор остатка от деления, определяет остаток от деления, например, a%b, 6/4 =1.5, остаток от деления 0.5, значит при 6%4 = 0.5.

  6. «=» – оператор присваивания значения, например, a=b, присваивает переменной a значение переменной b.

  7. «<» – операция сравнение – меньше.

  8. «>» – операция сравнение – больше.

  9. «<=» – операция сравнение – меньше либо равно.

  10. «>=» – операция сравнение – больше либо равно.

  11. «==» – математическая операция сравнения – равно.

  12. «!=» – математическая операция сравнения – не равно.

  13. «++» – инкремент, например, a++, инкремент числа a, увеличение на единицу.

  14. «--» – декремент, например, a--, декремент числа a, уменьшение на единицу.

  15. «<<» – операция побитовый сдвиг влево, например, a<<b, сдвигает значениеa влево, на количество бит b, 23<<1, число 23 в двоичной системе счисления имеет вид 00010111, сдвигается на 1 влево, получается 0 0010 1110, что соответствует числу 46 в десятичной системе счисления.

  16. «>>» – операция побитовый сдвиг вправо, например, a>>b, сдвигает значение a вправо, на количество бит b, 23>>1, число 23 в двоичной системе счисления имеет вид 00010111, сдвигается на 1 вправо, получается 00001011, что соответствует числу 11 в десятичной системе счисления.

  17. «&» – операция поразрядовое логическое «И», например, a&b. Также данная операция называется логическим умножением.

  18. «|» – операция поразрядовое логическое «ИЛИ», например, a|b. Также данная операция называется логическим сложением.

  19. «» – операция логическое «НЕ», например, a, инвертирует значение переменной a, то есть логические нули всех разрядов становятся логическими единицами, а логические единицы становятся нулями.