Avr uchun DIY yuqori chastotali sinus generatori. Funktsional DDS generatori. Elementlarni mumkin bo'lgan almashtirish

Maksimal chastota - 65534 Gts (va kvadrat to'lqinli 8 MGts gacha HS chiqishi). Va keyin men generatorni FPGA o'zini eng yaxshi ko'rsatishi mumkin bo'lgan ajoyib vazifa deb o'yladim. Sport masalasiga kelsak, men FPGA-da loyihani takrorlashga qaror qildim, shu bilan birga ikki hafta oxiri ichida belgilangan muddatlarni bajarib, parametrlarni aniq belgilanmagan, lekin mumkin bo'lgan maksimal darajaga erishdim. Bundan nima chiqqanini kesish ostida bilib olishingiz mumkin.

Nolinchi kun

Dam olish kunlari kelishidan oldin, men amalga oshirish haqida o'ylash uchun biroz vaqtim bor edi. Vazifamni soddalashtirish uchun men generatorni tugmalar va LCD displeyli alohida qurilma sifatida emas, balki USB orqali kompyuterga ulanadigan qurilma sifatida qilishga qaror qildim. Buning uchun menda USB2RS232 plata bor. Kengash haydovchilarni (CDC) talab qilmaydi, shuning uchun u Linux ostida ishlaydi deb o'ylayman (ba'zilar uchun bu muhim). Bundan tashqari, men allaqachon RS232 orqali xabarlarni qabul qilish bilan ishlaganimni yashirmayman. Men opencores.com saytidan RS232 bilan ishlash uchun tayyor modullarni olaman.

Sinus to'lqin signalini yaratish uchun sizga DAC kerak bo'ladi. Asl loyihada bo'lgani kabi DAC turini tanladim - R2R 8-bit. Bu sizga yuqori chastotalarda, megaherts tartibida ishlash imkonini beradi. Ishonchim komilki, FPGA buni engishi kerak

Men COM porti orqali ma'lumotlarni uzatish uchun dasturni qanday yozish haqida o'ylardim. Bir tomondan, siz Delphi7 da yozishingiz mumkin, sizda bunday dasturni yozish tajribangiz bor va bundan tashqari, bajariladigan fayl hajmi katta bo'lmaydi. Men HTML-sahifada java skripti ko'rinishida Serial bilan ishlash uchun biror narsani chizishga harakat qildim, lekin u ko'proq yoki kamroq faqat Chrome serial API orqali ishladi, lekin buning uchun plaginni o'rnatishingiz kerak ... umuman , bu ham gap emas. Men PyQt5-ni o'zim uchun yangilik sifatida sinab ko'rdim, lekin bunday loyihani tarqatishda siz bir nechta kutubxonalarni sudrab olishingiz kerak. PyQt loyihasini exe fayliga kompilyatsiya qilishga urinib ko'rganimizdan so'ng, u 10 MB dan ortiq bo'lib chiqdi. Ya'ni, u C++\Qt5 da yozilgan dasturdan yaxshiroq bo'lmaydi. Shuni ham hisobga olish kerakki, menda python-da rivojlanish bo'yicha tajribam yo'q, lekin Qt5da tajribam bor. Shuning uchun tanlov Qt5 ga to'g'ri keldi. Beshinchi versiyadan boshlab serial bilan ishlash moduli paydo bo'ldi va men u bilan allaqachon ishlaganman. Qt5-ga asoslangan dasturni Linux va Mac-ga o'tkazish mumkin (ba'zilar uchun bu muhim) va 5.2 versiyasidan QWidgetlarga asoslangan ilovalar hatto smartfonga ham o'tkazilishi mumkin!

Yana nima kerak? Tabiiyki, platada FPGA mavjud. Menda ulardan ikkitasi bor (10 ming hujayra uchun Cyclone iv EP4CE10E22C8N va 5 ming hujayra uchun Cyclone ii EP2C5). Men faqat qulayroq ulagich tufayli chap tomonni tanlayman. Hajmi bo'yicha loyiha katta bo'lishni maqsad qilgan emas, shuning uchun u ikkalasiga ham mos keladi. Ular tezlikda farq qilmaydi. Ikkala platada ham bortda 50 MGts chastotali osilatorlar mavjud va FPGA ichida PLL mavjud, uning yordamida chastotani rejalashtirilgan 200 MGts ga oshirishim mumkin.

Birinchi kun

Sintezator loyihamda allaqachon DDS modulini yasaganim sababli, men darhol lehim temirini oldim va DACni rezistorlar bilan lehimlashni boshladim. Men prototip taxtasini oldim. O'rnatish o'rash yordamida amalga oshirildi. Texnologiyaga ta'sir qilgan yagona o'zgarish shundaki, men F38N kislotasidan voz kechib, TT ​​indikatorli oqim jeli foydasiga stendlarni qalay qildim. Texnologiyaning mohiyati oddiy: men tokchalarni bosilgan elektron plataga lehimlayman va bosilgan elektron plata tomonidan ularga rezistorlarni lehimlayman. Men etishmayotgan ulanishlarni burish orqali qilaman. Bundan tashqari, tokchalar qulay, chunki men ularni to'g'ridan-to'g'ri FPGA platasiga joylashtira olaman.

Afsuski, uyda 1 va 2 kilo-ohm rezistorlar mavjud emas edi. Do'konga borishga vaqt yo'q edi. Men qoidalarimdan biridan voz kechishim va eski keraksiz taxtadan rezistorlarni olib tashlashim kerak edi. U erda 15K va 30K rezistorlar ishlatilgan. Natijada bu Frankenshteyn:


Loyihani yaratgandan so'ng, siz maqsadli qurilmani o'rnatishingiz kerak: Menyu Assigments -> Device


Loyihada men boshqarilmaydigan asosiy DDS modulini belgilangan chastotaga kodladim.

1000 Hz generator moduli

modul signal_generator (clk50M, signal_out); kirish simi clk50M; sim chiqishi signal_out; tel clk200M; osc osc_200M reg akkumulyatori; signal_out = akkumulyatorni belgilash; //1000 Gts ni yaratishga harakat qiling //50 000 000 Gts - tashqi generatorning takt chastotasi //2^32 = 4,294,967,296 - DDS bit chuqurligi - 32 bit //1000Hz / 50,000,000 Gts ni ajrating / 29,000,000 Gts / har doim 2924, @729 = (posedge clk50M) akkumulyatorni ishga tushiring<= accumulator + 32"d42949; end endmodule


Shundan so‘ng, men “Kompilyatsiyani boshlash” tugmasini bosdim, shunda ishlab chiqish muhiti loyihaning asosiy modulida qanday kiritish/chiqish liniyalari borligi va ular qanday jismoniy PIN-kodlarga ulanganligini so‘raydi.Siz deyarli hamma bilan bog‘lanishingiz mumkin.Kompilyatsiyadan so‘ng, biz FPGA chipining haqiqiy PIN-kodlariga ko'rinadigan qatorlarni belgilang:

Menyu elementi Assigments -> Pin Planner

Iltimos, hozircha HS_OUT, key0 va key1 qatorlariga e'tibor bermang, ular loyihada keyinroq paydo bo'ladi, lekin boshida skrinshot olishga vaqtim yo'q edi.

Aslida, "Joylashuv" ustunida faqat PIN_nn-ni "ro'yxatdan o'tkazish" kifoya qiladi va qolgan parametrlar (I/U standarti, Current Strench va Slew Rate) sukut bo'yicha qoldirilishi mumkin yoki siz tomonidan taklif qilinganlarni tanlashingiz mumkin. hech qanday ogohlantirish bo'lmasligi uchun standart (standart) "ov.

Qaysi PIN-kod platadagi ulagich raqamiga mos kelishini qanday aniqlash mumkin?

Ulagichning pin raqamlari taxtada belgilangan


Va ulagich kontaktlari ulangan FPGA pinlari FPGA platasi bilan birga kelgan hujjatlarda tasvirlangan.




Pinlar tayinlangandan so'ng, men loyihani qayta kompilyatsiya qilaman va uni USB dasturchisi yordamida o'chirib qo'yaman. Agar sizda USB Byte blaster dasturchisi uchun drayverlar o'rnatilmagan bo'lsa, Windows-ga ular Quartus o'rnatilgan papkada joylashganligini ayting. Keyin uni o'zi topadi.

Dasturchi JTAG ulagichiga ulangan bo'lishi kerak. Va dasturlash uchun menyu elementi "Asboblar -> Dasturchi" (yoki asboblar panelidagi belgini bosing). "Ishga tushirish" tugmasi, quvonchli "Muvaffaqiyat" va proshivka allaqachon FPGA ichida va allaqachon ishlamoqda. Faqat FPGA-ni o'chirmang, aks holda u hamma narsani unutadi.

Asboblar -> Dasturchi


DAC FPGA plata ulagichiga ulangan. Men S1-112A osiloskopini DAC chiqishiga ulayman. Natijada "arra" bo'lishi kerak, chunki fazali akkumulyatorning DDS so'zining yuqori tartibli qismi 8 bitli chiqishga chiqariladi. Va u har doim to'lib toshib ketguncha ortadi.

Taxminan 1,5 soat va 1000 Gts chastotada men quyidagi oscillogrammani ko'raman:

Shuni ta'kidlashni istardimki, "arra" o'rtada kichik singan. Buning sababi rezistorlarning bir qator qiymatlarga ega bo'lishidir.

Aniqlanishi kerak bo'lgan yana bir muhim nuqta - bu DDS generatorining maksimal mumkin bo'lgan chastotasi. To'g'ri sozlangan TimeQuest parametrlari bilan "Tuzlama hisoboti" da kompilyatsiya qilingandan so'ng, kontaktlarning zanglashiga olib keladigan tezligi 200 MGts dan yuqori ekanligini ko'rishingiz mumkin. Bu PLL yordamida 50 MGts generator chastotasini 4 ga ko'paytiraman degan ma'noni anglatadi.DDS fazali akkumulyatorning qiymatini 200 MGts chastota bilan oshiraman. Bizning sharoitimizda olinishi mumkin bo'lgan oxirgi chastota diapazoni 0 - 100 MGts. Chastotani sozlash aniqligi:

200 000 000 Gts (clk) / 2^32 (DDS) = 0,047 Gts
Ya'ni, ~0,05 Gts dan yaxshiroqdir. Men bunday ish chastotalari diapazoni (0 ... 100 MGts) bo'lgan generator uchun hertsning bir qismining aniqligini etarli deb hisoblayman. Agar kimdir aniqlikni oshirishi kerak bo'lsa, buning uchun ular DDS bit chuqurligini oshirishi mumkin (TimeQuest Timing Analyzer-da mantiqiy sxemaning ishlash tezligi CLK = 200 MGts oralig'ida ekanligini tekshirishni unutmang, chunki bu toplayıcı) yoki oddiygina. agar bunday keng chastota diapazoni talab qilinmasa, soat chastotasini kamaytiring.

TimeQuest vaqt tahlilchisi


Ekranda "ko'rdim" ni ko'rganimdan so'ng, oilaviy muammolar meni mamlakatga borishga majbur qildi (bu mening dam olish kunim edi). U erda men o'rgandim, pishirdim, mangal pishirdim va kechqurun meni kutayotgan syurpriz haqida hech qanday tasavvurga ega emasdim. Kechga yaqinroq, yotishdan oldin, men boshqa chastotalar uchun signal shakliga qarashga qaror qildim.

100 kHz chastota uchun

250 kHz chastota uchun

500 kHz chastota uchun

1 MGts chastota uchun

Ikkinchi kun

DAC 100 va 200 Ohm rezistorlarda qanday ishlashi qiziq bo'lganligi sababli, men darhol lehim temirini oldim. Bu safar DAC aniqroq bo'lib chiqdi va uni o'rnatish uchun kamroq vaqt kerak bo'ldi.

Biz DACni FPGA platasiga joylashtiramiz va uni osiloskopga ulaymiz

1 MGts tekshirilmoqda - VO! Bu butunlay boshqa masala!

10 MGts ni ko'rdim

25 MGts ni ko'rgan


10 MGts arra shakli hali ham to'g'ri shaklga o'xshaydi. Ammo 25 MGts chastotada u endi "chiroyli" emas. Biroq, C1-112a 10 MGts tarmoqli kengligiga ega, shuning uchun bu holda sabab allaqachon osiloskopda bo'lishi mumkin.

Asosan, DAC bilan bu masalani yopiq deb hisoblash mumkin. Endi yuqori tezlikdagi chiqishning to'lqin shakllarini olaylik. Buning uchun biz FPGA ning alohida PIN-kodiga eng muhim bitni chiqaramiz. Biz ushbu qator uchun ma'lumotlarni DDS akkumulyatorining eng muhim bitidan olamiz.

hs_out = akkumulyatorni belgilang;

Kvadrat to'lqin 1 MGts

Kvadrat to'lqin 5 MGts

Kvadrat to'lqin 25 MGts

50 MGts kvadrat to'lqin hozir deyarli ko'rinmas


Lekin menimcha, FPGA chiqishi qarshilik bilan yuklanishi kerak. Ehtimol, jabhalar tikroq bo'lar edi.

Sinus jadvalga muvofiq amalga oshiriladi. Jadval hajmi 8 bitning 256 qiymatidan iborat. Ko'proq olish mumkin edi, lekin menda allaqachon tayyor mif fayli bor edi. Sehrgardan foydalanib, mif faylidan sinus jadval ma'lumotlari bilan ROM elementini yaratamiz.

ROM yaratish - Asboblar -> Mega Wizard Plugin menejeri


1 port ROMni tanlang va modulga nom bering

Biz rozimiz

Bu erda biz ham rozi bo'lamiz

Browse-dan foydalanib, biz sinus jadvali bilan mif faylimizni topamiz

Biz bu erda ham hech narsani o'zgartirmaymiz.

Sine_rom_bb.v modulidan belgini olib tashlang - bu kerak emas. Keyingi tugatish. Quartus sizdan loyihaga modul qo'shishingizni so'raydi - biz rozimiz. Shundan so'ng, modul Verilog'dagi boshqa har qanday modul kabi ishlatilishi mumkin.


DDS akkumulyator so'zining yuqori 8 biti ROM manzili sifatida ishlatiladi va ma'lumotlar chiqishi sinus qiymati bo'ladi.

Kod

//sine rom sim sine_out; sine_rom sine1(.clock(clk200M), .manzil(akkumulyator), .q(sine_out));


Turli chastotalardagi sinus to'lqinining oscillogrammasi ... bir xil ko'rinadi.

Agar xohlasangiz, rezistor tarqalishi bilan bog'liq DAC muammolarini ko'rib chiqishingiz mumkin:

Xo'sh, dam olish kunlarining oxiri. Ammo kompyuterdan boshqarish uchun dasturiy ta'minot hali yozilmagan. Men rejalashtirilgan muddatlarni bajarmaganimni tan olishga majburman.

Uchinchi kun

Vaqt juda oz, shuning uchun dasturni shoshqaloqlik bilan yozamiz (eng yaxshi an'analarda). Ba'zi joylarda harflar sonini kamaytirish va klaviaturadan ma'lumotlarni kiritish qulayligi uchun vidjet nomi bilan hodisa filtri qo'llaniladi. Iltimos, tushuning va kechiring.

Interfeys

Analoglar bilan havolalar

To'liq ro'yxat emas
Funktsional DDS generatori. AVR asosida yaratilgan. Chastotalar 0… 65534 Hz.
GK101 DDS generatorini ko'rib chiqish. Altera MAX240 FPGA yordamida yaratilgan. 10 MGts gacha bo'lgan chastotalar.
PIC16F870 da ko'p funksiyali generator. Chastota diapazoni: 11 Hz - 60 kHz.
generatorlar Teglar qo'shish

Maksimal chastota - 65534 Gts (va kvadrat to'lqinli 8 MGts gacha HS chiqishi). Va keyin men generatorni FPGA o'zini eng yaxshi ko'rsatishi mumkin bo'lgan ajoyib vazifa deb o'yladim. Sport masalasiga kelsak, men FPGA-da loyihani takrorlashga qaror qildim, shu bilan birga ikki hafta oxiri ichida belgilangan muddatlarni bajarib, parametrlarni aniq belgilanmagan, lekin mumkin bo'lgan maksimal darajaga erishdim. Bundan nima chiqqanini kesish ostida bilib olishingiz mumkin.

Nolinchi kun

Dam olish kunlari kelishidan oldin, men amalga oshirish haqida o'ylash uchun biroz vaqtim bor edi. Vazifamni soddalashtirish uchun men generatorni tugmalar va LCD displeyli alohida qurilma sifatida emas, balki USB orqali kompyuterga ulanadigan qurilma sifatida qilishga qaror qildim. Buning uchun menda USB2RS232 plata bor. Kengash haydovchilarni (CDC) talab qilmaydi, shuning uchun u Linux ostida ishlaydi deb o'ylayman (ba'zilar uchun bu muhim). Bundan tashqari, men allaqachon RS232 orqali xabarlarni qabul qilish bilan ishlaganimni yashirmayman. Men opencores.com saytidan RS232 bilan ishlash uchun tayyor modullarni olaman.

Sinus to'lqin signalini yaratish uchun sizga DAC kerak bo'ladi. Asl loyihada bo'lgani kabi DAC turini tanladim - R2R 8-bit. Bu sizga yuqori chastotalarda, megaherts tartibida ishlash imkonini beradi. Ishonchim komilki, FPGA buni engishi kerak

Men COM porti orqali ma'lumotlarni uzatish uchun dasturni qanday yozish haqida o'ylardim. Bir tomondan, siz Delphi7 da yozishingiz mumkin, sizda bunday dasturni yozish tajribangiz bor va bundan tashqari, bajariladigan fayl hajmi katta bo'lmaydi. Men HTML-sahifada java skripti ko'rinishida Serial bilan ishlash uchun biror narsani chizishga harakat qildim, lekin u ko'proq yoki kamroq faqat Chrome serial API orqali ishladi, lekin buning uchun plaginni o'rnatishingiz kerak ... umuman , bu ham gap emas. Men PyQt5-ni o'zim uchun yangilik sifatida sinab ko'rdim, lekin bunday loyihani tarqatishda siz bir nechta kutubxonalarni sudrab olishingiz kerak. PyQt loyihasini exe fayliga kompilyatsiya qilishga urinib ko'rganimizdan so'ng, u 10 MB dan ortiq bo'lib chiqdi. Ya'ni, u C++\Qt5 da yozilgan dasturdan yaxshiroq bo'lmaydi. Shuni ham hisobga olish kerakki, menda python-da rivojlanish bo'yicha tajribam yo'q, lekin Qt5da tajribam bor. Shuning uchun tanlov Qt5 ga to'g'ri keldi. Beshinchi versiyadan boshlab serial bilan ishlash moduli paydo bo'ldi va men u bilan allaqachon ishlaganman. Qt5-ga asoslangan dasturni Linux va Mac-ga o'tkazish mumkin (ba'zilar uchun bu muhim) va 5.2 versiyasidan QWidgetlarga asoslangan ilovalar hatto smartfonga ham o'tkazilishi mumkin!

Yana nima kerak? Tabiiyki, platada FPGA mavjud. Menda ulardan ikkitasi bor (10 ming hujayra uchun Cyclone iv EP4CE10E22C8N va 5 ming hujayra uchun Cyclone ii EP2C5). Men faqat qulayroq ulagich tufayli chap tomonni tanlayman. Hajmi bo'yicha loyiha katta bo'lishni maqsad qilgan emas, shuning uchun u ikkalasiga ham mos keladi. Ular tezlikda farq qilmaydi. Ikkala platada ham bortda 50 MGts chastotali osilatorlar mavjud va FPGA ichida PLL mavjud, uning yordamida chastotani rejalashtirilgan 200 MGts ga oshirishim mumkin.

Birinchi kun

Sintezator loyihamda allaqachon DDS modulini yasaganim sababli, men darhol lehim temirini oldim va DACni rezistorlar bilan lehimlashni boshladim. Men prototip taxtasini oldim. O'rnatish yordamida amalga oshirildi. Texnologiyaga ta'sir qilgan yagona o'zgarish shundaki, men F38N kislotasidan voz kechib, TT ​​indikatorli oqim jeli foydasiga stendlarni qalay qildim. Texnologiyaning mohiyati oddiy: men tokchalarni bosilgan elektron plataga lehimlayman va bosilgan elektron plata tomonidan ularga rezistorlarni lehimlayman. Men etishmayotgan ulanishlarni burish orqali qilaman. Bundan tashqari, tokchalar qulay, chunki men ularni to'g'ridan-to'g'ri FPGA platasiga joylashtira olaman.

Afsuski, uyda 1 va 2 kilo-ohm rezistorlar mavjud emas edi. Do'konga borishga vaqt yo'q edi. Men qoidalarimdan biridan voz kechishim va eski keraksiz taxtadan rezistorlarni olib tashlashim kerak edi. U erda 15K va 30K rezistorlar ishlatilgan. Natijada bu Frankenshteyn:


Loyihani yaratgandan so'ng, siz maqsadli qurilmani o'rnatishingiz kerak: Menyu Assigments -> Device


Loyihada men boshqarilmaydigan asosiy DDS modulini belgilangan chastotaga kodladim.

1000 Hz generator moduli

modul signal_generator (clk50M, signal_out); kirish simi clk50M; sim chiqishi signal_out; tel clk200M; osc osc_200M reg akkumulyatori; signal_out = akkumulyatorni belgilash; //1000 Gts ni yaratishga harakat qiling //50 000 000 Gts - tashqi generatorning takt chastotasi //2^32 = 4,294,967,296 - DDS bit chuqurligi - 32 bit //1000Hz / 50,000,000 Gts ni ajrating / 29,000,000 Gts / har doim 2924, @729 = (posedge clk50M) akkumulyatorni ishga tushiring<= accumulator + 32"d42949; end endmodule


Shundan so‘ng, men “Kompilyatsiyani boshlash” tugmasini bosdim, shunda ishlab chiqish muhiti loyihaning asosiy modulida qanday kiritish/chiqish liniyalari borligi va ular qanday jismoniy PIN-kodlarga ulanganligini so‘raydi.Siz deyarli hamma bilan bog‘lanishingiz mumkin.Kompilyatsiyadan so‘ng, biz FPGA chipining haqiqiy PIN-kodlariga ko'rinadigan qatorlarni belgilang:

Menyu elementi Assigments -> Pin Planner

Iltimos, hozircha HS_OUT, key0 va key1 qatorlariga e'tibor bermang, ular loyihada keyinroq paydo bo'ladi, lekin boshida skrinshot olishga vaqtim yo'q edi.

Aslida, "Joylashuv" ustunida faqat PIN_nn-ni "ro'yxatdan o'tkazish" kifoya qiladi va qolgan parametrlar (I/U standarti, Current Strench va Slew Rate) sukut bo'yicha qoldirilishi mumkin yoki siz tomonidan taklif qilinganlarni tanlashingiz mumkin. hech qanday ogohlantirish bo'lmasligi uchun standart (standart) "ov.

Qaysi PIN-kod platadagi ulagich raqamiga mos kelishini qanday aniqlash mumkin?

Ulagichning pin raqamlari taxtada belgilangan


Va ulagich kontaktlari ulangan FPGA pinlari FPGA platasi bilan birga kelgan hujjatlarda tasvirlangan.




Pinlar tayinlangandan so'ng, men loyihani qayta kompilyatsiya qilaman va uni USB dasturchisi yordamida o'chirib qo'yaman. Agar sizda USB Byte blaster dasturchisi uchun drayverlar o'rnatilmagan bo'lsa, Windows-ga ular Quartus o'rnatilgan papkada joylashganligini ayting. Keyin uni o'zi topadi.

Dasturchi JTAG ulagichiga ulangan bo'lishi kerak. Va dasturlash uchun menyu elementi "Asboblar -> Dasturchi" (yoki asboblar panelidagi belgini bosing). "Ishga tushirish" tugmasi, quvonchli "Muvaffaqiyat" va proshivka allaqachon FPGA ichida va allaqachon ishlamoqda. Faqat FPGA-ni o'chirmang, aks holda u hamma narsani unutadi.

Asboblar -> Dasturchi


DAC FPGA plata ulagichiga ulangan. Men S1-112A osiloskopini DAC chiqishiga ulayman. Natijada "arra" bo'lishi kerak, chunki fazali akkumulyatorning DDS so'zining yuqori tartibli qismi 8 bitli chiqishga chiqariladi. Va u har doim to'lib toshib ketguncha ortadi.

Taxminan 1,5 soat va 1000 Gts chastotada men quyidagi oscillogrammani ko'raman:

Shuni ta'kidlashni istardimki, "arra" o'rtada kichik singan. Buning sababi rezistorlarning bir qator qiymatlarga ega bo'lishidir.

Aniqlanishi kerak bo'lgan yana bir muhim nuqta - bu DDS generatorining maksimal mumkin bo'lgan chastotasi. To'g'ri sozlangan TimeQuest parametrlari bilan "Tuzlama hisoboti" da kompilyatsiya qilingandan so'ng, kontaktlarning zanglashiga olib keladigan tezligi 200 MGts dan yuqori ekanligini ko'rishingiz mumkin. Bu PLL yordamida 50 MGts generator chastotasini 4 ga ko'paytiraman degan ma'noni anglatadi.DDS fazali akkumulyatorning qiymatini 200 MGts chastota bilan oshiraman. Bizning sharoitimizda olinishi mumkin bo'lgan oxirgi chastota diapazoni 0 - 100 MGts. Chastotani sozlash aniqligi:

200 000 000 Gts (clk) / 2^32 (DDS) = 0,047 Gts
Ya'ni, ~0,05 Gts dan yaxshiroqdir. Men bunday ish chastotalari diapazoni (0 ... 100 MGts) bo'lgan generator uchun hertsning bir qismining aniqligini etarli deb hisoblayman. Agar kimdir aniqlikni oshirishi kerak bo'lsa, buning uchun ular DDS bit chuqurligini oshirishi mumkin (TimeQuest Timing Analyzer-da mantiqiy sxemaning ishlash tezligi CLK = 200 MGts oralig'ida ekanligini tekshirishni unutmang, chunki bu toplayıcı) yoki oddiygina. agar bunday keng chastota diapazoni talab qilinmasa, soat chastotasini kamaytiring.

TimeQuest vaqt tahlilchisi


Ekranda "ko'rdim" ni ko'rganimdan so'ng, oilaviy muammolar meni mamlakatga borishga majbur qildi (bu mening dam olish kunim edi). U erda men o'rgandim, pishirdim, mangal pishirdim va kechqurun meni kutayotgan syurpriz haqida hech qanday tasavvurga ega emasdim. Kechga yaqinroq, yotishdan oldin, men boshqa chastotalar uchun signal shakliga qarashga qaror qildim.

100 kHz chastota uchun

250 kHz chastota uchun

500 kHz chastota uchun

1 MGts chastota uchun

Ikkinchi kun

DAC 100 va 200 Ohm rezistorlarda qanday ishlashi qiziq bo'lganligi sababli, men darhol lehim temirini oldim. Bu safar DAC aniqroq bo'lib chiqdi va uni o'rnatish uchun kamroq vaqt kerak bo'ldi.

Biz DACni FPGA platasiga joylashtiramiz va uni osiloskopga ulaymiz

1 MGts tekshirilmoqda - VO! Bu butunlay boshqa masala!

10 MGts ni ko'rdim

25 MGts ni ko'rgan


10 MGts arra shakli hali ham to'g'ri shaklga o'xshaydi. Ammo 25 MGts chastotada u endi "chiroyli" emas. Biroq, C1-112a 10 MGts tarmoqli kengligiga ega, shuning uchun bu holda sabab allaqachon osiloskopda bo'lishi mumkin.

Asosan, DAC bilan bu masalani yopiq deb hisoblash mumkin. Endi yuqori tezlikdagi chiqishning to'lqin shakllarini olaylik. Buning uchun biz FPGA ning alohida PIN-kodiga eng muhim bitni chiqaramiz. Biz ushbu qator uchun ma'lumotlarni DDS akkumulyatorining eng muhim bitidan olamiz.

hs_out = akkumulyatorni belgilang;

Kvadrat to'lqin 1 MGts

Kvadrat to'lqin 5 MGts

Kvadrat to'lqin 25 MGts

50 MGts kvadrat to'lqin hozir deyarli ko'rinmas


Lekin menimcha, FPGA chiqishi qarshilik bilan yuklanishi kerak. Ehtimol, jabhalar tikroq bo'lar edi.

Sinus jadvalga muvofiq amalga oshiriladi. Jadval hajmi 8 bitning 256 qiymatidan iborat. Ko'proq olish mumkin edi, lekin menda allaqachon tayyor mif fayli bor edi. Sehrgardan foydalanib, mif faylidan sinus jadval ma'lumotlari bilan ROM elementini yaratamiz.

ROM yaratish - Asboblar -> Mega Wizard Plugin menejeri


1 port ROMni tanlang va modulga nom bering

Biz rozimiz

Bu erda biz ham rozi bo'lamiz

Browse-dan foydalanib, biz sinus jadvali bilan mif faylimizni topamiz

Biz bu erda ham hech narsani o'zgartirmaymiz.

Sine_rom_bb.v modulidan belgini olib tashlang - bu kerak emas. Keyingi tugatish. Quartus sizdan loyihaga modul qo'shishingizni so'raydi - biz rozimiz. Shundan so'ng, modul Verilog'dagi boshqa har qanday modul kabi ishlatilishi mumkin.


DDS akkumulyator so'zining yuqori 8 biti ROM manzili sifatida ishlatiladi va ma'lumotlar chiqishi sinus qiymati bo'ladi.

Kod

//sine rom sim sine_out; sine_rom sine1(.clock(clk200M), .manzil(akkumulyator), .q(sine_out));


Turli chastotalardagi sinus to'lqinining oscillogrammasi ... bir xil ko'rinadi.

Agar xohlasangiz, rezistor tarqalishi bilan bog'liq DAC muammolarini ko'rib chiqishingiz mumkin:

Xo'sh, dam olish kunlarining oxiri. Ammo kompyuterdan boshqarish uchun dasturiy ta'minot hali yozilmagan. Men rejalashtirilgan muddatlarni bajarmaganimni tan olishga majburman.

Uchinchi kun

Vaqt juda oz, shuning uchun dasturni shoshqaloqlik bilan yozamiz (eng yaxshi an'analarda). Ba'zi joylarda harflar sonini kamaytirish va klaviaturadan ma'lumotlarni kiritish qulayligi uchun vidjet nomi bilan hodisa filtri qo'llaniladi. Iltimos, tushuning va kechiring.

Interfeys

Analoglar bilan havolalar

To'liq ro'yxat emas
Funktsional DDS generatori. AVR asosida yaratilgan. Chastotalar 0… 65534 Hz.
GK101 DDS generatorini ko'rib chiqish. Altera MAX240 FPGA yordamida yaratilgan. 10 MGts gacha bo'lgan chastotalar.
PIC16F870 da ko'p funksiyali generator. Chastota diapazoni: 11 Hz - 60 kHz.
generatorlar
  • Qt5
  • Teglar qo'shing

    Ajam radio havaskorining laboratoriyasi uchun oddiy funktsional generatorni yig'amiz

    Xayrli kun, aziz radio havaskorlari! "" veb-saytiga xush kelibsiz

    Biz signal generatorini - funktsiya generatorini yig'amiz. 3-qism.

    Xayrli kun, aziz radio havaskorlari! Bugungi darsda Radio havaskorlar maktabining boshlanishi yig'ishni tugatamiz funktsiya generatori. Bugun biz bosilgan elektron platani yig'amiz, barcha biriktirilgan qismlarni lehimlaymiz, generatorning funksionalligini tekshiramiz va uni maxsus dastur yordamida sozlaymiz.

    Shunday qilib, men sizga ikkinchi darsda ko'rib chiqqan dasturda tayyorlangan bosma plataning yakuniy versiyasini taqdim etaman - Sprint tartibi:

    Agar siz taxtaning o'z versiyasini yarata olmasangiz (nimadir ish bermadi yoki siz afsuski, dangasa bo'ldingiz), unda siz mening "asarim" dan foydalanishingiz mumkin. Doskaning o'lchami 9x5,5 sm va ikkita jumper (ikkita ko'k chiziq) mavjud. Bu yerda siz doskaning ushbu versiyasini Sprint Layout formatida yuklab olishingiz mumkin^

    (63,6 Kb, 3 488 marta ko‘rilgan)

    Lazerli dazmollash texnologiyasidan foydalangandan so'ng, natijada quyidagi ish qismi paydo bo'ldi:

    Ushbu taxtadagi yo'llar 0,8 mm kengligida, deyarli barcha yostiqlar diametri 1,5 mm va deyarli barcha teshiklar 0,7 mm matkap bilan amalga oshiriladi. O'ylaymanki, ushbu taxtani tushunish siz uchun unchalik qiyin bo'lmaydi, shuningdek, ishlatilgan qismlarga (ayniqsa, trimmerlarga) qarab, o'zingizning o'zgartirishlaringizni kiriting. Men darhol aytmoqchimanki, bu taxta sinovdan o'tgan va agar qismlar to'g'ri lehimlangan bo'lsa, sxema darhol ishlay boshlaydi.

    Kengashning funksionalligi va go'zalligi haqida bir oz. Zavodda ishlab chiqarilgan taxtani olganingizda, uning qismlarni lehimlash uchun qanchalik qulay tayyorlanganligini payqadingiz - "ipak ekranli bosma" oq rangda yuqori va pastki qismida qo'llaniladi, unda qismlarning nomlari va ularning joylari darhol ko'rinadi, bu radioelementlarni lehimlashda hayotni juda osonlashtiradi. Radio elementining o'rindig'ini ko'rib, uni qaysi teshiklarga kiritish kerakligi haqida hech qachon xato qilmaysiz, faqat diagrammaga qarashingiz, kerakli qismni tanlashingiz, uni joylashtirishingiz va lehimlashingiz kerak. Shuning uchun, bugun biz zavodga yaqin taxtani qilamiz, ya'ni. Keling, qismlar tomonidan qatlamga ipak ekranli nashrni qo'llaymiz. Bitta narsa shundaki, bu "ipak ekranli bosma" qora rangda bo'ladi. Jarayon juda oddiy. Agar, masalan, biz Sprint Layout dasturidan foydalansak, u holda chop etishda biz K1 qatlamini (qismlar tomonidagi qatlam) tanlaymiz, uni taxtaning o'zi kabi chop etamiz (lekin faqat oyna tasvirida), uning yon tomoniga bosma qo'ying. plyonka bo'lmagan taxta (qismlarning yon tomonlari bilan), uni markazga qo'ying (va naqsh chizilgan taxtaning yorug'ligida juda ko'rinadi) va LUT usuli yordamida biz tonerni tenglikni o'tkazamiz. Jarayon tonerni misga o'tkazish bilan bir xil va biz natijaga qoyil qolamiz:

    Teshiklarni burg'ulashdan so'ng, aslida taxtadagi qismlarning tartibini ko'rasiz. Va eng muhimi, bu faqat taxtaning go'zalligi uchun emas (garchi yuqorida aytganimdek, chiroyli taxta siz yig'gan sxemaning yaxshi va uzoq muddatli ishlashining kalitidir), lekin eng muhimi, sxemaning keyingi lehimlanishini osonlashtirish uchun. "Ipak ekranli chop etish" ni qo'llash uchun sarflangan o'n daqiqa, sxemani yig'ishda o'z vaqtida sezilarli darajada to'lanadi. Ba'zi radio havaskorlar taxtani lehimlash uchun tayyorlab, bunday "ipak ekranli chop etish" ni qo'llashdan so'ng, uning qismlari tomonidagi qatlamni lak bilan qoplaydi va shu bilan "ipak ekranli bosma" ni o'chirishdan himoya qiladi. Shuni ta'kidlashni istardimki, PCBdagi toner juda yaxshi yopishadi va qismlarni lehimlagandan so'ng, qolgan rozinni taxtadan erituvchi bilan olib tashlashingiz kerak bo'ladi. Agar erituvchi lak bilan qoplangan "ipak ekranli bosma" ga tushsa, bu oq qoplamaning paydo bo'lishiga olib keladi, olib tashlanganida "ipak ekranli bosma" o'zi chiqib ketadi (bu fotosuratda aniq ko'rinadi, bu aniq men nima qildim), shuning uchun lakni ishlatish shart emas deb o'ylayman. Aytgancha, barcha yozuvlar va qismlarning konturlari 0,2 mm qalinlikdagi chiziq bilan qilingan va siz ko'rib turganingizdek, bularning barchasi tekstolitga mukammal tarzda o'tkaziladi.

    Va mening doskam shunday ko'rinadi (jumperlar va qo'shimchalarsiz):

    Agar men uni laklamaganimda, bu taxta ancha yaxshi ko'rinardi. Lekin siz, har doimgidek, tajriba qilishingiz va, albatta, yaxshiroq qilishingiz mumkin. Bundan tashqari, menda ikkita C4 kondansatkichlari bortga o'rnatilgan; Menda kerakli qiymat (0,22 mF) yo'q edi, shuning uchun men ularni parallel ravishda bog'laydigan ikkita 0,1 mF kondansatör bilan almashtirdim.

    Davom etaylik. Barcha qismlarni taxtaga lehimlab bo'lganimizdan so'ng, biz ikkita jumper va lehim rezistorlarini R7 va R10 lehimlaymiz va o'rnatish simlarining bo'limlari yordamida S2 o'zgartiramiz. Biz hali S1 kalitini lehim qilmayapmiz, lekin ICL8038 mikrosxemasining 10-chi pinlarini va C3 kondansatkichini (ya'ni, biz 0,7 - 7 kHz diapazonni ulaymiz) (ya'ni, biz yig'ilgan deb umid qilaman) laboratoriya quvvatimizdan quvvatni ta'minlovchi simdan o'tish moslamasini yasaymiz. mikrosxema stabilizatorlarining kirishlariga taxminan 15 voltli doimiy kuchlanishni etkazib berish

    Endi biz generatorimizni sinab ko'rishga va sozlashga tayyormiz. Jeneratorning ishlashini qanday tekshirish mumkin. Juda oddiy. Biz X1 chiqishlariga (1:1) va "umumiy" har qanday oddiy yoki piezokeramik dinamikni (masalan, budilnikdagi xitoylik soatdan) lehimlaymiz. Quvvat ulanganda, biz signal eshitamiz. R10 qarshiligini o'zgartirganda, biz chiqish signalining ohangi qanday o'zgarishini eshitamiz va R7 qarshiligini o'zgartirganda, signalning hajmi qanday o'zgarishini eshitamiz. Agar sizda bu yo'q bo'lsa, unda yagona sabab - radio elementlarning noto'g'ri lehimlanishi. Sxemadan yana o'tishni unutmang, kamchiliklarni bartaraf qiling va hamma narsa yaxshi bo'ladi!

    Biz generator ishlab chiqarishning ushbu bosqichidan o'tdik deb taxmin qilamiz. Agar biror narsa ishlamasa yoki ishlamasa, lekin to'g'ri bo'lmasa, sharhlarda yoki forumda savollaringizni berishni unutmang. Har qanday muammoni birgalikda hal qilamiz.

    Davom etaylik. Kengash o'rnatishga tayyor ko'rinadi:

    Ushbu rasmda biz nimani ko'rmoqdamiz. Elektr ta'minoti - qora "timsoh" umumiy simga, qizil "timsoh" stabilizatorning ijobiy kirishiga, sariq "timsoh" - salbiy kuchlanish stabilizatorining salbiy kirishiga. Lehimli o'zgaruvchan qarshilik R7 va R10, shuningdek S2 kaliti. Laboratoriyamizning elektr ta'minotidan (bu erda bipolyar quvvat manbai yordam beradi) biz kontaktlarning zanglashiga olib, taxminan 15-16 volt kuchlanish bilan ta'minlaymiz, shunda 12 voltli mikrosxema stabilizatorlari normal ishlaydi.

    Stabilizatorlarning kirishlariga (15-16 volt) quvvatni ulab, stabilizatorlarning chiqishlarida (±12 volt) kuchlanishni tekshirish uchun sinov qurilmasidan foydalaning. Amaldagi kuchlanish stabilizatorlariga qarab, kuchlanish ± 12 voltdan farq qiladi, lekin unga yaqin. Agar stabilizatorlarning chiqishidagi kuchlanishlaringiz bema'ni bo'lsa (kerakli narsaga mos kelmasa), unda faqat bitta sabab bor - tuproq bilan yomon aloqa. Eng qizig'i shundaki, hatto "tuproq" bilan ishonchli aloqaning yo'qligi ham generatorning dinamikda ishlashiga to'sqinlik qilmaydi.

    Xo'sh, endi biz generatorimizni sozlashimiz kerak. Biz maxsus dastur yordamida sozlashni amalga oshiramiz - virtual osiloskop. Internetda siz kompyuter ekranida osiloskopning ishlashini taqlid qiluvchi ko'plab dasturlarni topishingiz mumkin. Ayniqsa, ushbu dars uchun men shunga o'xshash ko'plab dasturlarni tekshirdim va menimcha, osiloskopni eng yaxshi taqlid qiladigan birini tanladim - Virtins multi-instrument. Ushbu dastur bir nechta kichik dasturlarni o'z ichiga oladi - osiloskop, chastota o'lchagich, spektr analizatori, generator va qo'shimcha ravishda ruscha interfeys mavjud:

    Bu yerda siz ushbu dasturni yuklab olishingiz mumkin:

    (41,7 MiB, 5238 marta koʻrilgan)

    Dasturdan foydalanish oson va bizning generatorimizni sozlash uchun uning funktsiyalari haqida minimal ma'lumot kerak:

    Jeneratorimizni sozlash uchun biz kompyuterga ovoz kartasi orqali ulanishimiz kerak. Siz chiziqli kirish orqali (hamma kompyuterlarda mavjud emas) yoki mikrofon ulagichiga (barcha kompyuterlarda mavjud) ulanishingiz mumkin. Buning uchun telefon yoki boshqa qurilmadan diametri 3,5 mm bo'lgan vilka bilan eski, keraksiz minigarnituralarni olib, ularni qismlarga ajratishimiz kerak. Demontajdan so'ng, fotosuratda ko'rsatilganidek, ikkita simni vilkaga ulang:

    Shundan so'ng, oq simni erga va qizil simni X2 piniga (1:10) lehimlang. Biz R7 signal darajasini boshqarishni minimal holatga o'rnatdik (ovoz kartasini yoqmasligingizga ishonch hosil qiling) va vilkasini kompyuterga ulang. Biz dasturni ishga tushiramiz va ishchi oynada ikkita ishlaydigan dasturni ko'ramiz - osiloskop va spektr analizatori. Spektr analizatorini o'chiring, yuqori panelda "multimetr" ni tanlang va uni ishga tushiring. Signalimizning chastotasini ko'rsatadigan oyna paydo bo'ladi. R10 rezistoridan foydalanib, biz chastotani taxminan 1 kHz ga o'rnatamiz, S2 kalitini "1" (sinusoidal signal) holatiga o'rnatamiz. Va keyin, R2, R4 va R5 kesish rezistorlaridan foydalanib, biz generatorimizni sozlaymiz. Birinchidan, R5 va R4 rezistorlari bilan sinusoidal signalning shakli, ekranda sinus to'lqin shakliga erishiladi, so'ngra S2 ni "3" (to'rtburchaklar signal) holatiga o'tkazamiz, R2 rezistoridan foydalanib, biz signal simmetriyasiga erishamiz. Ushbu qisqa videoda aslida qanday ko'rinishini ko'rishingiz mumkin:

    Bosqichlarni bajarib, generatorni o'rnatgandan so'ng, biz unga S1 kalitini lehimlaymiz (jumperni olib tashlaganimizdan keyin) va butun tuzilmani tayyor yoki uy qurilishi qutisiga yig'amiz (elektr ta'minotini yig'ish bo'yicha darsga qarang).

    Aytaylik, biz hamma narsani muvaffaqiyatli hal qildik va havaskor radio uskunamizda yangi qurilma paydo bo'ldi - funktsiya generatori . Biz uni hali chastota o'lchagich bilan jihozlamaymiz (tegishli sxema yo'q), lekin dastur yordamida kerakli chastotani o'rnatishimiz mumkinligini hisobga olsak, uni ushbu shaklda ishlatamiz. Virtins multi-instrument. Biz mikrokontrollerda generator uchun chastota o'lchagichni "Mikrokontrollerlar" bo'limida yig'amiz.

    Bizning havaskor radio qurilmalarini bilish va amaliy tatbiq etishdagi keyingi bosqichimiz LEDlar yordamida yorug'lik va musiqa moslamasini yig'ish bo'ladi.

    Ushbu dizaynni takrorlashda, to'rtburchaklar pulslarning to'g'ri shakliga erishish mumkin bo'lmagan holatlar mavjud edi. Nima uchun bunday muammo paydo bo'lganini aytish qiyin, ehtimol chipning ishlash usuli tufayli. Muammoni hal qilish juda oson. Buning uchun quyidagi diagrammaga muvofiq K561(KR1561)TL1 chipida Schmitt triggeridan foydalanishingiz kerak. Ushbu sxema har qanday shakldagi kuchlanishni juda yaxshi shaklga ega to'rtburchaklar impulslarga aylantirish imkonini beradi. Sxema C6 kondansatkichi o'rniga mikrosxemaning 9-pinidan keladigan o'tkazgichdagi bo'shliqqa ulangan.

    Signallarning ushbu DDS funktsiyasi generatori (versiya 2.0) AVR mikrokontrollerida yig'ilgan, yaxshi funksionallikka ega, amplitudani boshqarishga ega, shuningdek, bir tomonlama bosilgan elektron platada yig'ilgan.

    Ushbu generator Jesper DDS generator algoritmiga asoslangan bo'lib, dastur AVR-GCC C uchun montaj kodlari qo'shimchalari bilan modernizatsiya qilingan. Jeneratör ikkita chiqish signaliga ega: birinchisi DDS signallari, ikkinchisi yuqori tezlikda (1..8 MGts) "to'rtburchaklar" chiqishi bo'lib, u noto'g'ri fuzzlar bilan MKni qayta tiklash va boshqa maqsadlarda ishlatilishi mumkin.
    Yuqori tezlikdagi HS (High Speed) signali to'g'ridan-to'g'ri Atmega16 OC1A (PD5) mikrokontrolleridan olinadi.
    DDS signallari boshqa MC chiqishlaridan rezistiv R2R matritsasi va LM358N chipi orqali ishlab chiqariladi, bu signal amplitudasi va ofsetini sozlash imkonini beradi. Ofset va amplituda ikki potansiyometr yordamida o'rnatiladi. Ofsetni +5V..-5V oralig'ida sozlash mumkin, amplituda esa 0...10V. DDS signallarining chastotasi 0... 65534 Gts oralig'ida sozlanishi mumkin, bu audio davrlarini va boshqa havaskor radio vazifalarini sinab ko'rish uchun etarli.

    DDS generator V2.0 ning asosiy xususiyatlari:
    - umumiy va arzon radioelementli oddiy sxema;
    - bir tomonlama bosilgan elektron plata;
    - o'rnatilgan elektr ta'minoti;
    - 8 MGts gacha bo'lgan alohida yuqori tezlikli chiqish (HS);
    - o'zgaruvchan amplitudali va ofsetli DDS signallari;
    - DDS signallari: sinus, to'rtburchak, arra va teskari arra, uchburchak, EKG signali va shovqin signali;
    - 2×16 LCD displey;
    - intuitiv 5 tugmali klaviatura;
    - chastotani sozlash bosqichlari: 1, 10, 100, 1000, 10000 Hz;
    - quvvat yoqilgandan keyin oxirgi holatni eslash.

    Quyidagi blok diagrammada funktsiya generatorining mantiqiy tuzilishi ko'rsatilgan:

    Ko'rib turganingizdek, qurilma bir nechta besleme kuchlanishini talab qiladi: +5V, -12V, +12V. Signal amplitudasi va ofsetini tartibga solish uchun +12V va -12V kuchlanish ishlatiladi. Elektr ta'minoti transformator va bir nechta kuchlanish stabilizator chiplari yordamida ishlab chiqilgan:

    Elektr ta'minoti alohida taxtada yig'iladi:

    Elektr ta'minotini o'zingiz yig'ishni istamasangiz, barcha kerakli kuchlanishlar allaqachon mavjud bo'lgan kompyuterdan muntazam ATX quvvat manbaidan foydalanishingiz mumkin. ATX ulagichining joylashuvi.

    LCD displey

    Barcha harakatlar LCD displey orqali ko'rsatiladi. Jeneratör beshta tugma bilan boshqariladi

    Yuqori/past tugmalari menyu bo'ylab harakatlanish uchun ishlatiladi, chap/o'ng tugmalar chastota qiymatini o'zgartirish uchun ishlatiladi. Markaziy tugma bosilganda tanlangan signal hosil bo'la boshlaydi. Tugmachani yana bosish generatorni to'xtatadi.

    Chastotani o'zgartirish bosqichini o'rnatish uchun alohida qiymat beriladi. Agar siz chastotani keng diapazonda o'zgartirishingiz kerak bo'lsa, bu qulay.

    Shovqin generatorida hech qanday sozlamalar yo'q. U DDS generatorining chiqishiga doimiy ravishda oziqlanadigan odatiy rand() funksiyasidan foydalanadi.

    HS yuqori tezlikda chiqishi 4 chastota rejimiga ega: 1, 2, 4 va 8 MGts.

    Sxematik diagramma

    Funktsiya generatorining sxemasi oddiy va oson kirish mumkin bo'lgan elementlarni o'z ichiga oladi:
    - AVR Atmega16 mikrokontrolleri, tashqi kvartsli 16 MGts;
    - standart HD44780 tipidagi LCD displey 2×16;
    - oddiy rezistorlardan tayyorlangan R2R DAC matritsasi;
    - operatsion kuchaytirgich LM358N (KR1040UD1 ning mahalliy analogi);
    - ikkita potansiyometr;
    - beshta kalit;
    - bir nechta ulagichlar.

    To'lash:

    Funktsional generator plastik qutiga yig'iladi:


    Dasturiy ta'minot

    Yuqorida aytganimdek, men dasturimni Jesper DDS generator algoritmiga asosladim. Men avlodni to'xtatishni amalga oshirish uchun bir necha qator montaj kodini qo'shdim. Endi algoritm 9 ta o'rniga 10 ta protsessor tsiklini o'z ichiga oladi.

    bekor statik inline Signal_OUT(const uint8_t *signal, uint8_t ad2, uint8_t ad1, uint8_t ad0)(
    asm volatile("eor r18, r18 ;r18<-0″ "\n\t"
    "eor r19, r19 ;r19<-0″ "\n\t"
    "1:" "\n\t"
    "r18 qo'shing, %0 ;1 sikl" "\n\t"
    "adc r19, %1 ;1 sikl" "\n\t"
    "adc %A3, %2 ;1 sikl" "\n\t"
    "lpm ;3 sikl" "\n\t"
    "out %4, __tmp_reg__ ;1 sikl" "\n\t"
    "sbis %5, 2 ; agar o'tkazib yuborilmasa, 1 tsikl" "\n\t"
    "rjmp 1b ;2 sikl. Jami 10 tsikl" "\n\t"
    :
    :"r" (ad0),,"r" (ad1),,"r" (ad2),,"e" (signal),,"I" (_SFR_IO_ADDR(PORTA)), "I" (_SFR_IO_ADDR(SPCR) ))
    :"r18", "r19"
    );}

    DDS signal shakllari jadvali MK ning flesh-xotirasida joylashgan bo'lib, uning manzili 0xXX00 dan boshlanadi. Ushbu bo'limlar makefile faylida, tegishli xotira joylarida aniqlanadi:
    #Signal jadvallarini saqlash uchun bo'limlarni belgilang
    LDFLAGS += -Wl,-section-start=.MySection1=0x3A00
    LDFLAGS += -Wl,-section-start=.MySection2=0x3B00
    LDFLAGS += -Wl,-section-start=.MySection3=0x3C00
    LDFLAGS += -Wl,-section-start=.MySection4=0x3D00
    LDFLAGS += -Wl,-section-start=.MySection5=0x3E00
    LDFLAGS += -Wl,-section-start=.MySection6=0x3F00

    Bugun biz DDS generatorining dizaynerini ko'rib chiqamiz (To'g'ridan-to'g'ri raqamli sintezatorlar, to'g'ridan-to'g'ri raqamli sintez - oldindan belgilangan funktsiya yoki qiymatlar jadvali yordamida DAC chiqishidan to'g'ridan-to'g'ri signal olish usuli). Xitoy do'konidan. Ko'p texnik hujjatlarni qazib olishning iloji bo'lmadi. Maqolaning pastki qismida asl tavsifi bo'lgan fayl mavjud.

    Ishlab chiqaruvchining xususiyatlari:

    • oddiy diagramma;
    • 8 MGts gacha chastotali chiqish;
    • sintezator chiqishida sozlanishi amplituda va doimiy komponent;
    • sintezlangan shakllar: sinus, uchburchak, oldinga va teskari arra, EKG, shovqin;
    • displeydagi menyu 16x2;
    • 5 tugmali oddiy klaviatura;
    • chastotani sozlash bosqichi 1Hz - 10kHz
    • so'nggi sozlamalarni saqlash o'zgaruvchan emas;
    • sintezator chastota diapazoni 1Hz - 65535Hz;
    • doimiy komponent -5V..+5V;
    • amplitudasi 10 V gacha.

    Dizayner ushbu paketda keldi

    Mana, ichida nima bor

    Hech qanday ko'rsatmalar yo'q edi, lekin va'da qilinganidek, hamma narsa intuitiv edi. Ko'rib turganingizdek, doskadagi hamma narsa darhol nominallar bilan imzolanadi. Aytgancha, taxta juda yaxshi tayyorlangan.

    Yig'ishni boshlash mumkin. An'anaga ko'ra, biz birinchi navbatda rezistorlarni o'rnatamiz. Biz ularning qiymatlarini multimetr bilan tekshiramiz yoki halqalarga qarab bilib olamiz. 10k va 20k rezistorlar o'rnatilgan men uchun shunday ko'rinadi:

    Pastdagi pinlar o'rmoni aralashmasligi uchun men hamma narsani birdaniga o'rnatmayman. Barcha rezistorlar shunday o'rnatiladi va lehimlanadi:

    Endi o'zgaruvchan rezistorni o'rnatamiz. Ekran kontrastini sozlash kerak. Shu bilan birga men kvartsni qo'ydim.

    Endi displey moduli uchun ulagichni o'rnatamiz. Bu erda siz 2 nuqtaga e'tibor berishingiz kerak - lehimlashda ulagichni haddan tashqari qizib ketmang (qopqoqni eritib yubormaslik uchun) va uni iloji boricha vertikal ravishda joylashtiring. Men buni shunday oldim.

    Shu bilan birga, biz javob taroqini displey moduliga o'rnatamiz. Oldingi paragrafdagi nuanslar amal qiladi.

    Quvvat ulagichi. Qurilma, biz ko'rib turganimizdek, 3 ta kuchlanishni talab qiladi: +12, -12, +5 (V). Protsessor va displey uchun +5V, chiqish kuchaytirgichi uchun +/-12 kerak.

    ,

    Endi ikkita kesish rezistorlari mavjud. Ehtiyot bo'ling: bir xil korpuslarga qaramay, rezistorlar turli qiymatlarga ega - amplitudani sozlash uchun 50 kOm va doimiy komponentni sozlash uchun 1 kOm.

    Lehimlashdan qolgan narsa mikrosxemalar uchun rozetkalar edi. Qaysi maqsadda ekanligini chalkashtirib yuborish qiyin. Shunga qaramay, men qizib ketishni tavsiya etmayman. Belgilar va rozetkadagi kalitning holatiga e'tibor bering.

    Biz ikkita mikrosxemani rozetkaga joylashtirdik. Ehtiyotkorlik bilan kalitning belgilarga muvofiq joylashtirilganligiga ishonch hosil qiling. Sakkiz oyoqli LM358 ni o'rnatayotganda, kalitning to'g'ri holatini ta'minlashni unutmang; 80% noto'g'ri joylashuv chipning ishdan chiqishiga olib keladi. Mikrokontrollerni o'rnatayotganda, barcha oyoqlarning rozetkaga to'g'ri kelishiga ishonch hosil qiling, agar kerak bo'lsa, simlarni ehtiyotkorlik bilan buking. Shuningdek, displeyni mahkamlash uchun taxtaning o'rta teshiklariga mahkamlagichlarni burab qo'ydim.

    Faqatgina displeyni ulagichga o'rnatish va uni stendlarga burab qo'yish qoladi. Asos sifatida, qurilma yig'ilgan. Mana oxirgi ko'rinish

    Yozuvlarga ko'ra, quvvat berilishi kerak. Siz bir nechta batareyalardan foydalanishingiz mumkin (men shunday qildim) yoki uni kompyuterning quvvat manbaiga ulashingiz mumkin. Quvvat yoqilganda, displeyning orqa nuri yonishi kerak. Tasvir bo'lmasligi mumkin, sababi xafa kontrast.

    Kontrastni sozlash

    Kontrast to'g'ri o'rnatilgan bo'lsa, belgilar displeyda aniq ko'rinishi kerak

    Sinovni boshlaylik. Avvalo, signalni to'g'ri DDS ulagichidan olib tashlaymiz

    Signal shaklini tanlash uchun UP va DOWN tugmalaridan foydalaning, Chap va O'ng chastotani o'zgartiradi va markaziy tugma ishlab chiqarishni yoqadi/o'chiradi.

    Biz darhol 10 kHz dan keyin sinus yo'qligini ko'ramiz. 30 kHz dan keyin amplituda pasayadi. 10 kHz dan past chastotalarda sinus yaxshi, chastota barqaror, qadamlar yo'q.

    Endi biz to'rtburchaklar signalni ko'rib chiqamiz, chastotalar 1, 5, 10 kHz

    Men 10 kHz dan yuqori chastotalarni ham tekshirmayman - menimcha, hamma narsa aniq.

    Endi uchburchak signal, chastotalar 1, 5, 10, 30, 65,5 kHz.