Мазмұны:

PIC көмегімен цифрлық айналмалы қосқыштан айналу бағытын қалай түсіндіру керек: 5 қадам
PIC көмегімен цифрлық айналмалы қосқыштан айналу бағытын қалай түсіндіру керек: 5 қадам

Бейне: PIC көмегімен цифрлық айналмалы қосқыштан айналу бағытын қалай түсіндіру керек: 5 қадам

Бейне: PIC көмегімен цифрлық айналмалы қосқыштан айналу бағытын қалай түсіндіру керек: 5 қадам
Бейне: 3 мегапиксельді қауіпсіздік камерасы. Сатып алуға тұрарлық па? Ажыратымдылық не әсер етеді? 2024, Қараша
Anonim
PIC көмегімен цифрлық айналмалы қосқыштан айналу бағытын қалай түсіндіру керек
PIC көмегімен цифрлық айналмалы қосқыштан айналу бағытын қалай түсіндіру керек

Бұл нұсқаулықтың мақсаты - микроконтроллермен цифрлық (төртбұрышты кодталған) айналмалы қосқышты қалай байланыстыру керектігін көрсету. Уайымдамаңыз, мен квадратуралық кодтау біз үшін нені білдіретінін түсіндіремін. Бұл интерфейс және ілеспе бағдарламалық жасақтама микроконтроллерге бір қозғалғыштан екіншісіне ауысудың әр бағыты бойынша айналу бағытын тануға мүмкіндік береді. Мен жақында микроконтроллер жобасында осы түрлендіргішті қолдандым, ол үшін қысымды орнату нүктесін 16 түймесі арқылы енгізу қажет болды. жоғары/төмен түймелерінің орнына тежегіштер. Идея пайдаланушыға қажетті қысымды «теруге» мүмкіндік беру болды. Нәтижесінде, біз негізгі жүйе үшін қысымның орнатылған нүктесін жоғарылату немесе азайту үшін коммутатордан позиция туралы ақпаратты алу және айналу бағытын анықтау үшін бағдарламалық қамтамасыз етуді әзірлеуге мәжбүр болдық. микроконтроллерге, айналмалы қосқыштың жұмыс теориясы, бағдарламалық қамтамасыз етудің жұмыс теориясы, сондай -ақ шегеру тәртібі. Ақырында, мен сізге шегеру тәртібін қолдануды көрсетемін. Біз алға жылжып келе жатқанда, бұл идеяны мүмкіндігінше көптеген платформаларда қолдануға болатындай етіп, жалпыға ортақ нәрселерді сақтауға тырысамын, бірақ мен сіз жасаған нәрсені бөлісемін, осылайша сіз нақты қосымшаны көре аласыз.

1 -қадам: бөлшектер

Бөлшектер
Бөлшектер

Мұны жүзеге асыру үшін сізге қажет: Айналмалы қосқыш (квадратуралық кодталған) Резисторларды тарту Микроконтроллердің қолайлы платформасы Менің жобам үшін Grayhill 61C22-01-04-02 оптикалық кодерін қолдандым. Айналмалы қосқыштың ақпараттық парағы коммутатордан келетін екі деректер желісінде 8,2км тартылатын резисторларды қажет етеді. Сіз пайдаланғыңыз келетін кодердің деректер парағын тексергіңіз келеді. Мен қолданатын айналмалы қосқышты осьтік түймелі қосқышпен де тапсырыс беруге болады. Бұл терілген таңдауларды орындау үшін пайдалы функция және т. Менде «қолайлы микроконтроллер платформасы» бар, себебі (менің ойымша) мұны бірнеше платформада жүзеге асыруға болады. Мен Instructables үшін басқа микроконтроллерлерді қолданатын көптеген адамдарды көрдім, сондықтан мен жалпы тәсілді көрсеткім келеді. Мен барлық кодты Microchip PIC16F877A пайдалану үшін PIC Basic Pro бағдарламасында жаздым. Шынында да, микроконтроллерге қажет негізгі нәрсе - екі түйреуіштің бірінде логикалық өзгеріс болған кезде үзу мүмкіндігі. PIC16F877A -да бұл PORTB өзгерісінің үзілуі деп аталады. Басқа контроллерлерде басқа атаулар болуы мүмкін. Бұл микроконтроллердің үзіліс мүмкіндігі - бұл қосымшаны талғампаз ететін нәрсе.

2 -қадам: аппараттық интерфейс

Аппараттық интерфейс
Аппараттық интерфейс

«Қарапайым» шешім-микроконтроллерге 16 қосылымы бар «бір полюсті-16 лақтыру» қосқышы болуы керек. Әр коммутатордың шығысы микроконтроллердің түйреуішіне байланған болар еді, осылайша терудің әр орнын микроконтроллер тексере алады. Бұл енгізу -шығару түйреуіштерін шамадан тыс қолдану. Егер біз коммутаторда 16 -дан астам позицияға ие болғымыз келсе, жағдай одан да нашарлайды. Коммутатордағы әрбір қосымша позиция микроконтроллерге қосымша кірісті қажет етеді. Бұл тез арада микроконтроллердегі кірістерді өте тиімсіз пайдалануға айналады. Айналмалы қосқыштың сұлулығын енгізіңіз. Айналмалы қосқыштың деректер парағында А және В деп көрсетілген микроконтроллерге тек екі шығысы бар. Бұл сызықтар қабылдай алатын логикалық деңгейлердің тек төртеуі ғана бар: AB = 00, 01, 10 және 11. Бұл коммутаторды микроконтроллерге қосуда қолдану керек кіріс жолдарының санын едәуір азайтады. Сонымен, біз кіріс жолдарының санын екіге дейін қысқарттық. Қазір не? Бізге 16 түрлі күй қажет сияқты, бірақ бұл жаңа қосқышта тек төртеуі бар. Біз өзімізді аяғымыздан атып тастадық па? Жоқ. Оқыңыз. Біз түсіндіру үшін айналмалы қосқыштың жұмысының теориясын аздап қарастырамыз.

3 -қадам: Аппараттық құралдардың жұмыс теориясы

Аппараттық құралдардың жұмыс теориясы
Аппараттық құралдардың жұмыс теориясы
Аппараттық құралдардың жұмыс теориясы
Аппараттық құралдардың жұмыс теориясы
Аппараттық құралдардың жұмыс теориясы
Аппараттық құралдардың жұмыс теориясы

Айналу бағытын сезу жоғарыда айтылған «бір полюсті-16 лақтыру» қосқышы арқылы мүмкін болады, бірақ ол микроконтроллерге көп кірісті қолданады. Айналмалы қосқышты қолдану микроконтроллерге кіру санын азайтады, бірақ қазір біз коммутатордан келетін сигналдарды түсіндіруіміз керек және оларды айналу бағытына аударуымыз керек. Бұл сонымен қатар бұл шешімдегі басты талғампаздықтардың бірі. Бұл коммутатордың орнына сәйкес келетін 2 биттік код бар екенін білдіреді. Сіз: «Егер микроконтроллерге екі биттік кіріс болса, біз барлық 16 позицияны қалай көрсетеміз?» Бұл жақсы сұрақ. Біз олардың барлығын білдірмейміз. Біз тек айналу бағытын анықтай алатын тұтқаның салыстырмалы позицияларын білуіміз керек. Тұтқаның абсолютті орналасуы маңызды емес. Сағат тілінің бағытымен айналдыру үшін коммутатор беретін код әр төрт рет қайталанады және сұр түсті болады. Сұр кодталған - бұл позицияның әр өзгеруі үшін бір ғана өзгеріс бар екенін білдіреді. AB енгізудің орнына сағаттық бағытта сағат тілімен айналуды санау: 00, 01, 10, 11, ол келесідей өзгереді: 00, 10, 11, 01. Назар аударыңыз, соңғы үлгі үшін тек бір кіріс өзгереді. жиынтықтар. Микроконтроллерге AB кірісінің сағат тіліне қарсы мәндері келесідей болады: 00, 01, 11, 10. Бұл сағат тілінің бағытымен AB = 00 бірінші үлгіде көрсетілген. Көрнекі түсініктеме алу үшін диаграммаларды қараңыз..

4 -қадам: Бағдарламалық қамтамасыз етудің жұмыс теориясы

Бағдарламалық қамтамасыз етудің жұмыс теориясы
Бағдарламалық қамтамасыз етудің жұмыс теориясы

Айналу бағытын анықтайтын тәртіп үзіліспен басқарылады. Сіз таңдаған микроконтроллер үзіліс қосылған кезде екі түйреуіштің бірінде (кем дегенде) өзгеріс болған кезде кез келген уақытта үзіліс жасай алады. Бұл PIC16F877A -дағы PORTB өзгерісінің үзілуі деп аталады. Кез келген уақытта коммутатор бұрылғанда микроконтроллер үзіледі және бағдарламаның орындалуы үзіліс қызметіне жіберіледі (ISR). ISR коммутатор қай бағытта бұрылғанын тез анықтайды, жалаушаны тиісті түрде орнатады және негізгі бағдарламаға тез оралады. Егер пайдаланушы коммутаторды өте тез айналдырса, бұл тез орындалуы керек. Біз сұр кодты AB үлгісі әр төрт позицияда қайталанатынын білеміз, сондықтан егер біз осы төрт позиция арасында ауысу үшін күнделікті жұмыс жасасақ, ол басқалар үшін жұмыс істейді. Назар аударыңыз, бір төрт позиция циклінде төрт шеті болады. А кірісі үшін, сондай -ақ В кірісі үшін көтерілетін жиек және құлау жиегі. Микропроцессор жиек болған сайын үзіледі, яғни микроконтроллер тұтқаны бұрған кезде үзіледі. Нәтижесінде, ISR тұтқаны қай жаққа бұрылғанын анықтау керек. Мұны қалай жасау керектігін білуге көмектесу үшін біз сағат тілімен айналу үшін толқын пішініне жүгінеміз. Назар аударыңыз, кез келген уақытта А шеті болса, оның жаңа мәні әрқашан В мәнінен өзгеше болады. Тұтқа 1-ден 2-ге ауысқанда, A логикадан 0-ге ауысады. Бұл ауысу үшін В әлі де 0 болып табылады және А жаңа мәніне сәйкес келмейді. Тұтқа 3-тен 4-ке ауысқанда, A қисық жиегі болады, ал В логикада-1 қалады. Тағы да назар аударыңыз, В мен А -ның жаңа мәні әр түрлі. Дәл қазір біз А кез келген уақытта сағат тілімен айналу кезінде үзіліс тудыратынын көре аламыз, оның жаңа мәні В мәнінен өзгеше. Не болатынын көру үшін В -ны тексерейік. Коммутатор 2 -ден 3 -ке ауысқанда В -ның шеті көтеріледі. Бұл жерде В -ның жаңа мәні А -мен бірдей. Сағат тілінің бағытымен айналу үшін қалған соңғы жиекке қарасақ, В -ның 4 -тен 5 -ке ауысатын жиегі бар. (5 -позиция 1 -позициямен бірдей.) В -ның жаңа мәні мұнда да А -мен бірдей! Енді біз бірнеше шегерімдер жасай аламыз! Егер А үзіліс тудырса және А -ның жаңа мәні В мәнінен өзгеше болса, айналу сағат тілімен болды. Сонымен қатар, егер В үзіліс тудырса және В -ның жаңа мәні А -мен бірдей болса, онда айналу сағат тілімен болды. Сағат тілінің бағытымен айналдыру сияқты, сағат тіліне қарсы айналу бір циклде төрт үзіліс тудырады: екеуі А кірісі үшін және екеуі В кірісі үшін - екеуі тұтқа 4 -тен 3 -ке ауысқанда және кіретін жиегі 2 -ден 1 -ге ауысқанда көтерілетін жиегі болады. Тұтқа 4 -тен 3 -ке ауысқанда, А -ның жаңа мәні В -нің мәнімен бірдей болады. А 2 -ден 1 -ге ауысқанда, оның жаңа мәні В -мен бірдей болатынына назар аударыңыз. Енді біз А үзіліс тудырған кезде және оның жаңа мәні В мәніне сәйкес келетін кезде айналу сағат тіліне қарсы болғанын көре аламыз. Барлығын тексеру үшін біз В кірісін тез қараймыз. В тұтқасы 5 -ші позициядан (бұл 1 -ге тең) 4 -ке ауысқанда және тұтқа 3 -тен 2 -ге ауысқанда үзіліс тудырады. Бұл екі жағдайда да В -ның жаңа мәні бар мәнге сәйкес келмейді. А - бұл сағат тілінің бағыты бойынша В үзіліс тудыратын жағдайларға қарама -қарсы. Бұл жақсы жаңалық. Қорытындылай келе, егер А үзіліс тудырса және оның жаңа мәні В мәніне сәйкес келмесе немесе В үзіліс тудырса және В жаңа мәні А мәніне сәйкес келсе, біз сағат тілімен айналу болғанын білеміз. Біз басқа жағдайларды бағдарламалық жасақтаманың сағат тіліне қарсы бұрылуын тексере аламыз немесе ол сағат тіліне қарсы емес болғандықтан, ол сағат тіліне қарсы болды деп болжауға болады. Менің әдетім тек болжам жасады.

5 -қадам: Бағдарламалық қамтамасыз ету

Бағдарламалық қамтамасыз ету
Бағдарламалық қамтамасыз ету
Бағдарламалық қамтамасыз ету
Бағдарламалық қамтамасыз ету

Мен PIC Basic Pro -де кіріктірілген үзілістерді пайдаланбадым. Мен тәртіпке жету үшін Даррель Тейлордан кодыма енгізген бірнеше файлды қолдандым. Бұл Даррельге үлкен несие! Файлдар ақысыз. Қосымша ақпарат, басқа қосымшалар мен файлдарды жүктеу үшін оның веб -сайтына кіріңіз. Егер сіз Darrel Taylor үзілісімен PIC қолданбасаңыз, бұл бөлімді өткізіп жіберуге болады. Darrel Taylor (DT) үзілістерін орнату үшін екі әрекетті орындау қажет: 1.) DT_INTS-14.bas және ReEnterPBP.bas файлдарын файлға қосыңыз. коды.2.) Көшіріп, оны кодыңызға қойыңыз. ASMINT_LIST макросы; IntSource, Label, Type, ResetFlag? INT_Handler RBC_INT, _ISR, PBP, иә INT_CREATEENDASMI Нұсқаулықтың соңындағы графика сияқты қойындылар мен бос орындарды енгізіңіз, осылайша сіз кодта біраз нәрсені көре аласыз. Сіздің қажеттіліктеріңізге сәйкес оны сәл өзгерту керек. Жапсырма астында ISR -ді ISR қосалқы бағдарламасының атымен ауыстырыңыз. Астын сызуды ұмытпаңыз! Сізге қажет! Үзілістердің жұмыс істеуі үшін тағы екі нәрсені жасау керек: 1.) ISR жазыңыз. Сіз мұны PBP қосалқы бағдарламасын жазғыңыз келетін сияқты жазасыз, тек RETURN орнына ішкі бағдарламаның соңына @ INT_RETURN енгізу қажет болады. Бұл үзілісті мойындайды және бағдарламаның орындалуын негізгі циклде тоқтаған жерге қайтарады. ISR ішінде үзіліс жалаушасын тазарту қажет, сондықтан сіздің бағдарлама рекурсивті үзіліске түспейді. PIC16F877A үзіліс жалаушасын тазарту үшін тек PORTB оқу жеткілікті. Әр түрлі микроконтроллерде үзіліс жалаушаларын тазартудың әр түрлі әдісі бар. Микроконтроллердің деректер парағын тексеріңіз. 2) Сіз кодты үзуді қосқыңыз келетін нүктеге жеткенде мына код жолын пайдаланыңыз:@ INT_ENABLE RBC_INT Үзілісті өшіруді қаласаңыз:@ INT_DISABLE RBC_INT көп нәрсе бар. Мен жаңа материалдармен толтырдым, сондықтан мен тез қорытындылаймын. Әзірге сіздің бағдарламаңыз келесідей болуы керек:; Кез келген қажетті орнату немесе код «INT_CLUDE» DT_INTS-14.bas «INCLUDE» ReEnterPBP.bas «ASMINT_LIST макросы; IntSource, Label, Type, ResetFlag? INT_Handler RBC_INT, _myISR, PBP, иә INT_CREATEENDASM; Кез келген басқа қажетті қондырғы немесе код@ INT_ENABLE RBC_INT; Тұтқа қай бағытта бұрылатынын білуі керек код@ INT_DISABLE RBC_INT; Басқа кодEND; Бағдарламалық жасақтаманың аяқталуы:; ISR коды@ INT_RETURN (Үзіліс өңдеушісін орнату кестесі) Менің ойымша, бұл жерде PIC немесе DT үзулерін пайдаланбайтын кез келген адам қайтадан қосыла алады. Енді біз ISR -ды нақты жазуымыз керек, сондықтан микроконтроллер тұтқаның қай бағытта айналатынын біледі. Бағдарламалық қамтамасыз ету теориясы бөлімінен, егер үзіліс тудырған кірісті, оның жаңа мәнін және басқа кірістің мәнін білсек, айналу бағытын шығара алатынымызды еске түсіріңіз. Псевдокод мынада: үзіліс жалаушасын тазарту үшін PORTB тырнақша айнымалысына оқыңыз А үзіліс тудырғанын тексеріңіз. Егер рас болса, А мен В салыстырыңыз, егер басқаша, басқаша болса, ол сағат тілімен бұрылды, егер сағат үзілісіне В кедергі келтірсе, EndifCheck тексеріңіз. Егер рас болса, А мен В салыстырыңыз Егер әр түрлі, егер бірдей болса, ол сағат тілімен бұрылды, егер ол сағат тіліне қарсы болса, үзілістен қайту EndifReturn А немесе В өзгерісінің үзіліске себеп болғанын қалай білеміз? Өзгертілген кірістің және басқа (өзгеріссіз) кірістің жаңа мәнін табу оңай, себебі біз оларды ISR ішінде оқи аламыз. Атқару ISR -ге жіберілгенге дейін олардың әрқайсысының жағдайы қандай болғанын білуіміз керек. Бұл негізгі тәртіпте болады. Негізгі тәртіп біз CWflag деп атаған байт айнымалысын 1 -ге немесе ISR 0 -ге тазартуды күтеді. Рұқсат етілген тұтқаның әр өзгерісінен кейін немесе ешқандай әрекет болмаса, айнымалы мән бос күйді көрсету үшін 5 мәніне орнатылады. Егер жалауша орнатылса немесе тазартылса, онда негізгі тәртіп айналу негізінде қысымның қысымын сәйкесінше арттырады немесе азайтады, содан кейін CWflag айнымалы мәнін 5 -ке қайтарады, себебі тұтқа қайтадан бос. Негізгі жұмыс CWflag -ты тексеру болғандықтан, ол A және B айналмалы қосқыш мәндерінің күйін құжаттайды. Бұл өте қарапайым және келесідей: oldA = AoldB = B Мұнда шынымен керемет ештеңе жоқ. CWflag -тің айналуын тексеретін циклдің басына сол екі жолды енгізіңіз. Біз тек ISR орындалған кезде үзіліске не себеп болғанын көру үшін негізгі тәртіпте айналу тұтқасынан кірудің логикалық мәндерін негізгі тәртіпте жаңартамыз. Міне ISR коды: ABchange: scratch = PORTB 'Үзіліс жалаушасын тазарту үшін PORTB оқыңыз' Егер А үзіліс тудырса, егер бұрылыс бағытын В тексеріңіз, егер oldA! = A СОНДА 'Егер А мен В әр түрлі болса, онда ол сағат тілімен айналады A! = B КЕЙІН GOTO CW 'Әйтпесе, бұл сағат тіліне қарсы айналу ELSE GOTO CCW ENDIF ENDIF' Егер В үзіліс тудырса, A бұрылу бағытын A тексеріңіз, егер oldB! = B СОНДА 'Егер А мен В бірдей болса, ол сағат тілінің бағытымен айналдыру болды, егер А == В СОНДА GOTO CW 'Әйтпесе, бұл сағат тіліне қарсы айналу ELSE GOTO CCW ENDIF ENDIFCW: CWflag = 1@ INT_RETURNCCW: CWflag = 0@ INT_RETURNISR кодын AB_ISR.bas файлына енгіздім, себебі кодтағы қойындылар дәл осылай көрсетілмейді. Енді, өйткені ISR A және B кірістерінің ескі мәндеріне ие болғандықтан, ол үзіліс тудырған кірісті анықтай алады, оны басқа (өзгеріссіз) кірмен салыстырады және бағытын анықтайды. айналу. Негізгі тәртіп - бұл CWflag белгісін тексеріп, тұтқаның қай бағытта бұрылғанын көру (егер ол бар болса) және есептегішті, белгіленген нүктені немесе сізге ұнайтын немесе қажет нәрсені көбейту немесе азайту. шатастыратын Интерфейстің бұл түрі әсіресе пайдалы, егер сіздің жүйеде үзілістер болса, бұл тек бір үзіліс қосады. Ләззат алыңыз!

Ұсынылған: