Микроконтроллерди колдонуп, Жогорку Жыштыкты жана Милдеттүү Циклди Кантип Өлчөө керек: 4 кадам
Микроконтроллерди колдонуп, Жогорку Жыштыкты жана Милдеттүү Циклди Кантип Өлчөө керек: 4 кадам
Anonim
Микроконтроллерди колдонуу менен бир эле учурда жогорку жыштыкты жана милдет циклин кантип өлчөө керек
Микроконтроллерди колдонуу менен бир эле учурда жогорку жыштыкты жана милдет циклин кантип өлчөө керек
Микроконтроллерди колдонуу менен бир эле учурда жогорку жыштыкты жана милдет циклин кантип өлчөө керек
Микроконтроллерди колдонуу менен бир эле учурда жогорку жыштыкты жана милдет циклин кантип өлчөө керек
Микроконтроллерди колдонуу менен бир эле учурда жогорку жыштыкты жана милдет циклин кантип өлчөө керек
Микроконтроллерди колдонуу менен бир эле учурда жогорку жыштыкты жана милдет циклин кантип өлчөө керек

Мен сиздин пикириңизди билем: "Аа? Сигналдын жыштыгын өлчөө үчүн микроконтроллерди кантип колдонуу керектиги жөнүндө көптөгөн көрсөтмөлөр бар. Ээ." Бирок күтө туруңуз, бул жерде бир жаңылык бар: мен микроконтроллер (MCU) көтөрө алгандан алда канча жогору жыштыктарды өлчөө ыкмасын жана сигналдын иштөө циклин сүрөттөп берем - баары бир убакта!

Түзмөктүн жыштык диапазону ~ 43 Гцтен ~ 450 кГцке чейин, ал эми цикл 1% дан 99% га чейин.

"Чыдай ала турган" бөлүктү түшүндүрүп берейин: MCU чарчы толкун сигналынын мезгилин, T, кийинки эки өткөөл окуянын ортосундагы убакытты көзөмөлдөө менен өлчөйт. Мисалы, төмөн-жогорку чыңалуу анын I/O казыктарынын бирине секирет. Ал муну өзүнүн ички саатынын импульстарынын санын эсептөө менен жасайт. Акылсыздык менен, ченелген жыштыктардын жогорку чеги Nyqvist-Shannon тандалма теоремасына баш ийиши керек; башкача айтканда, бул болжол менен MCU саат жыштыгынын жарымына барабар болмок. Чындыгында, чектөө алда канча төмөн, анткени 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, сигналын чыгарат, анын мезгили баштапкы мезгилден эки эсе көп, башкача айтканда, анын жыштыгы эки эсе кыскарат. Чыгаруунун импульстун туурасы дайыма Т -ге барабар. Демек, баштапкы импульстун туурасы P жоголот.

Үчүнчү сүрөттө көрсөтүлгөн конфигурацияда башка JK флип-флопун кошуу баштапкы жыштыктагы 4кө бөлүнөт, дагы эле флип-флопторду кошуу жыштыктын кийинки ыйгарым укуктары боюнча 2: 8, 16, 32 ж.б.

Маселе: импульстун тууралыгын сактоо менен төрт бурчтуу толкундун жыштыгын кантип бөлүүгө болот?

Идея JK флип-флопун терс жакка аралаштырууга туура кошуу. Келгиле, аны "Нег ФФ" деп атайлы; төртүнчү фигураны карагыла. Бул жерде, "туура", жаңы флип-флоптун J жана K казыктары мурунку сүрөттө сүрөттөлгөн 4кө бөлүүчү ("Pos FF"), тиешелүүлүгүнө жараша, Q жана Qbar чыгаруу казыктарына байланганын билдирет. (Бул жерде "бар" - логикалык жокко чыгарууну көрсөтүүчү Q символунун үстүндөгү горизонталдык тилке.) Бул эмнеге жетишкенин билүү үчүн, бешинчи сүрөттөгү "Нег FF" функциясынын таблицасын карап көрүңүз: Негдин чыгуучу казыктары, Q жана Qbar, тиешелүүлүгүнө жараша, анын кирүү казыктарынын абалын чагылдырат, J жана K. Бул алар Pos 'Q жана Qbar абалын чагылдырат дегенди билдирет. Бирок, Негтин флип-флоп-аракети, оң чекиттен кийин P убагында келген баштапкы сигналдын терс чегин күтүшү керек. Aha!

Алынган толкун формалары алтынчы сүрөттө көрсөтүлгөн. "Pos Q" сигналын 1/4 жыштыкта чыгарат, "Pos Qbar" - тескери, "Neg Q" - "Pos Q" импульсунун туурасы P менен жылган, ал эми "Neg Qbar" - анын тескери. Сиз "Pos Qbar" жана "Neg Q" логикалык ЖАНДАРЫ баштапкы импульстун туурасы Р жана 1/4 жыштыгы менен мүнөздөлгөн импульстук поездди чыгарарын текшере аласыз. Bingo!

Башында мен MCUга тамак берүү үчүн так ушул сигналды колдондум. Бирок, киришүүдө айтылган MCUнун 106 циклинин чектөөсүнөн улам импульстун эң кыска туурасы үчүн көйгөйлүү болуп чыкты. Мен бул кичинекей көйгөйдү башка чыгарманы тандап чечтим: "Pos Qbar" ЖАНА "Neg Qbar". Толкун формаларына бир кароо, бул өзгөчө толкундун импульсунун туурасы P ', P үчүн диапазондун ордуна (0, T) диапазонунда T менен 2Tнын ортосунда өзгөрүп турганына ишендириши керек.

P = 2T - P '

2 -кадам: Сунушталган жабдык

Сунушталган жабдык
Сунушталган жабдык
Сунушталган жабдык
Сунушталган жабдык
Сунушталган жабдык
Сунушталган жабдык

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

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

3 -кадам: Circuit

Circuit
Circuit
Circuit
Circuit

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

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

Схема санарип чип байланыштарынын чыныгы татаалдыгын көрсөтпөйт. Экинчи сүрөт долбоордун нан тактасында кандай болорун көрсөтөт. Киргизүү сигналы кызыл зым аркылуу кош позитивдүү флип-флоптун 2CLK пинине келет. ЭСКЕРТҮҮ: Адатта, бул флип -флоптун бардык J жана K төөнөгүчтөрү бийик кармалууга тийиш, бирок анын ордуна SN74HC109 өзгөчө Kbar пинин - тескери К пинди - камтыйт. Демек, бул казык жерге коюлушу керек! SN74HC112деги биринчи терс четки флип-флоптун SN74HC109дун 1Q жана 1Qbar казыктарына туташкан 1K жана 1J пини бар. SN74HC112деги экинчи флип-флоп колдонулбайт жана анын кирүү казыктары (2K, 2J, 2CLRbar) жерге туташтырылган. Бардык башка кошумча казыктар PREbar (алдын ала коюлган) жана CLRbar (ачык) бардык флип-флоптордо логикалык бийикке туташтырылышы керек. Колдонулбаган саат жана чыгаруу казыктары туташтырылган эмес. Ошо сыяктуу эле, бардык дарбазаларда колдонулбаган кирүү казыктары жерге туташтырылган, ал эми колдонулбаган чыгаруу пиндери туташпай калган. Мен "Телефон шыңгырынын көзгө көрүнбөгөн өлтүргүчүндө" талкуулаганымдай, логикалык чиптердин колдонулбаган кирүү казыктары туш келди термелүүлөрдү жок кылат жана батареянын кубатын үнөмдөйт.

4 -кадам: Код жана төмөнкү жыштыктарды өлчөө

Албетте, бардык иш -аракеттер төмөндө көрсөтүлгөн коддо болот. 3 -пинге кирүүчү санариптик төмөндөн жогоркуга өткөндө, MCU ички 48 МГц сааттын импульстарын эсептей баштайт. Ал жогоркудан төмөнгө өтүү учурун белгилейт жана бүт процессти кайра башынан баштаганда, санды кийинки төмөндөн жогоркуга которууга чейин улантат. Биринчи эсептөө импульс туурасын билдирет, ал эми бүт сан сигналдын мезгилин билдирет. Жана бул бүт сыр.

CPU бул өтүүлөрдү аппараттык үзгүлтүктөр аркылуу белгилейт. SAMD21де бир нече сааттар бар; Менин кодум TC3 бирин колдонот. Башында мен M0дун маалымат баракчасын үзгүлтүккө учураткычты коддоодо көп күч -аракет жумшоо менен окуй баштадым, бирок көп өтпөй Arduino форумунун колдонуучуларынын электро_95, MartinL жана Rucus билдирүүлөрү менен байланышкан кодун таптым. тийиштүү түрдө таанылган. Мен алардын бириккен кодун меникине киргиздим жана өзгөрттүм; мага көп убакытты үнөмдөйт!

Мен мурда айткандай, сигналдын чечилиши ~ 106 CPU циклдери менен чектелет, үзгүлтүктөрдүн ортосундагы кодду аткаруу үчүн. Импульстун туурасы сакталган санарип бөлүмү жогорку жыштыктарга кам көрөт. Төмөн жыштыктар, экинчи жагынан, дагы бир кыйынчылыкты жаратат: TC3 саат эсептегичинин узундугу 16 бит болгондуктан, 65, 536 эсептөө чегинен өткөндөн кийин ашып кетет. Бул кырдаалды толуп кетүү үзгүлтүгүн кошуу менен чечсе болот, бирок башка чечимди тандап алган: TC3 48 МГц жабдуунун ордуна алдын ала коюлган (б.а. программалык камсыздоого бөлүнгөн) CPU саатын колдоно алат. Ошентип, эгерде сигналдын мезгили толуп кетүү чегине жакындап калса, код TC3кө кийинки мезгилге 24 МГц эсептөөнү колдонууну көрсөтө алат, ал эми эсептегич 32, 768ден төмөн түшөт. Төмөнкү жыштыктар үчүн TC3 12 MHz импульсун ж. Натыйжада, аппараттын диапазонунун төмөнкү учу болжол менен 43 Гц.

Сиз кодду айрып, долбооруңузда колдонсоңуз болот, бирок жыйынтыктарды жарыялоодо анын булагын айтсаңыз болот.

Кодго шилтеме.

Сунушталууда: