Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

lab2 / lab2

.docx
Скачиваний:
11
Добавлен:
18.02.2023
Размер:
20.81 Кб
Скачать

МИНИСТЕРСТВО ОБРАЗОВАНИЯ РЕСПУБЛИКИ БЕЛАРУСЬ

Учреждение образования «Полоцкий государственный университет»

Факультет информационных технологий Кафедра технологий программирования

ЛАБОРАТОРНАЯ РАБОТА №2

по дисциплине: «Архитектура мобильных платформ»

на тему: «Использование широтно-импульсной модуляции на одноплатном компьютере Raspberry Pi 3»

ВЫПОЛНИЛ студент группы

ПРОВЕРИЛ

Полоцк

Цель: изучить принципы формирования ШИМ-сигнала. Освоить использование интерфейс ввода/вывода общего назначения на Raspberry Pi 3 в режиме ШИМ.

Краткие теоретические сведения:

ШИМ или PWM (широтно-импульсная модуляция, по-английски pulse-width modulation) – это способ управления подачей мощности к нагрузке. Управление заключается в изменении длительности импульса при постоянной частоте следования импульсов. Широтно-импульсная модуляция бывает аналоговой, цифровой, двоичной и троичной.

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

Самый простой способ получить ШИМ на выходе GPIO - это программный генератор импульсов. Данный метод хорош из-за отсутствия необходимости установки каких-либо драйверов и разного ПО в ОС. Достаточно просто воспользоваться циклом, который будет каждые N миллисекунд выдавать на нужный GPIO импульс требуемой ширины.

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

ШИМ настолько часто используется в различных приложениях, что производители процессорного оборудования часто встраивают ШИМ-контроллер непосредственно в процессор. Т.е. процессору задаются параметры требуемого сигнала, а процессор уже сам, без посторонней помощи выдаёт нужный сигнал. При этом, нисколько не тратя программных ресурсов на генерацию этого сигнала. Bcm2837 тоже имеет встроенный аппаратный ШИМ. И этот ШИМ является дополнительной функцией портов GPIO 12, 32, 33, 35. Чтобы воспользоваться аппаратными ШИМ, необходимо установить соответствующий порт в режим дополнительных функций и задать процессору параметры ШИМ-сигнала.

Описание проделанной работы:

Модифицировать пример так, чтобы в качестве параметров командной строки программа принимала два аргумента: команда (установка уровня или скважности ШИМ) и значение (вкл./выкл. или значение скважности). Без указания параметров программа должна выполнить действие, согласно индивидуальному варианту.

№ варианта

Используемый GPIO ввод

Заполнение ШИМ

2

32

20%

[СКРИНШОТ]

Код модифицированного примера будет выглядеть следующим образом:

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <bcm2835.h>

#define PIN RPI_V2_GPIO_P1_32

#define PWM_CHANNEL 0

#define RANGE 100

int main(int argc, char **argv) {

if (!bcm2835_init()) {

return 1;

}

if (argc == 3) {

if(!strcmp(argv[1], "write")) {

bcm2835_gpio_fsel(PIN, BCM2835_GPIO_FSEL_OUTP);

int value = atoi(argv[2]);

if (value == 0) {

bcm2835_gpio_write(PIN, LOW);

} else if(value == 1) {

bcm2835_gpio_write(PIN, HIGH);

} else {

printf("Unknown value.");

}

} else if (!strcmp(argv[1], "pwn")) {

bcm2835_gpio_fsel(PIN, BCM2835_GPIO_FSEL_ALT0);

bcm2835_pwm_set_clock(BCM2835_PWM_CLOCK_DIVIDER_16);

bcm2835_pwm_set_mode(PWM_CHANNEL, 1, 1);

bcm2835_pwm_set_range(PWM_CHANNEL, RANGE);

int value = atoi(argv[2]);

if (value >= 0 && value <= RANGE) {

bcm2835_pwm_set_data(PWM_CHANNEL, value);

} else {

printf("Unknown value.");

}

} else {

printf("Unknown command.");

}

} else {

bcm2835_gpio_fsel(PIN, BCM2835_GPIO_FSEL_ALT0);

bcm2835_pwm_set_clock(BCM2835_PWM_CLOCK_DIVIDER_16);

bcm2835_pwm_set_mode(PWM_CHANNEL, 1, 1);

bcm2835_pwm_set_range(PWM_CHANNEL, RANGE);

bcm2835_pwm_set_data(PWM_CHANNEL, 20);

}

bcm2835_close();

return 0;

}

Была проверена работоспособность программы:

[СКРИНШОТ]

Вывод: изучили принципы формирования ШИМ-сигнала. Освоить использование интерфейс ввода/вывода общего назначения на Raspberry Pi 3 в режиме ШИМ.

Соседние файлы в папке lab2