Mündəricat:
Video: Yüksək Frekans və Vəzifə Dövrünü Necə Ölçmək olar, Eyni zamanda, Mikrokontrolördən istifadə etməklə: 4 Addım
2025 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2025-01-13 06:56
Sənin nə düşündüyünü bilirəm: "Hə? Siqnal tezliyini ölçmək üçün mikrokontrolörlərdən necə istifadə olunacağına dair bir çox Təlimat var. Yawn." Ancaq gözləyin, burada bir yenilik var: bir mikrokontrolörün (MCU) daşıya biləcəyindən və siqnalın iş dövründən daha yüksək olan tezliklərin ölçülməsi üsulunu təsvir edirəm - hamısı eyni zamanda!
Cihazın tezlik diapazonu ~ 43 Hz -dən ~ 450 kHz -ə qədər, iş dövrü 1% -dən 99% -ə qədərdir.
"Dözə bilən" hissəni izah edim: bir MCU, sonrakı iki keçid hadisəsi arasındakı vaxtı izləyərək, bir kvadrat dalğa siqnalının T müddətini ölçür. Məsələn, aşağı/yüksək gərginlik I/O pinlərindən birinə atlayır. Bunu öz daxili saatının nəbz sayını saymaqla edir. Sadəlövh olaraq, ölçülmüş tezliklərin yuxarı həddi Nyqvist-Shannon nümunə götürmə teoreminə tabe olmalıdır; yəni təxminən MCUs saat tezliyinin yarısına bərabər olardı. Əslində, limit çox daha aşağıdır, çünki MCU fasilələri idarə etmək, dəyişənləri saxlamaq, arifmetik əməliyyatlar aparmaq, nəticələr göstərmək və s. təxminən 106. Deməli, bu halda ölçülə bilən tezlik aralığının yuxarı həddi 48 000 /212 /2 = 226,4 kHz olardı.
MCU siqnalın müddətini ölçərkən, puls genişliyini də təyin edə bilər: P: siqnal gərginliyinin yüksək qalma vaxtı. Başqa sözlə, aşağıdan yuxarıya və yüksəkdən aşağıya keçidlər arasındakı vaxt. Siqnalın iş dövrü aşağıdakı faiz olaraq təyin olunur:
Vəzifə = 100% * P / T
Eynilə, tezlikdə olduğu kimi, nəbz genişliyində də praktiki bir məhdudiyyət var. Yuxarıdakı nümunəni istifadə edərək, 106 saat dövrü nəbz genişliyini ən az 2.21 mikrosaniyə ilə məhdudlaşdırır. Və ya 226.4 kHz -də 50% -dən az olmamalıdır.
Kvadrat dalğa siqnallarının yuxarı tezlik həddini artırmağın yollarından biri, flip-floplardan istifadə edən rəqəmsal bölücülərin tətbiqidir. Giriş tezliyinin n -ə bölünməsi, ölçülə bilən yuxarı diapazonu n dəfə uzada bilər. Bu əla xəbərdir, rəqəmsal bölücülərin bir əsas qüsuru var: bölünmüş siqnal nəbz genişliyi (və vəzifə dövrü) məlumatlarını itirir! Bölücülərin necə işlədiyinə görə, onların çıxışı həmişə 50% iş dövrü təşkil edir. Bummer…
Növbəti səhifələrdə tezliyi rəqəmsal olaraq necə bölüşdürəcəyimi və orijinal sayımın tətbiq etdiyi hədləri aşan siqnalları ölçməyimə imkan verən orijinal nəbz genişliyini qoruyacağam.
Addım 1: Rəqəmsal Tezlik Bölməsi
Ənənəvi rəqəmsal tezlik bölücülər flip-floplardan istifadə edir; Bu dərslik, standart JK flip-floplarından istifadə edərək bölücülərin necə qurulacağına dair prinsipləri gözəl izah edir. Bu, MCU üçün çox yüksək olan giriş tezlikləri problemini həll edir, lakin bir böyük çatışmazlığı var: bölünmüş siqnalın giriş siqnalının vəzifəsindən asılı olmayaraq 50% iş dövrü var! Niyə belə olduğunu başa düşmək üçün ilk iki rəqəmə baxın. T dövrü və puls genişliyi P olan orijinal siqnal, JK flip-flopunun saat pininə daxil olur, J və K sancaqları isə hər zaman yüksək tutulur (birinci rəqəm). 3.3V məntiqi bütün müddət ərzində qəbul edilir. Flip-flopun saatın pozitiv (yəni yüksələn) kənarı tərəfindən tetiklendiğini düşünək. Bu şərtlərdə, çıxış pininin vəziyyətində dəyişikliklər (fərdi "dönmə" və "flops") saat pimi aşağıdan yuxarıya doğru hər dəfə gedəndə baş verir. Saatın yüksəkdən aşağıya keçməsi (yəni mənfi kənarı) tamamilə nəzərə alınmır. İkinci rəqəmə baxın. Çıxış pimi Q, dövrü orijinal dövrdən iki dəfə çox olan bir siqnal yayır, yəni tezliyi iki dəfə azalır. Çıxışın puls genişliyi həmişə T -yə bərabərdir. Nəticədə, orijinal nəbz genişliyi P itirilir.
Üçüncü şəkildə göstərilən bir konfiqurasiyaya başqa bir JK flip-flopu əlavə etmək, orijinal tezliyi 4-ə bölür.
Problem: nəbz genişliyini qoruyarkən kvadrat dalğanın tezliyini necə bölmək olar?
Fikir, qarışığa mənfi bir kənar tetiklenen JK flip-flopunu düzgün bir şəkildə əlavə etməkdir. Buna "Neg FF" deyək; dördüncü rəqəmə baxın. Burada "düzgün", yeni flip-flopun J və K sancaqlarının, əvvəlki şəkildə göstərildiyi kimi 4-ə bölənin ("Pos FF") Q və Qbar çıxış pinlərinə bağlandığı deməkdir. (Burada "bar" məntiqi inkarı göstərən Q simvolu üzərindəki üfüqi çubuqdur.) Bunun nəyə nail olduğunu görmək üçün beşinci rəqəmdəki "Neg FF" funksiyasının cədvəlinə nəzər salın: Neg -in çıxış pinləri, Q və Qbar, giriş sancaqlarının vəziyyətini əks etdirir, sırasıyla J və K. Bu, Pos 'Q və Qbar vəziyyətini əks etdirdikləri deməkdir. Lakin, Negin flip-flop hərəkəti, pozitiv kənardan sonra P vaxtında gələn orijinal siqnalın mənfi kənarını gözləməlidir. Aha!
Yaranan dalğa formaları altıncı şəkildə göstərilmişdir. "Pos Q" 1/4 tezlikdə siqnal verir, "Pos Qbar" tərsdir, "Neg Q", Pulse genişliyi P ilə dəyişdirilən "Pos Q" izləyir və "Neg Qbar" əksinədir. "Pos Qbar" və "Neg Q" məntiqi VE -nin orijinal nəbz genişliyi P və 1/4 tezliyi ilə xarakterizə olunan bir pulse qatar istehsal etdiyini yoxlaya bilərsiniz. Bingo!
Əvvəlcə MCU -nu qidalandırmaq üçün bu çıxış siqnalından istifadə etdim. Bununla birlikdə, MCU -nun Girişdə göstərilən 106 dövr məhdudiyyəti səbəbindən çox qısa nəbz genişliyi üçün problemli olduğu ortaya çıxdı. Başqa bir çıxış seçərək bu kiçik problemi həll etdim: "Pos Qbar" VƏ "Neg Qbar". Dalğa formalarına bir baxış, bu xüsusi dalğa formasının (P) nəbz genişliyinin P. üçün (0, T) aralığında deyil, T ilə 2T arasında dəyişdiyinə inandırmalıdır.
P = 2T - P '
Addım 2: Tövsiyə olunan Avadanlıq
Elektron həvəskarlara nisbətən yeni gələnləri çox bəyənirəm: 48 MHz saat tezliyi ilə işləyən 32 bit ARM Cortex M0+ prosessoruna əsaslanan Atmel SAM D21 MCU'lar, köhnə Atmelsdən qat-qat yüksəkdir. Bu layihə üçün aldım:
- Adafruit -dən ItsyBitsy M0 Express MCU lövhəsi
- Adafruit -dən şarj edilə bilən LiPo batareyasına sahib oldum
- Monoxrom 128x32 SPI OLED displey (bunu təxmin etdiniz: Adafruit)
- Texas Instruments-dan ikili pozitiv kənar tətikli JK flip-flop SN74HC109
- Texas Instruments-dən ikiqat mənfi kənar tətikli JK flip-flop SN74HC112
- Texas Instruments -dən Dördlü VƏ CD74AC08E qapısı
- Texas Instruments -dən CD74AC32E dördlü və ya qapısı
Addım 3: Dövrə
Birinci rəqəm tezlik/vəzifə sayğacının sadələşdirilmiş sxemini göstərir. 3.3 V CMOS məntiqi bütün müddət ərzində qəbul edilir. Nəticədə, giriş kvadrat dalğasının amplitudası müvafiq V arasında olmalıdırIH səviyyə (yəni 2 V) və 3.3 V. yoxsa, buna uyğun olaraq yuxarı və ya aşağı miqyaslandırmalısınız. Əksər hallarda sadə bir gərginlik bölücü kifayət edər. Sayğacınızın versiyasını fərqli bir məntiq səviyyəsində dizayn etmək istəyirsinizsə, o zaman istədiyiniz səviyyədə işləyən başqa bir mikro nəzarətçi (MCU), batareya və ekrandan istifadə etməlisiniz. Bu layihədə istifadə olunan məntiq qapıları və flip-floplar 2 V və 6 V arasında hər yerdə məntiq səviyyələri ilə işləyir və əksər hallarda yaxşı olmalıdır.
Göründüyü kimi, ItsyBitsy MCU, SPI proqramı vasitəsi ilə ekranla ünsiyyət qurmaq üçün 9-13 pinlərindən istifadə edir. 3V pin bütün dövrə güc verir. Rəqəmsal giriş pin 3 təhlil edilən siqnalı qəbul edir, 2 və 4 sancaqlar isə siqnal mənbəyini idarə edir: ya AND3 qapısından gələn birbaşa siqnal (aşağı giriş tezlikləri) və ya 2 -ci addımda təsvir edildiyi kimi AND4 qapısından 4 -ə bölünən siqnal (yüksək giriş tezlikləri) Növbəti addımda müzakirə olunan kod, daxil olan tezlik aralığını avtomatik olaraq algılar və siqnal mənbəyini uyğun şəkildə dəyişir.
Sxem rəqəmsal çip əlaqələrinin əsl mürəkkəbliyini göstərmir. İkinci şəkil, layihənin çörək taxtasında necə görünəcəyini göstərir. Giriş siqnalı qırmızı tel vasitəsilə ikili pozitiv kənar flip-flopun 2CLK pininə gəlir. DİQQƏT: Normal olaraq, bu flip -flopun bütün J və K sancaqları yüksək tutulmalıdır, lakin SN74HC109 xüsusilə Kbar pininə - ters çevrilmiş K pininə malikdir. Buna görə də, bu pin yerə qoyulmalıdır! SN74HC112-dəki ilk mənfi kənar flip-flop, SN74HC109-un 1Q və 1Qbar pinlərinə qoşulmuş 1K və 1J pininə malikdir. SN74HC112-də ikinci flip-flop istifadə edilmir və giriş pinləri (2K, 2J, 2CLRbar) topraklanır. Bütün flip-floplardakı bütün digər əlavə pinlər PREbar (əvvəlcədən təyin edilmiş) və CLRbar (aydın) məntiqi yüksəkliyə bağlanmalıdır. İstifadə edilməmiş saat və çıxış pinləri əlaqəsiz qalır. Eynilə, bütün qapılarda istifadə edilməmiş giriş pinləri topraklanır, istifadə olunmamış çıxış pinləri isə bağlı deyildir. "Telefon Zəncirinin Görünməz Qatili" ndə müzakirə etdiyim kimi, məntiqi çiplərin istifadə edilməmiş giriş pinlərinin yerə qoyulması təsadüfi salınımları aradan qaldırır və batareya gücünə qənaət edir.
Addım 4: Kod və Aşağı Tezliklərin Ölçülməsi
Təbii ki, bütün hərəkətlər aşağıda göstərilən kodda olur. Pin 3 -ə daxil olan giriş rəqəmsal aşağıdan yuxarıya keçdikdə, MCU daxili 48 MHz saatının pulslarını saymağa başlayır. Yüksəkdən aşağıya keçid anını qeyd edir və bütün prosesi yenidən başladıqdan sonra sayını aşağıdan yuxarıya keçənə qədər davam etdirir. İlk say nəbz genişliyini, bütün say isə siqnalın müddətini təmsil edir. Və bütün sirr budur.
CPU bu keçidləri aparat kəsintiləri ilə qeyd edir. SAMD21 -in bir neçə saatı var; kodum TC3 birini istifadə edir. Başlanğıcda, M0 -nin məlumat vərəqini oxumaqla başladım, kəsmə işləyicisini kodlaşdırmaq üçün çox səy göstərdim, amma tezliklə Arduino Forum yazılarında istifadəçiləri electro_95, MartinL və Rucus tərəfindən çox əlaqəli bir kod kəşf etdim. layiqincə qəbul edilmişdir. Birləşdirilmiş kodu öz koduma daxil etdim və dəyişdirdim; çox vaxta qənaət et!
Daha əvvəl də qeyd etdiyim kimi, fasilələr arasında kodu yerinə yetirmək üçün siqnal həlli ~ 106 CPU dövrü ilə məhdudlaşır. Pulse genişliyinin qorunması ilə rəqəmsal bölmə yüksək tezliklərə diqqət yetirir. Digər tərəfdən aşağı tezliklər başqa bir problem yaradır: TC3 saat sayğacının 16 bit uzunluğunda olduğu üçün 65, 536 sayını keçdikdən sonra daşır. Bir daşqın fasiləsi əlavə edərək bu vəziyyəti idarə edə bilərsiniz, ancaq fərqli bir həll seçdi: TC3, 48 MHz-lik bir hardware yerinə əvvəlcədən ölçülmüş (yəni proqrama bölünmüş) bir CPU saatından istifadə edə bilər. Beləliklə, siqnalın müddəti daşma həddinə yaxınlaşarsa, kod TC3 -ə növbəti dövr üçün 24 MHz sayını istifadə etməyi tapşıra bilər və voila sayğac 32, 768 sayının altına düşür. Hətta daha aşağı tezliklərdə TC3 -ə 12 MHz puls və s. Saymaq göstərişi verilə bilər. TC3 sayğacını daşma həddində saxlamaq üçün müvafiq prescaler siqnalın tezliyinə əsasən histereziya ilə avtomatik olaraq təyin olunur. Nəticədə cihazın diapazonunun aşağı ucu təxminən 43 Hz -dir.
Kodu açıb layihənizdə istifadə edə bilərsiniz, ancaq nəticələri dərc edərkən mənbəyini qeyd edin.
Kodu keçid edin.