![Przenośny generator funkcji na Wi-Fi i Androida: 10 kroków Przenośny generator funkcji na Wi-Fi i Androida: 10 kroków](https://i.howwhatproduce.com/images/001/image-2808-j.webp)
Spisu treści:
- Krok 1: Schemat blokowy - sprzęt
- Krok 2: Schemat blokowy - Sieć
- Krok 3: Części, narzędzia, środowisko IDE i zestawienie materiałów
- Krok 4: Projekt sprzętu - płyta główna
- Krok 5: Projektowanie sprzętu - moduł ESP32
- Krok 6: Układ PCB
- Krok 7: Obudowa 3D
- Krok 8: Implementacja oprogramowania - MCU
- Krok 9: Implementacja oprogramowania - aplikacja na Androida
- Krok 10: Testowanie
2025 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2025-01-23 15:02
![Przenośny generator funkcji na WiFi i Android Przenośny generator funkcji na WiFi i Android](https://i.howwhatproduce.com/images/001/image-2808-1-j.webp)
![Przenośny generator funkcji na WiFi i Android Przenośny generator funkcji na WiFi i Android](https://i.howwhatproduce.com/images/001/image-2808-2-j.webp)
![Przenośny generator funkcji na WiFi i Android Przenośny generator funkcji na WiFi i Android](https://i.howwhatproduce.com/images/001/image-2808-3-j.webp)
![Przenośny generator funkcji na WiFi i Android Przenośny generator funkcji na WiFi i Android](https://i.howwhatproduce.com/images/001/image-2808-4-j.webp)
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](https://i.howwhatproduce.com/images/001/image-2808-5-j.webp)
![Schemat blokowy - sprzęt Schemat blokowy - sprzęt](https://i.howwhatproduce.com/images/001/image-2808-6-j.webp)
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ć](https://i.howwhatproduce.com/images/001/image-2808-7-j.webp)
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](https://i.howwhatproduce.com/images/001/image-2808-8-j.webp)
![Części, narzędzia, środowisko IDE i zestawienie materiałów Części, narzędzia, środowisko IDE i zestawienie materiałów](https://i.howwhatproduce.com/images/001/image-2808-9-j.webp)
![Części, narzędzia, środowisko IDE i zestawienie materiałów Części, narzędzia, środowisko IDE i zestawienie materiałów](https://i.howwhatproduce.com/images/001/image-2808-10-j.webp)
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](https://i.howwhatproduce.com/images/001/image-2808-11-j.webp)
![Projekt sprzętu - płyta główna Projekt sprzętu - płyta główna](https://i.howwhatproduce.com/images/001/image-2808-12-j.webp)
![Projekt sprzętu - płyta główna Projekt sprzętu - płyta główna](https://i.howwhatproduce.com/images/001/image-2808-13-j.webp)
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:
- C/A do kontroli amplitudy - kanał A
- C/A do sterowania amplitudą - kanał B
- Urządzenie AD9834 - Kanał A
- Urządzenie AD9834 - Kanał B
- C/A do kontroli napięcia polaryzacji - kanał A
- C/A do kontroli napięcia polaryzacji - kanał B
- 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:
- VBAT_ADC - Monitorowanie napięcia akumulatora i określanie jego stanu (kanał ADC0)
- PWR_IND - Sygnalizacja podłączenia zewnętrznego zasilania (kanał ADC1)
- PS_HOLD - linia włączania zasilania podstawowego dla wszystkich zdefiniowanych systemów. Gdy MCU jest obniżany, urządzenie jest wyłączone
- 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](https://i.howwhatproduce.com/images/001/image-2808-14-j.webp)
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](https://i.howwhatproduce.com/images/001/image-2808-15-j.webp)
![Układ PCB Układ PCB](https://i.howwhatproduce.com/images/001/image-2808-16-j.webp)
![Układ PCB Układ PCB](https://i.howwhatproduce.com/images/001/image-2808-17-j.webp)
Cele projektowania PCB
- Stwórz system wbudowany dla wszystkich układów scalonych na tej samej płycie
- Popraw wydajność urządzenia, projektując pojedynczą główną płytkę drukowaną
- Redukcja kosztów - jeśli chcesz sprawdzić ceny, tanie projekty są NAPRAWDĘ tanie
- Zminimalizuj rozmiar płytki elektronicznej
- Ł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](https://i.howwhatproduce.com/images/001/image-2808-18-j.webp)
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.
- Urządzenie drukujące: Creality Ender-3
- Rodzaj łóżka: Szkło, grubość 5 mm
- Średnica żarnika: 1,75 mm
- Rodzaj filamentu: PLA+
- Średnica dyszy: 0,4 mm
- Prędkość początkowa: 20 mm/s
- Średnia prędkość: 65 mm/s
- Wsparcie: nie dotyczy
- Wypełnienie: 25%
-
Temperatura:
- Łóżko: 60(oC)
- Dysza: 215(oC)
- Kolor żarnika: czarny
- Całkowita liczba przysłon: 5
-
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](https://i.howwhatproduce.com/images/001/image-2808-19-j.webp)
![Wdrażanie oprogramowania - MCU Wdrażanie oprogramowania - MCU](https://i.howwhatproduce.com/images/001/image-2808-20-j.webp)
![Wdrażanie oprogramowania - MCU Wdrażanie oprogramowania - MCU](https://i.howwhatproduce.com/images/001/image-2808-21-j.webp)
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](https://i.howwhatproduce.com/images/001/image-2808-22-j.webp)
![Wdrażanie oprogramowania - aplikacja na Androida Wdrażanie oprogramowania - aplikacja na Androida](https://i.howwhatproduce.com/images/001/image-2808-23-j.webp)
![Wdrażanie oprogramowania - aplikacja na Androida Wdrażanie oprogramowania - aplikacja na Androida](https://i.howwhatproduce.com/images/001/image-2808-24-j.webp)
![Wdrażanie oprogramowania - aplikacja na Androida Wdrażanie oprogramowania - aplikacja na Androida](https://i.howwhatproduce.com/images/001/image-2808-25-j.webp)
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:
- 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.
- 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.
- 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.
- 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:
-
Seek Bars: Tutaj definiujemy rzeczywisty zakres parametrów wyjściowych FuncGen
- Amplituda
- Przesunięcie DC
- Jasność LCD
- Kontrast LCD
- 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
-
Przyciski: Wybór parametrów z dostępnych list:
-
Typ przebiegu
- Sinus
- Trójkąt
- DC
- Kwadrat
- WYŁĄCZONY
-
Zdobyć informacje
- Stan baterii (procent)
- Stan AC (zasilanie zewnętrzne)
-
Opcja rozruchu (dla FuncGen MCU)
- Ustawienia Fabryczne
- Uruchom ponownie
- Zamknąć
- Bezpośrednie - uruchom ponownie w trybie bezpośredniego parowania
- WLAN - Uruchom ponownie w trybie parowania WLAN
- Wyjście do Menu Głównego: Dość powiedziane:)
-
Krok 10: Testowanie
Zalecana:
Generator funkcji: 12 kroków (ze zdjęciami)
![Generator funkcji: 12 kroków (ze zdjęciami) Generator funkcji: 12 kroków (ze zdjęciami)](https://i.howwhatproduce.com/images/001/image-68-28-j.webp)
Generator funkcyjny: Ta instrukcja opisuje konstrukcję generatora funkcyjnego opartego na analogowym układzie scalonym MAX038 firmy Maxims. Generator funkcji jest bardzo przydatnym narzędziem dla maniaków elektroniki. Jest potrzebny do strojenia obwodów rezonansowych, testowania au
Generator funkcji DIY z STC MCU Łatwo: 7 kroków (ze zdjęciami)
![Generator funkcji DIY z STC MCU Łatwo: 7 kroków (ze zdjęciami) Generator funkcji DIY z STC MCU Łatwo: 7 kroków (ze zdjęciami)](https://i.howwhatproduce.com/images/007/image-18359-j.webp)
Generator funkcji DIY z MCU STC Łatwo: jest to generator funkcji wykonany z MCU STC. Potrzebujesz tylko kilku elementów, a obwód jest prosty. Specyfikacja Wyjście: Jednokanałowy prostokątny Częstotliwość przebiegu: 1Hz~2MHz Częstotliwość sinusoidalna: 1Hz~10kHz Amplituda: VCC, około 5V Obciąża
Prosty generator funkcji: 5 kroków
![Prosty generator funkcji: 5 kroków Prosty generator funkcji: 5 kroków](https://i.howwhatproduce.com/images/004/image-10257-13-j.webp)
Prosty generator funkcji: W mojej ostatniej instrukcji pokazałem, jak zbudować generator sygnału pwm i użyłem go do odfiltrowania z niego innych przebiegów. W tej instrukcji pokażę, jak zrobić prostą funkcję / generator częstotliwości, jak sterować przekaźnikiem i jak b
Przenośny generator funkcji na Arduino: 7 kroków (ze zdjęciami)
![Przenośny generator funkcji na Arduino: 7 kroków (ze zdjęciami) Przenośny generator funkcji na Arduino: 7 kroków (ze zdjęciami)](https://i.howwhatproduce.com/images/002/image-4650-19-j.webp)
Przenośny generator funkcji na Arduino: Generator funkcji jest bardzo przydatnym narzędziem, zwłaszcza gdy rozważamy testowanie odpowiedzi naszego obwodu na określony sygnał. W tej instrukcji opiszę sekwencję budowania małego, łatwego w użyciu, przenośnego generatora funkcji. Cechy
Generator funkcji DIY (ICL8038) 0 Hz - 400 kHz: 11 kroków
![Generator funkcji DIY (ICL8038) 0 Hz - 400 kHz: 11 kroków Generator funkcji DIY (ICL8038) 0 Hz - 400 kHz: 11 kroków](https://i.howwhatproduce.com/images/003/image-7114-9-j.webp)
Generator funkcyjny DIY (ICL8038) 0 Hz - 400 kHz: Generatory funkcyjne są bardzo przydatnym narzędziem na stanowisku elektronicznym, ale mogą być dość drogie, ale mamy wiele opcji, aby je zbudować tanio. W tym projekcie używamy ICl8038