Turinys:

Nešiojamas funkcijų generatorius „WiFi“ir „Android“: 10 žingsnių
Nešiojamas funkcijų generatorius „WiFi“ir „Android“: 10 žingsnių

Video: Nešiojamas funkcijų generatorius „WiFi“ir „Android“: 10 žingsnių

Video: Nešiojamas funkcijų generatorius „WiFi“ir „Android“: 10 žingsnių
Video: NEŠIOJAMAS GENERATORIUS CFMOTO I27 2.7KW 2024, Liepa
Anonim
Nešiojamas funkcijų generatorius „WiFi“ir „Android“
Nešiojamas funkcijų generatorius „WiFi“ir „Android“
Nešiojamas funkcijų generatorius „WiFi“ir „Android“
Nešiojamas funkcijų generatorius „WiFi“ir „Android“
Nešiojamas funkcijų generatorius „WiFi“ir „Android“
Nešiojamas funkcijų generatorius „WiFi“ir „Android“
Nešiojamas funkcijų generatorius „WiFi“ir „Android“
Nešiojamas funkcijų generatorius „WiFi“ir „Android“

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

Blokinė diagrama - aparatinė įranga
Blokinė diagrama - aparatinė įranga
Blokinė diagrama - aparatinė įranga
Blokinė diagrama - 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

Blokinė diagrama - tinklų kūrimas
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

Dalys, įrankiai, IDE ir medžiagų sąrašas
Dalys, įrankiai, IDE ir medžiagų sąrašas
Dalys, įrankiai, IDE ir medžiagų sąrašas
Dalys, įrankiai, IDE ir medžiagų sąrašas
Dalys, įrankiai, IDE ir medžiagų sąrašas
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ė

Techninės įrangos dizainas - pagrindinė plokštė
Techninės įrangos dizainas - pagrindinė plokštė
Techninės įrangos dizainas - pagrindinė plokštė
Techninės įrangos dizainas - pagrindinė plokštė
Techninės įrangos dizainas - pagrindinė plokštė
Techninės įrangos dizainas - 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:

    1. D/A amplitudės valdymui - A kanalas
    2. D/A amplitudės valdymui - B kanalas
    3. AD9834 įrenginys - kanalas A
    4. AD9834 įrenginys - B kanalas
    5. D/A šališkosios įtampos valdymui - A kanalas
    6. D/A šališkosios įtampos valdymui - B kanalas
    7. 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:

    1. VBAT_ADC - akumuliatoriaus įtampos stebėjimas ir būsenos nustatymas (ADC0 kanalas)
    2. PWR_IND - išorinio maitinimo šaltinio jungties indikacija (ADC1 kanalas)
    3. PS_HOLD - visų apibrėžtų sistemų pirminė elektros energijos tiekimo linija. Kai MCU žemai traukia, prietaisas išjungiamas
    4. 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

Techninės įrangos dizainas - ESP32 modulis
Techninės įrangos dizainas - 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 išdėstymas
PCB išdėstymas
PCB išdėstymas
PCB išdėstymas
PCB išdėstymas
PCB išdėstymas

PCB projektavimo tikslai

  1. Sukurkite įterptąją sistemą visiems integruotiems grandynams toje pačioje plokštėje
  2. Pagerinkite įrenginio veikimą sukurdami vieną pagrindinę PCB
  3. Kainų mažinimas - jei norite sužinoti kainas, pigių dizainų kaina yra tikrai maža
  4. Sumažinkite elektroninės plokštės dydį
  5. 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

3D korpusas
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.

  1. Spausdinimo įrenginys: „Creality Ender-3“
  2. Lovos tipas: stiklas, 5 mm storio
  3. Gijų skersmuo: 1,75 mm
  4. Pluošto tipas: PLA+
  5. Purkštuko skersmuo: 0,4 mm
  6. Pradinis greitis: 20 mm/sek
  7. Vidutinis greitis: 65 mm/sek
  8. Parama: N/A
  9. Užpildas: 25%
  10. Temperatūra:

    • Lova: 60 (oC)
    • Purkštukas: 215 (oC)
  11. Gijų spalva: juoda
  12. Bendras angų skaičius: 5
  13. Gaubto plokščių skaičius: 4

    • TOP Shell
    • Apatinis apvalkalas
    • Priekinė panelė
    • Galinis skydelis

8 žingsnis: Programinės įrangos diegimas - MCU

Programinės įrangos diegimas - MCU
Programinės įrangos diegimas - MCU
Programinės įrangos diegimas - MCU
Programinės įrangos diegimas - MCU
Programinės įrangos diegimas - MCU
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

Programinės įrangos diegimas - „Android“programa
Programinės įrangos diegimas - „Android“programa
Programinės įrangos diegimas - „Android“programa
Programinės įrangos diegimas - „Android“programa
Programinės įrangos diegimas - „Android“programa
Programinės įrangos diegimas - „Android“programa
Programinės įrangos diegimas - „Android“programa
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:

  1. TIESIOGINIS JUNGTIS: inicijuojamas prisijungimas prie „FuncGen“AP naudojant IOT_FUNCGEN SSID. Jei ryšys sėkmingas, įrenginys įjungia pagrindinį vartotojo sąsajos režimą.
  2. 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.
  3. 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.
  4. 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:

  1. Ieškoti juostų: čia mes apibrėžiame realų FuncGen išvesties parametrų diapazoną

    1. Amplitudė
    2. DC poslinkis
    3. LCD ryškumas
    4. LCD kontrastas
  2. 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
  3. Mygtukai: parametrų pasirinkimas iš galimų sąrašų:

    1. Bangos formos tipas

      1. Sinusas
      2. Trikampis
      3. DC
      4. Kvadratas
      5. IŠJUNGTA
    2. Gauti informaciją

      1. Baterijos būsena (procentas)
      2. Kintamosios srovės būsena (išorinis maitinimo šaltinis)
    3. Įkrovos parinktis („FuncGen MCU“)

      1. Gamyklos nustatymas
      2. Perkrauti
      3. Išjungti
      4. Tiesioginis - paleiskite iš naujo tiesioginio susiejimo režimu
      5. WLAN - paleiskite iš naujo naudodami WLAN susiejimo režimą
    4. Išeiti į pagrindinį meniu: užteko:)

10 žingsnis: bandymas

Rekomenduojamas: