Mündəricat:
- Addım 1: Texniki mülahizələr
- Addım 2: Tələb olunan komponentlər
- Addım 3: Tikinti
- Addım 4: Kod
- Addım 5: İstifadə
Video: Arduino Dalğa Formatı Generatoru: 5 addım (şəkillərlə birlikdə)
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:45
Fevral 2021 yeniləməsi: Raspberry Pi Pico əsasında 300x nümunə alma dərəcəsi ilə yeni versiyaya baxın
Laboratoriyada tez -tez müəyyən bir tezlik, forma və amplitüdün təkrarlanan bir siqnalına ehtiyac duyulur. Gücləndiricini yoxlamaq, bir dövrə, bir komponent və ya bir aktuatoru yoxlamaq ola bilər. Güclü dalğa formalı generatorlar kommersiya olaraq mövcuddur, ancaq Arduino Uno və ya Arduino Nano ilə özünüz üçün faydalı bir istehsal etmək nisbətən asandır, məsələn:
www.instructables.com/id/Arduino-Waveform-…
www.instructables.com/id/10-Resister-Ardui…
Aşağıdakı xüsusiyyətlərə sahib başqa birinin təsviri budur:
* Düzgün dalğa formaları: R2R DAC istifadə edərək 8 bitlik çıxış, 256 nümunə forması
* Sürətli: 381 kHz nümunə götürmə sürəti
* Dəqiq: 1mHz addım tezlik aralığı. Arduino kristal qədər dəqiq.
* Asan əməliyyat: dalğa forması və tezliyi tək fırlanan kodlayıcı ilə tənzimlənir
* Geniş genlik diapazonu: 20V -a qədər millivolt
* 20 əvvəlcədən təyin edilmiş dalğa forması. Daha çox əlavə etmək sadədir.
* Hazırlanması asandır: Arduino Uno və ya Nano plus standart komponentlər
Addım 1: Texniki mülahizələr
Bir analoq siqnalın hazırlanması
Arduino Uno və Nanonun bir çatışmazlığı, rəqəmsal-analoq (DAC) çeviricisinin olmamasıdır, buna görə də birbaşa pinlərdə analoq gərginlik çıxarmasını təmin etmək mümkün deyil. Bir həll R2R nərdivanıdır: 256 çıxış səviyyəsinə çatmaq üçün 8 rəqəmsal pin bir rezistor şəbəkəsinə qoşulur. Arduino, birbaşa liman girişi ilə eyni anda bir əmrlə 8 pin təyin edə bilər. Rezistor şəbəkəsi üçün R dəyəri olan 9 və 2R dəyəri olan 8 rezistora ehtiyac var. R üçün bir dəyər olaraq 10kOhm istifadə etdim, bu da cərəyanı sancaqlardan 0,5mA və ya daha az saxlayır. Düşünürəm ki, R = 1kOhm da işləyə bilər, çünki Arduino pin başına 5mA, liman başına 40mA çatdıra bilər. R və 2R rezistorları arasındakı nisbətin həqiqətən 2 olması vacibdir. Bu, ən çoxu 25 müqavimət olmaqla, R dəyərli 2 rezistoru ardıcıl olaraq qoymaqla əldə edilir.
Faza akkumulyatoru
Dalğa forması yaratmaq, Arduino sancaqlarına 8 bitlik bir sıra ardıcıllıqla göndərməklə nəticələnir. Dalğa forması 256 baytlıq bir massivdə saxlanılır və bu sıra nümunələnir və pinlərə göndərilir. Çıxış siqnalının tezliyi birinin massivdə nə qədər sürətlə irəlilədiyi ilə müəyyən edilir. Bunun üçün möhkəm, dəqiq və zərif bir yol bir faz akkumulyatoru ilədir: 32 bitlik bir rəqəm müntəzəm olaraq artır və biz serialın indeksi olaraq ən əhəmiyyətli 8 bitdən istifadə edirik.
Sürətli nümunə götürmə
Fasilələr yaxşı müəyyən edilmiş vaxtlarda nümunə götürməyə imkan verir, lakin fasilələrin ümumi dəyəri ~ 100kHz-ə qədər seçmə tezliyini məhdudlaşdırır. Mərhələni yeniləmək, dalğa formasını nümunə götürmək və sancaqlar qurmaq üçün sonsuz bir döngə 42 saat dövrə çəkir və beləliklə 16MHz/42 = 381kHz bir nümunə götürmə sürətinə çatır. Döner enkoderi döndərmək və ya itələmək, bir pin dəyişikliyinə və döngədən çıxan bir kəsilməyə səbəb olur (dalğa forması və ya tezlik). Bu mərhələdə, serialdakı 256 ədəd yenidən hesablanır, belə ki, əsas döngədə dalğa formasının faktiki hesablamalarının aparılmasına ehtiyac yoxdur. Yarana bilən mütləq maksimum tezlik 190 kHz -dir (nümunə götürmə sürətinin yarısı), lakin sonra hər dövrdə yalnız iki nümunə var, buna görə də forma çox nəzarət olunmur. İnterfeys 100 kHz -dən yuxarı tezliyi təyin etməyə imkan vermir. 50kHz-də, hər dövrdə 7-8 nümunə var və 1.5 kHz-də və hər birinin altında saxlanılan 256 ədədin hər birində nümunə götürülür. Siqnalın hamar şəkildə dəyişdiyi dalğa formaları üçün, məsələn, sinus dalğası üçün nümunələri atlamaq heç bir problem yaratmır. Ancaq dar tırmanışlı dalğa formaları üçün, məsələn kiçik bir iş dövrü olan bir kvadrat dalğa üçün, 1,5 kHz -dən yuxarı tezliklərdə tək bir nümunənin olmaması dalğa formasının gözlənildiyi kimi davranmaması ilə nəticələnə bilər.
Tezliyin dəqiqliyi
Hər bir nümunədə fazanın artdığı sayı tezliklə mütənasibdir. Tezlik 381kHz/2^32 = 0.089mHz dəqiqliklə təyin edilə bilər. Praktikada belə dəqiqliyə ehtiyac yoxdur, buna görə də interfeysi tezliyi 1 mHz -lik addımlarla təyin etmək məhdudlaşdırır. Tezliyin mütləq dəqiqliyi Arduino saat tezliyinin dəqiqliyi ilə müəyyən edilir. Bu Arduino tipindən asılıdır, lakin əksəriyyəti 16.000MHz tezliyi təyin edir, buna görə ~ 10^-4 dəqiqlik. Kod, 16MHz fərziyyəsinin kiçik sapmalarını düzəltmək üçün tezlik və faza artım nisbətini dəyişdirməyə imkan verir.
Tamponlama və gücləndirmə
Rezistor şəbəkəsi yüksək bir çıxış empedansına malikdir, buna görə bir yük bağlandıqda çıxış gərginliyi tez azalır. Çıxışı buferləşdirmək və ya gücləndirməklə həll etmək olar. Burada tamponlama və gücləndirmə bir opamp ilə aparılır. LM358 -dən istifadə etdim, çünki bir azım var. Yavaş bir opampdır (mikrosaniyədə 0,5 V sürət), buna görə yüksək tezlikdə və yüksək amplituda siqnal təhrif olunur. Yaxşı bir şey, 0V -a çox yaxın olan gərginliyi idarə edə bilməsidir. Çıxış gərginliyi dəmiryolun altında ~ 2V ilə məhdudlaşır, buna görə də +5V gücünün istifadəsi çıxış gərginliyini 3V ilə məhdudlaşdırır. Addım-up modulları kompakt və ucuzdur. Opampa +20V verərək, 18V -ə qədər gərginlikli siqnallar yarada bilər. (NB, sxematik olaraq LTC3105 deyir, çünki bu Fritzing-də tapdığım yeganə addım idi. Əslində bir MT3608 modulu istifadə etdim, növbəti addımlardakı şəkillərə baxın). R2R DAC çıxışına dəyişən bir azalma tətbiq etməyi seçirəm, sonra siqnalın maksimum 20V çıxışı əldə edə bilməsi üçün opamplardan birini siqnalın gücləndirilmədən tamponlanması üçün, digərinin isə 5.7 ilə gücləndirilməsi üçün istifadə edirəm. Çıxış axını olduqca məhduddur, ~ 10mA, buna görə siqnal böyük bir dinamik və ya elektromaqnit idarə etmək üçün daha güclü bir gücləndiriciyə ehtiyac ola bilər.
Addım 2: Tələb olunan komponentlər
Əsas dalğa forması generatoru üçün
Arduino Uno və ya Nano
16x2 LCD ekran + 20kOhm kəsici və arxa işıq üçün 100Ohm seriyalı rezistor
5 pinli fırlanan kodlayıcı (birləşdirilmiş düymə ilə)
10 kOhm 25 rezistor
Tampon/gücləndirici üçün
LM358 və ya digər ikili opamp
MT3608-ə əsaslanan gücləndirici modul
50kOhm dəyişən müqavimət
10 kOhm müqavimət
47kOhm müqavimət
1 muF kondansatör
Addım 3: Tikinti
Şəkildə göstərildiyi kimi hər şeyi 7x9 sm ölçüdə prototip lövhəsinə lehimlədim. Bütün tellərlə bir az qarışıq olduğu üçün pozitiv gərginliyi qırmızı və qara olanları aparan ucları rəngləməyə çalışdım.
İstifadə etdiyim kodlayıcının bir tərəfində 3, digər tərəfində 2 pin var. 3 sancaqlı tərəf faktiki kodlayıcıdır, 2 pinli tərəf inteqrasiya edilmiş düymələrdir. 3 pinli tərəfdə, mərkəzi pin yerə, digər iki pin D10 və D11-ə bağlanmalıdır. 2 pinli tərəfdən, bir pin yerə, digəri isə D12-yə bağlanmalıdır.
Etdiyim ən çirkin şeydir, amma işləyir. Bir qəfəsə qoymaq yaxşı olardı, amma hələlik əlavə iş və xərc bunu doğrultmur. Nano və ekran pin başlıqları ilə bağlanır. Yenisini qursaydım, bir daha belə etməzdim. Siqnalları almaq üçün lövhəyə bağlayıcılar qoymadım. Bunun əvəzinə, bunları çıxarılan mis tel parçalarından timsah ucları ilə götürürəm, aşağıdakı kimi etiketlənir:
R - R2R DAC -dan xam siqnal
B - tamponlanmış siqnal
A - gücləndirilmiş siqnal
T - pin 9 -dan taymer siqnalı
G - torpaq
+ - artırıcı moduldan müsbət 'yüksək' gərginlik
Addım 4: Kod
Arduino eskizi olan kod əlavə olunur və Arduinoya yüklənməlidir.
20 dalğa forması əvvəlcədən təyin edilmişdir. Başqa bir dalğa əlavə etmək sadə olmalıdır. Qeyd edək ki, təsadüfi dalğalar 256 dəyərli bir sıra təsadüfi dəyərlərlə doldurur, lakin eyni model hər dövrdə təkrarlanır. Əsl təsadüfi siqnallar səs -küy kimi səslənir, amma bu dalğa forması daha çox fitə bənzəyir.
Kod, TIMER1 ilə D9 pinində 1kHz siqnal təyin edir. Bu analoq siqnalın vaxtını yoxlamaq üçün faydalıdır. Saat dövrlərinin sayının 42 olduğunu belə başa düşdüm: 41 və ya 43 qəbul etsəm və 1kHz siqnal yaratsam, D9 pinindəki siqnaldan fərqli bir tezliyə malikdir. 42 dəyəri ilə mükəmməl uyğun gəlir.
Normalda, Arduino millis () funksiyası ilə vaxtı izləmək üçün hər milisaniyəni kəsir. Bu, dəqiq siqnal istehsalını narahat edər, buna görə də xüsusi kəsmə deaktiv edilir.
Tərtibçi deyir: "Sketch 7254 bayt (23%) proqram saxlama sahəsindən istifadə edir. Maksimum 30720 baytdır. Qlobal dəyişənlər yerli dəyişənlər üçün 1565 bayt buraxaraq 483 bayt (23%) dinamik yaddaşdan istifadə edir. Maksimum 2048 baytdır." Beləliklə, daha mürəkkəb kodlar üçün geniş yer var. Nanoya uğurla yükləmək üçün "ATmega328P (köhnə yükləyici)" ni seçməli ola biləcəyinizə diqqət yetirin.
Addım 5: İstifadə
Siqnal generatoru sadəcə Arduino Nanonun mini-USB kabeli vasitəsilə işləyə bilər. Əlaqələndirilə bilən aparatla təsadüfən heç bir yer döngəsi olmaması üçün ən yaxşı şəkildə bir güc bankı ilə edilir.
Açıldıqda 100Hz sinus dalğası yaradacaq. Düyməni döndərərək digər 20 dalğa növündən birini seçə bilərsiniz. Basıldıqda fırlanaraq, kursor istənilən tezliyə uyğun olaraq təyin oluna bilər, sonra istədiyiniz dəyərə dəyişdirilə bilər.
Genlik potensiometrlə tənzimlənə bilər və ya tamponlu və ya gücləndirilmiş siqnal istifadə edilə bilər.
Xüsusilə siqnal başqa bir cihaza cərəyan verərkən, siqnal amplitüdünü yoxlamaq üçün bir osiloskopdan istifadə etmək həqiqətən faydalıdır. Çox cərəyan çəkilərsə, siqnal kəsiləcək və siqnal ciddi şəkildə pozulacaq
Çox aşağı tezliklərdə, çıxış 10kOhm rezistorlu bir LED ilə görüntülənə bilər. Səs tezlikləri dinamiklə eşidilə bilər. Siqnalın ~ 0,5V çox kiçik olduğundan əmin olun, əks halda cərəyan çox yüksək olur və siqnal kəsilməyə başlayır.
Tövsiyə:
DIY Fonksiyonu/Dalğa Forması Generatoru: 6 Adım (Şəkillərlə birlikdə)
DIY Fonksiyonu/Dalğa Forması Generatoru: Bu layihədə bir DIY versiyası üçün hansı xüsusiyyətlərin vacib olduğunu müəyyən etmək üçün kommersiya funksiyası/dalğa forması generatorlarına qısa bir nəzər salacağıq. Daha sonra sizə sadə bir funksiya generatorunun necə yaradılacağını göstərəcəyəm, analoq və rəqəm
Arduino Due əsasında 3 fazalı sinus dalğa generatoru: 5 addım
Arduino Due-yə əsaslanan 3 Fazlı Sinus Dalğa Generatoru: bu paylaşımın məqsədi Due-nin daha yüksək performansını istifadə etmək istəyənlərə kömək etməkdir + istinad olmaması + faydalı olmayan məlumat cədvəli. nümunələr / dövrü aşağı frekansda (< 1kHz) və 16 saniyədə
Aşağı Qiymətli Dalğa Formatı Generatoru (0 - 20MHz): 20 Addım (Şəkillərlə)
Aşağı Qiymətli Dalğa Formatı Generatoru (0 - 20MHz): ÖZET Bu Layihə, bant genişliyi 10 Mhz -dən çox olan və harmonik təhrifi 1%-dən aşağı olan bir dalğa generatoru əldə etmək zərurətindən qaynaqlanır. Bu sənəd, bant genişliyi olan bir dalğa generatorunun dizaynını təsvir edir
Fast Edge Square Dalğa Pulse Generatoru: 4 Addım
Fast Edge Square Wave Pulse Generator: Fast Edge Pulse Generator - Ultra Fast Square Dalğalı Pulse GeneratorBu sadə dövrə, 74HC14N (aşağı sürətlə altı TTL çevirici) istifadə edərək 10MHZ -ə qədər kvadrat dalğa siqnalları yarada bilir. Bəzi elektronika sınaqları üçün idealdır. Çürüklə
Fast Edge Square Dalğa Generatoru: 4 addım
Fast Edge Square Dalğa Generatoru: Hər hansı bir komponentin endüktansını, tutumunu ölçmək istəyirsinizsə, bu məqalədə bu mövzuda öyrəndiyimiz sürətli bir kənar kvadrat dalğasına ehtiyacınız var