- Потребни материјали
- АДЦ на СТМ8С103Ф3П6
- Кружни дијаграм за очитавање АДЦ вредности на СТМ8С и приказ на ЛЦД-у
- АДЦ библиотека за СТМ8С103Ф3П6
- СТМ8С програм за очитавање аналогног напона и приказа на ЛЦД-у
- Очитавање аналогног напона са два потенциометра помоћу СТМ8С
Ако сте редовни читач који прати наше СТМ8С Водиче за микроконтролере, знали бисте да смо у нашем последњем упутству научили како да повежемо ЛЦД 16к2 са СТМ8. Сада, настављајући са овим упутством, научићемо како да користимо функцију АДЦ на нашем микроконтролеру СТМ8С103Ф3П6. АДЦ је врло корисна периферна јединица на микроконтролеру коју уграђени програмери често користе за мерење јединица које су у сталној промени попут променљивог напона, струје, температуре, влажности итд.
Као што знамо „Живимо у аналогном свету са дигиталним уређајима“, што значи да су све око нас попут брзине ветра, интензитета светлости, температуре и свега са чиме имамо посла попут брзине, брзине, притиска итд. Аналогне природе. Али наши микроконтролери и микропроцесори су дигитални уређаји и они неће моћи да мере ове параметре без важне периферне јединице зване Аналогно-дигитални претварачи (АДЦ). Дакле, у овом чланку научимо како да користимо АДЦ на микроконтролеру СТМ8С са ЦОМИЦ Ц компајлером.
Потребни материјали
У овом чланку ћемо читати две аналогне вредности напона са два потенциометра и приказати његову АДЦ вредност на ЛЦД дисплеју 16к2. Да бисмо то урадили, требаће нам следеће компоненте.
- СТМ8С103Ф3П6 Развојна плоча
- СТ-Линк В2 програмер
- ЛЦД 16к2
- Потенциометри
- Повезивање жица
- 1к отпорник
АДЦ на СТМ8С103Ф3П6
Постоји много врста АДЦ-а, а сваки микроконтролер има своје спецификације. На СТМ8С103Ф3П6 имамо АДЦ са 5-каналном и 10-битном резолуцијом; са 10-битном резолуцијом моћи ћемо да измеримо дигиталну вредност од 0 до 1024, а 5-канални АДЦ указује да имамо 5 пинова на микроконтролеру који могу да подржавају АДЦ, ових 5 пинова је истакнуто на доњој слици.
Као што видите, свих ових пет пинова (АИН2, АИН3, АИН4, АИН5 и АИН6) су мултиплексирани са осталим периферним уређајима, што значи да осим што делују као АДЦ пинови, ови пинови могу се користити и за обављање других комуникација као што је на пример, пин 2 и 3 (АИН5 и АИН 6) не могу се користити само за АДЦ, већ се могу користити и за серијску комуникацију и ГПИО функције. Имајте на уму да исти пин неће бити могуће користити у све три сврхе, па ако користимо ова два пина за АДЦ, тада нећемо моћи да вршимо серијску комуникацију. Остале важне карактеристике АДЦ-а за СТМ8С103П36 могу се наћи у доњој табели преузетој са техничког листа.
У горњој табели Вдд представља радни напон, а Всс тло. Дакле, у нашем случају на нашој развојној плочи имамо микроконтролер који ради на 3.3В, дијаграм кола развојне плоче можете проверити од почетка помоћу водича за СТМ8С. Са 3.3В као радним напоном, наша АДЦ тактна фреквенција може се подесити између 1 и 4МХз, а наш опсег напона конверзије је између 0В и 3.3В. То значи да ће наш 10-битни АДЦ очитати 0 када се обезбеди 0В (Всс), а максимално 1024 када се обезбеди 3,3В (Вдд). Ово 0-5В можемо лако променити променом радног напона МЦУ-а ако је потребно.
Кружни дијаграм за очитавање АДЦ вредности на СТМ8С и приказ на ЛЦД-у
Комплетна шема кола која се користи у овом пројекту дата је у наставку, врло је слична водичу за СТМ8С ЛЦД о којем смо претходно разговарали.
Као што видите, једине додатне компоненте осим ЛЦД-а су два потенциометра ПОТ_1 и ПОТ_2 . Ови лонци су повезани са портовима ПЦ4 и ПД6, који су АНИ2 и АНИ6 пинови, као што је раније објашњено на пиноут слици.
Потенциометри су повезани на такав начин да ћемо, када га променимо, добити 0-5 В на нашим аналогним пиновима. Програмираћемо наш контролер да очита овај аналогни напон у дигиталној вредности (0 до 1024) и прикаже га на ЛЦД екрану. Тада ћемо такође израчунати еквивалентну вредност напона и приказати га на ЛЦД-у, имајте на уму да се наш контролер напаја од 3,3 В, па чак и ако обезбедимо 5 В на пин АДЦ, моћи ће да чита само од 0 В до 3,3 В.
Када се везе заврше, мој хардвер изгледа овако како је приказано доле. Два потенциометра можете видети десно, а програмер СТ-линк лево.
АДЦ библиотека за СТМ8С103Ф3П6
За програмирање АДЦ функционалности на СТМ8С, користићемо Цосмиц Ц компајлер заједно са СПЛ библиотекама. Али да бих олакшао процесе, направио сам још једну датотеку заглавља која се може наћи на ГитХуб-у са доњом везом.
АДЦ библиотека за СТМ8С103Ф3П6
Ако знате шта радите, можете створити датотеку заглавља помоћу горњег кода и додати је у директоријум „укључи датотеке“ на страници пројекта. Иначе пратите почетак рада са СТМ8С упутством да бисте знали како да подесите своје програмско окружење и компајлер. Једном када је ваше подешавање спремно, ваш ИДЕ треба да има следеће датотеке заглавља, барем оне заокружене црвеном бојом.
Горња датотека заглавља састоји се од функције која се назива АДЦ_Реад () . Ова функција се може позвати у вашем главном програму да бисте добили вредност АДЦ на било ком пину. На пример, АДЦ_Реад (АН2) ће вратити вредност АДЦ на пин АН2 као резултат. Функција је приказана у наставку.
унсигнед инт АДЦ_Реад (АДЦ_ЦХАННЕЛ_ТипеДеф АДЦ_Цханнел_Нумбер) {унсигнед инт резултат = 0; АДЦ1_ДеИнит (); АДЦ1_Инит (АДЦ1_ЦОНВЕРСИОНМОДЕ_ЦОНТИНУОУС, АДЦ_Цханнел_Нумбер, АДЦ1_ПРЕССЕЛ_ФЦПУ_Д18, АДЦ1_ЕКСТТРИГ_ТИМ, ДИСАБЛЕ, АДЦ1_АЛИГН_РИГХТ, АДЦ1_СЦХМИТТТРИГ_АЛЛ, ДИСАБЛЕ); АДЦ1_Цмд (ЕНАБЛЕ); АДЦ1_СтартЦонверсион (); док је (АДЦ1_ГетФлагСтатус (АДЦ1_ФЛАГ_ЕОЦ) == ФАЛСЕ); резултат = АДЦ1_ГетЦонверсионВалуе (); АДЦ1_ЦлеарФлаг (АДЦ1_ФЛАГ_ЕОЦ); АДЦ1_ДеИнит ();
Као што видите, овој функцији можемо проследити осам параметара и то дефинише како је АДЦ конфигурисан. У нашем коду библиотеке горе, поставили смо режим конверзије на континуирани, а затим добијамо да број канала прослеђује параметар. А онда морамо да подесимо фреквенцију процесора нашег контролера, подразумевано (ако нисте повезали спољни кристал), ваш СТМ8С ће радити са унутрашњим осцилатором од 16 МХз. Дакле, поменули смо „ АДЦ1_ПРЕССЕЛ_ФЦПУ_Д18 “ као вредност пре-скалера. Унутар ове функције користимо друге методе дефинисане СПЛ стм8с_адц1.х заглавном датотеком. Почињемо деиницијализацијом АДЦ пинова, а затим АДЦ1_Инит () за иницијализацију АДЦ периферне опреме . Дефиниција ове функције из корисничког приручника СПЛ приказана је у наставку.
Даље, постављамо спољни окидач помоћу тајмера и онемогућавамо спољни окидач јер га овде нећемо користити. Затим имамо поравнање постављено удесно и последња два параметра се користе за постављање Сцхмитт окидача, али ћемо га онемогућити за овај водич. Дакле, да скратимо, учинићемо да наш АДЦ ради у режиму континуиране конверзије на потребном АДЦ пину са онемогућеним спољним окидачем. Можете да проверите технички лист ако су вам потребне додатне информације о томе како да користите спољни окидач или Сцхмитт опцију окидача, о томе нећемо расправљати у овом упутству.
СТМ8С програм за очитавање аналогног напона и приказа на ЛЦД-у
Комплетни код који се користи у датотеци маин.ц налази се на дну ове странице. Након додавања потребних датотека заглавља и изворних датотека, требали бисте бити у могућности да директно компајлирате главну датотеку. Објашњење кода у главној датотеци је следеће. Нећу објашњавати СТМ8С ЛЦД програм јер смо о томе већ разговарали у претходном водичу.
Сврха кода ће бити очитавање АДЦ вредности са два пина и претварање у вредност напона. Такође ћемо приказати и вредност АДЦ и вредност напона на ЛЦД-у. Дакле, користио сам функцију која се зове ЛЦД_Принт Вар која узима променљиву у целобројном формату и претвара је у знак како би је приказала на ЛЦД-у. Користили смо једноставне операторе модула (%) и поделе (/) да бисмо добили сваку цифру из променљиве и убацили променљиве попут д1, д2, д3 и д4, као што је приказано испод. Тада можемо користити функцију ЛЦД_Принт_Цхар за приказ ових знакова на ЛЦД-у.
воид ЛЦД_Принт_Вар (инт вар) {цхар д4, д3, д2, д1; д4 = вар% 10 + '0'; д3 = (вар / 10)% 10 + '0'; д2 = (вар / 100)% 10 + '0'; д1 = (вар / 1000) + '0'; Лцд_Принт_Цхар (д1); Лцд_Принт_Цхар (д2); Лцд_Принт_Цхар (д3); Лцд_Принт_Цхар (д4); }
Следеће под главном функцијом имамо декларисане четири променљиве. Два од њих се користе за чување вредности АДЦ (0 до 1024), а друга два за добијање стварне вредности напона.
унсигнед инт АДЦ_валуе_1 = 0; непотписан инт АДЦ_валуе_2 = 0; инт АДЦ_волтаге_1 = 0; инт АДЦ_волтаге_2 = 0;
Даље, морамо припремити ГПИО пинове и конфигурацију такта за читање аналогног напона. Овде ћемо читати аналогни напон са пинова АИН2 и АИН6 који су пинови ПЦ4 и ПД6. Морамо дефинисати ове пинове у плутајућем стању као што је приказано доле. Такође ћемо омогућити периферну опрему за АДЦ.
ЦЛК_ПерипхералЦлоцкЦонфиг (ЦЛК_ПЕРИПХЕРАЛ_АДЦ, ЕНАБЛЕ); // Омогући периферни сат за АДЦ ГПИО_Инит (ГПИОЦ, ГПИО_ПИН_4, ГПИО_МОДЕ_ИН_ФЛ_ИТ); ГПИО_Инит (ГПИОЦ, ГПИО_ПИН_4, ГПИО_МОДЕ_ИН_ФЛ_ИТ);
Сада када су пинови спремни, морамо ући у бесконачну петљу вхиле да бисмо очитали аналогни напон. Будући да имамо датотеку заглавља, можемо лако прочитати аналогни напон са пинова АИН2 и АИН 6 користећи доње редове.
АДЦ_валуе_1 = АДЦ_Реад (АИН2); АДЦ_валуе_2 = АДЦ_Реад (АИН6);
Следећи корак је претварање овог очитавања АДЦ (0 до 1023) у аналогни напон. На овај начин можемо приказати тачну вредност напона датој пиновима АИН2 и АИН6. Формуле за израчунавање аналогног напона могу се дати од-
Аналогни напон = АДЦ очитавање * (3300/1023)
У нашем случају на СТМ8С103Ф3 контролерима имамо АДЦ са 10-битном резолуцијом, па смо користили 1023 (2 ^ 10) . Такође на нашем развојном напајању управљач има 3.3В, што је 3300, па смо 3300 поделили са 1023 у горњим формулама. Отприлике 3300/1023 ће нам дати 3.226, тако да на нашем програму имамо следеће редове за мерење стварног напона АДЦ помоћу напона АДЦ.
АДЦ_волтаге_1 = АДЦ_валуе_1 * (3.226); // (3300/1023 = ~ 3.226) претворити АДЦ вредност 1 у 0 у 3300мВ АДЦ_волтаге_2 = АДЦ_валуе_2 * (3.226); // претворимо АДЦ вредност 1 у 0 у 3300мВ
Преостали део кода користи се само за приказивање ове четири вредности на ЛЦД екрану. Такође имамо кашњење од 500 мс, тако да се ЛЦД ажурира за сваких 500 мс. Ово можете додатно смањити ако су вам потребна бржа ажурирања.
Очитавање аналогног напона са два потенциометра помоћу СТМ8С
Саставите код и отпремите га на своју развојну таблу. Ако се појави грешка при компајлирању, уверите се да сте додали све датотеке заглавља и изворне датотеке као што је претходно речено. Једном када се код отпреми, требало би да видите малу поруку добродошлице у којој пише „АДЦ на СТМ8С“, а затим би требало да видите доњи екран.
Вредности Д1 и Д2 означавају вредност АДЦ са пин Аин2 и АИН6 респективно. На десној страни такође имамо приказане еквивалентне вредности напона. Ова вредност треба да буде једнака напону који се појављује на пиновима АИН2 и АИН6. Можемо исто проверити помоћу мултиметра, такође можемо варирати потенциометре да бисмо проверили да ли се и вредност напона такође мења у складу с тим.
Комплетан рад такође можете пронаћи на видео снимку испод. Надам се да сте уживали у водичу и научили нешто корисно, ако имате питања, оставите их у одељку за коментаре испод. Наше форуме такође можете користити за покретање дискусије или постављање других техничких питања.