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/Функции для выдачи Ш.И.М.
olympe casino cresus olympe
olympe casino avis: olympe casino — olympe casino avis
olympe olympe casino en ligne
olympe casino en ligne: olympe casino avis — casino olympe
Acheter Cialis: Cialis generique prix — Tadalafil 20 mg prix en pharmacie tadalmed.shop
kamagra livraison 24h: acheter kamagra site fiable — kamagra 100mg prix
kamagra en ligne Achetez vos kamagra medicaments Acheter Kamagra site fiable
Tadalafil sans ordonnance en ligne cialis prix Tadalafil sans ordonnance en ligne tadalmed.com
https://pharmafst.com/# pharmacies en ligne certifiГ©es
pharmacie en ligne livraison europe: Livraison rapide — pharmacie en ligne france fiable pharmafst.com
kamagra livraison 24h Kamagra pharmacie en ligne Achetez vos kamagra medicaments
acheter kamagra site fiable Achetez vos kamagra medicaments kamagra gel
kamagra pas cher: Kamagra Commander maintenant — kamagra gel
pharmacie en ligne france livraison belgique: Livraison rapide — acheter mГ©dicament en ligne sans ordonnance pharmafst.com
pharmacie en ligne pas cher pharmacie en ligne pas cher pharmacie en ligne france fiable pharmafst.shop
Acheter Kamagra site fiable achat kamagra Kamagra pharmacie en ligne
Pharmacie en ligne Cialis sans ordonnance Tadalafil achat en ligne Cialis generique prix tadalmed.com
https://pharmafst.shop/# pharmacie en ligne france livraison belgique
trouver un mГ©dicament en pharmacie pharmacie en ligne pas cher acheter mГ©dicament en ligne sans ordonnance pharmafst.shop
cialis prix: cialis generique — cialis sans ordonnance tadalmed.shop
https://kamagraprix.com/# Kamagra Oral Jelly pas cher
kamagra pas cher: kamagra 100mg prix — kamagra pas cher
Achat mГ©dicament en ligne fiable Pharmacie en ligne France Pharmacie sans ordonnance pharmafst.shop
https://tadalmed.com/# Cialis en ligne
achat kamagra: kamagra gel — kamagra en ligne
kamagra livraison 24h: kamagra 100mg prix — kamagra gel
pharmacie en ligne france livraison belgique Livraison rapide Pharmacie Internationale en ligne pharmafst.shop
acheter kamagra site fiable Acheter Kamagra site fiable Achetez vos kamagra medicaments
https://pharmafst.com/# pharmacie en ligne sans ordonnance
kamagra livraison 24h: kamagra gel — Kamagra Oral Jelly pas cher
acheter kamagra site fiable: Kamagra pharmacie en ligne — kamagra 100mg prix
Kamagra Oral Jelly pas cher: Kamagra Commander maintenant — kamagra oral jelly
trouver un mГ©dicament en pharmacie: Medicaments en ligne livres en 24h — pharmacie en ligne livraison europe pharmafst.com
pharmacie en ligne france livraison belgique Livraison rapide Achat mГ©dicament en ligne fiable pharmafst.shop
kamagra gel: kamagra oral jelly — Achetez vos kamagra medicaments
Tadalafil 20 mg prix en pharmacie: Achat Cialis en ligne fiable — Acheter Viagra Cialis sans ordonnance tadalmed.shop
Kamagra pharmacie en ligne: kamagra livraison 24h — Achetez vos kamagra medicaments
kamagra oral jelly: Achetez vos kamagra medicaments — kamagra gel
https://tadalmed.com/# Tadalafil 20 mg prix sans ordonnance
kamagra oral jelly: kamagra 100mg prix — kamagra pas cher
cialis sans ordonnance: Tadalafil sans ordonnance en ligne — Tadalafil sans ordonnance en ligne tadalmed.shop
п»їpharmacie en ligne france: pharmacie en ligne sans ordonnance — pharmacie en ligne fiable pharmafst.com
Acheter Cialis Tadalafil 20 mg prix sans ordonnance Cialis sans ordonnance pas cher tadalmed.com
Pharmacie Internationale en ligne: pharmacie en ligne fiable — Achat mГ©dicament en ligne fiable pharmafst.com
https://pharmafst.com/# pharmacie en ligne france livraison belgique
Kamagra pharmacie en ligne: kamagra pas cher — achat kamagra
acheter mГ©dicament en ligne sans ordonnance: Meilleure pharmacie en ligne — pharmacie en ligne france fiable pharmafst.com
https://kamagraprix.shop/# kamagra en ligne
https://kamagraprix.shop/# Achetez vos kamagra medicaments
Tadalafil achat en ligne: Achat Cialis en ligne fiable — Cialis sans ordonnance 24h tadalmed.shop
Kamagra Oral Jelly pas cher: achat kamagra — kamagra livraison 24h
Acheter Kamagra site fiable: achat kamagra — kamagra oral jelly
Cialis generique prix: Pharmacie en ligne Cialis sans ordonnance — Tadalafil 20 mg prix sans ordonnance tadalmed.shop
Tadalafil achat en ligne: Acheter Viagra Cialis sans ordonnance — Acheter Cialis 20 mg pas cher tadalmed.shop
Acheter Cialis: Tadalafil achat en ligne — Tadalafil sans ordonnance en ligne tadalmed.shop
Tadalafil 20 mg prix sans ordonnance: Achat Cialis en ligne fiable — Acheter Viagra Cialis sans ordonnance tadalmed.shop
vente de mГ©dicament en ligne: Livraison rapide — pharmacie en ligne pharmafst.com
https://tadalmed.com/# Tadalafil achat en ligne
http://kamagraprix.com/# kamagra oral jelly
Achat Cialis en ligne fiable: Achat Cialis en ligne fiable — Cialis sans ordonnance 24h tadalmed.shop
Achetez vos kamagra medicaments: Acheter Kamagra site fiable — kamagra en ligne
Acheter Kamagra site fiable: Achetez vos kamagra medicaments — Kamagra Oral Jelly pas cher
https://medicinefromindia.shop/# Medicine From India
canadian pharmacy reviews: Express Rx Canada — my canadian pharmacy
the canadian pharmacy: ExpressRxCanada — canadian pharmacy
reputable mexican pharmacies online: RxExpressMexico — Rx Express Mexico
Rx Express Mexico: mexico pharmacies prescription drugs — Rx Express Mexico
https://medicinefromindia.shop/# buy medicines online in india
mexican online pharmacy: mexico drug stores pharmacies — Rx Express Mexico
Rx Express Mexico: mexican rx online — mexico pharmacies prescription drugs
https://medicinefromindia.shop/# top 10 online pharmacy in india
https://rxexpressmexico.com/# mexico drug stores pharmacies
best canadian pharmacy canadian online pharmacy canadian pharmacies compare
mexican online pharmacy: RxExpressMexico — mexico drug stores pharmacies
mexico pharmacy order online: RxExpressMexico — RxExpressMexico
mexico drug stores pharmacies: mexico pharmacy order online — mexico pharmacies prescription drugs
https://expressrxcanada.com/# legal to buy prescription drugs from canada
MedicineFromIndia: cheapest online pharmacy india — Medicine From India
canadian pharmacy 24 com: Express Rx Canada — canadian family pharmacy
mexico pharmacies prescription drugs: pharmacies in mexico that ship to usa — mexico pharmacy order online
Слова эти были настолько неожиданны и нелепы, что Степа решил, что ослышался. накрутка поведенческих факторов заказать Берлиоз тоскливо оглянулся, не понимая, что его напугало.
MedicineFromIndia: Medicine From India — online shopping pharmacy india
mexican rx online: mexican rx online — mexico pharmacy order online
canadian pharmacy king reviews: Express Rx Canada — canadian pharmacy meds
canadapharmacyonline legit: Express Rx Canada — online canadian pharmacy
RxExpressMexico: mexican rx online — mexico drug stores pharmacies
canadian pharmacy online: canadian pharmacy — certified canadian pharmacy
http://expressrxcanada.com/# canadian online pharmacy reviews
indian pharmacy online shopping: medicine courier from India to USA — indian pharmacy online shopping
Его прокуратор спросил о том, где сейчас находится себастийская когорта. бот для накрутки поведенческих факторов Он побледнел, вытер лоб платком, подумал: «Что это со мной? Этого никогда не было… сердце шалит… я переутомился… Пожалуй, пора бросить все к черту и в Кисловодск…» И тут знойный воздух сгустился над ним, и соткался из этого воздуха прозрачный гражданин престранного вида.
MedicineFromIndia: indian pharmacy — top 10 online pharmacy in india
indian pharmacy online shopping: indian pharmacy — MedicineFromIndia
пин ап казино официальный сайт пин ап казино официальный сайт пин ап зеркало
pin-up: pinup az — pin up casino
Весь нижний этаж теткиного дома был занят рестораном, и каким рестораном! По справедливости он считался самым лучшим в Москве. микрозайм онлайн Те наклонились к нему с обеих сторон, и он сказал, но уже без всякого акцента, который у него, черт знает почему, то пропадал, то появлялся: – Дело в том… – тут профессор пугливо оглянулся и заговорил шепотом, – что я лично присутствовал при всем этом.
pin-up casino giris: pin up azerbaycan — pin-up casino giris
– Да-с, – продолжал Иван, – знается! Тут факт бесповоротный. микрокредит онлайн – Проговорив это, командир скомандовал точно, ясно, быстро: – Пантелея из буфетной.
В саду было тихо. на каком сайте можно разместить Машина заехала за Желдыбиным и, первым долгом, вместе со следствием, отвезла его (около полуночи это было) на квартиру убитого, где было произведено опечатание его бумаг, а затем уж все поехали в морг.
vavada: вавада — vavada
пин ап вход pin up вход пинап казино
Берлиоз с великим вниманием слушал неприятный рассказ про саркому и трамвай, и какие-то тревожные мысли начали мучить его. создание сайта на вордпресс – Член профсоюза? – Да.
Теперь его уносил, удушая и обжигая, самый страшный гнев, гнев бессилия. рамочная москитная сетка – Может быть, вы знаете, какой именно, – с совершенно естественной иронией осведомился Берлиоз, вовлекаясь в какой-то действительно нелепый разговор, – и скажете мне? – Охотно, – отозвался незнакомец.
pin up az: pin up casino — pinup az
https://pinuprus.pro/# пин ап зеркало
http://pinuprus.pro/# pin up вход
Покрытые испариной лица как будто засветились, показалось, что ожили на потолке нарисованные лошади, в лампах как будто прибавили свету, и вдруг, как бы сорвавшись с цепи, заплясали оба зала, а за ними заплясала и веранда. замена уплотнителя на окнах цена в москве Иван так и сделал и углубился в таинственную сеть арбатских переулков и начал пробираться под стенками, пугливо косясь, ежеминутно оглядываясь, по временам прячась в подъездах и избегая перекрестков со светофорами, шикарных дверей посольских особняков.
vavada casino вавада казино vavada вход
http://vavadavhod.tech/# vavada вход
https://pinuprus.pro/# пинап казино
pin up: pin up — pin up azerbaycan
pin up: pin up — pin-up casino giris
pin up azerbaycan: pin up casino — pin up casino
http://pinuprus.pro/# пинап казино
– забормотал поэт, тревожно озираясь. Васильева – Я не спросил тебя, – сказал Пилат, – ты, может быть, знаешь и латинский язык? – Да, знаю, – ответил арестант.
vavada: vavada — vavada
пин ап казино: пин ап зеркало — пин ап казино
И двадцати секунд не прошло, как после Никитских ворот Иван Николаевич был уже ослеплен огнями на Арбатской площади. нотариус метро Солнцево На третий же день страдавшая все это время бессонницей Анна Францевна опять-таки спешно уехала на дачу… Нужно ли говорить, что она не вернулась! Оставшаяся одна Анфиса, наплакавшись вволю, легла спать во втором часу ночи.
Помахав руками, чтобы остыть, Иван ласточкой кинулся в воду. Коромысла ГРМ Он внезапно перестал икать, сердце его стукнуло и на мгновенье куда-то провалилось, потом вернулось, но с тупой иглой, засевшей в нем.
– И доказательств никаких не требуется, – ответил профессор и заговорил негромко, причем его акцент почему-то пропал: – Все просто: в белом плаще… В белом плаще с кровавым подбоем, шаркающей кавалерийской походкой, ранним утром четырнадцатого числа весеннего месяца нисана в крытую колоннаду между двумя крыльями дворца Ирода Великого вышел прокуратор Иудеи Понтий Пилат. Датчики числа оборотов Светало, и свет еще не погашенных на шоссе фонарей был уже не нужен и неприятен.
vavada: вавада — vavada
И было в полночь видение в аду. евроремонт квартир цена Дело в том, что в этом вчерашнем дне зияла преогромная черная дыра.
заработок на аккаунтах продажа аккаунтов
vavada casino: вавада зеркало — вавада
http://vavadavhod.tech/# vavada
пин ап вход: pin up вход — пин ап вход
pin-up casino giris: pin-up — pin-up casino giris