Spisu treści:

Przenośny generator funkcji na Wi-Fi i Androida: 10 kroków
Przenośny generator funkcji na Wi-Fi i Androida: 10 kroków

Wideo: Przenośny generator funkcji na Wi-Fi i Androida: 10 kroków

Wideo: Przenośny generator funkcji na Wi-Fi i Androida: 10 kroków
Wideo: 8. [Poradnik "Android Krok Po Kroku"]- Wi-Fi 2024, Lipiec
Anonim
Przenośny generator funkcji na WiFi i Android
Przenośny generator funkcji na WiFi i Android
Przenośny generator funkcji na WiFi i Android
Przenośny generator funkcji na WiFi i Android
Przenośny generator funkcji na WiFi i Android
Przenośny generator funkcji na WiFi i Android
Przenośny generator funkcji na WiFi i Android
Przenośny generator funkcji na WiFi i Android

Pod koniec XX wieku pojawiły się różne innowacje technologiczne, zwłaszcza w dziedzinie komunikacji; ale nie tylko. Dla nas użytkownicy, konsumenci i inżynierowie wyszli na jaw szybki rozwój urządzeń elektronicznych, które mogą znacznie ułatwić nam życie: inteligentne zegarki, inteligentne domy, smartfony itp.

Ponieważ w dzisiejszych czasach wszystko może być „inteligentne”, zdecydowałem się zaprojektować bardzo przydatne urządzenie, które będzie częścią niezbędnego elektronicznego sprzętu laboratoryjnego - przenośny generator funkcji, sterowany za pomocą smartfona z systemem Android za pośrednictwem Wi-Fi Direct lub WiFi Local Area Network (WLAN).).

Dlaczego powinniśmy budować to urządzenie?

Zdecydowana większość sprzętu testującego jest obecnie dość droga. A czasami te urządzenia nie są przenośne. Jako rozwiązanie dla wysokich cen, braku przenośności i braku dostępu do sieci, urządzenie dostarcza dwukanałowy generator przebiegów, który jest rzeczywiście przenośny i ma nieograniczony dostęp do sieci - internetowej lub lokalnej.

No i oczywiście urządzenie powinno być zbudowane z entuzjazmu, z zachowaniem zasad DIY - Czasem po prostu musimy robić rzeczy sami, żeby czuć się dobrze:)

Kluczowe cechy

Zasilacz

  • Złącze USB typu A, zarówno dla systemów zasilania, jak i programowania
  • Kompletny system zarządzania baterią Li-Ion - Ładowanie i stabilne tryby
  • Implementacja Smart Switch - nie ma potrzeby używania przełącznika zasilania
  • Podwójne zasilanie: +3,3 V i -3,3 V dla symetrycznego generowania przebiegu napięcia

Generowanie przebiegu

  • Implementacja poziomu DC w kaskadzie wyjściowej - przesunięty przebieg między granicami napięcia
  • Generowanie 4-rodzajów przebiegów w oparciu o DDS - sinusoidalne, trójkątne, kwadratowe i DC
  • Obsługa częstotliwości do 10 MHz
  • Prąd wyjściowy do 80mA z maksymalną dostępnością mocy 500mW
  • Odseparowane kanały do generowania przebiegów - dzielone obwody oparte na AD9834

Komunikacja

  • Wdrożenie ESP32 - Odpowiednie możliwości WiFi
  • Pełna obsługa protokołu TCP/IP przez urządzenie generatora i smartfon z systemem Android
  • Możliwość przechowywania parametrów użytkownika dla każdego cyklu urządzenia
  • Monitorowanie stanu - oba systemy są świadome siebie nawzajem: FuncGen (nazwijmy to w ten sposób od teraz) i smartfon.

Interfejs użytkownika

  • 20 x 4 znakowy wyświetlacz LCD z prostym 4-bitowym interfejsem danych
  • Aplikacja na Androida - pełna kontrola użytkownika nad urządzeniem FuncGen
  • Obwód brzęczyka - dźwiękowa informacja zwrotna dla użytkownika

Krok 1: Schemat blokowy - sprzęt

Schemat blokowy - sprzęt
Schemat blokowy - sprzęt
Schemat blokowy - sprzęt
Schemat blokowy - sprzęt

Jednostka mikrokontrolera - ATMEGA32L

Mikrokontroler to programowalny układ scalony, który składa się z wszystkich funkcji komputera, które znajdują się w jednym elektronicznym układzie scalonym. W naszym przypadku jest to „mózg” i centralny element systemu. Zadaniem MCU jest zarządzanie wszystkimi systemami peryferyjnymi, obsługa komunikacji pomiędzy tymi systemami, kontrolowanie pracy sprzętu oraz zapewnienie pełnej obsługi interfejsu użytkownika i jego interakcji z rzeczywistym użytkownikiem. Projekt oparty na mikrokontrolerze ATMEGA32L, który może pracować na 3,3V i częstotliwości 8MHz.

Komunikacja SoC - ESP32

Ten SoC (System on Chip) zapewnia pełną obsługę komunikacji dla FuncGen - dostęp do funkcji Wi-Fi, w tym komunikacji bezpośredniej, lokalnej lub internetowej. Cele urządzenia to:

  • Obsługa transmisji danych między aplikacją na Androida a urządzeniem FuncGen
  • Zarządzanie wiadomościami kontrolnymi/danych
  • Wsparcie ciągłej konfiguracji TCP/IP Klient-Serwer

W naszym projekcie SoC to espressif ESP32, który jest zbyt popularny, aby go jeszcze bardziej rozbudować:)

System zarządzania akumulatorem litowo-jonowym

W celu przekształcenia naszego urządzenia w przenośne urządzenie zawiera zaprojektowany układ ładowania akumulatorów Li-Ion. Układ oparty jest na układzie scalonym MC73831, z kontrolowanym prądem ładowania poprzez regulację wartości pojedynczego rezystora programującego (omówimy ten temat w kroku Schematy). Wejście zasilania urządzenia to złącze USB typu A.

Inteligentny obwód przełącznika

Obwód sterowania zasilaniem urządzenia z inteligentnym przełącznikiem zapewnia pełną kontrolę oprogramowania nad sekwencją wyłączania urządzenia i brak potrzeby stosowania zewnętrznego przełącznika do odcięcia napięcia akumulatora urządzenia. Wszystkie operacje zasilania są wykonywane przez naciśnięcie przycisku i oprogramowania MCU. W niektórych przypadkach konieczne będzie wyłączenie systemu: niskie napięcie baterii, wysokie napięcie wejściowe, błąd komunikacji i tak dalej. Inteligentny przełącznik oparty jest na inteligentnym układzie scalonym przełącznika STM6601, który jest tani i bardzo przyjazny w obsłudze.

Główny zasilacz

Jednostka ta składa się z dwóch zasilanych bateryjnie obwodów zasilania - +3,3V dla wszystkich obwodów zasilania cyfrowego/analogowego oraz -3,3V dla wyjścia symetrycznego FunGen względem potencjału 0V (tzn. generowany przebieg można ustawić w [-3,3V:3,3V] region.

  • Główny obwód zasilania oparty jest na liniowym regulatorze napięcia LP3875-3.3 LDO (low dropout) 1A.
  • Wtórny obwód zasilania oparty jest na układzie scalonym LM2262MX, który dokonuje konwersji ujemnego napięcia DC-DC za pomocą kondensatora-pompy ładującej - układu, na którym opiera się układ scalony.

System generatorów przebiegów

System został zaprojektowany z naciskiem na oddzielne układy scalone DDS (bezpośrednia synteza cyfrowa), które umożliwiają pełną kontrolę generowania przebiegów przez SPI (szeregowy interfejs peryferyjny) MCU. Obwody użyte w projekcie to Analog Devices AD9834, które mogą dostarczać różne rodzaje przebiegów. Wyzwania, z którymi musimy się zmierzyć podczas pracy z AD9834 to:

  • Stała amplituda przebiegu: amplituda przebiegu jest kontrolowana przez zewnętrzny moduł DAC
  • Bez względu na poziom offsetu DC: Implementacja obwodów sumujących z pożądanymi wartościami offsetu DC
  • Oddzielne wyjścia dla fali prostokątnej i trójkątnej/sinusoidalnej: Implementacja obwodu przełączającego wysokiej częstotliwości, dzięki czemu każde pojedyncze wyjście kanału może zapewnić wszystkie pożądane przebiegi: sinusoidalne, trójkątne, kwadratowe i DC.

Wyświetlacz ciekłokrystaliczny

LCD jest częścią UI (interfejsu użytkownika), a jego celem jest umożliwienie użytkownikowi zrozumienia, co robi urządzenie w trybie czasu rzeczywistego. Współdziała z użytkownikiem w każdym stanie urządzenia.

Brzęczyk

Prosty obwód generatora tonów dla dodatkowej informacji zwrotnej od urządzenia do użytkownika.

Zintegrowany programista ISP

Każdy inżynier ma problem z procesem programowania: zawsze istnieje najgorsza potrzeba rozmontowania produktu w celu przeprogramowania go nowym oprogramowaniem. Aby przezwyciężyć tę niedogodność, programator AVR ISP został podłączony do urządzenia od środka, natomiast linie danych USB i zasilania podpięte są do złącza USB typu A urządzenia. W tej konfiguracji wystarczy podłączyć nasz FuncGen przez kabel USB do programowania lub ładowania!

Krok 2: Schemat blokowy - Sieć

Schemat blokowy - sieć
Schemat blokowy - sieć

Dwukanałowy generator funkcyjny

Główne urządzenie. Ten, który sprawdziliśmy w poprzednim kroku

ESP-WROOM-32

Zintegrowany System-on-Chip z funkcjami Wi-Fi i BLE. SoC jest podłączony do płyty głównej (omówimy to w kroku ze schematami) za pośrednictwem modułu UART i działa jako transciever wiadomości między urządzeniem głównym a smartfonem z systemem Android.

Sieć lokalna WiFi

Smartfon i urządzenie będą komunikować się za pośrednictwem sieci Wi-Fi direct lub sieci lokalnej, w oparciu o konfigurację serwera/klienta TCP. Gdy urządzenia rozpoznają się w sieci WiFi, urządzenie główne tworzy serwer TCP o odpowiednich parametrach i jest w stanie wysyłać/odbierać wiadomości. Urządzenie pełni funkcję drugorzędną w stosunku do smartfona. Z kolei urządzenie z systemem Android łączy się z serwerem TCP jako urządzenie sieciowe klienta, ale jest traktowane jako główny nadajnik wiadomości - smartfon jest tym, który inicjuje pełny cykl komunikacji: Wysyłanie wiadomości - odbieranie odpowiedzi.

Smartfon z Androidem

Smartfon z systemem operacyjnym Android, który działa na aplikacji FuncGen

Krok 3: Części, narzędzia, środowisko IDE i zestawienie materiałów

Części, narzędzia, środowisko IDE i zestawienie materiałów
Części, narzędzia, środowisko IDE i zestawienie materiałów
Części, narzędzia, środowisko IDE i zestawienie materiałów
Części, narzędzia, środowisko IDE i zestawienie materiałów
Części, narzędzia, środowisko IDE i zestawienie materiałów
Części, narzędzia, środowisko IDE i zestawienie materiałów

Zestawienie materiałów (patrz załączona tabela XLS)

Interfejs użytkownika i połączenia systemowe

  • 1 x 2004A Char-LCD 20x4 niebieski
  • 1 x złącze USB typu B
  • 1x10 Zestaw Mini Micro JST XH 2,54mm 4 Pin
  • 1x6 sztuk Chwilowy SW

Zamawianie PCB (wg Seeed Studio)

Materiał bazowy FR-4

Liczba warstw 2 warstwy

Ilość PCB 10

Liczba różnych wzorów 1

Grubość PCB 1,6 mm

Kolor PCB Niebieski

Wykończenie powierzchni HASL

Minimalna zapora maski lutowniczej 0,4 mm↑

Waga miedzi 1 uncja

Minimalny rozmiar otworu wiertła 0,3 mm

Szerokość śladu / odstępy 6/6 mil

Półotwory platerowane / Otwory koronowe Nie

Kontrola impedancji Nie

Narzędzia

  • Pistolet na gorący klej
  • Pinceta
  • Nóż
  • ~ Przewód 22AWG do obsługi usterek
  • Lutownica/stacja lutownicza
  • Cyna lutownicza
  • Stacja naprawcza SMD (opcja)
  • Drukarka 3D (opcja)
  • Wytłaczanie pliku
  • Programista AVR ISP
  • Konwerter USB na szeregowy (opcjonalnie, do celów debugowania)

Zintegrowane środowisko programistyczne (IDE) i oprogramowanie

  • Autodesk EAGLE lub edytor schematów Cadence / edytor PCB Allegro
  • OpenSCAD (opcjonalnie)
  • Ultimaker Cura (opcjonalnie)
  • Saleae Logic (do rozwiązywania problemów)
  • Atmel Studio 6.3 lub nowszy
  • Android Studio lub Eclipse IDE
  • Monitor szeregowy Docklight/inne oprogramowanie do monitorowania portu COM;
  • ProgISP do programowania flash AVR ATMEGA32L

Krok 4: Projekt sprzętu - płyta główna

Projekt sprzętu - płyta główna
Projekt sprzętu - płyta główna
Projekt sprzętu - płyta główna
Projekt sprzętu - płyta główna
Projekt sprzętu - płyta główna
Projekt sprzętu - płyta główna

Obwód zarządzania baterią

Układ ładowania akumulatora oparty jest na układzie scalonym MCP7383, który pozwala na dobranie pożądanego prądu ładowania dla akumulatora Li-Ion - 3,7V o pojemności 850mAh. Prąd ładowania ustawiamy programując wartość rezystora (R1) w naszym przypadku

R1 = 3KOhm, I(ładowanie) = 400mA

Napięcie USB VBUS jest filtrowane przez filtr π (C1, L3, C3) i działa jako źródło zasilania dla obwodu ładowania.

Obwód dzielnika napięcia (R2, R3) pozwala MCU wskazać, czy zewnętrzny zasilacz USB jest podłączony, czy nie, poprzez dostarczenie następującego napięcia do kanału A/D MCU:

V(wskazanie) ~ (2/3)V(BUS)

Ponieważ nasz A/D ATMEGA32L jest 12-bitowy, możemy obliczyć zakres cyfrowy:

A/D (zakres) = 4095 V (wskazanie) / V (REF).

A/D ∈ [14AH: FFFH]

Zasilacz z inteligentnym przełącznikiem

Układ pozwala systemowi na sterowanie zasilaniem każdego zaprojektowanego bloku zarówno z przycisku jak i oprogramowania na MCU i jest oparty na STM6601 Smart-Switch z opcją POWER zamiast RESET. Terminale, które chcemy rozważyć, to:

  • PSHOLD - Linia wejściowa, która określa stan urządzenia: jeśli jest wyciągnięty w stan LOW, urządzenie wyłącza wszystkie zasilacze wtórne (+3.3V i -3.3V). Jeśli jest przytrzymany HIGH - urządzenie utrzymuje stan ON.
  • nSR i nPB - Linie wejściowe. Zaciski przyciskowe. Po wykryciu spadającej krawędzi na tych pinach urządzenie próbuje przejść do trybu zwiększania/wyłączania zasilania
  • nINT - Linia wyjściowa. Pociągnięty LOW za każdym razem, gdy przycisk jest wciśnięty
  • PL - Linia wyjściowa, służy do włączania zasilania dla zasilaczy pomocniczych. Gdy jest trzymany w stanie LOW, oba dodatkowe zasilacze są wyłączone

Zanim przejdziemy do ostatecznego projektu, jest kilka ważnych uwag:

  • PSHOLD powinien być podciągnięty do 3,3 V, ponieważ zdarzają się przypadki, gdy MCU wymuszają, aby wszystkie I/O były w stanie HIGH-Z. W takim przypadku stan PSHOLD z MCU jest nieznany i może drastycznie wpłynąć na proces programowania urządzenia.
  • STM6601 powinien być zamawiany z opcją regulacji EN przy długim naciśnięciu, zamiast opcji RESET (w tym się zakochałem).

Zasilacz: +3,3 V

Zasilanie główne dla wszystkich systemów w naszym projekcie. Gdy linia +3.3V jest utrzymywana na poziomie GND (tj. Brak napięcia), wszystkie układy scalone z wyjątkiem inteligentnego przełącznika są wyłączone. Obwód oparty jest na układzie scalonym LDO LP-3875-3.3, z możliwością sterowania przez zacisk EN i dostarczania prądu do 1A.

Źródłem zasilania dla tego obwodu jest napięcie akumulatora z dołączonym wskaźnikiem A/D do wykrywania VBAT w konfiguracji podobnej do obwodu wykrywania VBUS. W tym przypadku obliczenia nieco się różnią;

V (akumulator do A/D) = 0,59 V (akumulator); A/D (zakres) ∈ [000H: C03H]

Zasilacz: -3,3 V

Obwód zasilania ujemnego napięcia pozwala nam na generowanie przebiegów symetrycznych o współczynniku DC równym 0V (tj. średnia wartość przebiegu może wynosić 0V). Obwód ten oparty jest na przetworniku LM2662MX IC - DC/DC pracującym na zasadzie „pompy ładującej”. Maksymalny prąd wyjściowy układu wynosi 200mA, co jest wystarczające dla naszych wymagań projektowych - ogranicza nas prąd wyjściowy 80mA z każdego kanału urządzenia.

IC wykonuje całą niezbędną pracę, więc jedyne części, które musimy podłączyć, to dwa kondensatory elektrolityczne: C33 do przełączania i C34 do obejścia linii -3,3 V (uwzględnienie redukcji szumów). Częstotliwość przełączania jest pomijalna w projekcie, jeśli umieszczamy obwód wystarczająco daleko od części generujących przebieg (omówimy to w kroku Układ PCB).

Jednostka mikrokontrolera - MCU

To jest menedżer i dyrektor generalny naszego systemu - kontrola, obsługa sieci, transmisja wiadomości i obsługa interfejsu użytkownika - wszystko odbywa się przez MCU.

Wybrany MCU to Atmel ATMEGA32L, gdzie L oznacza pracę pod napięciem ∈ [2,7V: 5,5V]. W naszym przypadku napięcie robocze wynosi +3,3V.

Rozważmy główne bloki operacyjne, które są niezbędne do zrozumienia pracy z MCU w naszym projekcie:

  • Oscylator zewnętrzny - jest elementem opcjonalnym, ponieważ interesuje nas częstotliwość robocza 8 MHz
  • Kontrola urządzeń peryferyjnych, sieć SPI - Wszystkie urządzenia peryferyjne (z wyjątkiem ESP32) komunikują się z MCU przez SPI. Istnieją trzy wspólne linie dla wszystkich urządzeń (SCK, MOSI, MISO), a każdy obwód peryferyjny ma swoją dedykowaną linię CS (Chip Select). Urządzenia SPI wchodzące w skład urządzenia:

    1. C/A do kontroli amplitudy - kanał A
    2. C/A do sterowania amplitudą - kanał B
    3. Urządzenie AD9834 - Kanał A
    4. Urządzenie AD9834 - Kanał B
    5. C/A do kontroli napięcia polaryzacji - kanał A
    6. C/A do kontroli napięcia polaryzacji - kanał B
    7. Potencjometr cyfrowy do ustawień jasności/kontrastu LCD
  • Obsługa LCD - Ponieważ LCD jest typowym wyświetlaczem 20 x 4 znaków, używamy 4-bitowego interfejsu (linie D7:D4), pinów kontrolnych (linie RS, E) i kontroli jasności/kontrastu (linie V0 i anoda)
  • Obsługa diod LED RGB - Ten moduł jest opcjonalny, ale istnieje wspólne katodowe złącze LED RGB z odpowiednimi rezystorami, podłączone do MCU.
  • Kontrola zasilania - MCU monitoruje system zasilania w trybie czasu rzeczywistego i obsługuje wszystkie potrzebne zdarzenia zasilania:

    1. VBAT_ADC - Monitorowanie napięcia akumulatora i określanie jego stanu (kanał ADC0)
    2. PWR_IND - Sygnalizacja podłączenia zewnętrznego zasilania (kanał ADC1)
    3. PS_HOLD - linia włączania zasilania podstawowego dla wszystkich zdefiniowanych systemów. Gdy MCU jest obniżany, urządzenie jest wyłączone
    4. Terminal przerwań inteligentnego przełącznika - Monitorowanie stanu przycisku
  • Zarządzanie siecią WiFi - ESP32: MCU komunikuje się z ESP32 poprzez interfejs UART. Ponieważ 8MHz pozwala nam na implementację szybkości transmisji 115200 ze stosunkowo małym błędem, możemy zastosować ESP32 w układzie bez predefiniowania zmian szybkości transmisji.

Programista AVR ISP

Nasz MCU jest zaprogramowany przez SPI z linią resetującą (/RST) musi być wyciągnięta na WYSOKO dla prawidłowego działania (jeśli nie - MCU znajdzie się na zawsze w stanie resetowania).

Aby urządzenie było programowane i ładowane przez USB, dołączyłem programator AVR ISP (Mały produkt, kupiony w serwisie eBay). W celu utrzymania pełnej obsługi USB urządzenia, konieczne jest powiązanie terminali USB typu A (D+, D-, VBUS i GND) z urządzeniem AVR ISP.

Obwód generowania przebiegu

Rdzeniem urządzenia są te obwody. AD9834 to urządzenie DDS o małej mocy, które zapewnia nam wszystkie przebiegi, które chcielibyśmy pobrać z systemu. Układy zawierają dwa niezależne układy scalone AD9834 z odseparowanymi zewnętrznymi oscylatorami 50MHz (jak widać na schemacie). Powodem wydzielonego oscylatora jest względy redukcji szumów obwodów cyfrowych, więc zdecydowano się obsłużyć odpowiednie linie 50MHz z oscylatorami umieszczonymi w sąsiedztwie AD9834.

Teraz spójrzmy na trochę matematyki:

Ponieważ urządzenie DDS działa w technologii Phase Wheel z wartością wyjściową umieszczoną w 28-bitowym rejestrze, możemy matematycznie opisać generowanie przebiegu:

dP(faza) = ωdt; ω = P' = 2πf; f(AD9834) = ΔP * f(clk) / 2^28; ΔP ∈ [0: 2^28 - 1]

I zgodnie z kartą katalogową AD9834, biorąc pod uwagę częstotliwość maksymalną, rozdzielczość częstotliwości wyjściowej można uzyskać:

Δf = k * f(oscylator) / f(maksymalnie) = 0,28 * 50M / 28M = 0,187[Hz]

Układy scalone AD9834 zapewniają analogowe wyjście prądowe dla fali trójkątnej/sinusoidalnej (złącze IOUT) i wyjście cyfrowe dla fali prostokątnej (złącze SIGN_OUT). Użycie bitu znaku jest trochę skomplikowane, ale jesteśmy w stanie sobie z tym poradzić - Za każdym razem, gdy DDS przekroczy próg wartości porównania, SIGN_OUT zachowuje się odpowiednio. Rezystor 200Ohm jest podłączony do wyjścia każdego kanału, więc napięcie wyjściowe będzie miało sensowne wartości:

I(pojedynczy kanał) = V(wyjście) / R(wybór napięcia); V(wyjście) = R(VS)*I(SS) = 200I(SS) [A]

Obwody sterowania amplitudą (C/A)

Zgodnie z arkuszem danych AD9834 jego amplitudę można regulować, dostarczając prąd do systemu DDS o pełnej skali, więc za pomocą podwójnego układu D/A możemy kontrolować amplitudę sygnału wyjściowego, dostosowując ten prąd. Jeszcze raz trochę matematyki:

I (pełna skala) = 18 * (V_REF - V_DAC) / R_SET [A]

Zgodnie ze schematami i wstawiając kilka liczb do równania:

I (pełna skala) = 3,86 - 1,17 * V_DAC [A]

Moduł D/A zastosowany w konstrukcji to 12-bitowy MCP4922, gdy prąd jest w zakresie [0mA: 3,86mA] a liniowa funkcja amplitudy wynosi:

V(wybór amplitudy) = 1 - [V(D/A) / (2^12 - 1)]

Obwód multipleksowania przebiegów

Wyjścia generujące falę prostokątną i falę sinusoidalną/trójkątną są oddzielone w AD9834, dlatego musimy użyć szybkiego obwodu multipleksowania dla obu wyjść, aby umożliwić pobranie wszystkich pożądanych przebiegów fal z jednego odseparowanego kanału. Układ scalony multipleksera to analogowy przełącznik ADG836L o bardzo niskiej rezystancji włączania (~0,5 Ohm).

Tabela wyboru, której MCU używa dla wyjść, tak jak jest:

Wybór trybu [D2:D1] | Kanał wyjściowy A | Kanał wyjściowy B

00 | Sinus/Trójkąt | Sinus/Trójkąt 01 | Sinus/Trójkąt | Kwadrat 10 | Kwadrat | Sinus/Trójkąt 11 | Kwadrat | Kwadrat

Obwody sterowania napięciem polaryzacji (C/A)

Jedną z głównych cech generatora przebiegów jest sterowanie jego wartością DC. W tym projekcie odbywa się to poprzez ustawienie żądanego napięcia D/A na każdy kanał, a te napięcia polaryzacji są sumowane ze zmultipleksowanymi wyjściami, które omówiliśmy nieco wcześniej.

Napięcie pobierane z D/A mieści się w zakresie [0V: +3.3V], więc istnieje obwód oparty na wzmacniaczu operacyjnym, który mapuje zakres D/A do [-3.3V: +3.3V], dzięki czemu urządzenie zapewnia pełny zakres żądanej składowej DC. Pominiemy irytującą matematykę analityczną i skupimy się tylko na ostatecznych wynikach:

V_OUT(kanał B) = V_BIAS_B(+) - V_BIAS_B(-); V_OUT(kanał A) = V_BIAS_A(+) - V_BIAS_A(-)

Teraz zakres składowej DC znajduje się w zakresie [-3,3 V: +3,3 V].

Obwody sumujące - składowe prądu stałego i wyjścia falowe

W tym momencie mamy wszystko, czego potrzebujemy do prawidłowego wyjścia urządzenia – napięcie biasu (składowa DC) w pełnym zakresie napięciowym oraz wyjścia multipleksowane AD9834. Zrobimy to za pomocą wzmacniacza sumującego - konfiguracja op-amp

Pomińmy jeszcze raz matematykę (omówiliśmy już wiele podejść matematycznych) i zapiszmy końcowy wynik wyjścia wzmacniacza sumującego:

V(wyjście urządzenia) = V(dodatnie odchylenie) - V(ujemne odchylenie) - V(zmultipleksowane wyjście) [V]

Stąd:

V_OUT = ΔV_BIAS - V_AD9834 [V]

Złącza wyjściowe typu BNC połączone są z rezystorami doboru (R54, R55; R56, R57). Powodem tego jest to, że w przypadku, gdy konstrukcja może być niesprawna, nadal możemy wybrać, czy chcemy zastosować wzmacniacz sumujący.

Ważna uwaga: Sieci rezystorów końcowych wzmacniaczy sumujących mogą być dostosowane przez projektanta, aby zmienić maksymalną amplitudę, którą można pobrać z urządzenia. W moim przypadku wszystkie wzmacniacze mają to samo wzmocnienie = 1, więc maksymalna buforowana amplituda wynosi 0,7 Vpp dla fali trójkątnej / sinusoidalnej i 3,3 Vpp dla fali prostokątnej. Specyficzne podejście matematyczne można znaleźć wśród załączonych obrazów kroku.

ESP32 jako moduł zewnętrzny

MCU komunikuje się z ESP32 poprzez interfejs UART. Ponieważ chciałem mieć własną płytkę drukowaną dla ESP32, dostępne są 4 zaciski: VCC, RX, TX, GND. J7 to złącze interfejsu pomiędzy płytkami, a ESP32 zostanie przydzielony jako moduł zewnętrzny wewnątrz urządzenia.

Interfejs użytkownika - wyświetlacz LCD i głośnik

Zastosowany wyświetlacz LCD to typowy wyświetlacz 20x4 znaków z 4-bitowym interfejsem. Jak widać z projektu do zacisków LCD "A" i "V0" dołączony jest potencjometr cyfrowy SPI - jego zadaniem jest regulacja jasność i kontrast modułu LCD programowo.

Głośnik zapewnia wyjście dźwięku dla użytkownika poprzez proste generowanie fali prostokątnej z MCU. BJT T1 kontroluje prąd płynący przez głośnik, który może znajdować się tylko w dwóch stanach - ON / OFF.

Krok 5: Projektowanie sprzętu - moduł ESP32

Projekt sprzętu - moduł ESP32
Projekt sprzętu - moduł ESP32

ESP32 służy jako zewnętrzny moduł do głównej płytki drukowanej. Komunikacja urządzenia opiera się na poleceniach AT, które są dostępne w oprogramowaniu układowym ogólnego urządzenia.

Nie ma wiele do rozwinięcia w tym projekcie, ale są pewne uwagi dotyczące projektu:

  • Do obsługi awarii przy użyciu odpowiedniego modułu UART ESP32 dołączyłem trzy rezystory doboru zarówno dla linii TX jak i RX. (0Ohm dla każdego). W konfiguracji standardowej do komend AT wykorzystywany jest moduł UART2 (należy przylutować R4, R7)
  • Urządzenie posiada 4-liniowe wyjście - VCC, GND, TX, RX.
  • Piny IO0 i EN oceniają działanie urządzenia i powinny być zaprojektowane tak, jak przedstawiono na schematach

Wszystkie funkcje PCB omówimy w następnym kroku.

Krok 6: Układ PCB

Układ PCB
Układ PCB
Układ PCB
Układ PCB
Układ PCB
Układ PCB

Cele projektowania PCB

  1. Stwórz system wbudowany dla wszystkich układów scalonych na tej samej płycie
  2. Popraw wydajność urządzenia, projektując pojedynczą główną płytkę drukowaną
  3. Redukcja kosztów - jeśli chcesz sprawdzić ceny, tanie projekty są NAPRAWDĘ tanie
  4. Zminimalizuj rozmiar płytki elektronicznej
  5. Łatwość rozwiązywania problemów - możemy użyć punktów TP (punktów testowych) dla każdej możliwej niesprawnej linii.

Parametry techniczne

Obie płytki PCB: główna i ESP32 mają te same cechy dla procesu produkcyjnego - tanie i sprawne dla naszych celów. Zobaczmy je:

A - Zarząd Główny

  • Rozmiar: 10 cm x 5,8 cm
  • Liczba warstw: 2
  • Grubość PCB: 1,6 mm
  • Minimalna przestrzeń śladu/szerokość: 6/6mil
  • Minimalna średnica otworu: 0,3 mm
  • Miedź do krawędzi PCB minimalna odległość: 20 mil
  • Wykończenie powierzchni: HASL (dość dobrze wyglądający tani kolor srebrny)

B - Zarząd Główny

  • Rozmiar: 3 cm x 4 cm
  • Liczba warstw: 2
  • Grubość PCB: 1,6 mm
  • Minimalna przestrzeń śladu/szerokość: 6/6mil
  • Minimalna średnica otworu: 0,3 mm
  • Miedź do krawędzi PCB minimalna odległość: 20 mil
  • Wykończenie powierzchni: HASL

Krok 7: Obudowa 3D

Obudowa 3D
Obudowa 3D

Nie projektowałem tego sam, bo wtedy namawiałem to urządzenie do pracy, więc nie miałem pojęcia o wszystkich podstawach drukowania 3D. Użyłem więc projektu SCAD z Thingiverse i przymocowałem różne apertury do granic, zgodnie ze specyfikacją mojego urządzenia.

  1. Urządzenie drukujące: Creality Ender-3
  2. Rodzaj łóżka: Szkło, grubość 5 mm
  3. Średnica żarnika: 1,75 mm
  4. Rodzaj filamentu: PLA+
  5. Średnica dyszy: 0,4 mm
  6. Prędkość początkowa: 20 mm/s
  7. Średnia prędkość: 65 mm/s
  8. Wsparcie: nie dotyczy
  9. Wypełnienie: 25%
  10. Temperatura:

    • Łóżko: 60(oC)
    • Dysza: 215(oC)
  11. Kolor żarnika: czarny
  12. Całkowita liczba przysłon: 5
  13. Liczba paneli obudowy: 4

    • TOP Shell
    • Powłoka dolna
    • Przedni panel
    • Panel tylny

Krok 8: Implementacja oprogramowania - MCU

Wdrażanie oprogramowania - MCU
Wdrażanie oprogramowania - MCU
Wdrażanie oprogramowania - MCU
Wdrażanie oprogramowania - MCU
Wdrażanie oprogramowania - MCU
Wdrażanie oprogramowania - MCU

GitHub Link do kodu Androida i Atmega32

Algorytm oprogramowania

Wszystkie operacje wykonywane przez MCU zostały opisane w załączonych schematach blokowych. Dodatkowo dołączony jest kod do projektu. Omówmy specyfikacje oprogramowania:

Wzmocnienie

Na tym etapie MCU wykonuje wszystkie sekwencje inicjalizacji wraz z określeniem zapisanego typu komunikacji z urządzeniem z systemem Android: Bezpośrednia komunikacja sieciowa WiFi lub WLAN - dane te są zapisywane w pamięci EEPROM. Na tym etapie użytkownik może przedefiniować typ parowania urządzenia z systemem Android.

Bezpośrednie parowanie urządzeń z Androidem

Ten rodzaj parowania opiera się na tworzeniu sieci WiFi przez urządzenie FuncGen. Utworzy AP (punkt dostępowy) i serwer TCP na lokalnym IP urządzenia z określonym SSID (nazwą sieci WiFi) i określonym numerem portu. Urządzenie powinno utrzymywać stan - otwarte dla połączeń.

Gdy urządzenie z systemem Android jest połączone z FuncGen, MCU przechodzi w tryb AKTYWNY i reaguje zgodnie z instrukcjami użytkownika z urządzenia z systemem Android.

Parowanie WLAN

Aby komunikować się w lokalnej sieci WiFi, MCU powinno wydać polecenia dla ESP32, aby utworzyć AP, komunikować się z urządzeniem z systemem Android i wymieniać kluczowe dane sieciowe:

  • Urządzenie z systemem Android otrzymuje od FuncGen swój adres MAC, przechowuje go w pamięci.
  • Urządzenie FuncGen odbiera z urządzenia z systemem Android wybrane parametry sieci WLAN: SSID, rodzaj zabezpieczenia oraz Hasło i przechowuje je w pamięci EEPROM.

Gdy urządzenia są rzeczywiście podłączone do tej samej sieci WLAN, urządzenie z systemem Android wyszuka FuncGen, skanując wszystkie adresy MAC urządzeń podłączonych do sieci WLAN. Gdy urządzenie z Androidem określa dopasowanie MAC, próbuje się komunikować.

Obsługa połączeń i stanu - MCU

Gdy urządzenia komunikują się ze sobą, protokół (patrz krok wstępny) pozostaje taki sam, a schemat blokowy jest taki sam.

Monitorowanie stanu urządzenia

Przerwanie czasowe zapewnia MCU niezbędne szczegóły dotyczące obsługi stanu. W każdym cyklu przerwania czasowego aktualizowana jest następująca lista parametrów:

  • Zasilanie zewnętrzne - Włącz/Wyłącz
  • Stan napięcia akumulatora
  • Aktualizacja interfejsu użytkownika dla każdego dostosowania
  • Przycisk: wciśnięty/nie wciśnięty

Krok 9: Implementacja oprogramowania - aplikacja na Androida

Wdrażanie oprogramowania - aplikacja na Androida
Wdrażanie oprogramowania - aplikacja na Androida
Wdrażanie oprogramowania - aplikacja na Androida
Wdrażanie oprogramowania - aplikacja na Androida
Wdrażanie oprogramowania - aplikacja na Androida
Wdrażanie oprogramowania - aplikacja na Androida
Wdrażanie oprogramowania - aplikacja na Androida
Wdrażanie oprogramowania - aplikacja na Androida

Aplikacja na Androida jest napisana w stylu Java-Android. Postaram się to wyjaśnić w taki sam sposób jak poprzednie kroki - dzieląc algorytm na osobne bloki kodu.

Sekwencja włączania

Pierwsza sekwencja urządzenia. Tutaj prezentowane jest logo aplikacji wraz z włączaniem modułów GPS i WiFi urządzenia z Androidem (nie martw się, GPS jest potrzebny tylko do skanowania odpowiednich sieci WiFi).

Menu główne

Po uruchomieniu aplikacji na ekranie pojawią się cztery przyciski. Działanie przycisków:

  1. POŁĄCZENIE BEZPOŚREDNIE: Inicjowanie połączenia z AP FuncGen przez identyfikator SSID IOT_FUNCGEN. Jeśli połączenie się powiedzie, urządzenie przejdzie w tryb głównego interfejsu użytkownika.
  2. POŁĄCZENIE WIFI: Urządzenie sprawdza, czy w pamięci są zapisane parametry danych: wifi.txt, mac.txt. Jeśli nie ma zapisanych żadnych danych, urządzenie odrzuci żądanie użytkownika i wyświetli komunikat, że najpierw należy przeprowadzić parowanie WLAN.
  3. PAROWANIE: Komunikacja z FuncGen w taki sam sposób jak POŁĄCZENIE BEZPOŚREDNIE, ale zamiast ciągłej wymiany wiadomości następuje pojedyncze uścisk dłoni. Urządzenie z systemem Android sprawdza, czy jest już podłączone do sieci WiFi i prosi użytkownika o podanie hasła. Jeśli ponowne połączenie się powiedzie, urządzenie z Androidem przechowuje identyfikator SSID i hasło w pliku wifi.txt. Po udanej komunikacji z FuncGen zapisuje otrzymany adres MAC w pliku mac.txt.
  4. Wyjście: Dość powiedziane:)

Menedżer skanowania WiFi

Chciałem, aby aplikacja była w pełni operacyjna i nie wymagała wprowadzania zmian poza aplikacją. Dlatego zaprojektowałem skaner WiFi, który wykonuje wszystkie niezbędne operacje, aby połączyć się z siecią WiFi ze znanym hasłem i identyfikatorem SSID.

Transmisja danych i komunikacja TCP

To jest główny blok kodu w aplikacji. Dla wszystkich jednostek interfejsu użytkownika istnieje zdefiniowany komunikat w określonym formacie (krok przedfinalowy), który zmusza FuncGen do zapewnienia żądanego wyjścia dla kanałów. W działaniu występują trzy typy pól interfejsu użytkownika:

  1. Seek Bars: Tutaj definiujemy rzeczywisty zakres parametrów wyjściowych FuncGen

    1. Amplituda
    2. Przesunięcie DC
    3. Jasność LCD
    4. Kontrast LCD
  2. Edycja tekstu: Aby wartości liczb całkowitych były dobrze zdefiniowane i precyzyjne, wprowadzanie częstotliwości odbywa się wyłącznie za pomocą pól tekstowych
  3. Przyciski: Wybór parametrów z dostępnych list:

    1. Typ przebiegu

      1. Sinus
      2. Trójkąt
      3. DC
      4. Kwadrat
      5. WYŁĄCZONY
    2. Zdobyć informacje

      1. Stan baterii (procent)
      2. Stan AC (zasilanie zewnętrzne)
    3. Opcja rozruchu (dla FuncGen MCU)

      1. Ustawienia Fabryczne
      2. Uruchom ponownie
      3. Zamknąć
      4. Bezpośrednie - uruchom ponownie w trybie bezpośredniego parowania
      5. WLAN - Uruchom ponownie w trybie parowania WLAN
    4. Wyjście do Menu Głównego: Dość powiedziane:)

Krok 10: Testowanie

Zalecana: