Мазмұны:

Микроконтроллерді қолдана отырып, жоғары жиілік пен жұмыс циклін бір уақытта қалай өлшеуге болады: 4 қадам
Микроконтроллерді қолдана отырып, жоғары жиілік пен жұмыс циклін бір уақытта қалай өлшеуге болады: 4 қадам

Бейне: Микроконтроллерді қолдана отырып, жоғары жиілік пен жұмыс циклін бір уақытта қалай өлшеуге болады: 4 қадам

Бейне: Микроконтроллерді қолдана отырып, жоғары жиілік пен жұмыс циклін бір уақытта қалай өлшеуге болады: 4 қадам
Бейне: 12V Bluetooth Relay to control AC or DC load using mobile Phone 2024, Шілде
Anonim
Микроконтроллерді қолдана отырып, жоғары жиілікті және жұмыс циклін бір уақытта қалай өлшеуге болады
Микроконтроллерді қолдана отырып, жоғары жиілікті және жұмыс циклін бір уақытта қалай өлшеуге болады
Микроконтроллерді қолдана отырып, жоғары жиілікті және жұмыс циклін бір уақытта қалай өлшеуге болады
Микроконтроллерді қолдана отырып, жоғары жиілікті және жұмыс циклін бір уақытта қалай өлшеуге болады
Микроконтроллерді қолдана отырып, жоғары жиілік пен жұмыс циклін бір уақытта қалай өлшеуге болады
Микроконтроллерді қолдана отырып, жоғары жиілік пен жұмыс циклін бір уақытта қалай өлшеуге болады

Мен сенің ойыңды білемін: «Иә? Сигнал жиілігін өлшеу үшін микроконтроллерлерді пайдалану туралы көптеген нұсқаулықтар бар. Йоун.» Бірақ күте тұрыңыз, бұл жерде жаңалық бар: мен микроконтроллер (MCU) қабылдай алатыннан жоғары жиілікті өлшеу әдісін және сигналдың жұмыс циклын сипаттаймын - бәрі бір уақытта!

Құрылғының жиілік диапазоны ~ 43 Гц -тен ~ 450 кГц -ке дейін, ал жұмыс циклі 1% -дан 99% -ға дейін.

Мен «көтере алатын» бөлікті түсіндіруге рұқсат етемін: MCU квадрат толқынды сигналдың периодын өлшейді, келесі екі өтпелі оқиғаның арасындағы уақытты бақылау арқылы. Мысалы, төмен-жоғары кернеу оның енгізу-шығару түйреуіштерінің біріне секіреді. Ол мұны өзінің ішкі сағатының импульс санын санау арқылы жасайды. Байсалды түрде, өлшенетін жиіліктердің жоғарғы шегі Nyqvist-Shannon іріктеу теоремасына бағынуы керек; яғни бұл шамамен MCU сағат жиілігінің жартысына тең болады. Шындығында, бұл шектеу әлдеқайда төмен, себебі MCU үзіліспен жұмыс істеу, айнымалыларды сақтау, арифметикалық операцияларды орындау, нәтижелерді көрсету үшін кодты орындауы керек. 48 МГц жиіліктегі MCU -мен жүргізілген тәжірибелерде өлшенетін ауысулар арасындағы сағаттық циклдердің ең аз саны болды. шамамен 106. Демек, бұл жағдайда өлшенетін жиілік диапазонының жоғарғы шегі 48 000 /212 /2 = 226,4 кГц болады.

MCU сигналдың периодын өлшесе де, оның импульстік енін анықтай алады, P: сигнал кернеуінің жоғары болып қалу уақыты. Басқаша айтқанда, төменнен жоғарыға және жоғарыдан төменге ауысулар арасындағы уақыт. Сигналдың жұмыс циклы келесі пайызбен анықталады:

Баж = 100% * P / T

Дәл жиілік жағдайында импульстің ені бойынша практикалық шегі бар. Жоғарыда келтірілген мысалды қолдана отырып, 106 сағаттық цикл импульстің енін 2,21 микросекундтан кем емес шектейді. Немесе 226,4 кГц жиілігінде 50% кем емес.

Квадрат толқындық сигналдардың жоғарғы жиілігін жоғарылатудың бір әдісі-флип-флопты қолданатын сандық бөлгіштерді қолдану. Кіріс жиілігін n -ге бөлу өлшенетін жоғарғы диапазонды n есе ұзартады. Бұл керемет жаңалық, цифрлық бөлгіштердің бір негізгі кемшілігі бар: бөлінген сигнал импульстің ені туралы ақпаратты жоғалтады! Бөлгіштердің жұмысына байланысты олардың шығысы әрқашан 50% жұмыс цикліне ие. Бумер…

Келесі беттерде мен жиілікті цифрлық түрде қалай бөлу керектігін көрсетемін және импульстің бастапқы енін сақтаймын, бұл маған сигналдарды тікелей санау арқылы белгіленген шектерден асып кетуге мүмкіндік береді.

1 -қадам: Сандық жиілік бөлімі

Сандық жиілік бөлімі
Сандық жиілік бөлімі
Сандық жиілік бөлімі
Сандық жиілік бөлімі
Сандық жиілік бөлімі
Сандық жиілік бөлімі

Дәстүрлі цифрлық жиілікті бөлгіштер флип-флоптарды қолданады; Бұл оқулық JK стандартты флип-флоптарын қолдана отырып, бөлгіштерді құру принциптерін жақсы түсіндіреді. Бұл MCU үшін тым жоғары кіріс жиіліктерінің мәселесін шешеді, бірақ бір маңызды кемшілігі бар: бөлінген сигнал кіріс сигналының міндетіне қарамастан 50% жұмыс циклына ие! Неліктен екенін білу үшін алғашқы екі фигураны қараңыз. Т периоды мен импульстің ені Р болатын бастапқы сигнал JK флип-флоп сағатының істігіне беріледі, ал оның J және K түйреуіштері әрқашан жоғары ұсталады (бірінші сурет). 3.3V логикасы барлық уақытта қабылданады. Флип-флопты сағаттың оң (яғни көтерілу) жиегі іске қосады делік. Мұндай жағдайларда, шығыс түйреуішінің күйінің өзгеруі (жеке «аударылады» және «бұрылады») сағат штыры төменнен жоғары көтерілген сайын болады. Сағаттың жоғарыдан төменге өтуі (яғни теріс жиегі) мүлдем еленбейді. Екінші суретті қараңыз. Q шығыс түйреуіші сигнал шығарады, оның периоды бастапқы кезеңнен екі есе көп, яғни жиілігі екі есе азаяды. Шығу импульсінің ені әрқашан T -ге тең. Демек, импульстің бастапқы ені P жоғалады.

Үшінші суретте көрсетілген конфигурациядағы басқа JK флип-флопты қосу бастапқы жиілікті 4-ке бөледі. Дәл осындай ретпен көбірек флип-флоптарды қосу жиілікті кейінгі қуаттарға 2: 8, 16, 32 және т.б.

Мәселе: импульстің енін сақтай отырып, шаршы толқын жиілігін қалай бөлуге болады?

Идея-бұл JK флип-флопты қосатын теріс жиекті дұрыс қосу. Оны «Neg FF» деп атайық; төртінші суретті қараңыз. Бұл жерде «дұрыс» жаңа флип-флоптың J және K түйреуіштері сәйкесінше алдыңғы суретте көрсетілген 4-ке бөлгіштің («Pos FF») Q және Qbar шығыс түйреуіштеріне байланғанын білдіреді. (Бұл жерде «бар» - логикалық терістеуді білдіретін Q таңбасының үстіндегі көлденең жолақ.) Бұған не жететінін білу үшін бесінші суреттегі «Neg FF» функциясының кестесін қараңыз: Neg шығыс түйреуіштері, Q және Qbar, сәйкесінше J және K кіріс түйреуіштерінің күйін көрсетеді. Яғни олар Pos 'Q және Qbar күйін көрсетеді. Бірақ, Нег-тің флип-флоптық әрекеті оң сигналдан кейін P уақытында келетін бастапқы сигналдың теріс жиегін күтуі керек. Аха!

Алынған толқын формалары алтыншы суретте көрсетілген. «Pos Q» сигналын 1/4 жиілікте шығарады, «Pos Qbar» - бұл кері, «Neg Q» - «Pos Q» импульстің ені бойынша ығысқаннан кейін, ал «Neg Qbar» - оған кері. Сіз «Pos Qbar» мен «Neg Q» логикалық ЖӘНБ импульстік поезды шығаратынын, импульстің ені Р мен 1/4 жиілікте сипатталатынын тексере аласыз. Бинго!

Алдымен мен дәл осы шығыс сигналын MCU беру үшін қолдандым. Кіріспеде көрсетілген MCU 106 циклінің шектелуіне байланысты импульстің өте қысқа ені үшін проблемалық болып шықты. Мен бұл кішігірім мәселені басқа шығымды таңдау арқылы шештім: оның орнына «Pos Qbar» ЖӘНЕ «Neg Qbar». Толқындық пішіндерге бір қарап шығу сізге импульстің ені P 'импульстің ені P үшін 0 (T) диапазонының орнына T мен 2T аралығында өзгеретініне сендіруі керек.

P = 2T - P '

2 -қадам: Ұсынылған аппараттық құрал

Ұсынылған аппараттық құрал
Ұсынылған аппараттық құрал
Ұсынылған аппараттық құрал
Ұсынылған аппараттық құрал
Ұсынылған аппараттық құрал
Ұсынылған аппараттық құрал

Маған электронды әуесқойларға жаңадан келген адам ұнайды: 48 МГц жиілігінде жұмыс істейтін 32 биттік ARM Cortex M0+ процессорына негізделген Atmel SAM D21 MCUs, ескі Атмельдерден әлдеқайда жоғары. Бұл жоба үшін мен сатып алдым:

  • Adafruit компаниясының ItsyBitsy M0 Express MCU тақтасы
  • Менде кездейсоқ Adafruit зарядталатын LiPo батареясы болды
  • Монохромды 128x32 SPI OLED дисплейі (сіз ойлап таптыңыз: Adafruit)
  • Texas Instruments-тен қос позитивті жиекті JK флип-флоп SN74HC109
  • Texas Instruments-тен қос теріс жиекті JK флип-флоп SN74HC112
  • Texas Instruments компаниясының CD74AC08E төрттік және қақпасы
  • Texas Instruments компаниясының CD74AC32E төрттік немесе қақпасы

3 -қадам: Цикл

Цикл
Цикл
Цикл
Цикл

Бірінші суретте жиілік/жұмыс есептегішінің жеңілдетілген схемасы көрсетілген. 3.3 V CMOS логикасы барлық уақытта қабылданады. Демек, кіріс квадрат толқынының амплитудасы сәйкес V арасында болуы керекIH деңгейі (яғни, 2 В) және 3.3 В. Егер олай болмаса, оны сәйкесінше жоғарылату немесе төмендету қажет. Көп жағдайда қарапайым кернеу бөлгіш жеткілікті. Егер сіз есептегіштің нұсқасын басқа логикалық деңгейде жасағыңыз келсе, онда басқа микроконтроллерді (MCU), батареяны және қалаған деңгейде жұмыс істейтін дисплейді пайдалануыңыз қажет. Бұл жобада қолданылатын логикалық қақпалар мен флип-флоптар логикалық деңгейлермен 2 В пен 6 В аралығында жұмыс істейді және көп жағдайда жақсы болуы керек.

Көрсетілгендей, ItsyBitsy MCU дисплеймен SPI протоколы арқылы байланысу үшін 9-13 түйреуіштерді қолданады. 3В түйреуіші бүкіл тізбекке қуат береді. Сандық кіріс түйреуі 3 талданған сигналды қабылдайды, ал 2 және 4 түйреуіш сигнал көзін басқарады: AND3 қақпасы арқылы келетін тікелей сигнал (төменгі кіріс жиіліктері) немесе 2 -қадамда сипатталғандай AND4 қақпасы арқылы 4 -ке бөлінген сигнал (жоғары кіріс жиіліктері) Келесі қадамда талқыланатын код кіріс жиілігінің диапазонын автоматты түрде анықтайды және сигнал көзін тиісті түрде ауыстырады.

Схема чипті цифрлық қосылыстардың нақты күрделілігін көрсетпейді. Екінші сурет жобаның тақтада қалай көрінетінін көрсетеді. Кіріс сигналы қызыл сым арқылы екі жақты жиекті флип-флоптың 2CLK түйреуішіне түседі. ЕСКЕРТУ: Әдетте бұл флип -флоптың барлық J және K түйреуіштері жоғары ұсталуы керек, бірақ SN74HC109 оның орнына Kbar түйреуішін - төңкерілген K штыры бар. Демек, бұл түйреуіш жерге тұйықталуы керек! SN74HC112-дегі бірінші теріс жиекті флип-флопта SN74HC109 1Q және 1Qbar түйреуіштеріне қосылған 1K және 1J штыры бар. SN74HC112-дегі екінші флип-флоп қолданылмайды және оның кіріс түйреуіштері (2K, 2J, 2CLRbar) жерге тұйықталған. Барлық аудармалардағы барлық басқа қосымша түйреуіштер PREbar (алдын ала орнатылған) мен CLRbar (таза) логикалық биіктікке қосылуы керек. Қолданылмаған сағат және шығыс түйреуіштері қосылмай қалады. Сол сияқты, барлық қақпалардағы пайдаланылмаған кіріс түйреуіштері жерге тұйықталады, ал пайдаланылмаған шығыс түйреуіштері қосылмай қалады. Мен «Телефон сақинасының көрінбейтін өлтірушісі» мақаласында талқылағанымдай, логикалық чиптердің пайдаланылмаған кіріс түйреуіштері кездейсоқ тербелістерді жояды және батарея қуатын үнемдейді.

4 -қадам: Код және төмен жиілікті өлшеу

Әрине, барлық әрекеттер төменде көрсетілген кодта болады. 3 -істікшеге кіретін кіріс цифрлық төменнен жоғарыға ауысқанда, MCU ішкі 48 МГц сағатының импульстерін санауды бастайды. Ол жоғарыдан төменге ауысу сәтін белгілейді және келесі процесті қайта бастағанда санауды келесі төменнен жоғарыға ауысуға дейін жалғастырады. Бірінші санау импульстің енін көрсетеді, ал бүкіл санау сигналдың кезеңін білдіреді. Және бұл барлық құпия.

CPU бұл ауысуларды аппараттық үзілістер арқылы белгілейді. SAMD21 бірнеше сағаттарға ие; менің коды TC3 біреуін пайдаланады. Бастапқыда мен үзіліс өңдеушісін кодтау үшін көп күш жұмсау үшін M0 мәліметтер парағының тіреуін оқудан бастадым, бірақ көп ұзамай Arduino форумының пайдаланушыларының electro_95, MartinL және Rucus хабарламаларымен байланысты кодты таптым. тиісті түрде мойындалды. Мен олардың біріктірілген кодын менікіне енгіздім және өзгерттім; маған көп уақытты үнемдейді!

Жоғарыда айтқанымдай, үзіліс арасындағы кодты орындау үшін сигнал ажыратымдылығы ~ 106 процессорлық циклмен шектеледі. Импульстің ені сақталатын цифрлық бөлім жоғары жиіліктерді реттейді. Төмен жиіліктер, керісінше, тағы бір қиындық туғызады: TC3 сағат санауышының ұзындығы 16 бит болғандықтан, ол 65, 536 санау шегінен өткеннен кейін асып кетеді. Бұл жағдайды толып кетуді қосу арқылы шешуге болады, бірақ басқа шешімді таңдады: TC3 48 МГц жиіліктегі аппараттың орнына алдын ала өлшенген (яғни, бағдарламалық жасақтамаға бөлінген) процессорлық сағатты қолдана алады. Осылайша, егер сигнал периоды асып кету шегіне жақындаса, код TC3 -ке келесі кезеңге 24 МГц санауды қолдануға нұсқау бере алады, ал, санауыш 32, 768 санынан төмен түседі. Тіпті төмен жиіліктер үшін TC3 -ке 12 МГц импульсін санауға нұсқау берілуі мүмкін. Тиісті алдын ала есептегіш TC3 есептегішін асып кету шегінде ұстап тұру үшін сигнал жиілігіне қарай гистерезиспен автоматты түрде анықталады. Нәтижесінде құрылғының диапазонының төменгі ұшы шамамен 43 Гц құрайды.

Сіз кодты ашып, оны жобаңызда қолдана аласыз, бірақ нәтижелерді жариялау кезінде оның көзін көрсетіңіз.

Кодқа сілтеме.

Ұсынылған: