Научете как да контролирате яркостта на светодиод, свързан към Raspberry Pi с помощта на ШИМ.

PWM е нещо, което всички използваме всеки ден, дори и да не го знаем. Това е техника, която е проста и невероятно полезна в редица приложения. Най-хубавото е, че това е нещо, което вашият Raspberry Pi може да направи, без да се поти. как? Нека да разгледаме.

Какво е PWM?

Както се казва в терминологията, "импулсна модулация" звучи доста фантастично. Но всичко, за което всъщност говорим тук, е изключване и включване на електрически сигнал - изключително бързо. Защо може да искаме да направим това? Просто защото това е много лесен начин за симулиране на променлив аналогов сигнал, без да се прибягва до Raspberry Pi HATs, добавки, или допълнителни вериги. За определени приложения, като загряване на печка, задвижване на мотор или затъмняване на светодиод, PWM сигналът е буквално неразличим от "истинското" аналогово напрежение.

Работни цикли

И така, имаме поредица от импулси, подавани към товар (нещото, което задвижваме). Само това не е толкова полезно - докато не започнем да променяме (или модулираме) ширината на тези импулси. Фазата "включване" на даден период на включване и изключване може да заема от 0 до 100% от общия цикъл. Ние наричаме този процент

instagram viewer
работен цикъл.

Да предположим например, че имаме 3V PWM сигнал с работен цикъл от 50%. Средното количество мощност, преминаваща през светодиода, би било еквивалентно на постоянно включен сигнал от 1,5 V. Увеличете работния цикъл и светодиодът става по-ярък; наберете го надолу и светодиодът затъмнява. Можем да генерираме аудио, като използваме същия метод – ето защо аудио изходът на вашия Raspberry Pi може да спре да функционира, ако използвате ШИМ за други неща.

ШИМ на Raspberry Pi

Можете да използвате софтуерен PWM на всеки GPIO щифт на Raspberry Pi. Но хардуерната ШИМ е достъпна само на GPIO12, GPIO13, GPIO18, и GPIO19.

Каква е разликата? Е, ако ще използвате софтуер за генериране на сигнала, тогава ще консумирате процесорни цикли. Вашият процесор обаче може да има по-добри неща за вършене, отколкото да каже на светодиод да се изключва и включва няколкостотин пъти в секунда. Всъщност може да се разсее и затъне в други задачи, което може сериозно да обърка вашите времена на PWM.

Следователно, често е по-добра идея да делегирате задачата на специализирана схема. В случая на Raspberry Pi, тази схема живее вътре системата върху чип който помещава процесора. Хардуерната ШИМ често е далеч по-прецизна и удобна и затова е предпочитаната опция в повечето случаи. Ако искате представа какво се случва под капака на чипа Broadcom BCM2711 на Raspberry Pi 4, тогава можете да погледнете документацията BCM2711. Глава 8 обхваща нещата с ШИМ!

Димиране на светодиод

За да накараме нашия светодиод да работи с нашия Raspberry Pi, ще трябва да направим малко макет. Това означава два компонента: самият светодиод и токоограничаващ резистор, който ще свържем последователно с него. Без резистор, вашият светодиод е изложен на риск да умре в зловонна облачка дим, ако през него преминава твърде много ток.

Изчисляване на стойността на резистора

Няма значение към кой край на светодиода ще свържете резистора. Важното е стойността на резистора. Raspberry Pi 4 може да осигури около 16 милиампера на щифт. Значи можем използвайте закона на Ом за да изчислите стойността на необходимия резистор.

Споменатият закон гласи, че съпротивлението трябва да е равно на напрежението спрямо тока. Знаем напрежението, което излиза от GPIO извода на Pi (3,3 V) и знаем какъв трябва да бъде токът (16 милиампера или 0,016 ампера). Ако разделим първото на второто, получаваме 206,25. Сега, тъй като ще ви е трудно да намерите резистори с тази стойност, нека вместо това вземем 220 ома.

Свържете анода на светодиода (дълъг крак) към GPIO 18 (което е физически пин 12 на Raspberry Pi). Свържете катода (къс крак) към някой от заземяващите щифтове на Pi. Не забравяйте резистора, някъде по пътя. Вече сте готови за работа!

Внедряване на ШИМ на Raspberry Pi

За да накараме хардуерната ШИМ да работи на Raspberry Pi, ще използваме библиотека rpi-hardware-pwm от Cameron Davidson-Pilon, адаптиран от код от Джереми Импсън. Това е било използвано в Пиореактор (биореактор, базиран на Pi) – но е достатъчно прост за нашите цели.

Първо, нека редактирайте config.txtфайл, намерен в /boot указател. Просто трябва да добавим един ред: dtoverlay=pwm-2chan. Ако искахме да използваме GPIO пинове, различни от 18 и 19, бихме могли да добавим някои допълнителни аргументи тук. Засега нека опростим нещата.

Рестартирайте вашия Pi и стартирайте:

lsmod | grep pwm

Тази команда изброява всички модули, заредени в централната част на операционната система, наречена ядро. Тук ги филтрираме, за да намерим само ШИМ нещата, като използваме grep (това е командата „отпечатване на глобален регулярен израз“).

Ако pwm_bcm2835 се показва сред изброените модули, значи сме на прав път. Почти приключихме с подготовката! Всичко, което остава, е да инсталирате истинската библиотека. От терминала стартирайте:

sudo pip3 install rpi-hardware-pwm

Вече сме готови да започнем.

Кодиране на PWM LED веригата

Време е да изцапаме ръцете си с малко кодиране в Python. Запалете Thonny и копирайте следния код. След това удари Бягай.

from rpi_hardware_pwm import HardwarePWM
import time
pwm = HardwarePWM(pwm_channel=0, hz=60) # here's where we initialize the PWM
pwm.start(0) # start the PWM at zero – which means the LED is off
for i in range(101):
pwm.change_duty_cycle(i)
time.sleep(.1) # by introducing a small delay, we can make the effect visible.
pwm.stop()

Ако всичко е наред, ще видите, че светодиодът постепенно става по-ярък, докато аз променливата на брояча достига 100. След това ще се изключи. Какво става тук? Нека минем през него.

Ние импортираме съответната част от хардуерната PWM библиотека (заедно с време модул) и деклариране на нова променлива. Можем да настроим pwm_канал до 0 или 1, които съответстват съответно на GPIO пинове 18 и 19 на Pi.

The хц стойност, която можем да зададем на каквато честота желаем (макар че в крайна сметка сме ограничени от тактовата честота на Pi). При 60Hz не трябва да виждаме никакво трептене на ШИМ. Но може би е добра идея да започнете с много ниска стойност (например 10) и постепенно да изместите нещата нагоре. Направете това и наистина ще можете да видите импулсите да се случват. Не ни вярвайте просто на думата!

Работим по нашия работен цикъл (аз) нагоре от 0 до 100 използване на Python for цикъл. Струва си да се отбележи, че можем да настроим време.сън аргумент за толкова дълго, колкото желаем - тъй като ШИМ се обработва в хардуера, той ще работи зад кулисите, колкото и дълго да кажем на програмата да изчака.

Има още какво да научите с PWM

Честито! Написахте първата си PWM програма. Но, както често се случва с Raspberry Pi, има много неща, които можете да правите с тези неща, особено ако разширите своя Raspberry Pi с правилната PWM HAT. Така че не се задоволявайте с един малък светодиод. Можете да използвате тази нова мощност за управление на двигатели, кодиране на съобщения и генериране на тонове на синтезатор. Очаква ви свят на модулация!