- Шта је ПВМ (пулс са модулацијом)?
- ПВМ у СТМ32
- Компоненте потребне
- Детаљи о пин-у за СТМ32
- Кружни дијаграм и везе
- Програмирање СТМ32
У претходном чланку видели смо о АДЦ конверзији помоћу СТМ32. У овом упутству ћемо научити о ПВМ (Пулсе Видтх Модулатион) у СТМ32 и како можемо да контролишемо осветљеност ЛЕД-а или брзину једносмерног вентилатора помоћу ПВМ технике.
Знамо да постоје две врсте сигнала: аналогни и дигитални. Аналогни сигнали имају напоне попут (3В, 1В… итд.), А дигитални сигнали (1 'и 0). Излази сензора су аналогних сигнала и ови аналогни сигнали се претварају у дигиталне помоћу АДЦ-а, јер микроконтролери разумеју само дигиталне. Након обраде тих вредности АДЦ, излаз поново треба претворити у аналогни облик да би се покретали аналогни уређаји. За то користимо одређене методе попут ПВМ, дигитално аналогних (ДАЦ) претварача итд.
Шта је ПВМ (пулс са модулацијом)?
ПВМ је начин управљања аналогним уређајима помоћу дигиталне вредности попут контроле брзине мотора, осветљености ЛЕД итд. Знамо да мотор и лед раде на аналогном сигналу. Али ПВМ не пружа чисти аналогни излаз, ПВМ изгледа као аналогни сигнал који се ствара кратким импулсима, а који се обезбеђује у радном циклусу.
Радни циклус ПВМ
Проценат времена у којем ПВМ сигнал остаје ВИСОК (на време) назива се радни циклус. Ако је сигнал увек УКЉУЧЕН, он је у 100% радном циклусу, а ако је увек искључен, то је 0% радног циклуса.
Радни циклус = Вријеме УКЉУЧЕЊА / (Вријеме УКЉУЧИВАЊА + Вријеме искључивања)
ПВМ у СТМ32
СТМ32Ф103Ц8 има 15 ПВМ пинова и 10 АДЦ пинова. Постоји 7 тајмера, а сваки ПВМ излаз пружа канал повезан са 4 тајмера. Има 16-битну ПВМ резолуцију (2 16), односно бројачи и променљиве могу бити велике до 65535. Са тактом од 72 МХз, ПВМ излаз може имати максимални период од око једне милисекунде.
- Тако вредност 65535 даје ПУНУ СВЕТЛОСТ ЛЕДА И ПУНУ БРЗИНУ ДЦ вентилатора (100% радни циклус)
- Такође вредност од 32767 даје ПОВЛАЧИНУ СВЕТЛОСТИ ЛЕДА И ПОЛУБРЗИНУ ДЦ вентилатора (50% радног циклуса)
- А вредност од 13107 даје (20%) СВЕТЛОСТ И (20%) БРЗИНУ (20% радног циклуса)
У овом упутству користимо потенциометар и СТМ32 за варирање осветљености ЛЕД и брзине једносмерног вентилатора помоћу ПВМ технике. ЛЦД од 16к2 користи се за приказ вредности АДЦ (0-4095) и модификоване променљиве (вредност ПВМ) која је на излазу (0-65535).
Ево неколико примера ПВМ-а са другим микроконтролером:
- Генерисање ПВМ-а помоћу ПИЦ микроконтролера са МПЛАБ и КСЦ8
- Управљање серво мотором са Распберри Пи
- Ардуино заснован ЛЕД затамњивач који користи ПВМ
- Модулација ширине импулса (ПВМ) помоћу МСП430Г2
Овде погледајте све пројекте повезане са ПВМ-ом.
Компоненте потребне
- СТМ32Ф103Ц8
- ДЦ вентилатор
- УЛН2003 ИЦ возача мотора
- ЛЕД (ЦРВЕНА)
- ЛЦД (16к2)
- Потенциометар
- Бреадбоард
- Батерија 9В
- Јумпер Вирес
Вентилатор једносмерне струје: Овде се користи вентилатор једносмерне струје, БЛДЦ вентилатор са старог рачунара. Потребно је спољно напајање, па користимо батерију од 9 В једносмерне струје.
ИЦ возача мотора УЛН2003: Користи се за погон мотора у једном смеру, јер је мотор једносмеран, а такође је потребна и спољна снага за вентилатор. Овде сазнајте више о кругу мотора заснованом на УЛН2003. Испод је сликовни дијаграм УЛН2003:
Клинови (ИН1 до ИН7) су улазни пинови, а (ОУТ 1 до ОУТ 7) су одговарајући излазни пинови. ЦОМ добија позитиван напон извора потребан за излазне уређаје.
ЛЕД: Користи се ЦРВЕНА боја у боји која емитује ЦРВЕНУ светлост. Могу се користити било које боје.
Потенциометри: Користе се два потенциометра, један је за делилац напона за аналогни улаз на АДЦ, а други за контролу осветљености ЛЕД-а.
Детаљи о пин-у за СТМ32
Као што можемо видети да су ПВМ пинови назначени у таласном формату (~), таквих пинова има 15, АДЦ пинови су представљени зеленом бојом, 10 АДЦ пинова се користи за аналогне улазе.
Кружни дијаграм и везе
Везе СТМ32 са разним компонентама објашњене су на следећи начин:
СТМ32 са аналогним улазом (АДЦ)
Потенциометар присутан на левој страни круга користи се као регулатор напона који регулише напон са пина од 3.3В. Излаз потенциометра, односно средишњег пина потенциометра повезан је са АДЦ пином (ПА4) СТМ32.
СТМ32 са ЛЕД
Излазни пин СТМ32 ПВМ (ПА9) повезан је на позитивни пин ЛЕД диоде кроз серијски отпорник и кондензатор.
ЛЕД са отпорником и кондензатором
Отпорник у серији и кондензатор паралелно повезани су са ЛЕД да би генерисали тачан аналогни талас из ПВМ излаза, јер аналогни излаз није чист од када се генерише директно из ПВМ пина.
СТМ32 са УЛН2003 и УЛН2003 са вентилатором
СТМ32 ПВМ излазни пин (ПА8) повезан је на улазни пин (ИН1) УЛН2003 ИЦ, а одговарајући излазни пин (ОУТ1) УЛН2003 повезан је са негативном жицом ДЦ ВЕНТИЛАТОРА.
Позитивни пин ДЦ вентилатора повезан је са ЦОМ пином УЛН2003 ИЦ, а спољна батерија (9В ДЦ) такође је повезана са истим ЦОМ пином УЛН2003 ИЦ. ГНД пин УЛН2003 је повезан са ГНД пином СТМ32, а негатив батерије повезан је на исти ГНД пин.
СТМ32 са ЛЦД-ом (16к2)
ЛЦД Пин Но. |
Име ЛЦД екрана |
Име ПИН-а СТМ32 |
1 |
Приземље (Гнд) |
Приземље (Г) |
2 |
ВЦЦ |
5В |
3 |
ВЕЕ |
Прибадача из центра потенциометра |
4 |
Изаберите регистар (РС) |
ПБ11 |
5 |
Читање / писање (РВ) |
Приземље (Г) |
6 |
Омогући (ЕН) |
ПБ10 |
7 |
Бит података 0 (ДБ0) |
Нема везе (НЦ) |
8 |
Бит података 1 (ДБ1) |
Нема везе (НЦ) |
9 |
Бит података 2 (ДБ2) |
Нема везе (НЦ) |
10 |
Бит података 3 (ДБ3) |
Нема везе (НЦ) |
11 |
Бит података 4 (ДБ4) |
ПБ0 |
12 |
Бит података 5 (ДБ5) |
ПБ1 |
13 |
Бит података 6 (ДБ6) |
ПЦ13 |
14 |
Бит података 7 (ДБ7) |
ПЦ14 |
15 |
ЛЕД позитиван |
5В |
16 |
ЛЕД негативан |
Приземље (Г) |
Потенциометар на десној страни користи се за контролу контраста ЛЦД екрана. Горња табела приказује везу између ЛЦД-а и СТМ32.
Програмирање СТМ32
Као и претходни водич, СТМ32Ф103Ц8 смо програмирали са Ардуино ИДЕ преко УСБ порта без употребе ФТДИ програмера. Да бисте сазнали више о програмирању СТМ32 помоћу Ардуино ИДЕ, следите везу. Програмирање можемо наставити као у Ардуину. Комплетна шифра дата је на крају.
У овом кодирању узећемо улазну аналогну вредност из АДЦ пина (ПА4) који је повезан са средишњим пином левог потенциометра и затим претворити аналогну вредност (0-3,3В) у дигитални или целобројни формат (0-4095). Ова дигитална вредност се даље пружа као ПВМ излаз за контролу осветљености ЛЕД-а и брзине једносмерног вентилатора. ЛЦД од 16к2 користи се за приказ АДЦ-а и мапиране вредности (излазна вредност ПВМ-а).
Прво морамо да укључимо датотеку заглавља ЛЦД-а, декларирамо ЛЦД пинове и иницијализујемо их помоћу доњег кода. Овде сазнајте више о повезивању ЛЦД-а са СТМ32.
#инцлуде
Следеће декларишите и дефинишите имена пинова помоћу пин-а СТМ32
цонст инт аналогинпут = ПА4; // Улаз из потенциометра цонст инт лед = ПА9; // ЛЕД излаз цонст инт фан = ПА8; // излаз вентилатора
Сада унутар сетуп-а () , морамо приказати неке поруке и обрисати их након неколико секунди и одредити ИНПУТ пин и ПВМ излазне пинове
лцд.бегин (16,2); // Припрема ЛЦД-а лцд.цлеар (); // брише ЛЦД лцд.сетЦурсор (0,0); // Поставља курсор на ров0 и цолумн0 лцд.принт ("ЦИРЦУИТ ДИГЕСТ"); // приказује Цирцуит Дигест лцд.сетЦурсор (0,1); // Поставља курсор на колону0 и ред1 лцд.принт ("ПВМ УСИНГ СТМ32"); // приказује ПВМ користећи СТМ32 кашњење (2000); // Време кашњења лцд.цлеар (); // брише ЛЦД пинМоде (аналогни улаз, ИНПУТ); // постављање аналогног улаза у режим пина као ИНПУТ пинМоде (лед, ПВМ); // постављање режима пина водено као ПВМ излаз пинМоде (вентилатор, ПВМ); // постављамо вентилатор у режиму пина као ПВМ излаз
Пин за аналогни улаз (ПА4) је постављен као ИНПУТ помоћу пинМоде (аналогни улаз, ИНПУТ), ЛЕД пин је постављен као ПВМ излаз помоћу пинМоде (лед, ПВМ), а пин за вентилатор је постављен као ПВМ излаз од пинМоде (вентилатор, ПВМ) . Овде су ПВМ излазни пинови повезани на ЛЕД (ПА9) и вентилатор (ПА8).
Следећа функција воид лооп () , очитавамо аналогни сигнал са АДЦ пина (ПА4) и складиштимо га у целобројну променљиву која претвара аналогни напон у дигиталне целобројне вредности (0-4095) помоћу доњег кода инт валуеадц = аналогРеад (аналогинпут);
Овде је важно напоменути да су ПВМ пинови, односно канали СТМ32, имају 16-битну резолуцију (0-65535), тако да то морамо мапирати са аналогним вредностима помоћу функције мапе као доле
инт резултат = мапа (валуеадц, 0, 4095, 0, 65535).
Ако се мапирање не користи, променом потенциометра нећемо добити пуну брзину вентилатора или пуну осветљеност ЛЕД-а.
Затим запишемо ПВМ излаз на ЛЕД помоћу пвмВрите (лед, резултат) и ПВМ излаз на вентилатор помоћу функција пвмВрите (вентилатор, резултат ).
На крају приказујемо аналогну улазну вредност (вредност АДЦ) и излазне вредности (вредности ПВМ) на ЛЦД екрану користећи следеће наредбе
лцд.сетЦурсор (0,0); // Поставља курсор на ров0 и цолумн0 лцд.принт ("АДЦ валуе ="); // исписује речи “” лцд.принт (валуеадц); // приказује валуеадц лцд.сетЦурсор (0,1); // Поставља курсор на колону0 и ред1 лцд.принт ("Оутпут ="); // исписује речи у "" лцд.принт (резултат); // приказује резултат вредности
Комплетни код са демонстрацијским видео записом дат је у наставку.