- ПВМ (модулација ширине импулса)
- ПВМ пинови у АРМ7-ЛПЦ2148
- ПВМ регистри у АРМ7-ЛПЦ2148
- Компоненте потребне
- Кружни дијаграм и везе
- Програмирање АРМ7-ЛПЦ2148 за ПВМ
- Кораци укључени у програмирање ЛПЦ2148 за ПВМ и АДЦ
Као што знамо, микроконтролери узимају аналогни улаз од аналогних сензора и користе АДЦ (аналогни у дигитални претварач) за обраду тих сигнала. Али шта ако микроконтролер жели да произведе аналогни сигнал за управљање аналогно управљаним уређајима попут серво мотора, једносмерног мотора итд.? Микроконтролери не производе излазни напон попут 1В, 5В, већ користе технику која се назива ПВМ за рад аналогних уређаја. Пример ПВМ-а је вентилатор за хлађење нашег лаптопа (једносмерни мотор) који треба да се контролише брзином у складу са температуром, а исти се примењује употребом Пулсе Видтх Модулатион (ПВМ) технике на матичним плочама.
У овом упутству ћемо контролисати осветљеност ЛЕД диоде користећи ПВМ у микроконтролеру АРМ7-ЛПЦ2148.
ПВМ (модулација ширине импулса)
ПВМ је добар начин за управљање аналогним уређајима помоћу дигиталне вредности попут контроле брзине мотора, осветљености ЛЕД-а итд. Иако ПВМ не пружа чисти аналогни излаз, али генерише пристојне аналогне импулсе за контролу аналогних уређаја. ПВМ заправо модулира ширину правоугаоног импулсног таласа како би добио варијацију у просечној вредности резултујућег таласа.
Радни циклус ПВМ
Проценат времена у којем ПВМ сигнал остаје ВИСОК (на време) назива се радни циклус. Ако је сигнал увек УКЉУЧЕН, он је у 100% радном циклусу, а ако је увек искључен, то је 0% радног циклуса.
Радни циклус = Вријеме УКЉУЧЕЊА / (Вријеме УКЉУЧИВАЊА + Вријеме искључивања)
ПВМ пинови у АРМ7-ЛПЦ2148
На слици испод су приказани ПВМ излазни пинови АРМ7-ЛПЦ2148. Укупно постоји шест пинова за ПВМ.
ПВМ канал |
ЛПЦ2148 Порт Пинс |
ПВМ1 |
П0.0 |
ПВМ2 |
П0.7 |
ПВМ3 |
П0.1 |
ПВМ4 |
П0.8 |
ПВМ5 |
П0.21 |
ПВМ6 |
П0.9 |
ПВМ регистри у АРМ7-ЛПЦ2148
Пре него што уђемо у наш пројекат, морамо знати о ПВМ регистрима у ЛПЦ2148.
Ево листе регистара који се користе у ЛПЦ2148 за ПВМ
1. ПВМПР: ПВМ регистар предскале
Употреба: То је 32-битни регистар. Садржи број пута (минус 1) да ПЦЛК мора да пређе циклус пре повећања бројача ПВМ тајмера (у њему се заправо налази максимална вредност бројача пред скале).
2. ПВМПЦ: ПВМ бројач предлазача
Употреба: То је 32-битни регистар . Садржи вредност бројача који се увећава. Када је ова вредност једнака ПР вредности плус 1, бројач тајмера ПВМ (ТЦ) се повећава.
3. ПВМТЦР: Регистар за контролу тајмера ПВМ-а
Употреба: Садржи контролне битове Омогућавање бројача, Ресетовање бројача и ПВМ Омогућавање. То је 8-битни регистар.
7: 4 |
3 |
2 |
1 |
0 |
РЕЗЕРВИСАНО |
Омогућен ПВМ |
РЕЗЕРВИСАНО |
ПОНОВНО ПОНАШАЊЕ БРОЈИЛА |
БРОЈИЛО Омогућено |
- Омогућавање ПВМ-а: (Бит-3)
0- ПВМ онемогућен
1- ПВМ омогућен
- Омогућавање бројача: (Бит-0)
0- Онемогући бројаче
1- Омогући бројач
- Ресетовање бројача: (Бит-1)
0- Не предузимајте ништа.
1- Ресетује ПВМТЦ и ПВМПЦ на позитивној ивици ПЦЛК.
4. ПВМТЦ: ПВМ бројач тајмера
Употреба: То је 32-битни регистар. Садржи тренутну вредност ПВМ тајмера који се увећава. Када бројач прескалера (ПЦ) достигне вредност регистра ПР (Пресцалер Регистер - ПР) плус 1, овај бројач се увећава.
5. ПВМИР: ПВМ регистар прекида
Употреба: То је 16-битни регистар. Садржи заставице прекида за ПВМ Матцх канале 0-6. Ознака прекида поставља се када дође до прекида за тај канал (МРк прекид) где је Кс број канала (0 до 6).
6. ПВММР0-ПВММР6: ПВМ регистар мечева
Употреба: То је 32-битни регистар . Заправо група Матцх Цханнел омогућава подешавање 6 ПВМ излаза са једном ивицом или 3 двоструко контролисаних ПВМ. Можете модификовати седам канала подударања да бисте конфигурисали ове ПВМ излазе у складу са вашим захтевима у ПВМПЦР-у.
7. ПВММЦР: ПВМ регистар за контролу подударања
Употреба: То је 32-битни регистар. Садржи битове прекида, ресетовања и заустављања који контролишу изабрани канал подударања. Догађа се између ПВМ регистара подударања и бројача ПВМ тајмера.
31:21 |
20 |
19 |
18 |
.. |
5 |
4 |
3 |
2 |
1 |
0 |
РЕЗЕРВИСАНО |
ПВММР6С |
ПВММР6Р |
ПВММР6И |
.. |
ПВММР1С |
ПВММР1Р |
ПВММР11 |
ПВММР0С |
ПВММР0Р |
ПВММР01 |
Овде је к од 0 до 6
- ПВММРкИ (бит-0)
Омогућити или онемогућити прекиде ПВМ-а
0- Онемогући прекиде ПВМ подударања.
1- Омогући прекид ПВМ подударања.
- ПВММРкР: (бит-1)
РЕСЕТ ПВМТЦ - Вредност бројача тајмера кад год се подудара са ПВМРк
0- Не ради ништа.
1- Ресетује ПВМТЦ.
- ПВММРкС: (бит 2)
СТОП ПВМТЦ & ПВМПЦ када ПВМТЦ достигне вредност регистра упаривања
0- Онемогућите функцију заустављања ПВМ-а.
1- Омогућите функцију ПВМ Стоп.
8. ПВМПЦР: ПВМ контролни регистар
Употреба: То је 16-битни регистар. Садржи битове који омогућавају ПВМ излазе 0-6 и одабиру контролу са једном ивицом или двоструком ивицом за сваки излаз.
31:15 |
14: 9 |
8: 7 |
6: 2 |
1: 0 |
НЕКОРИШЋЕНО |
ПВМЕНА6-ПВМЕНА1 |
НЕКОРИШЋЕНО |
ПВМСЕЛ6-ПВМСЕЛ2 |
НЕКОРИШЋЕНО |
- ПВМСЕЛк (к: 2 до 6)
- Једнокраки режим за ПВМк
- 1- Режим Доубле Едге за ПВМк.
- ПВМЕНАк (к: 1 до 6)
- ПВМк Онемогући.
- 1- Омогућен ПВМк.
9. ПВМЛЕР: Регистар за омогућавање закључавања ПВМ-а
Употреба: То је 8-битни регистар. Садржи битове Матцх к Латцх за сваки Матцх Матцх.
31: 7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
НЕКОРИШЋЕНО |
ЛЕН6 |
ЛЕН5 |
ЛЕН4 |
ЛЕН3 |
ЛЕН2 |
ЛЕН1 |
ЛЕН0 |
ЛЕНк (к: 0 до 6):
0- Онемогућите учитавање нових вредности подударања
1- Учитајте нове вредности подударања из (ПВММРк) ПВММатцх Регистра када се тајмер ресетује.
Сада почињемо да градимо хардверску поставку да демонстрирамо модулацију ширине импулса у АРМ микроконтролеру.
Компоненте потребне
Хардвер
- АРМ7-ЛПЦ2148 Микроконтролер
- 3.3В регулатор напона ИЦ
- 10к потенциометар
- ЛЕД (било која боја)
- ЛЦД (16к2) модул екрана
- Бреадбоард
- Повезивање жица
Софтвер
- Кеил уВисион5
- Фласх Магиц Тоол
Кружни дијаграм и везе
Везе између ЛЦД-а и АРМ7-ЛПЦ2148
АРМ7-ЛПЦ2148 |
ЛЦД (16к2) |
П0.4 |
РС (Избор регистра) |
П0.6 |
Е (Омогући) |
П0.12 |
Д4 (подаци пин 4) |
П0.13 |
Д5 (подаци пин 5) |
П0.14 |
Д6 (подаци пин 6) |
П0.15 |
Д7 (подаци пин 7) |
ГНД |
ВСС, Р / В, К. |
+ 5В |
ВДД, А. |
Веза између ЛЕД и АРМ7-ЛПЦ2148
ЛЕД АНОДЕ је повезан са ПВМ излазом (П0.0) ЛПЦ2148, док је ЛЕД ЦАТХОДЕ пин повезан са ГНД пином ЛПЦ2148.
Веза између АРМ7-ЛПЦ2148 и потенциометра са регулатором напона 3.3В
3.3В регулатор напона ИЦ |
Пин функција |
АРМ-7 ЛПЦ2148 Пин |
1.Лефт Пин |
- Ве из ГНД |
ГНД пин |
2.Центре Пин |
Регулисани + 3.3В излаз |
На потенциометар Улаз и излаз потенциометра на П0,28 од ЛПЦ2148 |
3.десна игла |
+ Ве од 5В УЛАЗНИ |
+ 5В |
Тачке које треба забележити
1. Овде се користи регулатор напона од 3.3В за пружање аналогне улазне вредности АДЦ пину (П0.28) ЛПЦ2148 и зато што користимо снагу од 5В треба да регулишемо напон помоћу регулатора напона од 3.3В.
2. Потенциометар се користи за варирање напона између (0В до 3,3В) да би се обезбедио аналогни улаз (АДЦ) на ЛПЦ2148 пину П0.28
Програмирање АРМ7-ЛПЦ2148 за ПВМ
За програмирање АРМ7-ЛПЦ2148 потребан нам је алат за уВисион и Фласх Магиц. Користимо УСБ кабл за програмирање АРМ7 Стицк преко микро УСБ порта. Код пишемо помоћу Кеила и креирамо хек датотеку, а затим се ХЕКС датотека флешира на АРМ7 стицк користећи Фласх Магиц. Да бисте сазнали више о инсталирању кеил уВисион и Фласх Магиц, и како их користити, следите везу Први кораци са АРМ7 ЛПЦ2148 микроконтролером и програмирајте га помоћу Кеил уВисион.
У овом упутству користићемо АДЦ и ПВМ технику за контролу осветљености ЛЕД диоде. Овде се ЛПЦ2148 даје аналогни улаз (0 до 3,3 В) преко АДЦ улазног пина П0,28, а затим се овај аналогни улаз претвара у дигиталну вредност (0 до 1023). Затим се ова вредност поново претвара у дигиталну вредност (0 - 255) јер ПВМ излаз ЛПЦ2148 има само 8-битну резолуцију (2 8). ЛЕД је повезан на ПВМ пин П0.0 и осветљеност ЛЕД се може контролисати помоћу потенциометра. Да бисте сазнали више о АДЦ у АРМ7-ЛПЦ2148, следите везу.
Кораци укључени у програмирање ЛПЦ2148 за ПВМ и АДЦ
Корак 1: - Прва ствар је конфигурисање ПЛЛ-а за генерисање такта јер поставља системски сат и периферни такт ЛПЦ2148 према потреби програмера. Максимална тактна фреквенција за ЛПЦ2148 је 60 МХз. Следећи редови се користе за конфигурисање генерисања такта ПЛЛ.
воид ИнитилизеПЛЛ (воид) // Функција за коришћење ПЛЛ-а за генерисање сата { ПЛЛ0ЦОН = 0к01; ПЛЛ0ЦФГ = 0к24; ПЛЛ0ФЕЕД = 0кАА; ПЛЛ0ФЕЕД = 0к55; вхиле (! (ПЛЛ0СТАТ & 0к00000400)); ПЛЛ0ЦОН = 0к03; ПЛЛ0ФЕЕД = 0кАА; ПЛЛ0ФЕЕД = 0к55; ВПБДИВ = 0к01; }
Корак 2: - Следећа ствар је одабир ПВМ пинова и ПВМ функције ЛПЦ2148 помоћу регистра ПИНСЕЛ. Користимо ПИНСЕЛ0 као што користимо П0.0 за ПВМ излаз ЛПЦ2148.
ПИНСЕЛ0 = 0к00000002; // Пин за подешавање П0.0 за ПВМ излаз
Корак 3: - Следеће морамо РЕСЕТИРАТИ тајмере користећи ПВМТЦР (Тимер Цонтрол Регистер).
ПВМТЦР = (1 << 1); // Постављање регистра ПВМ тајмера као ресетовање бројача
А затим подесите вредност предскале која одређује резолуцију ПВМ-а. Постављам на нулу
ПВМПР = 0Кс00; // Постављање вредности пред скале ПВМ
Корак 4: - Следеће треба да подесимо ПВММЦР (ПВМ регистар контроле подударања) пошто поставља операцију попут ресетовања, прекида за ПВММР0.
ПВММЦР = (1 << 0) - (1 << 1); // Постављање регистра за контролу подударања ПВМ
Корак 5: - Максимални период ПВМ канала подешава се помоћу ПВММР.
ПВММР0 = ПВМвалуе; // Давање ПВМ вредности Максимална вредност
У нашем случају максимална вредност је 255 (за максималну осветљеност)
Корак 6: - Затим треба да подесимо Омогућавање закључавања на одговарајуће регистре подударања помоћу ПВМЛЕР-а
ПВМЛЕР = (1 << 0); // Реза за ПВМ Еналбе
(Користимо ПВММР0) Дакле, омогућите одговарајући бит постављањем 1 у ПВМЛЕР
Корак 7: - Да бисмо омогућили ПВМ излаз на пин, морамо да користимо ПВМТЦР за омогућавање бројача ПВМ тајмера и ПВМ режима.
ПВМТЦР = (1 << 0) - (1 << 3); // Омогућавање ПВМ и ПВМ бројача
Корак 8: - Сада треба да добијемо вредности потенциометра за подешавање радног циклуса ПВМ из АДЦ пина П0.28. Дакле, користимо АДЦ модул у ЛПЦ2148 за претварање аналогног улаза потенциометра (0 до 3,3 В) у вредности АДЦ (0 до 1023).
Овде претварамо вредности од 0-1023 у 0-255 делећи је са 4 јер ПВМ ЛПЦ2148 има 8-битну резолуцију (2 8).
Корак 9: - За одабир АДЦ пина П0.28 у ЛПЦ2148 користимо
ПИНСЕЛ1 = 0к01000000; // Постављање П0.28 као АДЦ ИНПУТ АД0ЦР = (((14) << 8) - (1 << 21)); // Подешавање сата и ПДН-а за А / Д конверзију
Следећи редови захватају аналогни улаз (0 до 3,3 В) и претварају га у дигиталну вредност (0 до 1023). А онда су ове дигиталне вредности подељене са 4 да би се претвориле у (0 до 255) и на крају напајале као ПВМ излаз у П0.0 пину ЛПЦ2148 на који је ЛЕД повезана.
АД0ЦР - = (1 << 1); // Изаберите АД0.1 канал у времену кашњења регистра АДЦ (10); АД0ЦР - = (1 << 24); // Покретање А / Д конверзије вхиле ((АД0ДР1 & (1 << 31)) == 0); // Провери ГОТОВО бит у АДЦ регистру података адцвалуе = (АД0ДР1 >> 6) & 0к3фф; // Добивање РЕЗУЛТАТА из АДЦ регистра података дутицицле = адцвалуе / 4; // формула за добијање вредности радног циклуса од (0 до 255) ПВММР1 = радни циклус; // постављамо вредност радног циклуса на ПВМ регистар подударања ПВМЛЕР - = (1 << 1); // Омогући ПВМ излаз са вриједношћу радног циклуса
Корак 10: - Следеће приказујемо те вредности у ЛЦД (16Кс2) модулу приказа. Дакле, додајемо следеће редове за иницијализацију модула ЛЦД екрана
Празан ЛЦД_ИНИТИЛИЗЕ (воид) // Функција за спремање ЛЦД-а { ИО0ДИР = 0к0000ФФФ0; // поставља пин П0.12, П0.13, П0.14, П0.15, П0.4, П0.6 као ИЗЛАЗНО кашњење (20); ЛЦД_СЕНД (0к02); // Иницијализација лцд-а у 4-битном режиму рада ЛЦД_СЕНД (0к28); // 2 реда ( 16Кс2 ) ЛЦД_СЕНД (0к0Ц); // Приказ на показивачу искључен ЛЦД_СЕНД (0к06); // Курсор за аутоматско повећање ЛЦД_СЕНД (0к01); // прикажи јасан ЛЦД_СЕНД (0к80); // Прва позиција у првом реду }
Како смо ЛЦД повезивали у 4-битном режиму са ЛПЦ2148, морали смо да шаљемо вредности које ће се приказивати грицкајући по грицкајући (горњи и доњи грицкање). Дакле, користе се следећи редови.
воид ЛЦД_ДИСПЛАИ (цхар * мсг) // Функција за штампање знакова послатих један по један { уинт8_т и = 0; вхиле (мсг! = 0) { ИО0ПИН = ((ИО0ПИН & 0кФФФФ00ФФ) - ((мсг & 0кФ0) << 8)); // шаље горњи грицкање ИО0СЕТ = 0к00000050; // РС ХИГХ & Омогући ХИГХ за штампање података ИО0ЦЛР = 0к00000020; // РВ ЛОВ режим закашњења у режиму писања (2); ИО0ЦЛР = 0к00000040; // ЕН = 0, РС и РВ непромењени (тј. РС = 1, РВ = 0) време одлагања (5); ИО0ПИН = ((ИО0ПИН & 0кФФФФ00ФФ) - ((мсг & 0к0Ф) << 12)); // шаље доњи грицкање ИО0СЕТ = 0к00000050; // РС & ЕН ХИГХ ИО0ЦЛР = 0к00000020; време одлагања (2); ИО0ЦЛР = 0к00000040; време одлагања (5); и ++; } }
За приказ тих вредности АДЦ и ПВМ користимо следеће редове у функцији инт маин () .
ЛЦД_СЕНД (0к80); спринтф (дисплаиадц, "адцвалуе =% ф", адцвалуе); ЛЦД_ДИСПЛАИ (дисплаиадц); // Приказивање вредности АДЦ (0 до 1023) ЛЦД_СЕНД (0кЦ0); спринтф (излазни излаз, "ПВМ ОП =%. 2ф", осветљеност); ЛЦД_ДИСПЛАИ (излаз); // Приказивање вредности радног циклуса од (0 до 255)
Комплетни код и видео опис водича дати су у наставку.