Skocz do zawartości
MR1979

Mini konsolka do gier na STM32

Pomocna odpowiedź

@MR1979 zapowiada się ciekawie! Przeniosłem do działu z worklogami, zachęcam do publikowania częstych aktualizacji 🙂

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

Mały update z frontu 🙂

1. Jest już integracja modułu zasilania z konsolką oraz oprogramowanie przycisku power:

  • Przy wyłączonym zasilaniu:

- krótkie naciśnięcie przycisku power - konsolka uruchomi się na chwilę i po chwili wyłączy
- dłuższe naciśnięcie przycisku power - wyświetli ekran powitalny (wtedy można zwolnić przycisk zasilania), a następnie uruchomi się gra

  • Przy włączonym zasilaniu:

- krótkie naciśnięcie przycisku power - spowoduje przerwanie gry i powrót do menu głównego
- dłuższe naciśnięcie przycisku power wyświetli ekran zamykania systemu
- gdy zwolnimy przycisk przed upływem 3 sekund - konsolka powróci do głównego programu
- gdy przyciśniemy przycisk powyżej 3 sekund - nastąpi wyłączenie urządzenia z poziomu oprogramowania
- przyciśnięcie przycisku >10s - w razie gdyby urządzenie się zawiesiło - nastąpi wyłączenie awaryjne z poziomu modułu zasilania. Przydatna funkcja, gdy bateria nie ma możliwości odłączenia baterii bez rozkręcania obudowy

2. Jest już podłączona klawiatura

3. Aktualnie myślę nad układem audio. Ponieważ mój STM32F103 nie ma ani I2S (nie mogę podłączyć MAX98357A), ani DAC na pokładzie, więc pozostaje mi tylko PWM i proste odgrywanie melodii zapisanej w postaci nut. Zastosuję PWM do tego i najprostszy możliwy wzmacniacz na jednym tranzystorze (znaleziony w sieci). Zamienię tylko 47uF na 10uF na wejściu. Co prawda wtedy będzie tłumić bardziej przy niskich częstotliwościach, ale dla głośniczka po 2PLN nie powinno to mieć znaczenia. Zmienię też tranzystor na coś podobnego tylko SMD.

Jak ktoś podsunie mi pomysł na coś lepszego do audio to będę wdzięczny 🙂

4. Schemat się rysuje już w KiCad. Jak tylko dogram audio, zabieram się za PCB.

 

IMG_20200205_202631.thumb.jpg.d10129f6e722d2e7a240d358ee1936b1.jpgIMG_20200205_202512.thumb.jpg.52faadb52964ae99943190e5f39ee268.jpgSimple-single-transistor-audio-amplifier-circuit.thumb.png.42b185e2403db17debb869df57b6db08.png

A poniżej sekwencja włączenia i wyłączenia konsolki:

 

Edytowano przez MR1979
  • Lubię! 2

Udostępnij ten post


Link to post
Share on other sites

Jeśli jako dźwięk odtwarzasz tylko sygnał prostokątny to po co tam wzmacniacz, który cały czas żre prąd nawet jeśli nie gra? Ja bym zrezygnował w ogóle ze wzmacniacza i wstawił jakiś buzzer piezo, który możesz sterować bezpośrednio z pinu. A jak już wzmacniacz to bez R1 i C1 tylko baza przez rezystor do pinu (sterujesz cewką głośnika tak samo jak przekaźnikiem).

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

Chyba właśnie o to chodzi, żeby ten sygnał prostokątny (relatywnie) wysokiej częstotliwości wygładzić tym filterem R-C, żeby zrobić z niego przebieg bardziej przypominający sygnał audio.

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

Tyle że to owszem jest filtr RC, ale górnoprzepustowy - czyli raczej nic nie wygładzi, wręcz przeciwnie.

Zależy wszystko od tego jak to będzie podłączone. Jeśli będzie to zwykły sygnał PWM (tak jak w Arduinowym tone) - żadne kondensatory ani polaryzacja bazy nie są potrzebne. Jeśli to ma być coś w stylu delta-sigma (tyle że to już nie PWM) to filtr RC będzie potrzebny - ale tu go nie ma.

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites
25 minut temu, ethanak napisał:

Jeśli będzie to zwykły sygnał PWM (tak jak w Arduinowym tone) - żadne kondensatory ani polaryzacja bazy nie są potrzebne

Dokładnie tak. Zastanawiające, że projektujemy spore rzeczy na mikrokontrolerach, wyświetlaczach i cudach na kiju a wykładamy się na pierwszym z brzegu tranzystorze. Stosowanie wzmacniacza w klasie A w ogóle jest bez sensu w projekcie zasilanym baterii. Równie dobrze można grzałkę sobie z boku podłączyć i ręce ogrzewać. Więc albo prosty klucz i sygnał prostokątny, albo sygnał "analogowy" (np. PWM odfiltrowany) i wzmacniacz w klasie B sklecony z paru tranzystorów lub jednej gotowej płyteczki nawet na dziadku LM386 czy jakimś nowszym wynalazku.

https://www.deeptronic.com/electronic-circuit-design/small-audio-power-amplifier-using-3-transistors/

https://abc-rc.pl/product-pol-7673-Modul-wzmacniacza-audio-LM386-wzmocnienie-do-46dB-wejscie-10K.html

https://abc-rc.pl/product-pol-9543-Mini-modul-wzmacniacz-audio-OEP3W-3W-2-5-5V-Klasa-D.html

Wzmacniacze liniowe są o tyle fajne, że można nimi coś powiedzieć lub zagrać w miarę prostymi środkami. Odgrywanie próbek PCM jest trywialne a takie audio na pewno znacznie podnosi atrakcyjność. Za to gdy nie ma takiej potrzeby, równie dobrze można je sterować prostokątem i odgrywać pipczenie bez marnowania prądu jak w pierwotnej propozycji.

  • Lubię! 2

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

Kolejny update z frontu.

Walczyłem głównie z dźwiękiem. I tak, za radą kolegów powyżej przerobiłem następujące wersje:


1. Modulacja PWM + filtr dolnoprzepustowy.
+ Od strony oprogramowania wszystko ładnie dało się zrobić. Była tablica z wartościami dla funkcji SIN. Zrobiłem 2 kanały z wykorzystaniem jednego timera (wg instrukcji marek1707 znalezionym na tym forum w innym wątku).
- Zastosowanie najprostszego filtru RC nie dało najlepszych rezultatów. Jakość dźwięku była taka sobie. Sygnał na oscyloskopie był daleki od tego co oczekiwałem.
- Miksowanie 2 lub więcej kanałów dość mocno obciąża procesor (bo częstotliwość PWM musi być kilka razy większa od przewidywanej max częstotliwości dźwięku). Gdyby mój układ nie miał nic innego do roboty poza graniem muzyki to poszedłbym w tym kierunku.

2. Symulacja złącza I2S wg instrukcji z ST AN5086 (łatwo znaleźć w google). Czyli linia SCK z SPI jest jednocześnie triggerem dla timera który steruje linią WS (kanał lewy/prawy). - Tak symulowany I2S podłączyłem na próbę do prostego wzmacniacza audio MAX98357A. Tu niestety poległem i nie udało mi się zmusić układu do działania. Uzyskałem sygnał SPI zgodny z oczekiwaniami (przynajmniej tak wyglądało na oscyloskopie), ale wzmacniacz milczał. Podejrzewam że powodem są duże wymagania co do bitrate na wejściu. Bo nie wysyłałem danych ze standardowymi prędkościami audio jakie stosuje się w I2S. Jest też duża szansa że mój sygnał wyjściowy nie do końca był zgodny z wymaganiami I2S.

 

W końcu zrezygnowałem z "zaawansowanego" dźwięku. Czas jednak nie był zmarnowany bo dużo się nauczyłem i nabytą wiedzę wykorzystam w kolejnych projektach.

Ostatecznie zdecydowałem się na zwykły sygnał prostokątny z jednym tranzystorem w roli klucza. Do tego napisałem prostą bibliotekę do odgrywania melodyjek, oraz prostych efektów audio. Całość wykorzystuje jeden Timer. Piszę teraz w Pythonie konwerter plików midi na tablice array które będę mógł użyć w moim projekcie. Zobaczymy co z tego wyjdzie.

Z innych rzeczy to dodałem sterowanie podświetleniem wyświetlacza. Ale to już drobnostka.

Projekt płytki prawie skończony. Jeszcze pozostała kosmetyka. Na razie wygląda to tak:
mc_psu1.thumb.PNG.6b1a383616555225686b40a76d7746f3.PNGmc_psu2.thumb.PNG.5014641fc839d9a932695d6f58ff3abe.PNGmc_psu3.thumb.PNG.90f6e253fdec1130e496a58d041d2447.PNG

Pozdrawiam,
Marek

Edytowano przez MR1979
  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

Jeśli nie ma DAC do dyspozycji to można zawsze filtr na wyjściu pwm zrobić na jakimś wzmacniaczu operacyjnym tak, żeby wycinał częstotliwość samplowania. Mam tak zrobione przy bluepillu ze wzmacniaczem TDA2822 w trybie mono (shemat w DS) na wyjściu. Może 100dB nie daje ale wystarczająco do komunikacji z urządzeniem i odsłuchiwania plików wave z karty SD tak więc polecam sprawdzone rozwiązanie.

Udostępnij ten post


Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.


×
×
  • Utwórz nowe...