padus Napisano Sierpień 1, 2021 Udostępnij Napisano Sierpień 1, 2021 (edytowany) Potrzebuję zrobić potrójną barierę podczerwoną. Mniej więcej wygląda to tak: cała płytka: D2, D3, D4 to potrójny nadajnik podczerwieni, częstotliwość nośna 38kHz. Trzy odbiorniki podczerwieni: Piny RX1, RX2 oraz RX3 są analizowane przez mikrokontroler i załączają silnik 24DC. Komplet obejmuje zasilacz 24/4 DC, sterowanie na atmega328p oraz płytkę z podczerwienią: Jest to wersja 4.0a więc przerabiałem już dużo innych opcji w stylu czujniki odbiciowe, pojedynczy tor itd. i obecne rozwiązanie wydaje się w pełni sprostać moim wymaganiom. W tej chwili działa to tak, że na raz świecą 3 diody LED. Do generowania impulsów jest używany poczciwy '555. Czujniki jak "widzą" diody to mają wyjścia ustawione na zero, jeżeli jakiś obiekt je zasłania to wtedy mam jedynkę. Wszystko działa jak należy ale przerobiłem właśnie kurs z nukleo STM32L476RG i zastanawiam się nad tym czy w ramach testu nie zagonić do tego STM32. Znalazłem taki całkiem sympatyczny układ za 8zł i postaram się to na nim ruszyć. Chciałbym zlikwidować płytkę z atmega328p oraz '555 i całe sterowanie wsadzić do STM32. I tutaj mam dylemat. Chcę sterować diodami na zasadzie multipleksowania, tzn. na raz świeci tylko jedna dioda. Coś jak na poniższym rysunku: Mam taki pomysł aby utworzyć tabelę typu: static const uint16_t init_table[] = { 0x01, //led1 0x00, //przerwa 0x02, //led2 0x00, //przerwa 0x04, //led3 0x00, //przerwa }; i zagonić DMA aby cyklicznie wyrzucał to na port. Próbowałem to zrobić tak: - uruchomiłem TIM - dla danego TIM uruchomiłem DMA - wyłączyłem przerwania od DMA - ustawiłem kierunek Memory to peripheral No i teraz muszę podać adres bufora, 6 danych i gdzie to ma być wysyłane, tylko nie mam pojęcia jak to zrobić i czy się da ? Edytowano Sierpień 1, 2021 przez padus
padus Sierpień 2, 2021 Autor tematu Udostępnij Sierpień 2, 2021 Udało się. Zastosowałem dodatkowo jeden scalak za 50 groszy i działa. Tutaj jest film pokazujący jak działa układ przy zwolnionym zegarze. Wszystko dzieje się sprzętowo. Wykorzystuję dwa kanały licznika TIM3 w trybie PWM. Jedyne linie kodu to: HAL_TIM_Base_Start_IT(&htim3); HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1); HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_2); Reszta to ustawienia w CubeMX. Dodatkowy scalak to 74HC00, który robi prosty dekoder.
Pomocna odpowiedź
Bądź aktywny - zaloguj się lub utwórz konto!
Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony
Utwórz konto w ~20 sekund!
Zarejestruj nowe konto, to proste!
Zarejestruj się »Zaloguj się
Posiadasz własne konto? Użyj go!
Zaloguj się »