Агуулгын хүснэгт:

Өндөр давтамж ба үүргийн мөчлөгийг нэгэн зэрэг микроконтроллер ашиглан хэрхэн хэмжих вэ: 4 алхам
Өндөр давтамж ба үүргийн мөчлөгийг нэгэн зэрэг микроконтроллер ашиглан хэрхэн хэмжих вэ: 4 алхам

Видео: Өндөр давтамж ба үүргийн мөчлөгийг нэгэн зэрэг микроконтроллер ашиглан хэрхэн хэмжих вэ: 4 алхам

Видео: Өндөр давтамж ба үүргийн мөчлөгийг нэгэн зэрэг микроконтроллер ашиглан хэрхэн хэмжих вэ: 4 алхам
Видео: ESP8266 Diesel Injector Purging Station - PWM NodeMCU pump flow Control (Subtittled) 2024, Долдугаар сарын
Anonim
Өндөр давтамж ба үүргийн мөчлөгийг нэгэн зэрэг микроконтроллер ашиглан хэрхэн хэмжих вэ
Өндөр давтамж ба үүргийн мөчлөгийг нэгэн зэрэг микроконтроллер ашиглан хэрхэн хэмжих вэ
Өндөр давтамж ба үүргийн мөчлөгийг нэгэн зэрэг микроконтроллер ашиглан хэрхэн хэмжих вэ
Өндөр давтамж ба үүргийн мөчлөгийг нэгэн зэрэг микроконтроллер ашиглан хэрхэн хэмжих вэ
Өндөр давтамж ба үүргийн мөчлөгийг нэгэн зэрэг микроконтроллер ашиглан хэрхэн хэмжих вэ
Өндөр давтамж ба үүргийн мөчлөгийг нэгэн зэрэг микроконтроллер ашиглан хэрхэн хэмжих вэ

Таны юу бодож байгааг би мэднэ: "Хөөе? Дохионы давтамжийг хэмжихийн тулд микроконтроллерийг хэрхэн ашиглах талаар зааварчилгаа маш их байдаг. Яав." Гэхдээ түр хүлээгээрэй, үүнд нэг шинэлэг зүйл бий: Би микроконтроллер (MCU) -ээс илүү өндөр давтамжийг хэмжих арга, дохионы үүргийн мөчлөгийг нэгэн зэрэг тайлбарлаж байна!

Төхөөрөмжийн давтамжийн хүрээ ~ 43 Гц -аас ~ 450 кГц хооронд хэлбэлздэг бол ажлын мөчлөг 1% -аас 99% хооронд хэлбэлздэг.

"Тэвчиж чадах" хэсгийг тайлбарлаж өгье: MCU нь дөрвөлжин долгионы дохионы T хугацааг хэмжиж, дараагийн хоёр шилжилтийн үйл явдлын хоорондох хугацааг хэмждэг. Жишээлбэл, бага/өндөр хүчдэл нь оролт/гаралтын нэг зүү дээр үсэрч ордог. Үүнийг өөрийн дотоод цагны импульсийн тоог тоолох замаар хийдэг. Гэнэн байдлаар хэмжсэн давтамжийн дээд хязгаар нь 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% -ийн ажлын мөчлөгтэй байдаг! Яагаад ийм зүйл болж байгааг олж мэдэхийн тулд эхний хоёр зургийг үзнэ үү. T үе ба импульсийн өргөнтэй анхны дохиог JK флипны цагийн зүү рүү оруулна, харин J ба K тээглүүрүүд нь үргэлж өндөр байдаг (эхний зураг). 3.3V логикийг бүхэлд нь авч үздэг. Цахилгаан гүйлт нь цагийн эерэг (өөрөөр хэлбэл өсөн нэмэгдэж буй) ирмэгээр өдөөгдсөн гэж үзье. Ийм нөхцөлд гаралтын зүүний төлөв байдал өөрчлөгддөг (тус тусад нь "эргүүлэх" ба "унах") цагны зүү нь багаас өндөр рүү шилжих бүрт тохиолддог. Цагны өндөр ба бага шилжилтийг (өөрөөр хэлбэл сөрөг ирмэг) бүрэн үл тоомсорлодог. Хоёрдахь зургийг үзнэ үү. Q гаралтын зүү нь анхны хугацаанаасаа хоёр дахин урт, өөрөөр хэлбэл давтамж нь хоёр дахин буурсан дохио өгдөг. Гаралтын импульсийн өргөн нь үргэлж T -тэй тэнцүү байдаг. Тиймээс анхны импульсийн өргөн P алдагдана.

Гурав дахь зурагт үзүүлсэн тохиргоонд өөр JK flip-flop-ийг нэмж оруулснаар анхны давтамжийг 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" нь импульсийн өргөн P -ээр солигдсон "Pos Q" -ыг дагаж, "Neg Qbar" нь урвуу байна. "Pos Qbar" ба "Neg Q" логик AND нь анхны импульсийн өргөн P ба 1/4 -ийн давтамжаар тодорхойлогддог импульсийн галт тэрэг үүсгэдэг болохыг та шалгаж болно. Бинго!

Эхэндээ би MCU -ийг тэжээхийн тулд яг энэ гаралтын дохиог ашигласан. Гэсэн хэдий ч MCU -ийн танилцуулгад дурдсан 106 мөчлөгийг хязгаарласан тул импульсийн өргөн маш богино байх нь асуудалтай болсон. Би энэ жижиг асуудлыг "Pos Qbar", "Neg Qbar" гэсэн өөр гарцыг сонгож шийдсэн. Долгионы хэлбэрийг нэг харах нь энэ долгионы хэлбэр болох P '-ийн импульсийн өргөн нь P ба 0 (T) мужын оронд T ба 2T хооронд хэлбэлздэг гэдэгт итгүүлэх ёстой.

P = 2T - P '

Алхам 2: Санал болгож буй техник хангамж

Санал болгож буй техник хангамж
Санал болгож буй техник хангамж
Санал болгож буй техник хангамж
Санал болгож буй техник хангамж
Санал болгож буй техник хангамж
Санал болгож буй техник хангамж

Цахим хобби сонирхогчдод харьцангуй шинээр орж ирж буй хүн надад үнэхээр таалагдаж байна: 32-битийн ARM Cortex M0+ процессор дээр суурилсан Atmel SAM D21 MCUs нь 48 МГц-ийн давтамжтай ажилладаг бөгөөд энэ нь хуучин Атмелуудаас хамаагүй өндөр юм. Энэ төслийн хувьд би худалдаж авсан:

  • Adafruit -ийн ItsyBitsy M0 Express MCU самбар
  • Би Adafruit -ээс цэнэглэдэг LiPo батерейтай болсон юм
  • Monochrome 128x32 SPI OLED дэлгэц (таны таамаглаж байсан: Adafruit)
  • Texas Instruments-ийн хос эерэг ирмэг бүхий JK flip-flop SN74HC109
  • Texas Instruments-ийн хос сөрөг ирмэг бүхий JK flip-flop SN74HC112
  • Texas Instruments компанийн CD74AC08E дөрвөлжин ба хаалга
  • Texas Instruments компанийн CD74AC32E дөрвөлсөн OR хаалга

Алхам 3: Хэлхээ

Хэлхээ
Хэлхээ
Хэлхээ
Хэлхээ

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

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

Схем нь дижитал чип холболтын жинхэнэ нарийн төвөгтэй байдлыг харуулаагүй болно. Хоёрдахь зураг нь төсөл талхны самбар дээр хэрхэн харагдахыг харуулж байна. Оролтын дохио нь улаан утсаар хоёр эерэг ирмэгийн 2CLK зүү рүү ирдэг. АНХААРУУЛГА: Ихэвчлэн энэ флип флопын бүх J ба K тээглүүрүүд өндөр байх ёстой боловч ялангуяа SN74HC109 нь Kbar зүү буюу урвуу K зүүтэй байдаг. Тиймээс энэ зүүг газардуулсан байх ёстой! SN74HC112-ийн анхны сөрөг ирмэг нь 1K ба 1J зүүтэй бөгөөд SN74HC109-ийн 1Q ба 1Qbar зүүтэй холбогдсон байна. SN74HC112 дахь хоёр дахь флип флопыг ашиглаагүй бөгөөд оролтын зүү (2K, 2J, 2CLRbar) газардуулгатай байна. Plipbar дээрх бусад бүх нэмэлт зүү PREbar (урьдчилан тохируулсан) ба CLRbar (тодорхой) нь логик өндөрт холбогдсон байх ёстой. Ашиглагдаагүй цаг ба гаралтын тээглүүрийг холболтгүй үлдээдэг. Үүний нэгэн адил бүх хаалган дээр ашиглагдаагүй оролтын тээглүүрүүдийг газардуулж, харин ашиглаагүй гаралтын тээглүүрийг холболгүй үлдээдэг. Би "Утасны бөгжийг үл үзэгдэгч" -д дурдсанчлан логик чипийг ашиглаагүй оролтын зүүг санамсаргүй хэлбэлзлийг арилгаж, батерейны хүчийг хэмнэдэг.

Алхам 4: Код ба бага давтамжийг хэмжих

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

CPU нь эдгээр шилжилтийг техник хангамжийн тасалдалтаар тэмдэглэдэг. SAMD21 нь хэд хэдэн цагтай; миний код TC3 нэгийг ашигладаг. Эхэндээ би тасалдлын зохицуулагчийг кодлохын тулд маш их хүчин чармайлт гаргахын тулд M0 -ийн мэдээллийн хуудсыг уншиж эхэлсэн боловч удалгүй Arduino Forum -ийн хэрэглэгчидийн electro_95, MartinL, Rucus -ийн оруулсан маш их хамааралтай кодыг олж мэдсэн. зохих ёсоор хүлээн зөвшөөрсөн. Би тэдний хосолсон кодыг өөрийн кодод оруулж, өөрчилсөн; надад маш их цаг хэмнэв!

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

Та кодыг салгаж, төсөлдөө ашиглахыг урьж байна, гэхдээ үр дүнг нийтлэхдээ түүний эх сурвалжийг дурдах хэрэгтэй.

Код руу холбох.

Зөвлөмж болгож буй: