Агуулгын хүснэгт:
- Алхам 1: Хэрэглэх тохиолдол: ADC хэмжилтийг жигд болгох
- Алхам 2: Хэрэглэх жишээ: Микрофон дохионы DC бүрэлдэхүүн хэсгийг хэмжих
- Алхам 3: Тооцоолол
- Алхам 4: Код
- Алхам 5: Нэмэлтүүд
- Алхам 6: Дүгнэлт
Видео: Микроконтроллерийн төслүүдийн ажиллах дундаж дундаж: 6 алхам
2024 Зохиолч: John Day | [email protected]. Хамгийн сүүлд өөрчлөгдсөн: 2024-01-30 11:01
Энэхүү зааварчилгаанд би гүйлтийн дундаж гэж юу болохыг, яагаад үүнийг анхаарч үзэх ёстойг тайлбарлах болно, мөн тооцооллын хамгийн их үр ашигтай байхын тулд үүнийг хэрхэн хэрэгжүүлэх ёстойг харуулах болно (нарийн төвөгтэй байдлын талаар санаа зовох хэрэггүй, үүнийг ойлгоход маш энгийн бөгөөд үүнийг хийх болно. arduino төслүүддээ ашиглахад хялбар номын сангаар хангах:)
Хөдөлгөөнт дундаж, хөдөлгөөнт дундаж, хөдлөх дундаж эсвэл гүйдэг дундаж гэж нэрлэдэг бөгөөд энэ нь өгөгдлийн цувралын сүүлийн N утгуудын дундаж утгыг тодорхойлоход хэрэглэгддэг нэр томъёо юм. Үүнийг ердийн дундажтай адил тооцоолж болно, эсвэл та өөрийн кодын гүйцэтгэлд хамгийн бага нөлөө үзүүлэхийн тулд заль мэхийг ашиглаж болно.
Алхам 1: Хэрэглэх тохиолдол: ADC хэмжилтийг жигд болгох
Arduino нь маш бага дуу чимээтэй 10 битийн ADC -тэй. Потенциометр, фоторезистор эсвэл дуу чимээ ихтэй бусад бүрэлдэхүүн хэсгүүдийн утгыг хэмжихдээ хэмжилт зөв гэдэгт итгэхэд хэцүү байдаг.
Нэг шийдэл бол мэдрэгчээ унших тоолондоо олон хэмжилт хийж, тэдгээрийг дунджаар гаргах явдал юм. Зарим тохиолдолд энэ нь боломжтой шийдэл боловч үргэлж байдаггүй. Хэрэв та ADC -ийг секундэд 1000 удаа уншихыг хүсч байвал дунджаар 10 хэмжилт хийвэл 10 000 авах шаардлагатай болно. Тооцоолох цагийг асар их үрэх болно.
Миний санал болгож буй шийдэл бол секундэд 1000 удаа хэмжилт хийж, ажиллаж байгаа дундажийг цаг тутамд шинэчилж, одоогийн утга болгон ашиглах явдал юм. Энэ арга нь зарим хоцролтыг бий болгодог боловч таны програмын тооцооллын нарийн төвөгтэй байдлыг бууруулж, нэмэлт боловсруулалт хийхэд илүү их цаг өгдөг.
Дээрх зураг дээр би сүүлийн 32 хэмжилтийн дундаж гүйлгээг ашигласан. Энэ арга нь 100% тэсвэртэй биш боловч нарийвчлалыг эрс сайжруулдаг болохыг та харах болно (энэ нь 32 дээжийг дунджаар авахаас муу зүйл биш юм). Хэрэв та нэг удаа дунджаар 32 хэмжилтийг тооцоолохыг хүсвэл Arduino UNO дээр зөвхөн хэмжилт хийхэд 0.25 мс шаардагдана!
Алхам 2: Хэрэглэх жишээ: Микрофон дохионы DC бүрэлдэхүүн хэсгийг хэмжих
Arduino нь 0 ба Vcc (ихэвчлэн 5 В) хоорондох хүчдэлийг хэмжих боломжтой. Аудио дохио нь бүрэн хувьсах гүйдэл бөгөөд хэрэв та үүнийг микроконтроллероор хэмжихийг хүсвэл 1/2 Vcc орчим эргүүлэх хэрэгтэй. Arduino UNO төсөлд энэ нь ойролцоогоор 2.5 В (DC) + аудио дохио (AC) гэсэн үг юм. 10 битийн ADC ба 5 вольтын тэжээлийг ашиглах үед 2.5 В -ийн хэвийх утгыг 512 -тэй тэнцүү байх ёстой. Тиймээс дохионы AC утгыг авахын тулд ADC -ийн хэмжилтээс 512 -ийг хасах ёстой, тийм үү?
Идеал ертөнцөд энэ нь үнэн байх болно. Харамсалтай нь бодит амьдрал илүү төвөгтэй бөгөөд бидний дохионы хэвийх хандлага зөрөх хандлагатай байна. Цахилгаан сүлжээнээс 50 Гц (хэрэв та АНУ -д амьдардаг бол 60 Гц) дуу чимээ ихэвчлэн гардаг. Ихэвчлэн энэ нь тийм ч их асуудал үүсгэдэггүй, гэхдээ энэ нь байгааг мэдэх нь зүйтэй юм. Илүү бэрхшээлтэй зүйл бол бүрэлдэхүүн хэсгүүдийн халалтаас шугаман шилжих явдал юм. Та эхэнд DC офсет залруулгыг болгоомжтой тохируулсан бөгөөд таны програм ажиллаж байх үед аажмаар алга болно.
Би энэ асуудлыг (хөгжим) цохилтын детектороор дүрслэх болно. Та хэвийсэн утгыг арилгах тохиргоог хийж, цохилт нь тодорхой байна (зураг 2). Хэсэг хугацааны дараа DC -ийн хэвийсэн хөдөлгөөн, цохилтыг микроконтроллер бараг анзаардаггүй (зураг 3). Цохилтыг илрүүлэх алгоритмыг ирээдүйд энэ өгүүллийн хамрах хүрээнээс давсан тул нарийвчлан судлах болно.
Аз болоход, аудионы DC офсетыг байнга тооцоолох арга байдаг. Энэхүү зааварчилгааны сэдэв нь ажиллуулах нь шийдлийг өгдөг нь гайхах зүйл биш юм.
Аливаа хувьсах гүйдлийн дохионы дундаж утга 0 гэдгийг бид мэднэ. Энэхүү мэдлэгийг ашигласнаар бид AC+DC дохионы дундаж утгыг хасах боломжтой. Үүнийг арилгахын тулд бид сүүлийн хэдэн утгын дундаж утгыг авч, одоогийн ADC уншилтаас хасах боломжтой. Та хангалттай урт хугацааны дундажийг ашиглах хэрэгтэй гэдгийг анхаарна уу. Аудио хувьд секундын аравны нэг нь (дээжийн тоо нь таны түүвэрлэлтийн хурдаас хамаарна) хангалттай байх ёстой, гэхдээ урт дундаж үзүүлэлтүүд илүү сайн ажилладаг гэдгийг мэдэж аваарай. Эхний зурган дээр 1 кГц түүврийн хурдаар 64 элементтэй ажиллаж байгаа дундаж DC хэвийсэн тооцооллын жишээг харж болно (миний зөвлөснөөс бага боловч энэ нь ажилласаар байна).
Алхам 3: Тооцоолол
Эмч нарын хүлээлгийн өрөөнд байгаа хүмүүсийн дундаж жингийн дундаж гүйлтийг төсөөлж болно. Эмч нэг өвчтөнийг шалгаж дуусаад шинэ өвчтөн хүлээлгийн өрөөнд орж ирэв.
Хүлээлгийн өрөөнд хүлээж буй бүх өвчтөнүүдийн дундаж жинг мэдэхийн тулд сувилагч өвчтөн бүрийн жинг асууж, эдгээр тоог нэмж, өвчтөний тоонд хувааж болно. Эмч шинэ өвчтөнийг хүлээн авах бүрт сувилагч бүх үйл явцыг давтана.
Та бодож байж магадгүй: "Энэ тийм ч үр дүнтэй сонсогдохгүй байна … Үүнийг хийх илүү сайн арга байх ёстой." Мөн та зөв байх болно.
Энэ үйл явцыг оновчтой болгохын тулд сувилагч одоогийн бүлгийн өвчтөнүүдийн нийт жингийн бүртгэлийг хөтөлж болно. Эмч шинэ өвчтөнийг дуудахад сувилагч түүнээс жингээ асууж, бүлгээс нь хасч, түүнийг явуулдаг. Сувилагч дөнгөж хүлээлгийн өрөөнд орж ирсэн өвчтөнөөс жингээ асууж, нийт жиндээ нэмнэ. Ээлжийн дараа өвчтөнүүдийн дундаж жин нь жинг өвчтөний тоонд хуваах болно (тийм ээ, өмнөх шигээ, гэхдээ одоо сувилагч бүгдээс биш хоёр хүний жинг асуусан). Энэ догол мөр нь жаахан ойлгомжгүй байсан байж магадгүй гэдгийг би ойлгож байна. Тиймээс илүү тодорхой болгохын тулд дээрх зургийг үзнэ үү (эсвэл сэтгэгдэл дээр асуулт асуугаарай).
Гэхдээ та сүүлийн догол мөрийг төөрөгдүүлсэн зүйл олж чадаагүй байсан ч гэсэн эхэндээ аккумляторт юу байх ёстой гэх мэт асуулт гарч ирж магадгүй юм, гэхдээ би уншсан зүйлээ бодит C кодонд хэрхэн оруулах вэ? Дараагийн алхамд энэ асуудлыг авч үзэх бөгөөд та миний эх кодыг авах болно.
Алхам 4: Код
Ажиллаж буй дундажийг тооцоолохын тулд эхлээд хамгийн сүүлийн N утгыг хадгалах арга хэрэгтэй. Та элемент нэмэх бүртээ N элементтэй массивтай байж, бүх агуулгыг нэг газар нүүлгэж болно (үүнийг бүү хийгээрэй), эсвэл та нэг хуучин элементийг дарж, дараагийн элемент рүү хаях заагчийг тохируулж болно.:)
Хуримтлуулагчийг 0 болгож эхлүүлэх ёстой бөгөөд энэ нь хойшлуулах шугамын бүх элементүүдэд хамаарна. Бусад тохиолдолд таны гүйлтийн дундаж үргэлж буруу байх болно. DelayLine_init нь хойшлуулах шугамыг эхлүүлэхэд анхаарал тавьдаг болохыг та харах болно, та өөрөө аккумляторыг өөрөө хариуцах хэрэгтэй.
хойшлуулах мөрөнд элемент нэмэх нь хамгийн сүүлийн элементийн индексийг 1 -ээр бууруулахтай адил хялбар бөгөөд хожимдох шугамын массивын талыг заагаагүй эсэхийг шалгаарай. 0 байх үед индексийг бууруулсны дараа энэ нь ойролцоогоор 255 болж хүрдэг (учир нь энэ нь 8 битийн тэмдэггүй бүхэл тоо юм). Хойшлуулах шугамын массивын хэмжээтэй модуль (%) оператор нь индексийг хүчинтэй элемент рүү чиглүүлэх болно.
Хэрэв та өмнөх алхам дээр миний аналогийг дагаж байсан бол гүйлтийн дундажийг тооцоолоход хялбар байх ёстой. Хуримтлуулагчаас хамгийн эртний элементийг хасах, аккумляторт хамгийн шинэ утга нэмэх, хойшлуулах шугам руу хамгийн сүүлийн утгыг оруулах, аккумляторыг элементийн тоонд хуваах.
Хялбар, тийм үү?
Энэ бүхэн хэрхэн ажилладагийг илүү сайн ойлгохын тулд хавсаргасан кодыг ашиглан туршиж үзээрэй. Одоогийн байдлаар arduino нь A0 аналог пин дээрх аналог утгыг уншиж, цуваа порт дээр 115200 baud хурдтайгаар "[ADC утга], [ажиллаж буй дундаж]" гэж хэвлэнэ. Хэрэв та arduino -ийн цуваа плоттерыг зөв дамжуулах хурдаар нээвэл ADC утга (цэнхэр) ба тэгшлэгдсэн утга (улаан) гэсэн хоёр мөрийг харах болно.
Алхам 5: Нэмэлтүүд
Төсөлдөө дунджийг ашиглахын тулд заавал мэдэх шаардлагагүй хэдэн зүйл байдаг бөгөөд үүнийг мэдэх нь гэмтэхгүй.
хоцрогдол: Би энэ алхамыг тайлбарлах тухай ярьж эхэлнэ. Илүү олон элемент ажиллуулах нь илүү их саатал авчирдаг болохыг та анзаарах болно. Хэрэв таны үнэ цэнийг өөрчлөх хариу өгөх хугацаа маш чухал бол та богино хугацааны дундажийг ашиглах эсвэл түүврийн хурдыг нэмэгдүүлэхийг хүсч болно (илүү олон удаа хэмжих).
Явж байна.
эхлүүлэх: Би аккумлятор болон хойшлуулах элементүүдийг эхлүүлэх талаар ярихдаа бүгдийг нь 0 болгож эхлүүлэх ёстой гэж хэлсэн. Эсвэл та хүссэн зүйлдээ хоцролтын шугамыг эхлүүлж болно, гэхдээ аккумляторыг хойшлуулах шугамын хамгийн сүүлийн N элементүүдийн нийлбэрээр эхлүүлэх хэрэгтэй (энд N Таны ажиллаж буй дундаж дахь элементүүдийн тоо). Хэрэв аккумлятор бусад утгаар эхэлбэл тооцоолсон дундаж нь буруу байх болно - хэт бага эсвэл хэт өндөр, үргэлж ижил хэмжээгээр (ижил анхны нөхцлийг харгалзан). Яагаад ийм болсныг "үзэг, цаасны симуляци" ашиглан олж мэдэхийг хичээгээрэй гэж би танд зөвлөж байна.
Аккумляторын хэмжээ: Аккумлятор нь бүх элементүүдийн нийлбэрийг эерэг эсвэл сөрөг хамгийн их байвал хоцролтын шугамд хадгалах хангалттай том хэмжээтэй байх ёстой гэдгийг анхаарах хэрэгтэй. Энэ нь хуримтлуулагч нь хоцролтын шугамын элементүүдээс нэг өгөгдлийн төрөл байх ёстой бөгөөд хэрэв хойшлуулах шугамын элементүүд гарын үсэг зурсан бол гарын үсэг зурсан байх ёстой гэсэн үг юм.
заль мэх: Урт хоцролтын шугам нь маш их санах ойг эзэлдэг. Энэ нь хурдан асуудал болж хувирна. Хэрэв та санах ой маш хязгаарлагдмал бөгөөд нарийвчлалд төдийлөн санаа зовдоггүй бол хойшлуулалтыг бүхэлд нь орхиж, үүний оронд үүнийг хийх замаар гүйлтийн дундажийг ойролцоогоор тооцоолж болно: аккумлятороос 1/N * аккумляторыг хасаад шинэ утгыг нэмнэ үү (жишээ нь 8 урт хугацааны дундаж: аккумлятор = аккумлятор * 7/8 + шинэ үнэ цэнэ). Энэ арга нь буруу үр дүн өгдөг боловч ой санамж багатай үед ажиллаж буй дундажийг тооцоолох зохистой арга юм.
Хэл шинжлэл: "ажиллаж буй дундаж/дундаж" гэдэг нь ихэвчлэн бодит цагийн дундажийг "хөдөлж буй дундаж/дундаж" гэсэн утгыг ихэвчлэн ашигладаг бөгөөд алгоритм нь excel хүснэгт гэх мэт статик өгөгдлийн багц дээр ажилладаг гэсэн үг юм.
Алхам 6: Дүгнэлт
Энэхүү сургамжийг ойлгоход хялбар байсан бөгөөд энэ нь таны ирээдүйн төслүүдэд танд тусална гэж найдаж байна. Хэрэв ямар нэгэн ойлгомжгүй зүйл байвал доорхи сэтгэгдлүүд дээр асуулт асууж болно.
Зөвлөмж болгож буй:
Arduino UNO -той ATTINY микроконтроллерийн жижиг програмист: 7 алхам
Arduino UNO -той ATTINY микроконтроллерийн бяцхан програмист: ATTINY серийн микроконтроллерыг олон талт байдал, хямд үнээр ашиглах нь сонирхолтой боловч Arduino IDE гэх мэт орчинд хялбархан програмчлах боломжтой байдаг. амархан шилжүүлэх
CP2 Excel -ийн жигнэсэн дундаж: 14 алхам
CP2 Excel -ийн жигнэсэн дундаж: Excel -ийн жигнэсэн дундажийг хэрхэн тооцоолох тухай заавар. Энэ жишээнд SUMPRODUCT ба SUM функцийг Excel дээр ашиглах болно. Жинлэсэн дундаж нь ангийн ерөнхий үнэлгээг тооцоолоход ашигтай байдаг
CloudX микроконтроллерийн танилцуулга: 3 алхам
CloudX микроконтроллерийн танилцуулга: CloudX микроконтроллер бол интерактив төслөө өөрөө үүсгэх боломжийг олгодог нээлттэй эх үүсвэрийн техник хангамж, програм хангамжийн компьютер юм. CloudX бол жижиг чип самбар бөгөөд хэрэглэгчид ямар нэгэн арга хэмжээ авахаасаа өмнө юу хийхээ хэлэх боломжийг олгодог бөгөөд өөр өөр
Бага чадалтай тасалдсан төхөөрөмжийн одоогийн дундаж хэрэглээг тодорхойлох: 4 алхам
Цахилгаан багатай тасалдсан төхөөрөмжийн одоогийн дундаж хэрэглээг тодорхойлох: Танилцуулга Би алсын зайны температур мэдрэгч дээр батерей хэр удаан ажиллах боломжтой болохыг мэдэхийг хүссэн юм. АА -ийн хоёр эсийг цувралаар авах шаардлагатай боловч цахилгаан зарцуулагдаж байгаа тул амперметрийг дараалалд байрлуулж, дэлгэцийг харахад тийм ч их тус болохгүй
AVR микроконтроллерийн гал хамгаалагчийн битийн тохиргоо. LED анивчих програмыг микроконтроллерийн флэш санах ойд үүсгэх, байршуулах: 5 алхам
AVR микроконтроллерийн гал хамгаалагчийн битийн тохиргоо. LED анивчих програмыг микроконтроллерийн флэш санах ойд үүсгэх, байршуулах: Энэ тохиолдолд бид C кодоор энгийн програм үүсгэж, микроконтроллерийн санах ойд шатаах болно. Бид өөрсдийн програмаа бичиж, хөгжүүлэлтийн нэгдсэн платформ болгон Atmel Studio -ийг ашиглан hex файлыг эмхэтгэх болно. Бид гал хамгаалагчийг тохируулах болно