- Поређење АДЦ-а у Ардуину и СТМ32Ф103Ц8
- АДЦ у СТМ32
- Како се аналогни сигнал претвара у дигитални формат
- АДЦ пинови у СТМ32Ф103Ц8Т6
- Компоненте потребне
- Шема и објашњења
- Програмирање СТМ32 за читање АДЦ вредности
Једна уобичајена карактеристика која се користи у скоро свакој уграђеној апликацији је АДЦ модул (аналогни у дигитални претварач). Ови аналогно-дигитални претварачи могу очитавати напон са аналогних сензора као што су сензор температуре, сензор нагиба, тренутни сензор, Флек сензор и још много тога. Дакле, у овом упутству ћемо научити како се користи АДЦ у СТМ32Ф103Ц8 за очитавање аналогних напона помоћу Енергиа ИДЕ. Ми ћемо интерфејс мали потенциометар на СТМ32 плаву пилулу одбора и снабдевање различитом напон на аналогну пин, прочитајте напон и приказати га на 16к2 ЛЦД екрану.
Поређење АДЦ-а у Ардуину и СТМ32Ф103Ц8
На плочи Ардуино садржи 6 канала (8 канала на Мини и Нано, 16 на Мега), 10-битни АДЦ са опсегом улазног напона од 0В – 5В. То значи да ће мапирати улазни напон између 0 и 5 волти у целобројне вредности између 0 и 1023. Сада у случају СТМ32Ф103Ц8 имамо 10 канала, 12-битни АДЦ са улазним опсегом 0В -3,3В. Мапираће улазне напоне између 0 и 3,3 волта у целобројне вредности између 0 и 4095.
АДЦ у СТМ32
АДЦ уграђен у микроконтролере СТМ32 користи принцип САР (узастопни регистар апроксимације), по којем се конверзија врши у неколико корака. Број корака конверзије једнак је броју битова у АДЦ претварачу. Сваким кораком управља АДЦ сат. Сваки АДЦ сат даје један бит од резултата до излаза. Унутрашњи дизајн АДЦ заснован је на техници комутираних кондензатора. Ако сте нови у СТМ32, погледајте наш водич за почетак рада са СТМ32.
12-битна резолуција
Овај АДЦ је 10-канални 12-битни АДЦ. Овде термин 10 канал подразумева да постоји 10 АДЦ пинова помоћу којих можемо мерити аналогни напон. Израз 12-бит подразумева резолуцију АДЦ-а. 12-бит значи 2 у степен десет (2 12), што је 4096. Ово је број корака узорка за наш АДЦ, па ће опсег наших вредности АДЦ бити од 0 до 4095. Вредност ће се повећати од 0 до 4095 на основу вредности напона у кораку, који се може израчунати формулом
НАПОН / КОРАК = РЕФЕРЕНТНИ НАПОН / 4096 = (3,3 / 4096 = 8,056мВ) по јединици.
Како се аналогни сигнал претвара у дигитални формат
Како рачунари чувају и обрађују само бинарне / дигиталне вредности (1 и 0). Дакле, аналогни сигнали попут излаза сензора у волтима морају се претворити у дигиталне вредности за обраду и претворба мора бити тачна. Када се улазни аналогни напон даје СТМ32 на његовим аналогним улазима, аналогна вредност се чита и чува у целобројној променљивој. Та сачувана Аналогна вредност (0-3,3В) претвара се у целобројне вредности (0-4096) користећи доњу формулу:
УЛАЗНИ НАПОН = (вредност АДЦ / резолуција АДЦ) * референтни напон
Резолуција = 4096
Референца = 3.3В
АДЦ пинови у СТМ32Ф103Ц8Т6
У СТМ32 има 10 аналогних пинова од ПА0 до ПБ1.
Такође проверите како се користи АДЦ у другим микроконтролерима:
- Како се користи АДЦ у Ардуино Уно?
- Повезивање АДЦ0808 са 8051 микроконтролером
- Коришћење АДЦ модула ПИЦ микроконтролера
- Водич за АДЦ за Распберри Пи
- Како се користи АДЦ у МСП430Г2 - Мерење аналогног напона
Компоненте потребне
- СТМ32Ф103Ц8
- ЛЦД 16 * 2
- Потенциометар 100к
- Бреадбоард
- Повезивање жица
Шема и објашњења
Дијаграм кола за повезивање 16 * 2 ЛЦД- а и аналогног улаза на плочу СТМ32Ф103Ц8Т6 приказан је испод.
Конекције које се раде за ЛЦД дате су у наставку:
ЛЦД Пин Но. |
Име ЛЦД екрана |
Име ПИН-а СТМ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 (3,3 В), а десни пин је повезан са масом, средишњи пин потенциометра повезан је са аналогним улазним пином (ПА7) СТМ32. Други потенциометар се користи за подешавање контраста ЛЦД екрана. Извор напајања за СТМ32 обезбеђује се путем УСБ напајања са рачунара или преносног рачунара.
Програмирање СТМ32 за читање АДЦ вредности
У нашем претходном упутству сазнали смо о програмирању плоче СТМ32Ф103Ц8Т6 помоћу УСБ порта. Дакле, сада нам није потребан ФТДИ програмер. Једноставно га повежите са рачунаром преко УСБ порта СТМ32 и започните програмирање са АРДУИНО ИДЕ. Програмирање вашег СТМ32 у АРДУИНО ИДЕ за читање аналогног напона врло је једноставно. То је исто као ардуино плоча. Нема потребе за променом краткоспојних прекидача СТМ32.
У овом програму ће се очитати аналогна вредност и израчунати напон са том вредношћу, а затим приказати и аналогне и дигиталне вредности на ЛЦД екрану.
Прво дефинишите ЛЦД пинове. Они дефинишу на који пин СТМ32 су повезани пинови ЛЦД-а. Можете да измените према вашим захтевима.
цонст инт рс = ПБ11, ен = ПБ10, д4 = ПБ0, д5 = ПБ1, д6 = ПЦ13, д7 = ПЦ14; // наведите имена пин-ова на које је повезан ЛЦД
Даље, укључујемо датотеку заглавља за ЛЦД екран. Ово позива библиотеку која садржи код како СТМ32 треба да комуницира са ЛЦД-ом. Такође се уверите да се функција Ликуид Цристал позива са именима пинова која смо управо дефинисали горе.
#инцлуде
Унутар функције сетуп () дали бисмо само уводну поруку која ће се приказати на ЛЦД екрану. Можете научити о повезивању ЛЦД-а са СТМ32.
лцд.бегин (16, 2); // Користимо ЛЦД ЛЦД ЛЦД са 16 * 2 (); // обришите екран лцд.сетЦурсор (0, 0); // У првом реду прва колона лцд.прин т ("ЦИРЦУИТДИГЕСТ"); // исписати овај лцд.сетЦурсор (0, 1); // У другом реду првог колоне н лцд.принт ("СТМ32Ф103Ц8"); // Испис тхи с кашњење (2000); // чекамо две секунде лцд.цлеар (); // обришите екран лцд.сетЦурсор (0, 0); // У првом реду прва колона лцд.принт ("УСИНГ АДЦ ИН"); // Одштампај овај лцд.сетЦурсор (0,1); // У првом ступцу првог реда колона лцд.принт ("СТМ32Ф103Ц8"); // Одштампај ово одлагање (2000); // чекамо две секунде лцд.цлеар (); // Очистите екран
Коначно, унутар наше функције бесконачне петље () почињемо да читамо аналогни напон напајан на пин ПА7 са потенциометра. Као што смо већ разговарали, микроконтролер је дигитални уређај и не може директно очитавати ниво напона. Користећи САР технику, ниво напона се пресликава од 0 до 4096. Ове вредности се називају АДЦ вредности, да бисте добили ову АДЦ вредност, једноставно користите следећи ред
инт вал = аналогРеад (А7); // очитавање вредности АДЦ са пина ПА 7
Овде се функција аналогРеад () користи за очитавање аналогне вредности пина. На крају ову вредност чувамо у променљивој која се назива „ вал “. Тип ове променљиве је цео број јер ћемо у ову променљиву сачувати само вредности у распону од 0 до 4096.
Следећи корак би био израчунавање вредности напона из вредности АДЦ. Да бисмо то урадили, имамо следеће формуле
Напон = (вредност АДЦ / резолуција АДЦ) * Референтни напон е
У нашем случају већ знамо да је АДЦ резолуција нашег микроконтролера 4096. Вредност АДЦ се такође налази у претходном реду и чува променљиву звану вал. Референтни напон је једнак напону на коме се микроконтролер послује. Када се СТМ32 плоча напаја преко УСБ кабла, тада је радни напон 3.3В. Такође можете измерити радни напон помоћу мултиметра преко Вцц и уземљеног пина на плочи. Дакле, горња формула се уклапа у наш случај као што је приказано доле
пловни напон = (пловак (вал) / 4096) * 3,3; // формуле за претварање вредности АДЦ у волтаг е
Можда ћете бити збуњени с линијом флоат (вал). Ово се користи за претварање променљиве „вал“ из типа података „инт“ у „облик података“. Ова конверзија је потребна, јер само ако добијемо резултат вал / 4096 у флоат-у, можемо га помножити 3.3. Ако се вредност прими у целом броју, увек ће бити 0, а резултат ће такође бити нула. Једном када израчунамо АДЦ вредност и напон, преостаје само приказивање резултата на ЛЦД екрану, што се може учинити помоћу следећих редова
лцд.сетЦурсор (0, 0); // подесимо курсор на колону 0, ред 0 лцд.принт ("АДЦ Вал:"); лцд.принт (вал); // Приказивање вредности АДЦ лцд.сетЦурсор (0, 1); // подесимо курсор на колону 0, ред 1, лцд.принт ("Волтаге:"); лцд.принт (напон); // Приказ напона
Комплетни код и демонстрациони видео су дати у наставку.