Управление портами вывода микроконтроллера с помощью шим – модуляции 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Управление портами вывода микроконтроллера с помощью шим – модуляции



Цель работы

Произвести программирование лабораторного стенда АРД-1, научиться управлять портами вывода микроконтроллера.

 

Теоретическая справка

В данном примере используется широтно-импульсная модуляция (ШИМ). Микроконтроллеры обычно не могут выдавать произвольное напряжение. Они могут выдать либо напряжение питания (например, 5 В), либо землю (т.е. 0 В).

Но уровнем напряжения управляется многое: например, яркость светодиода или скорость вращения мотора. Для симуляции неполного напряжения используется ШИМ (Широтно-Импульсная Модуляция, англ. Pulse Width Modulation или просто PWM).

 

Рис. 63 Широтно-импульсная модуляция ШИМ

Выход микроконтроллера переключается между землёй и напряжением питания (Vcc) тысячу раз в секунду. Иначе говоря, имеет частоту тысячу герц. Глаз не замечает мерцания более 50 Гц, поэтому кажется, что светодиод не мерцает, а горит в полсилы. Аналогично, разогнанный мотор не может остановить вал за миллисекунды, поэтому ШИМ-сигнал заставит вращаться его в неполную силу. Отношение полного периода к времени включения называют скважностью (англ. duty cycle). На рисунке 2.2. - несколько примеров, когда напряжение питания Vcc равно 5 вольтам.

Рис. 64 ШИМ при напряжении питания Vcc равным 5 вольтам.

 

Ход работы

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

 

Рис.65 - Выбор компонента

 

Рис.66 - Выбор компонента

 

 

Рис.67 - Выбор компонента

 

Рис.68 - Выбор компонента

 

 

Соберем схему в соответствии с рисунком 65, подключим осциллограф для отображения ШИМ сигнала и запустим подадим схему.

 

Рис. 69 - ШИМ при напряжении питания Vcc равным 2.5 вольтам

 

Пример программного кода для светодиода с нарастающей яркостью:

 

#define LED_PIN 1

 

void setup()

{

// настраивается порт со светодиодом в режим выхода,

pinMode(LED_PIN, OUTPUT);

}

 

void loop()

{

// выдаётся неполное напряжение на светодиод

// (он же ШИМ-сигнал, он же PWM-сигнал).

// Микроконтроллер переводит число от 0 до 255 к напряжению

// от 0 до 5 В. Например, 85 — это 1/3 от 255,

// т.е. 1/3 от 5 В, т.е. 1,66 В.

analogWrite(LED_PIN, 85);

// держит такую яркость 250 миллисекунд

delay(250);

 

// выдаёт 170, т.е. 2/3 от 255, в переводе — 3,33 В.

// Больше напряжение — выше яркость

analogWrite(LED_PIN, 170);

delay(250);

 

// все 5 В

analogWrite(LED_PIN, 255);

// задержка 250 миллисекунд

delay(250);

}

 

Идентификаторы переменных, констант, функций (в этом примере идентификатор LED_PIN) являются одним словом (т.е. нельзя создать идентификатор LED PIN). Идентификаторы могут состоять из латинских букв, цифр и символов подчеркивания _. При этом идентификатор не может начинаться с цифры. Например:

PRINT  // верно

PRINT_3D // верно

MY_PRINT_3D // верно

_PRINT_3D // верно

3D_PRINT // ошибка

ПЕЧАТЬ_3Д // ошибка

PRINT:3D // ошибка

Регистр букв в идентификаторе имеет значение. Т.е. LED_PIN, LED_pin и led_pin с точки зрения компилятора — различные идентификаторы. Идентификаторы, создаваемые пользователем, не должны совпадать с предопределенными идентификаторами и стандартными конструкциями языка; если среда разработки подсветила введенный идентификтор каким-либо цветом, необходимо заменить его на другой.

Директива #define просто говорит компилятору заменить все вхождения заданного идентификатора на значение, заданное после пробела (здесь 1), эти директивы помещают в начало кода. В конце данной директивы точка с запятой; не допустима. Названия идентификаторов всегда нужно делать осмысленными, чтобы при возвращении к ранее написанному коду было ясно, зачем нужен каждый из них.

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

Функция analogWrite (pin, value) не возвращает никакого значения и принимает два параметра:

o pin — номер порта, на который поступает сигнал

o value — значение скважности ШИМ, которое поступает на порт. Он может принимать целочисленное значение от 0 до 255, где 0 — это 0%, а 255 — это 100%.

Задания к лабораторной работе



Поделиться:


Последнее изменение этой страницы: 2021-05-27; просмотров: 327; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.220.137.164 (0.007 с.)