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

Хос ул мөрийн осциллограф: 11 алхам (зурагтай)
Хос ул мөрийн осциллограф: 11 алхам (зурагтай)

Видео: Хос ул мөрийн осциллограф: 11 алхам (зурагтай)

Видео: Хос ул мөрийн осциллограф: 11 алхам (зурагтай)
Видео: Аниме Улица Демонов Аниме все серии 2024, Долдугаар сарын
Anonim
Хос ул мөртэй осциллограф
Хос ул мөртэй осциллограф

Өмнөх мини осциллографыг бүтээхдээ би хамгийн жижиг ARM микроконтроллерийг STM32F030 (F030) -ыг хэр сайн хийж чадахыг харахыг хүссэн бөгөөд энэ нь маш сайн ажилласан.

Сэтгэгдлүүдийн нэгэнд STM32F103 (F103) бүхий "Цэнхэр эм" нь F030 -тэй хөгжүүлэлтийн самбараас хамаагүй дээр, магадгүй бүр хямд байж магадгүй гэж санал болгов. Гэхдээ мини осциллографын хувьд би хөгжүүлэлтийн самбарыг ашиглаагүй, харин F030-ийг арай жижиг SMD-DIP самбар дээр ашигласан тул хөх эм нь тийм ч жижиг биш байх болно, энэ нь бас хямд байх болно гэдэгт эргэлзэж байна.

Кодыг одоо Gitlab дээр ашиглах боломжтой:

gitlab.com/WilkoL/dual-trace-oscilloscope

Хангамж

Хэсгийн жагсаалт: - хуванцар хайрцаг - перфрон самбар (хоёр талт прототип самбар 8х12см) - Цэнхэр эм - ST7735s TFT дэлгэц - лити -ион батерей - HT7333 3.3V бага уналтын зохицуулагч - MCP6L92 хос опамп - TSSOP8 - DIP8 самбар - 12 МГц болор (шаардлагагүй)) - эргэдэг кодлогч нэмэх товчлуур (2x) - powerwitch - гадил жимсний терминал (4x) - лити -ион цэнэглэгч самбар - хэд хэдэн резистор ба конденсатор - нейлон тусгаарлагч, самар, эрэг

Хэрэгсэл:

- гагнуурын станц - гагнуур 0.7мм - зарим утас - хажуу таслагч - нүдний шил ба гогцоо - өрөм - мултиметр - осциллограф - STLink -V2

Програм хангамж:

- STM32IDE - STM32CubeMX - STLink Utility - LowLayer номын сан - ST7735s -д тохируулсан номын сан - Notepad ++ - Kicad

Алхам 1: Interleave эсвэл SImultal Mode

Interleave эсвэл SImultal Mode
Interleave эсвэл SImultal Mode
Interleave эсвэл SImultal Mode
Interleave эсвэл SImultal Mode

Цэнхэр эм

Гэхдээ энэ санаа тэнд байсан бөгөөд F103 нь хоёр ADC -тэй болохыг би мэдэж байсан! Хэрэв би эдгээр хоёр ADC -ийг STL32F407 (F407) дээр өмнө нь хийж байсан "завсрын" горимд ашиглавал яах вэ. Дээж авах хурд хоёр дахин нэмэгдэх болно. Үүнийг хурдан микроконтроллертой хослуулснаар мини осциллографын залгамжлагч болно.

Хоорондох горим F103 дахь ADC нь F030 (мөн F407) дээрхээс арай дэвшилтэт биш тул та нарийвчлалыг сонгох боломжгүй юм. Илүү чухал зүйл бол та хоёр ADC -ийн хоорондох хугацааг өөрчлөх боломжгүй юм. Одоо та завсрын горимыг ашиглахдаа дээжийг аль болох богино хугацаанд аль болох хурдан авахыг хүсдэг боловч осциллографын тусламжтайгаар цаг хугацааг өөрчлөх шаардлагатай байдаг. Магадгүй үүнийг хийх боломжтой байж магадгүй, би мэргэжлийн осциллографын дизайнер биш ч гэсэн завсрын горим ашиглах төлөвлөгөөгөө орхисон юм.

Нэг зэрэг горим

Гэхдээ хоёр ADC-тэй байх нь илүү олон сонголтыг өгдөг бол хоёр ADC-ийг "тогтмол нэгэн зэрэг" горимд тохируулж болно. Хос ул мөр-осциллографын талаар юу хэлэх вэ?

Давхар ул мөртэй осциллограф хийхээр шийдсэний дараа би оролтын мэдрэмтгий чанарыг авахыг хүссэн бөгөөд энэ нь мини осциллограф дээр байгаагүй юм. Энэ нь оролт дээрх сулруулагч (ба өсгөгч) гэсэн үг юм. Тэгээд магадгүй би илүү ихийг хүсч байсан юм болов уу? Тиймээс би "хөөрхөн хүмүүсийн" жижиг жагсаалтыг гаргав.

ХҮСЛИЙН ЖАГСААЛТ

хоёр суваг

хоёр суваг дээрх хувьсах мэдрэмж

хоёр суваг дээр идэвхждэг

хоёр суваг дээрх хувьсах гох түвшин

хувьсах офсет

нэг батерейны хүч

мини осциллографтой ижил хайрцагт багтах

Алхам 2: Прототип хийх

Прототип хийх
Прототип хийх
Прототип хийх
Прототип хийх

Ердийнхөөрөө би энэ төслийг талхны самбар дээр эхлүүлсэн. (Зургийг үзнэ үү) Тэгээд бүх зүйлийг цаасан самбар дээр гагнахаасаа өмнө энэ нь сонгосон төслийн хайрцагт хэрхэн тохирохыг олж мэдэхийг хичээдэг. Энэ нь тохирсон, гэхдээ зөвхөн. Зарим хэсэг нь дэлгэцийн доор, нөгөө хэсэг нь хөх эмний доор нуугдсан байдаг. Дахин хэлэхэд, миний ихэнх төслүүдийн хувьд энэ бол ганцхан удаагийн төсөл бөгөөд би үүнд зориулж ПХБ-ийг зохион бүтээхгүй.

Алхам 3: Атенуатор

Сааруулагч
Сааруулагч

Ердийн осциллографын хувьд оролтын бууруулагч нь жижиг дохионы реле бүхий резисторыг асаах, унтраах, өсгөлтийг өөрчилдөг хэлхээ юм. Надад эдгээр релейнүүд байгаа боловч тэд 4 вольтоос бага хүчдэлд шилжихгүй гэдгийг би мэдэж байна, энэ нь зөвхөн бүрэн цэнэглэгдсэн лити -ион батерей (4.2V) дээр ажиллах болно гэсэн үг юм. Тиймээс эдгээр резисторыг солих өөр арга надад хэрэгтэй байсан. Мэдээжийн хэрэг, би зүгээр л механик унтраалгыг суулгаж болох байсан, гэхдээ энэ нь төслийн хайрцагт багтахаа больсон, магадгүй би илүү сайн дижитал потенциометрийг туршиж үзэх боломжтой байсан (надад байгаа дуу чимээ ихтэй).

Дараа нь би "аналог унтраалга" гэж бодсон бөгөөд тэдгээрийн тусламжтайгаар дижитал потенциометрийг өөрөө хийж болно. Миний эд ангиудын цуглуулгаас би дөрвөн аналог унтраалгатай CD4066 -ийг олсон. Санаа нь эсэргүүцлийн эсэргүүцэлтэй зэрэгцэн резисторыг асаах, унтраах замаар опамп хувьсагчийн эргэлтийн эсэргүүцлийг бий болгох явдал юм.

Энэ нь маш сайн ажилладаг, гэхдээ 4066 -д ердөө 4 унтраалгатай, 2 сувагтай бол 3 -аас илүү мэдрэмжийн түвшинг хийх боломжгүй байв. Би хамгийн их ашигладаг хүчдэлийн түвшин учраас хэлтэс бүрт 500мВ, 1В ба 2В хүчийг сонгосон. Дэлгэцийг 6 хэсэгт хуваадаг тул -1.5V -аас +1.5V, -3V -аас +3V, -6V -аас 6V -ийн хооронд хэлбэлздэг.

"Виртуал газардуулгын" тусламжтайгаар та эдгээр хүрээг дээш, доош хөдөлгөж болох тул 0v-ээс +12V хүртэл боломжтой болно.

Алхам 4: Виртуал газар

Виртуал газар
Виртуал газар
Виртуал газар
Виртуал газар

Осциллограф нь нэг цахилгаан төмөр зам (3.3V) ашигладаг тул опампуудад виртуал газрын түвшин шаардлагатай эсвэл ажиллахгүй болно. Энэхүү виртуал газрын түвшинг ХОУХ -ийн тусламжтайгаар TIM4 -ийн нэг гаралтын суваг дээр хийдэг бөгөөд түүний ажлын мөчлөг хэдхэн хувиас бараг зуун хувь хүртэл өөрчлөгддөг. 1k резистор ба 10uF конденсатор бүхий бага нэвтрүүлэх шүүлтүүр нь үүнийг (бараг) 0V -аас 3.3V хүртэл хүчдэл болгон хувиргадаг. Дөрвөлжин долгионы давтамж ердөө 100 кГц -ээс бага тул энгийн бага дамжуулагч шүүлтүүр хангалттай сайн.

Энэхүү осциллографын барилгын төгсгөлд та сувгуудыг хоёр тусад нь сольж болохгүй гэдгийг ойлгосон. Энэ нь нэг тэжээлийн эх үүсвэртэй бол оролтын түвшин нь опампуудын бодит газрын түвшингээс тусдаа байх ёстойтой холбоотой юм. Тиймээс GND-ийн тохиргоог өөрчлөхтэй зэрэгцэн хоёр суваг адилхан хөдөлдөг.

Алхам 5: Ротари кодлогч ба дибаг хийх

Ротари кодлогч ба дибаг хийх
Ротари кодлогч ба дибаг хийх
Ротари кодлогч ба дибаг хийх
Ротари кодлогч ба дибаг хийх

Мини осциллограф дээр би бүх функцэд зориулж ганц эргэлддэг кодлогч ашигладаг байсан. Энэ нь хос осциллографыг ашиглахад маш хэцүү болгодог тул энд надад хоёр ширхэг хэрэгтэй болно. Хөргөгч ба виртуал газрын түвшний нэг кодлогч, нөгөө нь цагийн баазыг идэвхжүүлэх кодлогч юм. Харамсалтай нь, миний бусад төсөл шиг, эдгээр эргэдэг кодлогч нь маш "чимээ шуугиантай" байдаг. Тэд маш муу байгаа тул тэдгээрийг унших стандарт арга болох "кодлогч горимд" таймеруудтай ажиллахгүй байна. Би TIM2 таймер ашиглан задлах механизм хийх ёстой байсан бөгөөд кодлогчийг 100us тутамд шалгаж байх ёстой байв. Энэхүү таймерыг кодлогч дээр ямар нэгэн идэвхжүүлэлт хийх үед (зөвхөн) эхлүүлдэг бөгөөд үүнийг оролтын порт дээрх EXTI функцээр шалгадаг. Одоо кодлогч сайн ажиллаж байна.

Таны харж байгаагаар дэлгэцтэй байх нь дибаг хийх мэдээллийг харуулахад маш хялбар байдаг.

Алхам 6: Дэлгэц ба цагийн бааз

Дэлгэц ба Цагийн бааз
Дэлгэц ба Цагийн бааз

Дэлгэц нь 160 х 128 пикселийн нягтралтай тул нэг дэлгэцийн зураг авахад 160 дээж хэрэгтэй бөгөөд би ADC -ийг хурдасгаж, секундэд 1.6 сая дээж авах боломжтой болсон бөгөөд энэ нь хэт ачаалалтай микроконтроллер (илүү дэлгэрэнгүйг дараа нь өгөх болно) өгдөг. хэлтэс бүрт хамгийн багадаа 20us байх ёстой (дэлгэц тутамд 100us). Тиймээс 10 кГц долгионы хэлбэр нь дэлгэцийг бүхэлд нь дүүргэх болно.

Энэ нь миний урьд өмнө хийж байсан мини осциллографоос хоёр дахин хурдан юм. Өө, одоо хоёр сувагтай боллоо:-).

Дээр дурдсанчлан дэлгэц нь 160 пикселийн өргөнтэй тул нэг дэлгэцэнд ердөө 160 утга шаардлагатай болно. Гэхдээ бүх буфер нь үнэндээ 320 дээж агуулдаг. Тиймээс DMA нь дамжуулалтыг бүрэн таслахаас өмнө 320 утгыг хадгалдаг. Энэ нь идэвхжүүлэлтийг програм хангамж дээр хийдэгтэй холбоотой юм. Түүвэрлэлт нь санамсаргүй мөчид эхэлдэг тул буферийн эхний утга нь гох цэг байх ёстой газар байх магадлал багатай юм.

Тиймээс trace_x_buffer -ийг унших замаар триггер цэгийг олно, хэрэв утга нь хүссэн утгын утганд байгаа бол өмнөх утга нь түүнээс доогуур байвал trigger_point олдох болно. Энэ нь маш сайн ажилладаг боловч танд дэлгэцийн бодит хэмжээнээс том буфер хэрэгтэй болно.

Энэ нь цаг хугацааны доод тохиргооны шинэчлэлтийн хурд таны бодож байснаас удаан байгаа шалтгаан юм. 200ms/div тохиргоог ашиглахад нэг дэлгэц дүүрэн өгөгдөл 1 секунд байдаг боловч хөрвүүлэлтийн хэмжээ хоёр дахин нэмэгдсэн тул 2 секунд зарцуулдаг. Илүү хурдан ажиллах хугацааны тохиргоон дээр та үүнийг тийм ч их анзаарахгүй байх болно.

TIM3 нь цагийн суурийг бий болгоход хэрэглэгддэг. Энэ нь ADC -ийг сонгосон цагийн суурийн тохиргоонд шаардагдах хурдыг идэвхжүүлдэг. Түүний TIM3 -ийн цаг нь 120 МГц юм (OVERCLOCKING -ийг үзнэ үү), түүний тоолох хамгийн дээд тоо (ARR) нь бусад нь хэрхэн халих эсвэл ST хэлээр шинэчлэгдэхийг тодорхойлдог. TRGO -ээр дамжуулан эдгээр шинэчлэлтийн импульс нь ADC -ийг өдөөдөг. Хамгийн бага давтамж нь 160 Гц, хамгийн өндөр нь 1.6 МГц юм.

Алхам 7: ADC ба DMA

ADC ба DMA
ADC ба DMA

Хоёр ADC нь оролт дээрх хүчдэлийг нэгэн зэрэг хөрвүүлдэг бөгөөд тэдгээр нь 12 битийн хоёр утгыг 32 битийн хувьсагчид хадгалдаг. Тиймээс DMA нь шилжүүлэх нэг (давхар) хөрвүүлэлт бүрт нэг л хувьсагчтай байдаг.

Эдгээр утгыг ашиглахын тулд тэдгээрийг хоёр утгад хуваах шаардлагатай бөгөөд ингэснээр хоёр ул мөрийг харуулахад ашиглаж болно. Дээр дурдсанчлан, F103 дахь ADC -ийг 12 битээс өөр нарийвчлалтайгаар тохируулах боломжгүй юм. Тэд үргэлж 12 битийн горимд ажилладаг тул хөрвүүлэлт нь үргэлж ижил тооны цаг импульс авдаг. Гэсэн хэдий ч ADC -ийг overclock хийснээр секундэд 1.6 MSamples хийх боломжтой (Нэмэлт: Overclocking -ийг үзнэ үү).

ADC -ийн лавлагаа бол 3.3V төмөр зам болох Vdd юм. Үүнийг илүү тохиромжтой утга болгон хөрвүүлэхийн тулд (хуваалт бүрт) би атенюторуудын утгыг тооцоолсон, учир нь надад эдгээр тооцооллоос гарах эсэргүүцлийн утга байхгүй тул програм хангамжид зарим залруулга хийдэг.

Энэ төсөлд би "ердийн горимд" DMA ашигладаг. Энэ горимд DMA нь бүх үгийн тоо (эсвэл хагас үг эсвэл байт) шилжүүлэх үед өгөгдөл дамжуулахаа зогсоодог. Бусад боломжтой горимд "тойрог горим" нь DMA-ийг дахин тохируулж, өгөгдлийг тасалдалгүйгээр үргэлжлүүлэн дамжуулдаг. Энэ нь F103 -тэй ажиллахгүй байсан тул маш хурдан бөгөөд adc_buffer дэх өгөгдлийг бусад програм уншиж амжаагүй байхад дарж бичдэг. Тиймээс одоо үйл явц дараах байдалтай байна.

- DMA -ийг дамжуулах өгөгдлийн тоонд тохируулж DMA -г идэвхжүүлнэ үү

- ADC -ийг идэвхжүүлж эхлэх, эдгээр нь (давхар) хөрвүүлэлт бүрийн дараа DMA дамжуулалтыг шаардах болно

- тогтоосон тооны хөрвүүлэлтийг шилжүүлсний дараа DMA зогсдог

- ADC -ийг идэвхжүүлэхийг нэн даруй зогсоо

- санах ойд байгаа өгөгдөлд шаардлагатай бүх манипуляцийг хийх

- дэлгэц дээр ул мөр харуулах

- үйл явцыг дахин эхлүүлэх

Алхам 8: Хэрэглэгчийн интерфэйс

Хэрэглэгчийн интерфэйс
Хэрэглэгчийн интерфэйс

160 -аас 128 пикселийн дэлгэц нь тийм ч том биш тул аль болох их ашиглахыг хүсч байна. Тиймээс гүйдлийн тохиргоонд зориулагдсан хэсэг байхгүй байна. Сүүлийн хэдэн мөрөнд босоо мэдрэмтгий байдал, хугацааны суурь, триггерийн түвшин, гох сувгийг харуулдаг боловч дохио хангалттай том байх үед тэдгээр хэсэгт харагдах болно. Идэвхтэй байгаа сонголтыг шараар, үлдсэнийг нь цагаан өнгөөр харуулав.

Алхам 9: Байшин ба боломжит сайжруулалтууд

Барилга ба боломжит сайжруулалтууд
Барилга ба боломжит сайжруулалтууд
Барилга ба боломжит сайжруулалт
Барилга ба боломжит сайжруулалт
Барилга ба боломжит сайжруулалт
Барилга ба боломжит сайжруулалт
Барилга ба боломжит сайжруулалт
Барилга ба боломжит сайжруулалт

Энэ төсөлд би үнэхээр баяртай байна. Энэ нь сайн ажиллаж, ажлыг гүйцэтгэдэг, гэхдээ илүү дээр байж магадгүй юм.

Төслийн хайрцаг нь хэт жижиг тул бүх зүйлийг эвтэйхэн багтааж чаддаггүй бөгөөд ингэснээр бүрэлдэхүүн хэсгүүдийг цэнхэр эмэнд оруулах шаардлагатай болдог. Үүнийг хийхийн тулд цэнхэр эмийг "үндсэн самбар" руу шууд гагнах боломжгүй юм. Энэ нь бүх зүйлийг хэт өндөр болгосон тул би цэнхэр бэлдмэлээс BOOT0 ба BOOT1 (миний хэзээ ч ашигладаггүй зүйл) -ийг сонгох холбогч гэх мэт олон хэсгийг зайлуулж, болорыг дээрээс доош нь зөөх шаардлагатай болсон. pcb.

Би BNC эсвэл SMA холбогч биш харин гадил жимсний холбогч ашиглан амьдралыг улам хүндрүүлсэн. Энэ нь перфорд самбарын том хэсэг нь "ажиллахыг хориглосон" хэсэг байсан гэсэн үг юм. дээр хэсэг тавихаас.

Төслийн ийм жижиг хайрцагт хийх өөр нэг асуудал бол аналог ба дижитал хэлхээ нь хоорондоо маш ойрхон байдаг. Хоёр ул мөр дээр нэлээд их дуу чимээ харагдаж байгааг та харж байна. Энэ нь надад талхны тавцан дээр байгаагүй! Аналог болон дижитал хэлхээний цахилгааны шугамыг аль болох хол зайд хийснээр бага зэрэг сайжруулсан боловч энэ нь надад таалагдахгүй байна. Аналог хэлхээний бүх эсэргүүцлийн утгыг надаас илүү бууруулах нь (оролтын эсэргүүцэл 1МОм биш 100 кОм байна) тус болсонгүй. Цагийн суурийн хамгийн хурдан тохиргоог (20us/div) эхлүүлэх нь тийм ч сайн биш бөгөөд дохио дээр дуу чимээ багатай байх болно гэж би бодож байна.

Хэрэв та энэ загварыг "жинхэнэ" компьютер дээр хийж, бүх smd хэсгүүд, аналог, дижитал, хүч чадлын тусдаа давхаргатай (энэ нь 4 давхарга юм!) Энэ нь маш сайн ажиллах байх. Энэ нь хамаагүй жижиг байх болно, энэ нь бүрэн хөх эм хэрэглэхгүй, зөвхөн F103 бөгөөд үүнийг ADC -д зориулж тусдаа (цэвэр) аналог Vdda нийлүүлэх боломжтой болно.

Эцсийн байдлаар би хайрцгийг хараар шүршихээр шийдсэн бөгөөд энэ нь түүнд байгаа бүх шаргал хайрцганд өөрчлөлт оруулдаг.

Алхам 10: Код ба богино видео

Алхам 11: Нэмэлт: Overclocking

Нэмэлт: Overclocking
Нэмэлт: Overclocking

Яг F03 -тэй хийсэн шиг би F103 -ийг хэр сайн overclock хийж болохыг харахыг хүссэн юм. Энэхүү микроконтроллерийн техникийн үзүүлэлтүүд нь хамгийн дээд хурд нь 72 МГц -ээс хэтрэхгүй байх ёстой гэж мэдэгддэг (энэ нь мэдээж F030 -ээс аль хэдийн илүү хурдан байдаг) гэхдээ би үүнийг хэд хэдэн блог дээрээс overclock хийх нь амархан байсан гэж уншсан.

Цэнхэр эм нь 8MHz болороор хангагдсан бөгөөд PLL нь 9-77 МГц -ийн хүчин зүйлээр үрждэг. PLL -ийг 16 хүртэл нэмэгдүүлэх боломжтой бөгөөд 128MHz цагтай болно. Энэ нь миний Blue Pill -ийн хувьд огт асуудалгүй байсан, үнэндээ миний бүх Blue Pills нь 128MHz дээр ямар ч асуудалгүй ажилладаг.

Харин одоо би жинхэнэ хязгаар гэж юу болохыг олж мэдэхийг хүссэн юм. Тиймээс би 8MHz болорыг аваад 12MHz -ийн нэгээр сольсон. Дахин хэлэхэд би микроконтроллер бууж өгөх хүртэл PLL үржүүлэгчийг нэмэгдүүлэв. Энэ нь 168 МГц давтамжтай байсан! 156MHz дээр энэ нь сайн ажилласан хэвээр байна. Би үүнийг хэдэн цагийн турш ийм хурдаар ажиллуулж орхисон бөгөөд хэзээ ч унаж байгааг нь хараагүй. Энэхүү осциллографын хувьд би 12 МГц болор, 10 дээр PLL, 8 МГц болор, 15 дээр PLL -ийг сонгож болох хурдыг 120 МГц -т тохируулсан. (Main.c дахь SystemClock_Config -ийг үзнэ үү)

ADC -ууд одоо илүү хурдан ажиллаж байна, би тэднийг 30 МГц дээр ажиллуулдаг (14 -ийн оронд), тэд 60 МГц дээр сайн ажиллаж байсан, STMicroelectronics зарим сайхан тоног төхөөрөмж хийдэг!

STMicroelectronics нь эдгээр хязгаарыг өгөгдлийн хүснэгтэд сайн шалтгаанаар оруулсан тул микроконтроллер нь 72MHz давтамжтай бүх нөхцөлд ажилладаг болохыг баталгаажуулдаг.

Гэхдээ би микроконтроллерийг -40 хэм, +85 хэм, ердөө 2.0 вольт эсвэл 3.6 вольтоор ашигладаггүй тул үүнийг хэтрүүлэх нь аюулгүй гэж бодож байна. Хэрэв та микроконтроллертой төхөөрөмж зарах гэж байгаа бол үүнийг хаана ашиглахыг хэзээ ч мэдэхгүй.

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