Spisu treści:
- Krok 1: Projektowanie PCB
- Krok 2: Projektowanie protokołu
- Krok 3: Projektowanie oprogramowania układowego
- Krok 4: Łączenie przez Flowcode
- Krok 5: Inne metody łączenia
- Krok 6: Gotowy produkt
Wideo: Wbudowana uniwersalna karta interfejsu - sterowanie USB/Bluetooth/WIFI: 6 kroków
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:31
Często stwierdzam, że od podstaw tworzę biblioteki dla nowych wbudowanych modułów na podstawie arkusza danych urządzenia. Podczas generowania biblioteki utknąłem w cyklu kodu, kompilacji, programowania i testowania, upewniając się, że wszystko działa i jest wolne od błędów. Często czas kompilacji i programowania może być znacznie dłuższy niż czas potrzebny na edycję kodu, więc sposób na wycięcie tych kroków podczas programowania byłby bardzo przydatny.
Często stwierdzam, że chcę połączyć wbudowany moduł z komputerem. Jeśli moduł nie ma konkretnie połączenia USB, co często ma miejsce, zwykle musisz kupić drogi konwerter USB, który wykona tylko jedno zadanie, takie jak tylko SPI lub tylko I2C.
Właśnie z tych powodów zdecydowałem się stworzyć uniwersalną płytkę interfejsu. Został zaprojektowany, aby umożliwić łatwą komunikację opartą na komputerze PC z wbudowanymi modułami.
Wbudowane funkcje interfejsu płyty, na które się zdecydowałem, obejmują.
- Cyfrowe we/wy
- I2C
- SPI
- UART
- PWM
- Siłownik
- Wejście ADC
- Wyjście DAC
Z których można korzystać całkowicie niezależnie.
Płytką interfejsu można sterować za pomocą połączenia USB z komputerem PC, ale ma ona również opcjonalne połączenia modułu WIFI lub Bluetooth, aby umożliwić korzystanie z karty zdalnie lub w scenariuszu typu IoT.
Korzystając ze standardowych nagłówków SIL o rastrze 2,54 mm, można bezpośrednio podłączyć żeńskie kable dupontowe między płytą a wbudowanym modułem, co pozwala na szybkie, niezawodne i wolne od lutowania połączenia.
Myślałem też o dodaniu takich rzeczy jak CAN, LIN, H-bridge itp., ale może to być później z wersją v2.
Krok 1: Projektowanie PCB
Projektując PCB lubię starać się, aby wszystko było tak proste, jak to tylko możliwe. Kiedy zamierzasz budować płytki ręcznie, ważne jest, aby dodawać komponenty tylko wtedy, gdy mają określony cel i wykorzystują jak najwięcej wewnętrznych funkcji mikrokontrolera.
Patrząc na mojego preferowanego dostawcę elektroniki, znalazłem chip, z którym czułem się komfortowo, który miał funkcje, których szukałem, i był rozsądny. Chip, na którym wylądowałem, to PIC18F24K50.
Dzięki dostępnym 23 pinom we/wy pozwoliło mi to uzyskać te funkcje
- Cyfrowe we/wy
- I2C
- SPI
- UART
- PWM x 2
- Silnik serwo x 6
- Wejście ADC x 3
- Wyjście DAC x 1
- We/Wy zasilane z 5V lub 3V3
- Dioda stanu
Jedną wadą układu scalonego, który wybrałem, jest to, że ma tylko jedno urządzenie peryferyjne UART, więc użycie metody sterowania Bluetooth lub Wifi uniemożliwi korzystanie z połączenia UART.
Na powyższych zdjęciach pokazano gotowy schemat i płytkę drukowaną.
Krok 2: Projektowanie protokołu
Pierwszym krokiem w projektowaniu protokołu jest podjęcie decyzji, co konkretnie będzie potrzebne, aby tablica była w stanie zrobić. Rozbijanie elementów zapewnia lepszy poziom kontroli, podczas gdy łączenie elementów upraszcza interfejs i zmniejsza ruch komunikacyjny między płytą a komputerem. To gra w równowagę i trudna do perfekcji.
Dla każdej funkcji planszy należy wskazać dowolne parametry i zwroty. Na przykład funkcja odczytująca dane wejściowe ADC może mieć parametr określający, które dane wejściowe mają być próbkowane, oraz wartość zwracaną zawierającą wynik.
W moim projekcie oto lista funkcji, które chciałem uwzględnić:
-
Cyfrowe we/wy
- SetPin (PinNumber, State)
- Stan = GetPin (PinNumber)
-
SPI
- Inicjalizacja (tryb SPI)
- Wejście danych = Transfer (Wyjście danych)
- ControlChipSelect (kanał, stan)
- Ustaw Preskaler (szybkość)
-
I2C
- Zainicjuj ()
- Początek ()
- Uruchom ponownie ()
- Zatrzymać ()
- SlaveAck = Wyślij (DataOut)
- DataIn = Odbierz (ostatni)
-
UART
- Inicjuj()
- Bajt TX (wyjście danych)
- Dostępne bajty = Liczba RX ()
- Wejście danych = Bajt RX ()
- SetBaud (bodów)
-
PWM
- Włącz (kanał)
- Wyłącz (kanał)
- Ustaw częstotliwość (kanał, częstotliwość)
- GetMaxDuty (Cło)
- SetDuty (obowiązek)
-
Serwo
- Włącz (kanał)
- Wyłącz (kanał)
- SetPosition (kanał, pozycja)
-
ADC
Próbka ADC = Próbka (kanał)
-
DAC
- Włączyć
- Wyłączyć
- SetOutput (napięcie)
-
WIFI
- Ustaw SSID (SSID)
- Ustaw hasło (hasło)
- Status = Sprawdź stan połączenia ()
- IP = Uzyskaj adresIP ()
Parametry są wyświetlane w nawiasach, a zwroty są wyświetlane przed symbolem równości.
Zanim zacznę kodować przypisuję każdej funkcji kod komendy zaczynający się od 128 (binarny 0b10000000) i idący w górę. W pełni dokumentuję protokół, aby mieć pewność, że kiedy moja głowa znajdzie się w kodzie, będę miał ładny dokument, do którego mogę się odwołać. Pełny dokument dotyczący protokołu dla tego projektu jest załączony i zawiera kody poleceń przychodzących i szerokości bitów.
Krok 3: Projektowanie oprogramowania układowego
Po ustanowieniu protokołu następuje implementacja funkcjonalności na sprzęcie.
Przy opracowywaniu systemów podrzędnych przyjmuję proste podejście typu maszyna stanów, aby spróbować zmaksymalizować potencjalną przepustowość poleceń i danych, jednocześnie utrzymując oprogramowanie układowe proste do zrozumienia i debugowania. Zamiast tego można użyć bardziej zaawansowanego systemu, takiego jak Modbus, jeśli potrzebujesz lepszej interakcji z innymi podłączonymi urządzeniami, ale to zwiększa obciążenie, co spowolni działanie.
Maszyna stanowa składa się z trzech stanów:
1) Czekam na polecenia
2) Odbieranie parametrów
3) Odpowiedz
Te trzy stany oddziałują w następujący sposób:
1) Przechodzimy przez przychodzące bajty w buforze, aż mamy bajt, który ma ustawiony najbardziej znaczący bit. Gdy otrzymamy taki bajt, porównujemy go z listą znanych poleceń. Jeśli znajdziemy dopasowanie, przypisujemy liczbę bajtów parametrów i zwracamy bajty, aby pasowały do protokołu. Jeśli nie ma bajtów parametrów, możemy wykonać polecenie tutaj i albo przejść do stanu 3, albo zrestartować stan 1. Jeśli są bajty parametrów, przechodzimy do stanu 2.
2) Przechodzimy przez przychodzące bajty, zapisując je, dopóki nie zachowamy wszystkich parametrów. Gdy mamy już wszystkie parametry, wykonujemy polecenie. Jeśli są bajty powrotne, przechodzimy do etapu 3. Jeśli nie ma bajtów powrotnych do wysłania, wracamy do etapu 1.
3) Przechodzimy przez przychodzące bajty i dla każdego bajtu nadpisujemy bajt echa prawidłowym bajtem powrotu. Po wysłaniu wszystkich bajtów powrotu wracamy do etapu 1.
Użyłem Flowcode do zaprojektowania oprogramowania, ponieważ ładnie pokazuje wizualnie, co robię. To samo można zrobić równie dobrze w Arduino lub innych wbudowanych językach programowania.
Pierwszym krokiem jest nawiązanie komunikacji z komputerem. Aby to zrobić, mikro musi być skonfigurowany do pracy z odpowiednią prędkością i musimy dodać kod do obsługi urządzeń peryferyjnych USB i UART. W Flowcode jest to tak proste, jak przeciągnięcie do projektu komponentu USB Serial i komponentu UART z menu komponentu Comms.
Dodajemy przerwanie RX i bufor do przechwytywania przychodzących poleceń na UART i regularnie odpytujemy USB. Możemy wtedy w wolnym czasie przetworzyć bufor.
Projekt Flowcode i wygenerowany kod C są załączone.
Krok 4: Łączenie przez Flowcode
Symulacja Flowcode jest bardzo potężna i pozwala nam stworzyć komponent do rozmowy z tablicą. Tworząc komponent, możemy teraz po prostu przeciągnąć komponent do naszego projektu i natychmiast udostępnić funkcje tablicy. Jako dodatkowy bonus dowolny istniejący komponent, który ma urządzenie peryferyjne SPI, I2C lub UART, może być użyty w symulacji, a dane komunikacyjne mogą być przesyłane do płyty interfejsu za pośrednictwem komponentu wtryskiwacza. Załączone obrazy przedstawiają prosty program do drukowania wiadomości na wyświetlaczu. Dane komunikacyjne przesyłane przez kartę interfejsu do rzeczywistego sprzętu wyświetlacza i konfiguracji komponentów z komponentami wyświetlacza I2C, wtryskiwacza I2C i płyty interfejsu.
Nowy tryb SCADA dla Flowcode 8.1 to absolutny dodatkowy bonus, ponieważ możemy następnie wziąć program, który robi coś w symulatorze Flowcode i wyeksportować go, aby działał samodzielnie na dowolnym komputerze bez żadnych problemów licencyjnych. Może to być świetne w przypadku projektów takich jak stanowiska testowe lub klastry czujników.
Używam tego trybu SCADA do tworzenia narzędzia konfiguracyjnego WIFI, które może być użyte do konfiguracji SSID i hasła, a także do zbierania adresu IP modułu. To pozwala mi skonfigurować wszystko za pomocą połączenia USB, a następnie przenieść się do połączenia sieciowego WIFI, gdy wszystko jest uruchomione.
W załączeniu kilka przykładowych projektów.
Krok 5: Inne metody łączenia
Oprócz Flowcode, do komunikacji z płytą interfejsu można w dużym stopniu używać wybranego języka programowania. Użyliśmy Flowcode, ponieważ zawierał już bibliotekę części, którą mogliśmy natychmiast uruchomić, ale dotyczy to również wielu innych języków.
Oto lista języków i metod komunikacji z płytą interfejsu.
Python - korzystanie z biblioteki szeregowej do przesyłania danych do portu COM lub adresu IP
Matlab - Używanie poleceń File do przesyłania danych do portu COM lub adresu IP
C++ / C# / VB - Korzystanie z wstępnie napisanej biblioteki DLL, bezpośredni dostęp do portu COM lub Windows TCP/IP API
Labview - przy użyciu wstępnie napisanej biblioteki DLL, komponentu VISA Serial lub komponentu TCP/IP
Jeśli ktoś chciałby zobaczyć zaimplementowane powyższe języki, proszę o informację.
Krok 6: Gotowy produkt
Gotowy produkt będzie prawdopodobnie przez wiele lat wyróżniał się w moim wbudowanym zestawie narzędzi. Pomogło mi to już w opracowaniu komponentów do różnych wyświetlaczy i czujników Grove. Mogę teraz uzyskać kod całkowicie przybity, zanim ucieknę się do jakiejkolwiek kompilacji lub programowania.
Rozdałam nawet kilka tablic dla kolegów, aby także mogli usprawnić swoją pracę i zostały one bardzo dobrze przyjęte.
Dziękuję za przeczytanie mojego Instructable. Mam nadzieję, że okazał się on przydatny i mam nadzieję, że zainspiruje Cię do stworzenia własnych narzędzi, które przyspieszą Twoją produktywność.
Zalecana:
PRZENOŚNY ZASILACZ MINI WIELO NAPIĘCIOWY Z USB, LATARKĄ, TESTEREM KOMPONENTÓW I WBUDOWANĄ ŁADOWARKĄ: 6 kroków
PRZENOŚNY ZASILACZ MINI WIELO NAPIĘCIOWY Z USB, LATARKĄ, TESTEREM KOMPONENTÓW I WBUDOWANĄ ŁADOWARKĄ: Witam w mojej pierwszej instrukcji! Dzięki tej instrukcji możesz przekształcić podejrzany / tani powerbank solarny (z kilkoma dodatkowymi częściami) w coś użytecznego. Coś, z czego możesz korzystać na co dzień, tak jak ja, bo to naprawdę świetne w użyciu! Większość z
Uniwersalna klawiatura USB z przełącznikami RGB: 6 kroków
Uniwersalna klawiatura USB z przełącznikami RGB: W tej instrukcji pokażę, jak zbudować własną niestandardową klawiaturę USB, która zachowuje się jak zwykła klawiatura komputerowa. Możesz przypisać dowolną kombinację klawiszy lub sekwencję klawiszy, które mają być wciskane, naciskając tylko jeden przycisk.Możesz go użyć
Uniwersalna ładowarka DIY z zaciskami magnetycznymi: 5 kroków
Uniwersalna ładowarka DIY z zaciskami magnetycznymi: Witam wszystkich, to jest moja druga instrukcja, więc twoja opinia będzie dla mnie bardzo pomocna w dalszej poprawie. Zajrzyj też na mój kanał YouTube, aby zobaczyć więcej projektów. Dzisiaj pokażę jak zrobić uniwersalną ładowarkę z Magneti
Wbudowana choinka z nadrukiem 3D LED: 10 kroków (ze zdjęciami)
Wbudowana choinka z nadrukiem 3D LED: Jest to choinka drukowana w 3D z wbudowanymi adresowalnymi diodami LED w środku. Możliwe jest więc zaprogramowanie diod LED na ładne efekty świetlne i wykorzystanie wydrukowanej struktury 3D jako dyfuzora. Drzewo jest podzielone na 4 etapy i element bazowy (drzewo
Wbudowana pamięć EEPROM Arduino: 6 kroków
Wbudowana pamięć EEPROM Arduino: W tym artykule zbadamy wewnętrzną pamięć EEPROM w naszych płytach Arduino. Co to jest EEPROM, który niektórzy z was mogą powiedzieć? EEPROM to programowalna pamięć tylko do odczytu, którą można wymazywać elektrycznie. Jest to forma pamięci nieulotnej, która może zapamiętać