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

Arduino -аас супер хурдан аналог хүчдэл: 10 алхам (зурагтай)
Arduino -аас супер хурдан аналог хүчдэл: 10 алхам (зурагтай)

Видео: Arduino -аас супер хурдан аналог хүчдэл: 10 алхам (зурагтай)

Видео: Arduino -аас супер хурдан аналог хүчдэл: 10 алхам (зурагтай)
Видео: MKS Gen L — Марлин 1 1 9 (configuration.h) 2024, Долдугаар сарын
Anonim
Image
Image

Энэхүү зааварчилгаа нь Arduino болон энгийн резистор ба конденсатор хосоос хэт хурдан аналог хүчдэлийн өөрчлөлтийг хэрхэн яаж бий болгохыг харуулж байна. Ашигтай нэг програм бол осциллограф дээр график үүсгэх явдал юм. Үүнийг хийсэн өөр хэд хэдэн төсөл бий. Johngineer нь импульсийн өргөн модуляц (PWM) ашиглан энгийн зул сарын гацуур модыг харуулж байна. Бусад нь резистор шат эсвэл дижитал-аналог хөрвүүлэгч чип ашиглан энэ төслийг сайжруулсан.

ХБХ-ийг ашиглах нь маш их анивчдаг, харин резистор шат эсвэл дижитал-аналог хөрвүүлэгч ашиглахад илүү их гаралтын тээглүүр, бүрэлдэхүүн хэсгүүдийг ашиглах боломжгүй байдаг. Миний ашигладаг хэлхээ нь зул сарын гацуур модны демо хувилбартай адилхан үхсэн энгийн резистор ба конденсатор хос боловч хамаагүй бага анивчдаг.

Нэгдүгээрт, би хэлхээг бий болгох үйл явцыг удирдан чиглүүлэх болно. Дараа нь би танд өөрийн дүр төрхийг хэрхэн яаж оруулахыг зааж өгөх болно. Эцэст нь би үүнийг илүү хурдан болгодог онолыг танилцуулах болно.

Хэрэв танд энэ заавар таалагдсан бол саналаа өгөөрэй!:)

Алхам 1: Цахилгаан хэлхээг бий болгох

Цахилгаан хэлхээг бий болгох
Цахилгаан хэлхээг бий болгох

Цахилгаан хэлхээг бий болгохын тулд танд дараахь зүйлс хэрэгтэй болно.

a) Armelino Uno эсвэл Arduino Nano гэх мэт Atmel 16MHz ATmega328P дээр суурилсан Arduino.

b) Хамгийн багадаа 150Ω байх R утга бүхий хоёр резистор.

c) C утгатай хоёр конденсатор, C = 0.0015 / R, жишээ:

  • R = 150Ω ба C = 10µ
  • R = 1.5kΩ ба C = 1µ
  • R = 15kΩ ба C = 100nF
  • R = 150kΩ ба C = 10nF

Эдгээр утгыг сонгох хоёр шалтгаан бий. Нэгдүгээрт, бид Arduino -ийн зүү дээрх гүйдлийг хамгийн ихдээ 40 мА -аас бага байлгахыг хүсч байна. 150Ω утгыг ашиглах нь Arduino -ийн 5V хүчдэлтэй ажиллах үед гүйдлийг 30 мА хүртэл хязгаарладаг. R -ийн том утга нь гүйдлийг бууруулдаг тул хүлээн зөвшөөрөгдөх болно.

Хоёрдахь хязгаарлалт бол бид R ба C -ийн бүтээгдэхүүн болох 1.5ms -тэй тэнцүү цагийг тогтмол байлгахыг хүсч байна. Програм хангамжийг энэ хугацаанд тогтмол тохируулсан болно. Програм хангамж дээр R ба C -ийн утгыг тохируулах боломжтой боловч түүний эргэн тойронд ажиллах нарийн хүрээ байдаг тул бүрэлдэхүүн хэсгүүдийг санал болгож буй харьцаатай аль болох ойрхон сонгох хэрэгтэй.

Үзүүлэлтийн хэлхээг хэрхэн яаж угсрахыг би танд үзүүлсний дараа RC тогтмол яагаад чухал болохыг илүү нарийвчилсан тайлбарыг онолын хэсэгт өгөх болно.

Алхам 2: Осциллографыг тохируулах

Осциллографыг тохируулах
Осциллографыг тохируулах

Энэхүү жагсаалд X/Y горимд тохируулсан осциллограф шаардлагатай. Туршилтын утаснуудыг схемд үзүүлсэн шиг холбох ёстой. Таны осциллограф нь минийхээс өөр байх боловч би төхөөрөмж дээрээ X/Y горимыг тохируулахын тулд шаардлагатай алхмуудыг хийх болно.

a) B суваг (X тэнхлэг) -ээр хянагдах хэвтээ шүүрийг тохируулна уу.

б) Осциллографыг хоёр сувгийн горимд тохируулна уу.

в) 0В -ээс 5В хүртэлх хүчдэлийг харуулахын тулд хоёр суваг дээрх вольт/дивийг тохируулна уу. Би өөрийн хүчийг 0.5V/div гэж тохируулсан.

d) Холболтын горимыг хоёр суваг дээр DC болгож тохируулна уу.

e) X ба Y байрлалыг Arduino -г унтраасан үед дэлгэцийн зүүн доод буланд байхаар тохируулна уу.

Алхам 3: Програмыг татаж аваад ажиллуулна уу

Image
Image

Програмыг Arduino -д зориулсан Fast Vector Display програмаас татаж аваарай. Програм хангамж нь GNU Affero Public License v3 -ийн дагуу лицензлэгдсэн бөгөөд энэхүү лицензийн нөхцлийн дагуу чөлөөтэй ашиглаж, өөрчлөх боломжтой.

Arduino IDE дээрх "fast-vector-display-arduino.ino" файлыг нээгээд Arduino дээрээ байршуулна уу. Хэсэг хугацааны дараа та осциллографын дэлгэц дээр "Шинэ жилийн мэнд хүргэе" анимацийг харах болно.

Би энэ төслийг Христийн Мэндэлсний Баярын өмнөх долоо хоногуудад хувийн хакатон хэлбэрээр боловсруулсан тул кодын PATTERN хувьсагчийг өөрчлөх замаар Христийн Мэндэлсний Баярын болон Шинэ жилийн сэдэвтэй мессежийг үзэх боломжтой.

Алхам 4: Өөрийн захиалгат зургийг бүтээх

ХБХ яагаад маш удаан байгааг ойлгоорой
ХБХ яагаад маш удаан байгааг ойлгоорой

Хэрэв та өөрийн гараар зураг зурахыг хүсч байвал USER_PATTERN -ийг тодорхойлсон шугам дээрх цэгийн координатыг Arduino ноорог дээр буулгаж болно.

Inkscape бол захиалгат зураг зурах маш сайн хэрэгсэл болохыг олж мэдсэн.

  1. Impact гэх мэт том, тод фонт ашиглан текст үүсгэх.
  2. Текстийн объектыг сонгоод "Path" цэснээс "Object to Path" -ийг сонгоно уу.
  3. Бие даасан үсгүүдийг сонгож, хооронд нь холбож хэлбэр дүрс үүсгэнэ
  4. Тэдгээрийг нэг муруй болгон нэгтгэхийн тулд "Path" цэснээс "Union" -г сонгоно уу.
  5. Хэрэв ямар ч үсэг дээр нүх байгаа бол тэгш өнцөгт багажаар тэгш өнцөгт зурж жижиг ховилыг хайчилж, "Ялгаа" багаж ашиглан контураас нь хас.
  6. Зангуудыг харуулахын тулд замыг хоёр товшино уу.
  7. Тэгш өнцөгт нь бүх зангилааг сонгоод "Сонгосон зангилааны булан болгох" хэрэгслийг дарна уу.
  8. SVG файлыг хадгална уу.

Хамгийн гол нь таны зурсан зураг ганц хаалттай, нүхгүй байх ёстой. Таны загвар 130 -аас бага оноотой эсэхийг шалгаарай.

Алхам 5: SVG файлаас координатыг Arduino IDE руу оруулна уу

  1. SVG файлыг нээж координатыг хуулж ав. Эдгээрийг "зам" элементэд оруулах болно. Эхний хос координатыг үл тоомсорлож болно; тэдгээрийг 0, 0 -ээр солих.
  2. Координатыг "USER_PATTERN -ийг тодорхойлох" -ны дараа хаалт доторх Arduino ноорог дээр буулгана уу.
  3. Бүх хоосон зайг таслалаар солино уу, эс тэгвээс хөрвүүлэх алдаа гарах болно. "Орлуулах ба хайх" хэрэгсэл нь тустай байж магадгүй юм.
  4. Эмхэтгэж, ажиллуулна уу!
  5. Хэрэв танд асуудал байгаа бол алдаа гарсан тохиолдолд цуваа консолыг үзээрэй. Ялангуяа таны хэв маягт дотоод буферт хэт олон оноо байвал та мессежийг харах болно. Ийм тохиолдолд зураг хэт их анивчих болно.

Алхам 6: ХБХ яагаад маш удаан байгааг ойлгоорой

Эхлэхийн тулд конденсатор цэнэглэж байх үеийн зан төлөвийг авч үзье.

Vcc хүчдэлийн эх үүсвэрт холбогдсон конденсатор нь экспоненциал муруйн дагуу хүчдэлээ нэмэгдүүлнэ. Энэ муруй нь шинж тэмдэггүй байдаг тул зорилтот хүчдэлд ойртох тусам удаашрах болно гэсэн үг юм. Бүх практик зорилгоор хүчдэл нь 5 RC секундын дараа "хангалттай ойрхон" байна. RC -ийг "цагийн тогтмол" гэж нэрлэдэг. Өмнө нь харсанчлан энэ нь таны хэлхээний эсэргүүцэл ба конденсаторын утгуудын бүтээгдэхүүн юм. Асуудал нь 5 RC нь график дэлгэц дээрх цэг бүрийг шинэчлэхэд нэлээд урт хугацаа юм. Энэ нь маш их анивчихад хүргэдэг!

Конденсаторыг цэнэглэхийн тулд импульсийн өргөн модуляцийг (PWM) ашиглавал бидний амьдрал тийм ч сайн биш байна. ХОУХ -ийн тусламжтайгаар хүчдэл 0В -аас 5В хооронд хурдан шилждэг. Практик дээр энэ нь бид цэнэгийг конденсатор руу түлхэж, бага зэрэг татаж авах хоёрын хооронд хурдан ээлжилдэг гэсэн үг юм. Энэ түлхэлт ба татах нь том алхам урагш, дараа нь бага зэрэг ухрах замаар марафон гүйх гэж оролдохтой адил юм. дахин дахин.

Хэрэв та бүгдийг дунджаар тооцвол ХОУХ ашиглан конденсаторыг цэнэглэх нь конденсаторыг цэнэглэхдээ Vpwm -ийн тогтмол хүчдэлийг ашигласантай яг адилхан болно. Бид хүссэн хүчдэлд "хангалттай ойртох" хүртэл ойролцоогоор 5 RC секунд шаардагдана.

Алхам 7: а -аас Б хүртэл, арай хурдан

А -аас В хүртэл, Тад Битийг илүү хурдан аваарай
А -аас В хүртэл, Тад Битийг илүү хурдан аваарай

Бидэнд Va хүртэл цэнэглэгдсэн конденсатор байна гэж бодъё. B -ийн шинэ утгыг бичихийн тулд analogWrite () ашигладаг гэж бодъё. Vb хүчдэлд хүрэх хүртэл хүлээх хамгийн бага хугацаа хэд вэ?

Хэрэв та 5 RC секундийг таасан бол энэ нь гайхалтай юм! 5 RC секунд хүлээхэд конденсатор бараг Vb хүртэл цэнэглэгдэх болно. Гэхдээ хэрэв бид хүсвэл арай бага хугацаа хүлээж болно.

Цэнэглэх муруйг хараарай. Бидний ажиллаж эхлэхэд конденсатор аль хэдийн Va дээр байсан. Энэ нь t_a цагийг хүлээх шаардлагагүй гэсэн үг юм. Хэрэв бид конденсаторыг тэгээс цэнэглэж байсан бол л хийх ёстой.

Тиймээс тэр цагийг хүлээхгүйгээр сайжирч байгааг бид харж байна. T_ab хугацаа нь үнэндээ 5 RC -ээс арай богино байна.

Гэхдээ түр хүлээгээрэй, бид илүү сайн зүйлийг хийж чадна! V_b дээрх бүх зайг хараарай. Энэ бол бидний ашиглах боломжтой хамгийн их хүчдэл болох Vcc ба бидний хүрэхийг хүсч буй Vb -ийн ялгаа юм. Нэмэлт хүчдэл нь хүссэн газраа хурдан очиход бидэнд хэрхэн тусалж байгааг та харж байна уу?

Алхам 8: Турбо цэнэглэгчээр а -аас В хүртэл аваарай

Турбо цэнэглэгчээр а -аас В хүртэл аваарай!
Турбо цэнэглэгчээр а -аас В хүртэл аваарай!

Яг зөв. Хяналтын хүчийг V_b зорилтот хүчдэлд ашиглахын оронд бид үүнийг маш богино хугацаанд тогтвортой Vcc дээр байлгадаг. Би үүнийг Turbo Charger арга гэж нэрлэдэг бөгөөд энэ нь биднийг үнэхээр хүссэн газартаа хүрэхэд хүргэдэг. Хугацаа хоцорсны дараа (үүнийг тооцоолох ёстой) бид V_b дээр ХОУХ -нд шилжиж тоормосоо дардаг. Энэ нь хүчдэлийг зорилтот хэмжээнээс хэтрүүлэхээс хамгаална.

Энэ аргын тусламжтайгаар конденсатор дахь хүчдэлийг зөвхөн ХОУХ -ийг ашиглахаас богино хугацаанд V_a -аас V_b болгон өөрчлөх боломжтой. Ингэж л газраа авна даа, хонгор минь!

Алхам 9: Дүрмийг ойлгох

Дүрмийг ойлгох
Дүрмийг ойлгох

Зураг нь мянган үгийн үнэтэй тул диаграммд өгөгдөл болон кодонд хийгддэг үйлдлүүдийг харуулав. Зүүнээс баруун тийш:

  • График өгөгдлийг PROGMEM (өөрөөр хэлбэл флаш санах ой) цэгүүдийн жагсаалт болгон хадгалдаг.
  • Орчуулах, масштаблах, эргүүлэх үйл ажиллагааны аливаа хослолыг аффин хувиргах матриц болгон нэгтгэдэг. Үүнийг анимацийн хүрээ бүрийн эхэнд нэг удаа хийдэг.
  • Оноо нь график өгөгдлөөс нэг нэгээр нь уншиж, хадгалагдсан хувиргах матрицаар үржигддэг.
  • Өөрчлөгдсөн цэгүүд нь харагдах талбайн гадна байгаа бүх цэгүүдийг хайчилж алгоритмаар тэжээгддэг.
  • RC хоцролт хайх хүснэгтийг ашиглан оноог жолоодох хүчдэл ба хугацааны хоцрогдол болгон хувиргадаг. RC хойшлуулах хайлтын хүснэгтийг EEPROM-д хадгалдаг бөгөөд кодыг олон удаа ажиллуулахад дахин ашиглах боломжтой. Эхлэх үед RC хайх хүснэгтийн нарийвчлалыг шалгаж, буруу утгыг шинэчилдэг. EEPROM ашиглах нь үнэ цэнэтэй RAM санах ойг хэмнэдэг.
  • Жолоодлогын хүчдэл ба хоцролтыг хүрээний буфер дахь идэвхгүй хүрээ рүү бичнэ. Хүрээний буфер нь идэвхтэй хүрээ ба идэвхгүй хүрээний орон зайг агуулдаг. Бүрэн хүрээ бичсэний дараа идэвхгүй хүрээ идэвхтэй болно.
  • Тасалдлын үйлчилгээний горим нь хүчдэлийн утгыг уншиж, идэвхтэй хүрээний буферээс саатал гаргах замаар зургийг байнга дахин зурдаг. Эдгээр утгууд дээр үндэслэн гаралтын тээглүүрүүдийн ажиллах мөчлөгийг тохируулдаг. Таймер 1 нь цаг хугацааны хоцролтыг хэд хэдэн наносекунд хүртэл нарийвчлалтай хэмжихэд ашигладаг бол таймер 2 нь тээглүүрүүдийн ажиллах мөчлөгийг хянахад ашиглагддаг.
  • Хүчдэлийн хамгийн их өөрчлөлттэй тээглүүр нь үргэлж "турбо цэнэглэгдсэн" үүргийн мөчлөгтэй тэг буюу 100%бөгөөд хамгийн хурдан цэнэглэх эсвэл цэнэглэх хугацааг өгдөг. Хүчдэл бага өөрчлөгддөг зүү нь эхний зүүний шилжилтийн хугацаатай тохирч ажиллах циклээр удирддаг бөгөөд энэ удаад тохирох нь осциллограф дээр шулуун зураас гаргахад чухал ач холбогдолтой юм.

Алхам 10: Их хурдтайгаар маш их хариуцлага хүлээнэ

Энэ арга нь ХОУХ -ээс хамаагүй хурдан байдаг тул яагаад analogWrite () үүнийг ашигладаггүй вэ? Яагаад гэвэл зүгээр л ХБХ ашиглах нь ихэнх програмд хангалттай сайн байдаг бөгөөд үүнээс хамаагүй илүү өршөөлтэй байдаг. "Турбо цэнэглэгч" арга нь болгоомжтой кодчилол шаарддаг бөгөөд зөвхөн тодорхой тохиолдолд тохиромжтой байдаг.

  1. Энэ нь цаг хугацааны хувьд маш мэдрэмтгий байдаг. Зорилтот хүчдэлийн түвшинд хүрмэгц зорилтот хүчдэлийг хэтрүүлэхгүйн тулд жолооны зүүг тогтмол ХОУХ -ны горимд шилжүүлэх ёстой.
  2. Энэ нь RC тогтмол байдлын талаархи мэдлэг шаарддаг тул эдгээр утгыг урьдчилан оруулах ёстой. Буруу утгатай бол цаг буруу, хүчдэл буруу байх болно. Тогтмол ХБХ -ийн тусламжтайгаар RC тогтмол нь мэдэгдэхгүй байсан ч гэсэн тодорхой хугацааны дараа зөв хүчдэлд шилжих баталгаа бий.
  3. Конденсаторыг цэнэглэх тодорхой хугацааны интервалыг тооцоолохын тулд Arduino дээр бодит цаг хугацаанд тооцоолоход хэт удаан логарифмын тэгшитгэл шаардлагатай болно. Эдгээрийг анимацийн хүрээ бүрийн өмнө урьдчилан тооцоолж, хаа нэгтээ санах ойд хадгалах ёстой.
  4. Энэ аргыг ашиглах програмууд нь хоцролт нь шугаман бус (үнэндээ экспоненциал) байдагтай маргах ёстой. Vcc эсвэл GND -ийн ойролцоох зорилтот хүчдэл нь дунд цэгийн ойролцоох хүчдэлээс илүү их хэмжээний захиалга авахад илүү урт хугацаа шаардагдах болно.

Эдгээр хязгаарлалтыг даван туулахын тулд миний вектор график код дараахь зүйлийг хийдэг.

  1. Энэ нь 16 кГц давтамжтай Timer 1 -ийг ашигладаг бөгөөд гаралтыг зөв зохицуулах, цагийг нь тасалдуулах үйлчилгээний горимыг ашигладаг.
  2. Энэ нь конденсатор ба резисторын утгыг хязгаарлахын тулд RC цагийн тогтмол утгыг ашиглах шаардлагатай болно.
  3. Энэ нь бүх цэгүүдийн хоцролтыг санах ойн буферт хөдөлгөөнт дүрс дотор хадгалдаг. Энэ нь цаг хугацааны хоцролтыг тооцоолох горим нь гаралтын тээглүүрийг шинэчлэх тасалдлын үйлчилгээний горимоос хамаагүй удаан ажилладаг гэсэн үг юм. Дараагийн жаазыг хойшлуулах шинэ багцыг ашиглахад бэлэн болохоос өмнө өгөгдсөн хүрээ бүрийг хэдэн арван удаа будаж болно.
  4. Санах ойн буфер ашиглах нь нэг фреймд зурж болох цэгүүдийн тоог хязгаарладаг. Би байгаа RAM -ийг хамгийн их ашиглахын тулд орон зайг хэмнэх кодчилол ашигладаг боловч 150 орчим оноогоор хязгаарлагддаг. Хэдэн зуун онооноос цааш дэлгэц ямар ч байсан анивчих болно, тиймээс энэ бол маргаантай асуудал юм!

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