WiringPi включает в себя программно-управляемый обработчик ШИМ (Soft PWM), способный выводить сигнал ШИМ на любой из выводов GPIO Raspberry Pi (или Banana Pi, Orange Pi, NanoPi, Odroid и т.п.).
Есть некоторые ограничения. Для поддержания низкой загрузки процессора минимальная ширина импульса составляет 100 мкс. Это в сочетании с предлагаемым по умолчанию диапазоном 100 дает частоту ШИМ 100 Гц. Вы можете уменьшить диапазон, чтобы получить более высокую частоту за счет разрешения, или увеличить, чтобы получить большее разрешение, но это снизит частоту. Если вы измените ширину импульса в коде драйвера, то имейте в виду, что при задержках менее 100 мкс (WiringPi делает это в программном цикле) загрузка ЦП резко возрастет, а управление более чем одним выводом будет практически невозможно.
Также обратите внимание, что хотя подпрограммы могут работают с более высоким приоритетом или с приоритетом в реальном времени, Linux по-прежнему может влиять на точность генерируемого сигнала. Впрочем, даже несмотря на ограничения, с помощью этих функций можно управлять устройствами вроде светодиодов и моторов.
Soft PWM/Программная ШИМ на C/C++
Чтобы использовать эти функции в своей программе на C/C++, нужно включить следующие библиотеки/файлы:
#include <wiringPi.h> #include <softPwm.h>
При компиляции вашей программы, вы должны будете подключить pthread
, а также библиотеку wiringPi
, выглядеть это будет примерно так:
cc -o myprog myprog.c -lwiringPi -lpthread
Описание функций softPwm.h
Доступны следующие функции:
softPwmCreate (int, int, int)
Задает контакт, на котором будет генерироваться программная ШИМ. Можно использовать любой GPIO-контакт (int pin
), а распиновкой служит та, что используется функцией wiringPiSetup()
. Если вписать в параметре int range
значение «100», то диапазон значений на этом контакте будет от «0» (выкл) до «100» (полный ход).
int softPwmCreate (int pin, int value, int range);
Если операция пройдет успешно, функция вернет «0». Если функция вернет другое значение, то о том, что случилось, можно узнать у глобальной переменной errno
.
softPwmWrite (int, int)
Обновляет значение (int value
) ШИМ на указанном контакте (int pin
). Значение проверяется на предмет того, не выходит ли оно за пределы заданного диапазона. Контакты, которые ранее не были инициализированы при помощи функции softPwmCreate()
, будут просто проигнорированы.
void softPwmWrite (int pin, int value);
softPwmStop (int)
Эта функция отключает ШИМ на данном выводе (int pin
).
void softPwmStop (int pin);
Пример программы
#include <iostream> /* * Включаем необходимые библиотеки */ #include <wiringPi.h> #include <softPwm.h> #define PIN 23 #define RANGE 100 #define VALUE 50 using namespace std; int main() { /* * Инициализируем WiringPi */ if (wiringPiSetup() == 0) { /* * Задает контакт, на котором будет генерироваться Soft PWM * GPIO-контакт 23, диапазон значений - 100, значение - 50 */ softPwmCreate(PIN, VALUE, RANGE); cout << "softPwmCreate(PIN, VALUE, RANGE);" << endl; cout << "PIN: " << PIN << endl; cout << "RANGE: " << RANGE << endl; cout << "VALUE: " << VALUE << endl; cout << endl; /* * Обновляем значение (value) ШИМ на 25 */ softPwmWrite(PIN, 25); cout << "softPwmWrite(PIN, 25);" << endl; cout << "PIN: " << PIN << endl; cout << "VALUE: " << 25 << endl; cout << endl; delay(5000); /* * Обновляем значение (value) ШИМ на 50 */ softPwmWrite(PIN, 50); cout << "softPwmWrite(PIN, 50);" << endl; cout << "PIN: " << PIN << endl; cout << "VALUE: " << 50 << endl; cout << endl; delay(5000); /* * Обновляем значение (value) ШИМ на 75 */ softPwmWrite(PIN, 75); cout << "softPwmWrite(PIN, 75);" << endl; cout << "PIN: " << PIN << endl; cout << "VALUE: " << 75 << endl; cout << endl; delay(5000); /* * Обновляем значение (value) ШИМ на 100 */ softPwmWrite(PIN, 100); cout << "softPwmWrite(PIN, 100);" << endl; cout << "PIN: " << PIN << endl; cout << "VALUE: " << 100 << endl; cout << endl; delay(5000); /* * Отключаем ШИМ на GPIO-контакте 7 */ softPwmStop(PIN); cout << "softPwmStop(PIN);" << endl; cout << "PIN: " << PIN << endl; } return 0; }
Инициализировать WiringPi можно при помощи функций wiringPiSetup()
, wiringPiSetupGpio()
и wiringPiSetupPhys()
. Функция wiringPiSetupSys()
недостаточно быстра, поэтому вам нужно будет запускать программы при помощи sudo.
Компиляция, сборка и запуск программы
- Сознаём файл
wiringpi_soft_pwm.cpp
и вставляем вышеприведённый код:nano wiringpi_soft_pwm.cpp
- Компилируем и собираем программу:
g++ -Ofast -Wall wiringpi_soft_pwm.cpp -lwiringPi -lpthread -o wiringpi_soft_pwm
- Запускаем программу:
./wiringpi_soft_pwm
Результат
Soft PWM/Программная ШИМ на Java
В Pi4J есть библиотека/и для работы с ШИМ с помощью Java на Raspberry Pi, Banana Pi, Orange Pi, Nano Pi и Odroid. Все классы и интерфейсы находятся в пакетах com.pi4j.io.gpio.*;
и com.pi4j.wiringpi.*;
.
Интерфейс GpioPinPwm
Этот интерфейс является расширением интерфейса GpioPin
с чтением значений PWM.
getPwm()
Возвращает значение, установленное в данный момент для выхода ШИМ:
Если это аппаратная Широтно-импульсная модуляция, значение будет в диапазоне от 0 до 1024, а если это программная Широтно-импульсная модуляция, значение будет в диапазоне от 0 до 100.
int getPwm();
Интерфейс GpioPinPwmOutput
Этот интерфейс является расширением интерфейса GpioPinPwm
и добавляет операции для установки выходного значения PWM.
setPwm(int)
Устанавливает значение/длину рабочего цикла ШИМ.
Если это аппаратная Широтно-импульсная модуляция, значение должно быть в диапазоне от 0 до 1024, а если это программная Широтно-импульсная модуляция, значение должно быть в диапазоне от 0 до 100.
void setPwm(int value);
setPwmRange(int)
Устанавливает диапазон ШИМ. По умолчанию 1024 для аппаратного ШИМ, для программного — 100.
void setPwmRange(int range);
Примеры программы
Данный пример кода генерирует программную ШИМ на одном выводе GPIO одноплатного компьютера Orange Pi PC. Если вы планируете запустить этот пример кода на другой плате, тогда не забудьте указать правильную платформу:
- Raspberry Pi:
PlatformManager.setPlatform(Platform.RASPBERRYPI);
- Banana Pi:
PlatformManager.setPlatform(Platform.BANANAPI);
- Banana Pro:
PlatformManager.setPlatform(Platform.BANANAPRO);
- Synovoip BPI:
PlatformManager.setPlatform(Platform.BPI);
- Odroid:
PlatformManager.setPlatform(Platform.ODROID);
- Orange Pi:
PlatformManager.setPlatform(Platform.ORANGEPI);
- NanoPi:
PlatformManager.setPlatform(Platform.NANOPI);
- Simulated:
PlatformManager.setPlatform(Platform.SIMULATED);
Тоже самое по поводу пинов, для Orange Pi — это com.pi4j.io.gpio.OrangePiPin
, для Nano Pi — com.pi4j.io.gpio.NanoPiPin
и т.д..
import com.pi4j.io.gpio.GpioController; import com.pi4j.io.gpio.GpioFactory; import com.pi4j.io.gpio.GpioPinPwmOutput; import com.pi4j.io.gpio.OrangePiPin; import com.pi4j.platform.Platform; import com.pi4j.platform.PlatformAlreadyAssignedException; import com.pi4j.platform.PlatformManager; import com.pi4j.util.Console; public class SoftPWMPi4J { public static void main(String[] args) { try { PlatformManager.setPlatform(Platform.ORANGEPI); /* * Создаём Pi4J консольную оболочку/помощника */ Console console = new Console(); /* * Выводим заголовок программы */ console.title("<-- Проект Pi4J -->", "Пример SoftPWM (Программная ШИМ на Java)"); /* * Разрешаем пользователю выйти из программы, используя CTRL-C */ console.promptForExit(); /* * Создаем контроллер gpio */ GpioController gpio = GpioFactory.getInstance(); /* * Предоставим вывод как программный выход ШИМ, выводы, которые * поддерживают аппаратный ШИМ, должны быть предоставлены как нормальные * выходы ШИМ */ GpioPinPwmOutput pwm = gpio.provisionSoftPwmOutputPin(OrangePiPin.GPIO_23); /* * При желании мы можем установить диапазон ШИМ (100 - диапазон по * умолчанию) */ pwm.setPwmRange(100); /* * Подсказываем пользователю, что мы готовы */ console.println(" ... Успешно подготовлен ШИМ вывод: " + pwm.toString()); console.emptyLine(); /* * Устанавливаем длину рабочего цикла ШИМ 100 (ПОЛНОСТЬЮ ВКЛ) */ pwm.setPwm(100); console.println("Длина рабочего цикла программной ШИМ: " + pwm.getPwm()); console.println("Нажмите ENTER, чтобы установить значение ШИМ 50"); System.console().readLine(); /* * Устанавливаем длину рабочего цикла ШИМ 50 (РАБОЧИЙ ЦИКЛ 1/2 или 50%) */ pwm.setPwm(50); console.println("Длина рабочего цикла программной ШИМ: " + pwm.getPwm()); console.println("Нажмите ENTER, чтобы установить значение ШИМ 0 (остановить PWM)"); System.console().readLine(); /* * Устанавливаем длину рабочего цикла ШИМ 0 (ПОЛНОСТЬЮ ВЫКЛ) */ pwm.setPwm(0); console.println("Длина рабочего цикла программной ШИМ: " + pwm.getPwm()); /* * Останавливаем все потоки GPIO, выключив контроллер GPIO (этот метод * принудительно отключит все потоки мониторинга GPIO и запланированные * задачи) */ gpio.shutdown(); } catch (PlatformAlreadyAssignedException e) { e.printStackTrace(); } } }
Компиляция, сборка и запуск программы
- создаём java файл и вставляем код:
nano SoftPWMPi4J.java
- компилируем файл:
javac -classpath .:classes:/opt/pi4j/lib/'*' SoftPWMPi4J.java
- запускаем программу:
sudo java -classpath .:classes:/opt/pi4j/lib/'*' SoftPWMPi4J
Результат
Примечания
- Каждый «цикл» выхода ШИМ занимает 10 мс со значением диапазона по умолчанию 100, поэтому попытка изменить значение ШИМ более 100 раз в секунду будет бесполезной.
- Каждый вывод, активированный в режиме soft PWM, использует приблизительно 0,5% ЦП.
- В настоящее время нет способа отключить softPWM на выводе во время работы программы.
- Вы должны держать свою программу в рабочем состоянии, чтобы поддерживать выход ШИМ.
Материалы
Software PWM Library
Широтно-импульсная модуляция
The Pi4J Project
Установка Pi4J на Raspberry Pi и Orange Pi, Banana Pi
Установка и настройка BPI-WiringPi/WiringPi на Banana Pi
Установка и настройка WiringOP/WiringPi на Orange Pi PC
ШИМ управление активным охлаждением на Raspberry Pi, Orange Pi, Banana Pi
Raspberry Pi:Библиотеки/WiringPi/Функции для выдачи Ш.И.М.
Блог о недвижимости — https://avgust-shop.ru/
cometa casino официальный сайт — https://unlim-cassinoss7.xyz/
casino cometa зеркало cometaofficial online — https://unlimcassino.xyz/
https://canadianpharmacy.win/# reputable canadian online pharmacy
http://canadianpharmacy.win/# best rated canadian pharmacy
canada online pharmacy: canadian pharmacy win — canadian pharmacy king reviews
mexico pharmacies prescription drugs buying from online mexican pharmacy medication from mexico pharmacy
https://indianpharmacy.win/# buy prescription drugs from india
http://canadianpharmacy.win/# canadian pharmacy tampa
https://indianpharmacy.win/# buy medicines online in india
canadian drug prices: best online canadian pharmacy — canadian pharmacy 365
http://canadianpharmacy.win/# best canadian online pharmacy
canadian pharmacies that deliver to the us: best canadian online pharmacy — canada pharmacy reviews
https://indianpharmacy.win/# online pharmacy india
п»їbest mexican online pharmacies buying prescription drugs in mexico online medication from mexico pharmacy
mexico pharmacies prescription drugs: mexico drug stores pharmacies — mexican rx online
http://mexicanpharmacy.store/# mexican online pharmacies prescription drugs
https://mexicanpharmacy.store/# pharmacies in mexico that ship to usa
best online pharmacy india: top 10 online pharmacy in india — mail order pharmacy india
canadian pharmacies that deliver to the us canadian pharmacy win pharmacy canadian
ed medicine online: buy ed medication — online ed meds
Buy Tadalafil 10mg: MaxPillsForMen — Generic Tadalafil 20mg price
cheapest cialis buy cialis pill Cheap Cialis
sildenafil 50 mg price: FastPillsForMen — sildenafil online
http://maxpillsformen.com/# Buy Tadalafil 20mg
erectile dysfunction online prescription fast pills easy ed meds by mail
cheapest online ed meds: cheap cialis — cheapest ed meds
http://maxpillsformen.com/# cialis for sale
Generic Viagra for sale: sildenafil 50 mg price — Viagra tablet online
best ed pills online FastPillsEasy ed treatments online
п»їcialis generic п»їcialis generic Generic Cialis price
erectile dysfunction medications online: online erectile dysfunction prescription — ed medication online
Viagra tablet online: buy viagra online — sildenafil over the counter
cheap viagra: FastPillsForMen — Cheap Viagra 100mg
Cheap generic Viagra online: Fast Pills For Men — best price for viagra 100mg
Cheap Cialis Tadalafil Tablet Generic Tadalafil 20mg price
http://fastpillsformen.com/# cheap viagra
Buy Tadalafil 10mg Max Pills For Men buy cialis pill
COSRX-Clear Fit Master Patch Peter Thomas Roth Instant FirmX was made by the company of the same name, Peter Thomas Roth. Here is their contact information, as listed on the website: $38.00 Eyeliss™: Powerful peptide complex that visibly helps reduce the look of under-eye bags, puffiness and wrinkles over time. Highlighted Ingredients:- Firm-A-TiteTM: A blend of silicates and seaweed that provides quick, temporary tightening.- EyelissTM: Powerful peptide complex that helps with puffiness and wrinkles over time.- Eye Regener®: Potent alfalfa and lupine complex that helps with the look of under-eye bags over time. As for skincare, there is a mouse study showing HMC has very promising abilities in the «treatment of UVB irradiation-induced skin inflammation and oxidative stress», or English translation = it’s an antioxidant and anti-inflammatory.
https://snoopydirectory.com/listings401753/lash-growth-oil
Coupon Buy Now: CLICK HERE for the Beauty Box and CLICK HERE for the Makeup Box. The Beautifully Well Box is a monthly beauty subscription box to help you discover the latest and greatest 100% natural products, all delivered straight to your door. This way you can ‘try before you buy’ without spending and wasting a lot of your money. Each box is guaranteed to include over $50 value and variety inside every month. FREE US shipping, $15 CAD shipping per box. Prices are in USD. Plans automatically renew and you are committing to the length of your subscription plan. We scanned the internet for the best makeup, skin care and wellness boxes available right now. From popular brands like Birchbox to curated packages from clean beauty companies, you’re going to enjoy getting one of these delivered your doorstep.
https://fastpillsformen.com/# buy Viagra over the counter
https://fastpillsformen.com/# Viagra Tablet price
cheapest erectile dysfunction pills cheap cialis best online ed medication
Tadalafil price: MaxPillsForMen — buy cialis pill
https://fastpillseasy.com/# online erectile dysfunction prescription
http://fastpillseasy.com/# cheapest ed medication
п»їcialis generic Generic Cialis without a doctor prescription Cialis without a doctor prescription
https://fastpillseasy.com/# ed medication online
Cialis over the counter: Cialis without a doctor prescription — Generic Tadalafil 20mg price
http://fastpillsformen.com/# Order Viagra 50 mg online
buy erectile dysfunction pills fast pills easy buy ed pills
Buy Cialis online: MaxPillsForMen — Generic Cialis price
online ed medication: fast pills easy — buying erectile dysfunction pills online
denemebonusuverensiteler25: yeni deneme bonusu veren siteler — yat?r?ms?z deneme bonusu veren siteler
slot casino siteleri en kazancl? slot oyunlar? guvenilir slot siteleri
casino bahis siteleri: guvenilir casino siteleri — Casino Siteleri
deneme bonusu veren siteler: yeni deneme bonusu veren siteler — deneme bonusu veren siteler
sweet bonanza yorumlar: sweet bonanza yorumlar — sweet bonanza guncel
denemebonusuverensiteler25 deneme bonusu veren siteler yeni deneme bonusu veren siteler yeni
sweet bonanza oyna: sweet bonanza demo oyna — sweet bonanza
slot siteleri slot siteleri en cok kazand?ran slot oyunlar?
yeni deneme bonusu veren siteler: denemebonusuverensiteler25 — deneme bonusu veren siteler
slot oyunlar? puf noktalar? slot oyunlar? puf noktalar? slot siteleri
http://denemebonusuverensiteler25.com/# yat?r?ms?z deneme bonusu veren siteler
deneme bonusu veren yeni siteler: yat?r?ms?z deneme bonusu veren siteler — yat?r?ms?z deneme bonusu veren siteler
sweet bonanza oyna sweet bonanza kazanma saatleri sweet bonanza demo oyna
sweet bonanza guncel: sweet bonanza demo oyna — sweet bonanza demo oyna
sweet bonanza giris: sweet bonanza demo oyna — sweet bonanza yorumlar
en cok kazand?ran slot oyunlar? slot oyunlar? puf noktalar? slot oyunlar?
en guvenilir casino siteleri: Canl? Casino Siteleri — Casino Siteleri
propecia vs generic finasteride Prevalence of our attorneys during the patent 6, it they are recommended to switch to meet primary dysmenorrhea
sweet bonanza: sweet bonanza oyna — sweet bonanza kazanma saatleri