Orodha ya maudhui:

Jenereta ya Wimbi la Arduino: Hatua 5 (na Picha)
Jenereta ya Wimbi la Arduino: Hatua 5 (na Picha)

Video: Jenereta ya Wimbi la Arduino: Hatua 5 (na Picha)

Video: Jenereta ya Wimbi la Arduino: Hatua 5 (na Picha)
Video: Mambo 3 Ya Kufanya Leo Ili Uondoe Stress Maishani Mwako 2024, Novemba
Anonim
Jenereta ya Wimbi la Arduino
Jenereta ya Wimbi la Arduino

Sasisho la Februari 2021: angalia toleo jipya na 300x kiwango cha sampuli, kulingana na Raspberry Pi Pico

Katika maabara, mara nyingi mtu anahitaji ishara ya kurudia ya masafa, sura na amplitude. Inaweza kuwa kujaribu kipaza sauti, angalia mzunguko, sehemu au mtendaji. Jenereta zenye nguvu za mawimbi zinapatikana kibiashara, lakini ni rahisi sana kufanya faida mwenyewe na Arduino Uno au Arduino Nano, angalia kwa mfano:

www.instructables.com/id/Arduino-Waveform-…

www.instructables.com/id/10-Resister-Ardui…

Hapa kuna maelezo ya mwingine na sifa zifuatazo:

* Fomu sahihi za mawimbi: pato la 8-bit kwa kutumia R2R DAC, sura ya sampuli 256

* Haraka: 381 kHz kiwango cha sampuli

* Sahihi: 1mHz hatua masafa ya hatua. Sahihi kama kioo cha Arduino.

* Operesheni rahisi: wimbi na wimbi linaloweza kusuluhishwa na encoder moja ya rotary

* Mbalimbali ya amplitudes: millivolts hadi 20V

* 20 fomu za wimbi zilizofafanuliwa hapo awali. Moja kwa moja ili kuongeza zaidi.

* Rahisi kutengeneza: Arduino Uno au Nano pamoja na vifaa vya kawaida

Hatua ya 1: Mazingatio ya Kiufundi

Kutengeneza ishara ya analog

Upungufu mmoja wa Arduino Uno na Nano ni kwamba haina kibadilishaji cha dijiti-kwa-analog (DAC), kwa hivyo haiwezekani kuifanya itoe voltage ya analog moja kwa moja kwenye pini. Suluhisho moja ni ngazi ya R2R: pini 8 za dijiti zimeunganishwa na mtandao wa kontena ili viwango vya pato 256 viweze kufikiwa. Kupitia ufikiaji wa bandari ya moja kwa moja, Arduino inaweza kuweka pini 8 wakati huo huo na amri moja. Kwa mtandao wa kupinga, vipinga 9 vyenye thamani R vinahitajika na 8 na thamani 2R. Nilitumia 10kOhm kama thamani ya R, ambayo inaweka sasa kutoka kwa pini hadi 0.5mA au chini. Nadhani R = 1kOhm inaweza kufanya kazi pia, kwani Arduino inaweza kutoa 5mA kwa urahisi kwa pini, 40mA kwa kila bandari. Ni muhimu kwamba uwiano kati ya vipinga R na 2R ni kweli 2. Hiyo inafanikiwa kwa urahisi kwa kuweka vipinga 2 vya thamani R mfululizo, kwa jumla ya vipinga 25.

Mkusanyiko wa Awamu

Kuzalisha muundo wa wimbi basi huja kwa kurudia kutuma mlolongo wa nambari 8-bit kwenye pini za Arduino. Umbo la wimbi huhifadhiwa katika safu ya ka 256 na safu hii ni sampuli na kupelekwa kwenye pini. Mzunguko wa ishara ya pato imedhamiriwa na jinsi mtu anavyoendelea haraka kupitia safu. Njia thabiti, sahihi na ya kifahari ya kufanya hivyo ni pamoja na mkusanyiko wa awamu: nambari 32-bit huongezwa kila wakati, na tunatumia bits 8 muhimu kama faharisi ya safu.

Sampuli ya haraka

Usumbufu huruhusu sampuli kwa nyakati zilizoainishwa vizuri, lakini upeo wa usumbufu huzuia mzunguko wa sampuli hadi ~ 100kHz. Kitanzi kisicho na mwisho kusasisha awamu, sampuli muundo wa wimbi na kuweka pini inachukua mizunguko ya saa 42, na hivyo kufikia kiwango cha sampuli ya 16MHz / 42 = 381kHz. Kuzungusha au kusukuma kisimbuzi cha rotary husababisha badiliko la pini na usumbufu ambao hutoka nje ya kitanzi kubadilisha mpangilio (wimbi la mawimbi au masafa). Katika hatua hii nambari 256 kwenye safu zimehesabiwa tena ili kwamba hakuna mahesabu halisi ya umbo la mawimbi yanahitaji kufanywa katika kitanzi kuu. Mzunguko wa juu kabisa ambao unaweza kuzalishwa ni 190kHz (nusu ya kiwango cha sampuli) lakini basi kuna sampuli mbili tu kwa kila kipindi, kwa hivyo sio udhibiti mkubwa wa umbo. Kiolesura hivyo hairuhusu kuweka masafa juu ya 100kHz. Kwa 50kHz, kuna sampuli 7-8 kwa kila kipindi na kwa 1.5 kHz na chini ya nambari zote 256 zilizohifadhiwa katika safu hupata sampuli kila kipindi. Kwa maumbo ya mawimbi ambapo ishara hubadilika vizuri, kwa mfano wimbi la sine, kuruka sampuli sio shida. Lakini kwa maumbo ya mawimbi yenye spikes nyembamba, kwa mfano wimbi la mraba na mzunguko mdogo wa ushuru, kuna hatari kwamba kwa masafa zaidi ya 1.5 kHz kukosa sampuli moja kunaweza kusababisha muundo wa wimbi kutofanya kama inavyotarajiwa

Usahihi wa mzunguko

Nambari ambayo awamu imeongezwa kwa kila sampuli ni sawa na masafa. Mzunguko unaweza kuwekwa kwa usahihi wa 381kHz / 2 ^ 32 = 0.089mHz. Kwa mazoezi usahihi kama huo hauhitajiki sana, kwa hivyo kiolesura kinazuia kuweka masafa katika hatua za 1mHz. Usahihi kabisa wa masafa umedhamiriwa na usahihi wa masafa ya saa ya Arduino. Hii inategemea aina ya Arduino lakini wengi hutaja masafa ya 16.000MHz, kwa hivyo usahihi wa ~ 10 ^ -4. Nambari inaruhusu kurekebisha uwiano wa masafa na nyongeza ya awamu kusahihisha upungufu mdogo wa dhana ya 16MHz.

Bafu na kukuza

Mtandao wa resistor una impedance kubwa ya pato, kwa hivyo voltage yake ya pato huanguka haraka ikiwa mzigo umeambatanishwa. Hiyo inaweza kutatuliwa kwa kugonga au kukuza pato. Hapa, kugonga na kukuza hufanywa na opamp. Nilitumia LM358 kwa sababu nilikuwa nayo. Ni opamp polepole (kiwango cha kuua 0.5V kwa microsecond) kwa hivyo kwa masafa ya juu na kiwango cha juu cha ishara ishara hupotoshwa. Jambo zuri ni kwamba inaweza kushughulikia voltages karibu sana na 0V. Voltage ya pato hata hivyo imepunguzwa kwa ~ 2V chini ya reli, kwa hivyo kutumia nguvu ya + 5V inapunguza voltage ya pato hadi 3V. Moduli za hatua ni ndogo na bei rahisi. Kulisha + 20V kwa opamp, inaweza kutoa ishara na voltage hadi 18V. (NB, mpango huo unasema LTC3105 kwa sababu hiyo ndiyo hatua ya pekee niliyoipata katika Fritzing. Kwa kweli nilitumia moduli ya MT3608, angalia picha katika hatua zifuatazo). Ninachagua kutumia upunguzaji wa kutofautisha kwa pato la R2R DAC kisha utumie moja ya opamp kubatilisha ishara bila kukuza na nyingine kukuza na 5.7, ili ishara iweze kufikia kiwango cha juu cha takriban 20V. Pato la sasa ni mdogo, ~ 10mA, kwa hivyo amplifier yenye nguvu inaweza kuhitajika ikiwa ishara ni kuendesha spika kubwa au sumaku ya umeme.

Hatua ya 2: Vipengele vinavyohitajika

Kwa jenereta ya msingi ya wimbi

Arduino Uno au Nano

16x2 LCD kuonyesha + 20kOhm trimmer na 100Ohm mfululizo resistor kwa backlight

Encoder ya pini 5 ya rotary (na kitufe kilichojumuishwa cha kushinikiza)

Vipinga 25 vya 10kOhm

Kwa bafa / kipaza sauti

LM358 au opamp nyingine mbili

moduli ya kuongezeka kulingana na MT3608

Upinzani wa 50kOhm

Kontena la 10kOhm

Kinzani ya 47kOhm

1muF capacitor

Hatua ya 3: Ujenzi

Ujenzi
Ujenzi
Ujenzi
Ujenzi

Niliuza kila kitu kwenye ubao wa mfano wa 7x9cm, kama inavyoonekana kwenye picha. Kwa kuwa ilipata fujo kidogo na waya zote nilijaribu kupaka rangi risasi ambayo inabeba chanya nyekundu nyekundu na ile inayobeba nyeusi nyeusi.

Nakala niliyotumia ina pini 5, 3 upande mmoja, 2 upande mwingine. Upande ulio na pini 3 ndio usimbuaji halisi, upande ulio na pini 2 ni kitufe cha kushinikiza kilichounganishwa. Kwa upande wa pini 3, pini kuu inapaswa kushikamana na ardhi, pini zingine mbili hadi D10 na D11. Kwa upande wa pini 2, pini moja inapaswa kushikamana na ardhi na nyingine kwa D12.

Ni jambo baya zaidi ambalo nimewahi kufanya lakini inafanya kazi. Itakuwa nzuri kuweka ndani ya ua, lakini kwa sasa kazi ya ziada na gharama haifai kweli. Nano na onyesho limeambatanishwa na vichwa vya pini. Singefanya tena ikiwa ningejenga mpya. Sikuweka viunganishi kwenye ubao kuchukua ishara. Badala yake, ninawachukua na risasi za mamba kutoka kwa vipande vya waya wa shaba, vilivyoandikwa kama ifuatavyo:

R - ishara mbichi kutoka kwa R2R DAC

B - ishara iliyopigwa

A - ishara iliyoimarishwa

T - ishara ya kipima muda kutoka kwa pini 9

G - ardhi

+ - voltage chanya 'ya juu' kutoka kwa moduli ya hatua

Hatua ya 4: Kanuni

Nambari, mchoro wa Arduino, imeambatishwa na inapaswa kupakiwa kwenye Arduino.

Aina 20 za mawimbi zimefafanuliwa kabla. Inapaswa kuwa moja kwa moja kuongeza wimbi lingine lolote. Kumbuka kuwa mawimbi ya nasibu hujaza safu ya thamani ya 256 na maadili ya nasibu, lakini muundo huo huo unarudiwa kila kipindi. Ishara za kweli za nasibu zinasikika kama kelele, lakini muundo huu wa mawimbi unasikika zaidi kama filimbi.

Nambari huweka ishara ya 1kHz kwenye pini D9 na TIMER1. Hii ni muhimu kuangalia wakati wa ishara ya analog. Ndio jinsi niligundua kuwa idadi ya mizunguko ya saa ni 42: Ikiwa nadhani iwe 41 au 43, na nitatoa ishara ya 1kHz, ina wazi kuwa na masafa tofauti kutoka kwa ishara kwenye pini D9. Kwa thamani 42 zinalingana kabisa.

Kawaida, Arduino hukatiza kila millisecond kuweka wimbo wa wakati na kazi ya millis (). Hii itasumbua kizazi sahihi cha ishara, kwa hivyo usumbufu fulani umezimwa.

Mkusanyaji anasema: "Mchoro hutumia kaiti 7254 (23%) ya nafasi ya uhifadhi wa programu. Upeo ni baiti 30720. Viwango vya ulimwengu hutumia kaiti 483 (23%) ya kumbukumbu yenye nguvu, ikiacha kaiti 1565 kwa vigeuzi vya kawaida. Upeo ni kaa 2048." Kwa hivyo kuna nafasi ya kutosha ya nambari ya kisasa zaidi. Jihadharini kwamba itabidi uchague "ATmega328P (bootloader ya zamani)" kupakia kwa mafanikio kwa Nano.

Hatua ya 5: Matumizi

Jenereta ya ishara inaweza kuwezeshwa tu kupitia kebo ya mini-USB ya Arduino Nano. Inafanywa vizuri na benki ya umeme, ili kusiwe na kitanzi cha bahati mbaya na vifaa ambavyo vinaweza kushikamana.

Inapowashwa itazalisha wimbi la sine 100Hz. Kwa kuzungusha kitasa, moja ya aina zingine 20 za mawimbi zinaweza kuchaguliwa. Kwa kuzunguka wakati wa kusukuma, mshale unaweza kuwekwa kwa nambari yoyote ya masafa, ambayo inaweza kubadilishwa kuwa thamani inayotarajiwa.

Amplitude inaweza kudhibitiwa na potentiometer na ishara iliyopigwa au ishara iliyoongezwa inaweza kutumika.

Inasaidia sana kutumia oscilloscope kuangalia ukubwa wa ishara, haswa wakati ishara inapeana sasa kwa kifaa kingine. Ikiwa sasa nyingi imechorwa, ishara itakata na ishara hiyo imepotoshwa sana

Kwa masafa ya chini sana, pato linaweza kuonyeshwa na LED katika safu na kipinzani cha 10kOhm. Masafa ya sauti yanaweza kusikika na spika. Hakikisha kuweka ishara ndogo sana ~ 0.5V, vinginevyo sasa inakuwa juu sana na ishara inaanza kukata.

Ilipendekeza: