Spisu treści:
Wideo: Zrób dowolny czujnik z FPGA: 4 kroki
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:29
Większość twórców przynajmniej raz w życiu próbowała zbudować termometr, może ten, który mają w domu, nie jest wystarczająco inteligentny, a może myślą, że mogą zbudować kolejny NEST. Niemniej jednak w pewnym momencie mieli mikrokontroler z najnowocześniejszym oprogramowaniem podpiętym do czujnika temperatury (i być może innych czujników: ciśnienia, światła). Do tej pory wszystko idealnie, oprogramowanie działa i czujnik wykrywa. Przetestujmy to!
Hmmmm… może powinien podgrzać czujnik suszarką do włosów i schłodzić lodem, przez jakiś czas działa. Ale nie wydaje się to profesjonalne, czujnik zmienia wartości zbyt szybko, jeśli go podgrzejesz, nie nagrzewa się więcej niż o kilka stopni. Projekt to popiersie! Ale algorytm jest nowy, bierze pod uwagę wiele czynników, szkoda, że utknął w tej głupio błahej rzeczy.
Moje rozwiązanie jest następujące: spraw, aby FPGA działał jako czujnik z wartościami przesyłanymi strumieniowo z komputera (lub przechowywanymi w pamięci lub utworzonymi ad-hoc wewnątrz FPGA). Tak więc dla twojego cennego MCU FPGA wygląda jak czujnik, ale nie jakikolwiek czujnik: dowolny czujnik. Być może uznasz, że potrzebujesz większej rozdzielczości lub szybszego czasu reakcji niż oczekiwałeś, musisz zmienić czujnik. Zamów online, dotrze za kilka dni, za kilka miesięcy, kto wie. Odkręć płytkę PCB lub zamów moduł z nowym czujnikiem. Lub… kilka kliknięć i FPGA jest skonfigurowany jako zupełnie nowy czujnik i może emulować dokładną konfigurację wewnętrzną.
W chwili pisania tego tekstu FPGA może działać jako LM75 z danymi temperatury przechowywanymi w pamięci BRAM (na FPGA).
Krok 1: MCU
Mój wybrany MCU to LPC4337 na LPCXpresso. Na wierzchu mam nakładkę (LPC General Purpose Shield) z wyświetlaczem i prawdziwą matrycą LM75. LPC4337 to ARM Cortex M4 działający z częstotliwością 200 MHz i mniejszy Cortex M0 (nie jest tutaj używany). Rzeczywisty czujnik jest podłączony do urządzenia peryferyjnego I2C1, a nasz wirtualny zostanie podłączony do I2C0. Źródło jest dostępne na moim GitHubie.
Jak to zbudować? Pobierz LPCXpresso IDE wraz z biblioteką LPCOpen. Zaimportuj tę bibliotekę do IDE, a także otwórz projekt z GitHub. Wszystko powinno być skonfigurowane i możesz kliknąć "Debuguj" w lewym dolnym rogu.
Cały projekt bazuje na jednym z przykładów NXP (by pokazać, że mój projekt symuluje prawdziwy czujnik i nie wymaga specjalnego kodu po stronie MCU). W głównym pliku (o nazwie iox_sensor.cpp) znajduje się następujący kod:
#define SENSORS_ON_SHIELD
#if define(SENSORS_ON_SHIELD) #define SHIELD_I2C I2C1 #elifdefined(SENSORS_ON_FPGA) #define SHIELD_I2C I2C0 #endif
Zmieniając SENSOR_ON_SHIELD i SENSOR_OR_FPGA użytkownik jest w stanie przełączyć w czasie kompilacji, z którym czujnikiem ma rozmawiać, rzeczywistym lub wirtualnym, ponieważ są one na różnych pinach I2C.
Krok 2: FPGA
Moją płytą FPGA, którą wybrałem, jest Artix 7 firmy Digilent, mająca Xilinx Arty 7. Dwa złącza PMod są używane, jedno do debugowania, a drugie do rzeczywistego ładunku, połączenia z płytą MCU.
Ponownie, kod źródłowy FPGA jest dostępny na moim GitHub (folder fpgaSide).
Jak to zbudować? Pobierz, kup lub otwórz Xilinx Vivado IDE. Zaimportuj pliki projektu z GitHub. Jednym z plików (content.coe) są dane o temperaturze w surowym formacie, które będą przesyłane strumieniowo do fałszywego czujnika. Istnieje również plik Excel o tej samej nazwie, który pomaga w konwersji czytelnych dla człowieka danych temperatury na surowe dane LM75. Planuję zmienić to na zautomatyzowany proces z oprogramowaniem napisanym w Javie, ale do tego czasu to rozwiązanie działa. Synteza i implementacja powinny zająć trochę czasu, weź to pod uwagę.
Krok 3: Jak to działa?
Jak powiedziałem, dla MCU FPGA wygląda jak czujnik, a dokładniej czujnik I2C. Wyjście urządzenia peryferyjnego I2C jest podłączone do wejścia FPGA. Wewnątrz FPGA znajdują się 3 główne elementy: - Kontroler I2C - Urządzenie I2C - Dane Kontroler I2C odbiera dane I2C z pinów FPGA i wysyła je do reszty FPGA i robi to samo w odwrotnej kolejności. Utrzymuje wewnętrzną maszynę stanów dla protokołu I2C (nawiasem mówiąc, tutaj jest jego dokumentacja). Co ten komponent wysyła do urządzenia I2C? Aktualnie odebrany bajt, pozycja tego bajtu w bieżącej komunikacji i czy MCU zapisuje lub odczytuje z FPGA. Urządzenie I2C odbiera wysłane bajty i aktualizuje symulowaną wewnętrzną strukturę czujnika. Może po prostu zaktualizować wskaźnik rejestru lub zażądać nowych danych ze źródła danych. Komponent Dane przesyła strumieniowo nowe punkty danych. Obecnie jest to po prostu pamięć ROM, której adres jest zwiększany (w przybliżeniu) dwa razy na sekundę.
Jaki jest mój cel końcowy? Pokazuje to drugi obrazek. Oznacza to: umożliwienie jednoczesnej symulacji większej liczby urządzeń I2C (czujników i innych) wewnątrz FPGA. Dane na zapleczu czujnika mają być buforowane w FPGA i przesyłane strumieniowo z komputera przez USB lub Ethernet. Obsługa bardziej zaawansowanych czujników i innych urządzeń I2C (pamięć, sterowniki LED itp.).
Krok 4: Złożenie wszystkiego razem
Teraz nadszedł czas, aby wszystko połączyć. Teoretycznie jest to proste: płytka mcu ma złącze PMod (I2C0 i SSP0 (może działać jak SPI)). Płyta Artix posiada 4 złącza PMod, których można używać w dowolny sposób. Wybieram złącze D, aby komunikować się z MCU i złącze B, aby połączyć się z moim analizatorem stanów logicznych.
Ostrzeżenie
Nie da się tak po prostu połączyć ze sobą dwóch płyt. Czemu? PMod został zbudowany w celu ułatwienia połączenia płyty Master/Host (która daje zasilanie) z płytą Slave/Sensor (która otrzymuje zasilanie). Ale w tym projekcie obie płyty dają moc i jeśli połączysz wyjście 3.3V z jednej płyty z wyjściem 3.3V drugiej płyty, mogą się zdarzyć złe rzeczy. Ale mogą nie i możesz po prostu zmienić parametry szyn zasilających FPGA (są bardzo starannie zaprojektowane). Więc nie ryzykuj i przesuń złącze o jeden pin w lewo (a także odwróć płytkę FPGA), jak widać na powyższych zdjęciach. Tutaj jest specyfikacja PMod, możesz ją przestudiować, to co zrobiłem w krótkich słowach to nie łączenie VCC dwóch płyt.
Zalecana:
Zrób to sam czujnik temperatury za pomocą jednej diody: 3 kroki
Zrób to sam czujnik temperatury wykorzystujący jedną diodę: Ponieważ jednym z faktów dotyczących złącz PN jest to, że ich spadek napięcia przewodzenia zmienia się w zależności od przepływającego prądu i temperatury złącza, użyjemy tego do stworzenia prostego, taniego czujnika temperatury .Ta konfiguracja jest powszechnie używana
Wake on LAN Dowolny komputer przez sieć bezprzewodową: 3 kroki
Wake on LAN Any Computer Over Wireless Network: Ten samouczek nie jest już aktualny z powodu zmian w obrazie Raspbpian. Postępuj zgodnie ze zaktualizowanym samouczkiem tutaj: https://www.instructables.com/id/Raspberry-Pi-As-Wake-on-LAN-ServerWOL jest obecnie obecny prawie we wszystkich portach Ethernet. To nie jest
Zrób to sam czujnik drzwi dla bezpieczeństwa za pomocą ESP8266: 3 kroki
Zrób to sam czujnik drzwi dla bezpieczeństwa za pomocą ESP8266: Zabezpiecz swój dom za pomocą inteligentnego czujnika drzwi w pełni zaprojektowanego przy użyciu technologii open source. W tym filmie stworzymy urządzenie, które wykryje, czy drzwi są otwarte, czy zamknięte i wykryje informacje na smartfonie za pomocą serwer BLYNK, w
Zrób to sam: Mini czujnik montowany na suficie z regulowanym czujnikiem ruchu: 4 kroki
Zrób to sam: Mini czujnik montowany na suficie z regulowanym czujnikiem ruchu: Witam. Jakiś czas temu pomagałem koledze z koncepcją inteligentnego domu i stworzyłem mini puszkę z czujnikami o indywidualnej konstrukcji, którą można zamontować na suficie w otworze 40x65mm. To pudełko pomaga:• zmierzyć natężenie światła• zmierzyć wilgotność
Konwertuj (prawie) dowolny plik multimedialny na (prawie) dowolny inny plik multimedialny za darmo!: 4 kroki
Konwertuj (prawie) dowolny plik multimedialny na (prawie) dowolny inny plik multimedialny za darmo!: Mój pierwszy instruktażowy, pozdrawiam! W każdym razie szukałem w Google darmowego programu, który przekonwertowałby moje pliki Youtube.flv do formatu, który jest bardziej uniwersalny, jak.wmv lub.mov.Przeszukałem niezliczone fora i strony internetowe, a następnie znalazłem program o nazwie