Turinys:
- 1 žingsnis: blokinė schema - aparatinė įranga
- 2 žingsnis: blokinė diagrama - tinklų kūrimas
- 3 žingsnis: dalys, įrankiai, IDE ir medžiagų sąrašas
- 4 žingsnis: Aparatūros projektavimas - pagrindinė plokštė
- 5 žingsnis: Aparatūros projektavimas - ESP32 modulis
- 6 žingsnis: PCB išdėstymas
- 7 žingsnis: 3D korpusas
- 8 žingsnis: Programinės įrangos diegimas - MCU
- 9 veiksmas: programinės įrangos diegimas - „Android“programa
- 10 žingsnis: bandymas
Video: Nešiojamas funkcijų generatorius „WiFi“ir „Android“: 10 žingsnių
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:44
Beveik XX amžiaus pabaigoje atsirado įvairių technologinių naujovių, ypač ryšių srityje; bet ne tik. Mums, vartotojams, vartotojams ir inžinieriams paaiškėjo, kad sparčiai vystosi elektroniniai prietaisai, kurie gali labai palengvinti mūsų gyvenimą: išmanieji laikrodžiai, išmanieji namai, išmanieji telefonai ir kt.
Kadangi šiais laikais viskas gali būti „protinga“, nusprendžiau suprojektuoti itin naudingą įrenginį, kuris būtų esminės elektroninės laboratorijos įrangos dalis - nešiojamą funkcijų generatorių, valdomą išmaniuoju telefonu „Android“OS naudojant tiesioginį „WiFi“arba „WiFi“vietinį tinklą (WLAN).).
Kodėl turėtume kurti šį įrenginį?
Didžioji dauguma testavimo įrangos šiais laikais yra gana brangios. Ir kartais šie įrenginiai nėra nešiojami. Kaip sprendimas dėl didelių kainų, perkeliamumo trūkumo ir prieigos prie įrenginių tinklo trūkumo įrenginys teikia dviejų kanalų bangų formos generatorių, kuris iš tikrųjų yra nešiojamas ir turi neribotą prieigą prie tinklo - interneto arba vietinio.
Ir, žinoma, prietaisas turėtų būti sukurtas dėl entuziazmo, paklusnumo „pasidaryk pats“principams - kartais tiesiog turime padaryti viską patys, kad jaustumėmės gerai:)
Pagrindiniai bruožai
Maitinimo šaltinis
- A tipo USB jungtis, skirta tiek maitinimo sistemoms, tiek programavimui
- Pilna ličio jonų baterijų valdymo sistema - Įkrovimas ir stabilūs režimai
- „Smart Switch“diegimas - nereikia perjungti maitinimo jungiklio
- Dvigubas maitinimo šaltinis: +3.3V ir -3.3V simetriškai įtampos bangų formai generuoti
Bangos formos generavimas
- Nuolatinės srovės lygio įgyvendinimas išėjimo kaskadoje - šališka bangos forma tarp įtampos ribų
- DDS pagrįsta 4 tipų bangų forma - sinusas, trikampis, kvadratas ir nuolatinė srovė
- Iki 10MHz dažnio palaikymas
- Išėjimo srovė iki 80mA su 500mW maksimalia galia
- Atskirti kanalai bangų formos generavimui - padalintos grandinės AD9834
Bendravimas
- ESP32 diegimas - Taikomos „WiFi“galimybės
- Visiškas TCP/IP palaikymas naudojant generatorių ir „Android“išmanųjį telefoną
- Galimybė išsaugoti kiekvieno įrenginio ciklo vartotojo parametrus
- Būsenos stebėjimas - abi sistemos žino viena kitą: „FuncGen“(nuo šiol vadinkime taip) ir išmanusis telefonas.
Vartotojo sąsaja
- 20 x 4 simbolių LCD su paprasta 4 bitų duomenų sąsaja
- „Android“programa - visiškai valdykite „FuncGen“įrenginį
- Signalinė grandinė - garso grįžtamasis ryšys vartotojui
1 žingsnis: blokinė schema - aparatinė įranga
Mikrovaldiklio blokas - ATMEGA32L
Mikrovaldiklis yra programuojamas lustas, kurį sudaro visos kompiuterio funkcijos, esančios viename elektroniniame luste. Mūsų atveju tai yra „smegenys“ir pagrindinis sistemos komponentas. MCU paskirtis yra valdyti visas periferines sistemas, tvarkyti ryšį tarp šių sistemų, kontroliuoti aparatūros veikimą ir visapusiškai palaikyti vartotojo sąsają ir jos sąveiką su tikru vartotoju. Šis projektas pagrįstas ATMEGA32L MCU, kuris gali veikti 3.3V ir 8MHz dažniu.
Ryšio SoC - ESP32
Šis „SoC“(„System on Chip“) teikia visišką „FuncGen“komunikacijos palaikymą - prieiga prie „WiFi“galimybių, įskaitant tiesioginį, vietinį ar interneto ryšį. Prietaiso paskirtis yra tokia:
- Duomenų perdavimo tarp „Android“programos ir „FuncGen“įrenginio tvarkymas
- Valdymo/duomenų pranešimų valdymas
- Nuolatinės TCP/IP kliento-serverio konfigūracijos palaikymas
Mūsų projekte SoC yra espresifas ESP32, kuris yra per populiarus, kad jį dar labiau išplėsti:)
Ličio jonų baterijų valdymo sistema
Kad mūsų prietaisas taptų nešiojamu, jame yra suprojektuota ličio jonų akumuliatoriaus įkrovimo grandinė. Grandinė yra pagrįsta MC73831 IC, su reguliuojama įkrovimo srove, reguliuojant vieno programavimo rezistoriaus vertę (šią temą aptarsime schemų žingsnyje). Įrenginio maitinimo šaltinio įvestis yra A tipo USB jungtis.
Išmaniojo jungiklio grandinė
Išmaniojo jungiklio įrenginio maitinimo valdymo grandinė suteikia visišką programinės įrangos valdymą įrenginio išjungimo sekai ir nereikia išorinio perjungimo jungiklio, skirto prietaiso akumuliatoriaus įtampos nutraukimui. Visos maitinimo operacijos atliekamos paspaudus mygtuką ir MCU programinę įrangą. Kai kuriais atvejais sistemą reikia išjungti: žema akumuliatoriaus įtampa, didelė įėjimo įtampa, ryšio klaida ir pan. Išmanusis jungiklis pagrįstas STM6601 išmaniuoju jungikliu IC, kuris yra pigus ir labai draugiškas žaisti.
Pagrindinis maitinimo blokas
Šį įrenginį sudaro dvi maitinimo grandinės su baterijomis - +3,3 V visoms skaitmeninėms / analoginėms maitinimo grandinėms ir -3,3 V, kai „FunGen“simetriška išvestis, palyginti su 0 V potencija (ty sukurtą bangos formą galima nustatyti [-3,3 V: 3,3 V)] regionas.
- Pagrindinė maitinimo grandinė yra pagrįsta LP3875-3,3 LDO (žemo iškritimo) 1A linijinės įtampos reguliatoriumi.
- Antrinė maitinimo grandinė yra pagrįsta LM2262MX IC, kuri atlieka nuolatinės ir nuolatinės srovės neigiamos įtampos konvertavimą per kondensatoriaus įkrovimo siurblį-sistemą, kuria pagrįsta IC.
Bangos formų generatorių sistema
Sistema buvo sukurta akcentuojant atskirus DDS (tiesioginės skaitmeninės sintezės) integrinius grandynus, kurie leidžia visiškai valdyti bangų formą generuojant MCU SPI (serijinė periferinė sąsaja). Projektuojant naudojamos grandinės yra analoginiai įrenginiai AD9834, kurie gali pateikti įvairių tipų bangų formas. Dirbdami su AD9834 turime susidurti su šiais iššūkiais:
- Fiksuota bangos formos amplitudė: Bangos formos amplitudę valdo išorinis DAC modulis
- Neatsižvelgiama į nuolatinės srovės poslinkio lygį: sumavimo grandinių su norimomis nuolatinės srovės poslinkio reikšmėmis įgyvendinimas
- Atskiri išėjimai kvadratinei bangai ir trikampiui/sinusinei bangai: aukšto dažnio perjungimo grandinės įgyvendinimas, todėl kiekvienas vieno kanalo išėjimas gali suteikti visą norimą bangos formą: sinusą, trikampį, kvadratą ir nuolatinę srovę.
Skystųjų kristalų ekranas
Skystųjų kristalų ekranas yra vartotojo sąsajos (vartotojo sąsajos) dalis, o jo tikslas yra leisti vartotojui suprasti, ką prietaisas veikia realaus laiko režimu. Jis sąveikauja su vartotoju bet kurioje įrenginio būsenoje.
Garsinis signalas
Paprasta tonų generatoriaus grandinė, skirta papildomam atsiliepimui iš įrenginio vartotojui.
Integruotas IPT programuotojas
Kiekvienam inžinieriui išlieka programavimo proceso problema: visada yra pats blogiausias poreikis išardyti gaminį, kad būtų galima perprogramuoti jį naudojant naują programinę įrangą. Siekiant išvengti šių nepatogumų, AVR ISP programuotojas buvo prijungtas prie įrenginio iš vidaus, o USB duomenys ir maitinimo linijos yra prijungtos prie įrenginio A tipo USB jungties. Šioje konfigūracijoje mums tereikia prijungti „FuncGen“per USB kabelį, kad būtų galima programuoti arba įkrauti!
2 žingsnis: blokinė diagrama - tinklų kūrimas
Dviejų kanalų funkcijų generatorius
Pagrindinis prietaisas. Tas, kurį peržiūrėjome ankstesniame žingsnyje
ESP-WROOM-32
Integruota „System-on-Chip“su „WiFi“ir BLE galimybėmis. SoC yra prijungtas prie pagrindinės plokštės (mes tai aptarsime schemoje) per UART modulį ir veikia kaip pranešimų siųstuvas tarp pagrindinio įrenginio ir „Android“išmaniojo telefono.
Vietinis „WiFi“tinklas
Išmanusis telefonas ir įrenginys bendraus tiesiogiai per „WiFi“arba vietinį tinklą, atsižvelgiant į TCP serverio/kliento konfigūraciją. Kai „WiFi“įrenginiai atpažįsta vienas kitą, pagrindinis įrenginys sukuria TCP serverį su tinkamais parametrais ir gali siųsti/gauti pranešimus. Įrenginys veikia kaip antrinis išmanusis telefonas. Kita vertus, „Android“įrenginys jungiasi prie TCP serverio kaip kliento tinklo įrenginys, tačiau yra laikomas pagrindiniu pranešimų siųstuvu - išmanusis telefonas yra tas, kuris inicijuoja visą bendravimo ciklą: Siunčiamas pranešimas - gaunamas atsakymas.
„Android“išmanusis telefonas
„Android“OS pagrįstas išmanusis telefonas, veikiantis „FuncGen“programoje
3 žingsnis: dalys, įrankiai, IDE ir medžiagų sąrašas
Medžiagų sąrašas (žr. Pridedamą XLS lentelę)
UI ir sistemos jungtys
- 1 x 2004A „Char-LCD 20x4 Blue“
- 1 x B tipo USB jungtis
- 1 x 10 rinkinys „Mini Micro JST XH 2.54mm 4 Pin“
- 1 x 6 vnt momentinis SW
PCB užsakymas (pagal „Seeed Studio“)
Pagrindinė medžiaga FR-4
2 sluoksnių sluoksnių skaičius
PCB kiekis 10
Įvairių konstrukcijų skaičius 1
PCB storis 1,6 mm
PCB spalva mėlyna
Paviršiaus apdaila HASL
Minimali litavimo kaukės užtvanka 0,4 mm ↑
Vario svoris 1 oz
Minimalus gręžimo angos dydis 0,3 mm
Pėdsako plotis / tarpas 6/6 mln
Padengtos pusiau skylės / Kasteluotos skylės Nr
Varžos kontrolė Nr
Įrankiai
- Karštas klijų pistoletas
- Pincetai
- Kateris
- ~ 22AWG viela, skirta gedimams tvarkyti
- Lituoklis/stotis
- Litavimo skarda
- SMD perdirbimo stotis (neprivaloma)
- 3D spausdintuvas (neprivaloma)
- Išspaudžiamas failas
- AVR ISP programuotojas
- USB į nuoseklųjį keitiklį (pasirinktinai, derinimui)
Integruota kūrimo aplinka (IDE) ir programinė įranga
- Autodesk EAGLE arba Cadence Schematic Editor / Allegro PCB Editor
- „OpenSCAD“(pasirenkama)
- „Ultimaker Cura“(pasirenkama)
- „Saleae Logic“(trikčių šalinimui)
- „Atmel Studio 6.3“ar naujesnė versija
- „Android Studio“arba „Eclipse IDE“
- „Docklight Serial Monitor“/ kita COM prievadų stebėjimo programinė įranga
- ProgISP skirtas AVR ATMEGA32L blykstės programavimui
4 žingsnis: Aparatūros projektavimas - pagrindinė plokštė
Akumuliatoriaus valdymo grandinė
Akumuliatoriaus įkrovimo grandinė pagrįsta MCP7383 IC, leidžiančia pasirinkti norimą Li -Ion akumuliatoriaus įkrovimo srovę - 3,7 V, kurios talpa 850 mAh. Įkrovimo srovė mūsų atveju nustatoma programuojant rezistoriaus vertę (R1)
R1 = 3KOhm, aš (įkrovimas) = 400 mA
USB įtampa VBUS filtruojama naudojant π filtrą (C1, L3, C3) ir veikia kaip įkrovimo grandinės maitinimo šaltinis.
Įtampos skirstytuvo grandinė (R2, R3) leidžia MCU nurodyti, ar prijungtas išorinis USB maitinimo šaltinis, ar ne, pateikdamas MCU A/D kanalui tokią įtampą:
V (indikacija) ~ (2/3) V (magistralė)
Kadangi mūsų ATMEGA32L A/D yra 12 bitų, galime apskaičiuoti skaitmeninį diapazoną:
A / D (diapazonas) = 4095V (indikacija) / V (nuoroda).
A/D ∈ [14AH: FFFH]
„Smart Switch“maitinimo blokas
Grandinė leidžia sistemai valdyti maitinimą kiekvienam suprojektuotam blokui tiek iš mygtuko, tiek iš programinės įrangos MCU ir yra pagrįsta STM6601 išmaniuoju jungikliu su POWER, o ne RESET. Terminalai, kuriuos norime apsvarstyti, yra šie:
- PSHOLD - įvesties linija, kuri apibrėžia įrenginio būseną: traukiant žemai, prietaisas išjungia visus antrinius maitinimo blokus (+3.3V ir -3.3V). Jei laikoma HIGH - prietaisas palaiko įjungtą būseną.
- nSR ir nPB - įvesties linijos. Mygtukai su gnybtais. Kai ant šių kaiščių aptinkamas krintantis kraštas, įrenginys bando įjungti maitinimo didinimo / mažinimo režimą
- nINT - išvesties linija. Traukiama LOW kiekvieną kartą, kai paspaudžiamas mygtukas
- LT - Išvesties linija naudojama kaip antrinių maitinimo blokų maitinimo šaltinis. Kai laikoma LOW, abu antriniai maitinimo šaltiniai yra išjungti
Prieš pradedant galutinį dizainą, yra keletas svarbių pastabų:
- PSHOLD turėtų būti pakeltas iki 3,3 V, nes yra atvejų, kai MCU verčia visus įvesties/išvesties elementus būti HIGH-Z būsenoje. Tokiu atveju PSHOLD būsena iš MCU nežinoma ir gali smarkiai paveikti įrenginio programavimo procesą.
- STM6601 reikia užsisakyti su EN koregavimo galimybe ilgai paspaudus, o ne iš naujo nustatyti RESET (aš tai padariau).
Maitinimo blokas: +3.3V
Pagrindinis visų mūsų projekto sistemų maitinimo šaltinis. Kai +3,3 V linija laikoma GND lygyje (t. Y. Nėra įtampos), visi IC, išskyrus išmanųjį jungiklį, yra išjungti. Grandinė yra pagrįsta LDO LP-3875-3.3 IC, kurią galima valdyti per EN terminalą ir tiekti srovę iki 1A.
Šios grandinės energijos šaltinis yra akumuliatoriaus įtampa su prijungtu A/D indikatoriumi, skirtu konfigūruoti VBAT, panašiai kaip VBUS jutimo grandinė. Šiuo atveju skaičiavimai šiek tiek skiriasi;
V (nuo akumuliatoriaus iki A/D) = 0,59 V (baterija); A/D (diapazonas) ∈ [000H: C03H]
Maitinimo blokas: -3.3V
Neigiamos įtampos maitinimo grandinė leidžia mums sukurti simetriškas bangos formas, kurių nuolatinės srovės koeficientas yra 0 V (t. Y. Bangos formos vidutinė vertė gali būti 0 V). Ši grandinė yra pagrįsta LM2662MX IC - DC/DC keitikliu, kuris veikia „įkrovimo siurblio“metodu. Didžiausia grandinės išėjimo srovė yra 200 mA, o tai pakanka mūsų projektavimo reikalavimams - mes esame apriboti 80 mA išėjimo srove iš kiekvieno įrenginio kanalo.
IC atlieka visus reikalingus darbus, todėl tik dalys, kurias turime pritvirtinti, yra du elektrolitiniai kondensatoriai: C33 perjungimui ir C34 -3,3 V linijos apeiti (triukšmo mažinimo sumetimai). Perjungimo dažnis yra nereikšmingas, jei grandinę pastatome pakankamai toli nuo bangų formos generavimo dalių (aptarsime tai PCB išdėstymo etape).
Mikrovaldiklio blokas - MCU
Tai yra mūsų sistemos valdytojas ir generalinis direktorius - valdymas, tinklo valdymas, pranešimų perdavimas ir vartotojo sąsajos palaikymas - viską atlieka MCU.
Pasirinktas MCU yra „Atmel ATMEGA32L“, kur L reiškia palaikomą įtampos veikimą ∈ [2.7V: 5.5V]. Mūsų atveju darbinė įtampa yra +3,3 V.
Apsvarstykime pagrindinius operacijų blokus, kuriuos būtina suprasti, dirbant su MCU kuriant:
- Išorinis osciliatorius - yra pasirenkamas komponentas, nes mus domina 8MHz veikimo dažnis
-
Periferinis valdymas, SPI tinklas - Visi išoriniai įrenginiai (išskyrus ESP32) bendrauja su MCU per SPI. Visiems įrenginiams (SCK, MOSI, MISO) yra trys bendros linijos, o kiekviena periferinė grandinė turi savo CS („Chip Select“) liniją. SPI įrenginiai, kurie yra įrenginio dalis:
- D/A amplitudės valdymui - A kanalas
- D/A amplitudės valdymui - B kanalas
- AD9834 įrenginys - kanalas A
- AD9834 įrenginys - B kanalas
- D/A šališkosios įtampos valdymui - A kanalas
- D/A šališkosios įtampos valdymui - B kanalas
- Skaitmeninis potenciometras, skirtas LCD ryškumo/kontrasto nustatymams
- LCD palaikymas - Kadangi LCD yra bendras 20 x 4 simbolių ekranas, mes naudojame 4 bitų sąsają (D7: D4 eilutės), valdymo kaiščius (RS, E eilutės) ir ryškumo/kontrasto valdymą (V0 ir anodai)
- RGB šviesos diodų palaikymas - Šis modulis neprivalomas, tačiau prie MCU prijungta įprasta katodo RGB LED jungtis su atitinkamais rezistoriais.
-
Maitinimo valdymas - MCU atlieka maitinimo sistemos stebėjimą realaus laiko režimu ir tvarko visus reikalingus maitinimo įvykius:
- VBAT_ADC - akumuliatoriaus įtampos stebėjimas ir būsenos nustatymas (ADC0 kanalas)
- PWR_IND - išorinio maitinimo šaltinio jungties indikacija (ADC1 kanalas)
- PS_HOLD - visų apibrėžtų sistemų pirminė elektros energijos tiekimo linija. Kai MCU žemai traukia, prietaisas išjungiamas
- Išmaniojo jungiklio nutraukimo terminalas - mygtuko būsenos stebėjimas
- „WiFi“tinklo valdymas - ESP32: MCU palaiko ryšį su ESP32 per UART sąsają. Kadangi 8 MHz leidžia mums įgyvendinti 115200 duomenų perdavimo spartą su palyginti nedidele klaida, mes galime naudoti ESP32 grandinėje be išankstinių duomenų perdavimo greičio pokyčių apibrėžimų.
AVR ISP programuotojas
Mūsų MCU yra užprogramuotas per SPI, o atstatymo linija (/RST) turi būti ištempta AUKŠTU, kad tinkamai veiktų (jei ne - MCU visam laikui atsidurs atstatymo būsenoje).
Kad įrenginį būtų galima užprogramuoti ir įkrauti per USB, pridedu AVR ISP programuotoją (mažo dydžio produktas, pirktas iš „eBay“). Norint išlaikyti visišką įrenginio USB palaikymą, reikia susieti A tipo USB (D+, D-, VBUS ir GND) terminalus su AVR ISP įrenginiu.
Bangos generavimo grandinė
Įrenginio esmė yra šios grandinės. AD9834 yra mažos galios DDS įrenginys, suteikiantis mums visas bangos formas, kurias norėtume gauti iš sistemos. Grandinėse yra du nepriklausomi AD9834 IC su atskirais išoriniais 50 MHz osciliatoriais (kaip tai matyti schemose). Atskiro osciliatoriaus priežastis yra skaitmeninių grandinių triukšmo mažinimo sumetimai, todėl buvo nuspręsta tvarkyti tinkamas 50MHz linijas su generatoriais, esančiais greta AD9834.
Dabar pažvelkime į matematiką:
Kadangi DDS įrenginys veikia naudojant „Phase Wheel“technologiją, o išvesties vertė yra 28 bitų registre, mes galime matematiškai apibūdinti bangos formos generavimą:
dP (fazė) = ωdt; ω = P '= 2πf; f (AD9834) = ΔP * f (clk) / 2^28; ΔP ∈ [0: 2^28 - 1]
Ir pagal AD9834 duomenų lapą, atsižvelgiant į maksimalų dažnį, galima gauti išėjimo dažnio skiriamąją gebą:
Δf = k * f (osciliatorius) / f (maksimalus) = 0,28 * 50M / 28M = 0,187 [Hz]
AD9834 IC suteikia analoginę srovės išvestį trikampiui/sinusinei bangai (IOUT gnybtas) ir skaitmeninę išvestį kvadratinei bangai (SIGN_OUT terminalas). Ženklo bitų naudojimas yra šiek tiek sudėtingas, tačiau mes galime jį išspręsti - kiekvieną kartą, kai DDS peržengia palyginimo vertės slenkstį, SIGN_OUT elgiasi atitinkamai. Prie kiekvieno kanalo išvesties yra prijungtas 200 omų rezistorius, todėl išėjimo įtampa turėtų reikšmingas reikšmes:
I (vienas kanalas) = V (išėjimas) / R (įtampos pasirinkimas); V (išėjimas) = R (VS)*I (SS) = 200I (SS) [A]
Amplitudės valdymo (D/A) grandinės
Remiantis AD9834 duomenų lapu, jo amplitudė gali būti koreguojama, tiekiant srovę DDS visos skalės sistemai, taigi, naudojant dvigubą D/A IC, mes galime valdyti išėjimo signalo amplitudę, reguliuodami tą srovę. Dar kartą šiek tiek matematikos:
I (visa skalė) = 18 * (V_REF - V_DAC) / R_SET [A]
Pagal schemas ir kai kuriuos skaičius pridedant prie lygties:
I (visa skalė) = 3,86 - 1,17 * V_DAC [A]
D/A modulis, naudojamas projektuojant, yra 12 bitų MCP4922, kai srovė yra [0mA: 3,86mA] diapazone, o linijinės amplitudės funkcija yra:
V (amplitudės pasirinkimas) = 1 - [V (D / A) / (2^12 - 1)]
Bangos formos multipleksavimo grandinė
Kvadratinių bangų ir sinusų/trikampių bangų generavimo išėjimai yra atskirti AD9834, todėl abiem išėjimams turime naudoti didelės spartos multipleksavimo grandinę, kad būtų galima nuskaityti visas norimas bangų formas iš vieno atskirto kanalo. Multiplekserio IC yra ADG836L analoginis jungiklis su labai mažu atsparumu (~ 0,5 omo).
Pasirinkimo lentelė, kurią MCU naudoja išvestims, yra tokia:
Režimo pasirinkimas [D2: D1] | Išvesties kanalas A | Išvesties kanalas B.
00 | Sinusas/trikampis | Sinusas/trikampis 01 | Sinusas/trikampis | 10 kvadratas Kvadratas | Sinusas/trikampis 11 | Kvadratas | Kvadratas
Įtampos valdymo (D/A) grandinės
Viena iš pagrindinių bangos formos generatoriaus savybių yra nuolatinės srovės vertės valdymas. Šioje konstrukcijoje tai daroma nustatant norimą D/A įtampą kiekvienam kanalui, ir šios šališkosios įtampos sumuojamos su multipleksuotais išėjimais, apie kuriuos mes kalbėjome šiek tiek anksčiau.
Įtampa, gauta iš D/A, yra diapazone [0V: +3,3 V], todėl yra op-amp pagrindu sukurta grandinė, kuri susieja D/A diapazoną su [-3,3 V: +3,3 V], todėl prietaisas gali pateikti visą diapazoną norimo nuolatinės srovės komponento. Mes praleisime erzinančią analitinę matematiką ir sutelksime dėmesį į galutinius rezultatus:
V_OUT (B kanalas) = V_BIAS_B (+) - V_BIAS_B (-); V_OUT (A kanalas) = V_BIAS_A (+) - V_BIAS_A (-)
Dabar nuolatinės srovės komponentų diapazonas yra [-3.3V: +3.3V] diapazone.
Apibendrinimo grandinės - nuolatinės srovės komponentai ir bangos formos išėjimai
Šiuo metu mes turime viską, ko reikia tinkamam įrenginio išėjimui, - įtampos įtampa (nuolatinės srovės komponentas) visame įtampos diapazone ir multipleksuoti AD9834 išėjimai. Mes tai padarysime naudodami suminį stiprintuvą - op -amp konfigūraciją
Dar kartą praleiskime matematiką (jau apėmėme daug matematinių metodų) ir užrašykime galutinį suminio stiprintuvo išvesties rezultatą:
V (įrenginio išvestis) = V (teigiamas šališkumas) - V (neigiamas šališkumas) - V (multipleksuotas išėjimas) [V]
Taigi:
V_OUT = ΔV_BIAS - V_AD9834 [V]
BNC tipo išvesties jungtys yra prijungtos prie pasirinkimo rezistorių (R54, R55; R56, R57). To priežastis yra ta, kad tuo atveju, jei dizainas gali veikti netinkamai, vis tiek galime pasirinkti, ar norėtume naudoti suminį stiprintuvą.
Svarbi pastaba: Galutinio sumavimo stiprintuvų rezistorių tinklus gali reguliuoti dizaineris, kad būtų pakeista maksimali amplitudė, kurią galima gauti iš įrenginio. Mano atveju, visi stiprintuvai turi tą patį stiprinimą = 1, taigi maksimali buferinė amplitudė yra 0,7 Vpp trikampio/sinuso bangai ir 3,3 Vpp kvadratinei bangai. Konkretų matematinį metodą galima rasti prie pridedamų žingsnio vaizdų.
ESP32 kaip išorinis modulis
MCU palaiko ryšį su ESP32 per UART sąsają. Kadangi norėjau savo PCB ESP32, galima prijungti 4 terminalus: VCC, RX, TX, GND. J7 yra sąsajos jungtis tarp PCB, o ESP32 bus paskirta kaip išorinis modulis įrenginio viduje.
Vartotojo sąsaja - LCD ir garsiakalbis
Naudotas LCD yra bendras 20 x 4 simbolių ekranas su 4 bitų sąsaja. Kaip matyti iš konstrukcijos, prie skystųjų kristalų „A“ir „V0“gnybtų pritvirtintas skaitmeninis SPI potenciometras - jo tikslas yra sureguliuoti programuojamas LCD modulio ryškumas ir kontrastas.
Garsiakalbis suteikia vartotojui garso išvestį paprastu kvadratinių bangų generavimu iš MCU. BJT T1 valdo srovę per garsiakalbį, kuri gali būti tik dviejų būsenų - ON / OFF.
5 žingsnis: Aparatūros projektavimas - ESP32 modulis
ESP32 naudojamas kaip išorinis pagrindinių PCB modulis. Įrenginio ryšys grindžiamas AT komandomis, kurios pasiekiamos bendroje įrenginio programinėje įrangoje.
Nėra daug ką išplėsti dėl šio dizaino, tačiau yra keletas dizaino pastabų:
- Dėl nesėkmių tvarkymo naudojant tinkamą ESP32 UART modulį, aš prijungiau tris pasirinkimo rezistorius tiek TX, tiek RX linijoms. (0 omų už kiekvieną). Standartinei konfigūracijai UART2 modulis naudojamas AT komandoms (R4, R7 turi būti lituoti)
- Įrenginys turi 4 eilučių išvestį - VCC, GND, TX, RX.
- IO0 ir EN kaiščiai įvertina prietaiso veikimą ir turi būti suprojektuoti taip, kaip nurodyta schemose
Visas PCB funkcijas apimsime atlikdami kitą veiksmą.
6 žingsnis: PCB išdėstymas
PCB projektavimo tikslai
- Sukurkite įterptąją sistemą visiems integruotiems grandynams toje pačioje plokštėje
- Pagerinkite įrenginio veikimą sukurdami vieną pagrindinę PCB
- Kainų mažinimas - jei norite sužinoti kainas, pigių dizainų kaina yra tikrai maža
- Sumažinkite elektroninės plokštės dydį
- Lengva pašalinti triktis - kiekvienai galimai veikiančiai linijai galime naudoti TP (bandymo taškus).
Techniniai parametrai
Abi PCB: pagrindinė ir ESP32 plokštė turi tas pačias gamybos proceso charakteristikas - nebrangios ir tinkamos mūsų tikslams. Pažiūrėkime juos:
A - pagrindinė lenta
- Dydis: 10 cm x 5,8 cm
- Sluoksnių skaičius: 2
- PCB storis: 1,6 mm
- Minimali pėdsakų erdvė/plotis: 6/6mil
- Minimalus skylės skersmuo: 0,3 mm
- Varis iki PCB krašto minimalus atstumas: 20mil
- Paviršiaus apdaila: HASL (gana gerai atrodantis sidabro spalvos pigus tipas)
B - pagrindinė plokštė
- Dydis: 3 cm x 4 cm
- Sluoksnių skaičius: 2
- PCB storis: 1,6 mm
- Minimali pėdsakų erdvė/plotis: 6/6mil
- Minimalus skylės skersmuo: 0,3 mm
- Varis iki PCB krašto minimalus atstumas: 20mil
- Paviršiaus apdaila: HASL
7 žingsnis: 3D korpusas
Aš to nesukūriau pats, nes tuo metu įkalbinėjau šį įrenginį dirbti, todėl visiškai nežinojau visų 3D spausdinimo pagrindų. Taigi aš panaudojau „Thingiverse“SCAD projektą ir pritvirtinau skirtingas angas prie sienų pagal savo įrenginio specifikacijas.
- Spausdinimo įrenginys: „Creality Ender-3“
- Lovos tipas: stiklas, 5 mm storio
- Gijų skersmuo: 1,75 mm
- Pluošto tipas: PLA+
- Purkštuko skersmuo: 0,4 mm
- Pradinis greitis: 20 mm/sek
- Vidutinis greitis: 65 mm/sek
- Parama: N/A
- Užpildas: 25%
-
Temperatūra:
- Lova: 60 (oC)
- Purkštukas: 215 (oC)
- Gijų spalva: juoda
- Bendras angų skaičius: 5
-
Gaubto plokščių skaičius: 4
- TOP Shell
- Apatinis apvalkalas
- Priekinė panelė
- Galinis skydelis
8 žingsnis: Programinės įrangos diegimas - MCU
„GitHub“nuoroda į „Android“ir „Atmega32“kodą
Programinės įrangos algoritmas
Visos operacijos, kurias atlieka MCU, aprašytos pridedamose schemose. Be to, pridedamas projekto kodas. Apžvelkime programinės įrangos specifikacijas:
Įjungti
Šiame etape MCU atlieka visas inicijavimo sekas ir nustato saugomo ryšio tipą su „Android“įrenginiu: tiesioginis „WiFi“arba WLAN tinklo ryšys - šie duomenys saugomi EEPROM. Šiame etape vartotojas gali iš naujo nustatyti „Android“įrenginio susiejimo tipą.
Tiesioginis „Android“įrenginio susiejimas
Šio tipo susiejimas pagrįstas „WiFi“tinklo sukūrimu naudojant „FuncGen“įrenginį. Tai sukurs AP (prieigos tašką) ir TCP serverį vietinio įrenginio IP su konkrečiu SSID („WiFi“tinklo pavadinimu) ir konkrečiu prievado numeriu. Įrenginys turi išlaikyti būseną - atvira ryšiams.
Kai „Android“įrenginys prijungtas prie „FuncGen“, MCU įjungiamas AKTYVUS režimas ir reaguoja pagal vartotojo nurodymus iš „Android“įrenginio.
WLAN poravimas
Kad galėtų bendrauti vietiniame „WiFi“tinkle, MCU turėtų duoti komandas ESP32 sukurti AP, bendrauti su „Android“įrenginiu ir keistis svarbiausiais tinklo duomenimis:
- „Android“įrenginys gauna iš „FuncGen“savo MAC adresą, saugo jį atmintyje.
- „FuncGen“įrenginys gauna iš „Android“įrenginio pasirinktų WLAN parametrų: SSID, saugumo tipo ir slaptažodžio ir išsaugo jį EEPROM.
Kai įrenginiai iš tikrųjų prijungti prie to paties WLAN, „Android“įrenginys ieškos „FuncGen“nuskaitydamas visus prie WLAN prijungtų įrenginių MAC adresus. Kai „Android“įrenginys nustato MAC atitiktį, jis bando bendrauti.
Prijungimas ir būsenos tvarkymas - MCU
Kai įrenginiai bendrauja tarpusavyje, protokolas (žr. Paskutinį žingsnį) išlieka tas pats, o schema yra ta pati.
Įrenginio būsenos stebėjimas
Laikinas pertraukimas suteikia MCU būtiną informaciją apie būsenos tvarkymą. Kiekvieno laikmačio pertraukimo ciklo metu atnaujinamas šis parametrų sąrašas:
- Išorinis maitinimo šaltinis - įjungtas/išjungtas
- Baterijos įtampos būsena
- UI atnaujinimas kiekvienam pritaikymui
- Mygtukas: paspaustas/nespaustas
9 veiksmas: programinės įrangos diegimas - „Android“programa
„Android“programa parašyta „Java-Android“stiliumi. Pabandysiu tai paaiškinti taip pat, kaip ir ankstesnius veiksmus - padalindamas algoritmą į atskirus kodo blokus.
Įjungimo seka
Pirmoji prietaiso seka. Čia pateikiamas programos logotipas kartu su „Android“įrenginio GPS ir „WiFi“modulių įgalinimu (nesijaudinkite, GPS reikalingas tik tinkamam „WiFi“tinklų nuskaitymui).
Pagrindinis meniu
Kai programa bus paleista, ekrane pasirodys keturi mygtukai. Mygtuko veiksmas:
- TIESIOGINIS JUNGTIS: inicijuojamas prisijungimas prie „FuncGen“AP naudojant IOT_FUNCGEN SSID. Jei ryšys sėkmingas, įrenginys įjungia pagrindinį vartotojo sąsajos režimą.
- WIFI JUNGTIS: Įrenginys patikrina, ar atmintyje yra išsaugoti duomenų parametrai: wifi.txt, mac.txt. Jei nėra išsaugotų duomenų, įrenginys atmeta vartotojo užklausą ir pateikia iššokantį pranešimą, kad pirmiausia reikia susieti WLAN.
- SUPORAVIMAS: Bendraukite su „FuncGen“taip pat, kaip ir „DIRECT CONNECTION“, tačiau vietoj nuolatinio keitimosi žinutėmis paspaudžiamas vienas rankos paspaudimas. „Android“įrenginys patikrina, ar jis jau prijungtas prie „WiFi“tinklo, ir prašo vartotojo įvesti slaptažodį. Jei pakartotinis prisijungimas yra sėkmingas, „Android“įrenginys saugo SSID ir slaptažodžius faile „wifi.txt“. Po sėkmingo bendravimo su „FuncGen“, jis saugo gautą MAC adresą „mac.txt“faile.
- Išeiti: Užteks pasakyti:)
„WiFi“nuskaitymo tvarkyklė
Norėjau, kad programa veiktų visiškai ir nebūtų atlikti koregavimai ne programoje. Taigi, sukūriau „WiFi“skaitytuvą, kuris atlieka visas reikalingas operacijas, kad prisijungtų prie „WiFi“tinklo žinomu slaptažodžiu ir SSID.
Duomenų perdavimas ir TCP ryšys
Tai yra pagrindinis kodo blokas programoje. Visiems vartotojo sąsajos įrenginiams yra nustatytas tam tikro formato pranešimas (priešpaskutinis žingsnis), kuris priverčia „FuncGen“pateikti pageidaujamą kanalų išvestį. Veikloje yra trijų tipų UI laukai:
-
Ieškoti juostų: čia mes apibrėžiame realų FuncGen išvesties parametrų diapazoną
- Amplitudė
- DC poslinkis
- LCD ryškumas
- LCD kontrastas
- Teksto redagavimas: norint, kad sveikųjų skaičių reikšmės būtų aiškiai apibrėžtos ir tikslios, dažnis įvedamas tik teksto laukeliuose
-
Mygtukai: parametrų pasirinkimas iš galimų sąrašų:
-
Bangos formos tipas
- Sinusas
- Trikampis
- DC
- Kvadratas
- IŠJUNGTA
-
Gauti informaciją
- Baterijos būsena (procentas)
- Kintamosios srovės būsena (išorinis maitinimo šaltinis)
-
Įkrovos parinktis („FuncGen MCU“)
- Gamyklos nustatymas
- Perkrauti
- Išjungti
- Tiesioginis - paleiskite iš naujo tiesioginio susiejimo režimu
- WLAN - paleiskite iš naujo naudodami WLAN susiejimo režimą
- Išeiti į pagrindinį meniu: užteko:)
-
10 žingsnis: bandymas
Rekomenduojamas:
Funkcijų generatorius: 12 žingsnių (su paveikslėliais)
Funkcijų generatorius: šioje instrukcijoje aprašomas funkcijų generatoriaus, pagrįsto „Maxims“analoginis integruotas grandynas MAX038, dizainas. Funkcijų generatorius yra labai naudingas įrankis elektronikos keistuoliams. Jis reikalingas rezonansinių grandinių derinimui, audito testavimui
Nešiojamas funkcijų generatorius „Arduino“: 7 žingsniai (su paveikslėliais)
Nešiojamasis funkcijų generatorius „Arduino“: Funkcijų generatorius yra labai naudingas įrankis, ypač kai svarstome išbandyti savo grandinės reakciją į tam tikrą signalą. Šioje instrukcijoje aprašysiu mažo, lengvai naudojamo, nešiojamo funkcijų generatoriaus kūrimo seką. Savybės
„Pasidaryk pats“funkcijų generatorius (ICL8038) 0 Hz - 400 Khz: 11 žingsnių
„Pasidaryk pats“funkcijų generatorius (ICL8038) 0 Hz - 400 Khz: Funkcijų generatoriai yra labai naudingas įrankis elektronikos stende, tačiau tai gali būti gana brangu, tačiau turime daug galimybių jį pigiai sukurti. Šiame projekte naudojame ICl8038
„Arduino“tonų generatorius be bibliotekos ar serijinių funkcijų (su pertraukomis): 10 žingsnių
„Arduino“tonų generatorius, neturintis bibliotekos ar serijinių funkcijų (su pertraukomis): tai nėra kažkas, ko paprastai norėčiau pamokyti, aš norėčiau savo metalo dirbinių, bet kadangi esu elektrotechnikos studentas ir turiu mokytis mikrovaldiklių ( Įterptųjų sistemų projektavimas), aš maniau, kad padarysiu pamokomą vieną iš savo
Itin nešiojamas mikropluošto ekrano valiklis (nešiojamas/nešiojamas): 4 žingsniai
Itin nešiojamas mikropluošto ekrano valiklis (nešiojamasis kompiuteris/nešiojamasis kompiuteris): esu įpratęs prarasti daugelį savo įrankių ir pan., Todėl man kilo mintis, kodėl gi nepadarius nešiojamojo kompiuterio itin nešiojamojo mikropluošto ekrano valiklio, kuris tinka mano kompiuterio kortelės lizdui. Ši idėja gali būti pritaikyta bet kuriam kompiuterio kortelės lizdui bet kuriame nešiojamajame kompiuteryje