Raspberry Pi:Библиотеки/WiringPi/Функции для выдачи ШИМ

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.



Функции для выдачи ШИМ [1]

Библиотека WiringPi оснащена программным обработчиком ШИМ, способным выдавать ШИМ-сигнал на любом GPIO-контакте Raspberry Pi.

Но у них есть определенные ограничения... Чтобы не сильно нагружать CPU, минимальная ширина импульса составляет 100 мкс (микросекунд). В сочетании с диапазоном, по умолчанию выставленным на «100», это дает частоту ШИМ, равную 100 Гц. Вы можете уменьшить диапазон, чтобы получить более высокую частоту (в ущерб разрешению), или увеличить его, чтобы получить более низкую частоту (в пользу разрешения). Собираясь поменять ширину импульса в коде драйвера, имейте в виду, что если указать там менее 100 мкс, WiringPi будет обрабатывать эти задержки и в коде программы, что значительно увеличит нагрузку на CPU, и управлять более чем одним контактом будет практически невозможно.

Также обратите внимание, что хотя эти функции запускают себя с более высоким приоритетом или с приоритетом реального времени, Linux все равно может влиять на точность генерируемого сигнала. Впрочем, даже несмотря на ограничения, с помощью этих функций можно управлять устройствами вроде светодиодов и моторов.

Чтобы использовать эти функции в своей программе, впишите в ее верхней части следующее:

#include <wiringPi.h>
#include <softPwm.h>

Компилируя программу, вы должны будете подключить, помимо WiringPi, библиотеку pthread:

cc -o myprog myprog.c -lwiringPi -lpthread

Инициализировать WiringPi можно при помощи функций wiringPiSetup(), wiringPiSetupGpio() и wiringPiSetupPhys(). Функция wiringPiSetupSys() недостаточно быстра, поэтому вам нужно будет запускать программы при помощи sudo.

Некоторые модули-расширители тоже могут быть достаточно шустрыми для обработки программной ШИМ. Мною был протестирован, к примеру, GPIO-расширитель MCP23S17, подключенный к PiFace.

Итак, для ШИМ предназначены следующие функции:

Примечания

  • Каждый «цикл» выдачи ШИМ занимает 10 мс, а для диапазона ШИМ по умолчанию используется значение «100». Поэтому попытка поменять значение ШИМ больше 100 раз в секунду закончится безуспешно.
  • Каждый контакт, активированный функцией softPwmCreate(), использует примерно 0,5% ресурсов CPU.
  • Пока программа запущена, отключить программную ШИМ на контакте нельзя (по крайней мере, на данный момент таких способов не существует).
  • Чтобы выдача ШИМ не прекращалась, программа должна оставаться в запущенном состоянии.

См.также

Внешние ссылки