lab2 / lab2
.docxМИНИСТЕРСТВО ОБРАЗОВАНИЯ РЕСПУБЛИКИ БЕЛАРУСЬ
Учреждение образования «Полоцкий государственный университет»
Факультет информационных технологий Кафедра технологий программирования
ЛАБОРАТОРНАЯ РАБОТА №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 в режиме ШИМ.