fbpx

Przebrnęliśmy razem przez to jak pracować z godziną oraz jak poskromić datę tak, aby nie przywracała się ta domyślna. Mamy również opanowane przywracanie daty z rejestrów zapasowych sprzętowego RTC po zaniku zasilania. Nie mamy jednak zapasowego zasilania i w tym wpisie chciałbym o nim wspomnieć. Ponadto przestawimy się na zewnętrzny kwarc na płytce BluePill napotykając problem… sprzętowy.

Bateria na VBAT

STM32 w przeciwieństwie do przykładowo AVRów posiadają specjalny pin do zasilania bateryjnego. Nazywa się on właśnie VBAT. Z jego pomocą mogą być zasilane:

  • Zewnętrzny oscylator LSE
  • Rejestry backupowe
  • Rejestr BDCR 
  • RTC

Pełny przegląd zasilania STM32F1 znajdziesz oczywiście w dokumentacjach. Zarówno w Datasheet jak i Reference Manual

 

Na schemacie widzisz coś takiego jak Low Voltage Detector. Oprócz tego, że jest to to, co wskazuje nazwa, to ma on za zadanie przełączać zasilanie Backup Domain właśnie wtedy, gdy pojawia się/znika zasilanie główne VDD.

Podczas gdy jest podane VDD, RTC i reszta ekipy zasilana jest z zasilania głównego. W momencie jego zaniku, switch przełącza obszar backupowy na zaslanie podawane na VBAT.

Na VBAT czeka właśnie podłączana przez nas bateryjka podtrzymująca. Oczywiście na VBAT może być tez podane zasilanie główne zamiast baterii i tak też się często robi. Jest to nawet zalecane, aby połączyć zewnętrznie VDD i VBAT  jeśli nie korzystamy z baterii.

Podłączam baterię do BluePill

Jako że moją platformą testową dla STM32F1 jest BluePill, to do nieg podłaczę bateryjkę. Nie mam koszyka na pstylkę CR2032, więc zmontowałem sobie 2/3 koszyka na baterie AAA. Dwie baterie w szeregu dają 3 V. Generalnie dla naszego pacjenta do podtrzymywania bateryjnego nadaje się napięcie 1,8 ÷ 3,6 V, więc taki zestaw baterii nada się idealnie.

Wystarczy podpiąć koszyk do VBAT i powinno działać, co nie? Też tak myślałem… Niestety mimo, że baterie zostały podłączone do BluePill, RTC nie trzyma ustawień po odłączeniu przewodu zasilającego USB. Dlaczego?

Według rysunku powyżej wystarczy sama bateria. Tak naprawdę to nie.

W dokumentacji o nazwie “Getting started with STM32F10xxx hardware development” możesz znaleźć taki zapis.

Jednak to nie jest odpowiedź na naszą konfigurację. Dokładnie tak mamy podłączone, czyli bezpośrednio baterię.

Możemy zerknąć na schemat BluePill oraz na Nucleo. Tutaj wycinek z BluePill.

Pin VBAT jest bezpośrednio wyprowadzony na złącze goldpin. Zobaczmy jak to wygląda na Nucleo-64, czyli najpopularniejszym rozmiarze tych płytek.

No i jest kondensator (C29). W dokumentacji wskazują na ten kondesator, ale tylko w sytuacji, gdy do VBAT podponamy VCC. Nie ma mowy o takim jeśli jest bateria…

Jest to kondensator odsprzęgający VBAT i VDD. ST postawiło kondensator filtrujący 1 uF i właśnie to może być rozwiązanie naszego problemu z BluePill.

Pod ręką mam akurat 100 nF, a nie 1 uF lecz myślę, że to wystarczy. Podpinam na stykówce jak najbliżej pinu VBAT i co… DZIAŁA!

RTC zlicza również na baterii po odjęciu zasilania głównego. Zagadka rozwiązana. Szkoda tylko, że chińczyki nie wpadli na pomysł, aby dać ten kondensator…

Zewnętrzny kwarc RTC

Pozostało już tylko spróbować przełączyć się na zewnętrzny kwarc, który jest nawet zamontowany na płytce BluePilla. W tym celu wystarczy włączyć i przełączyć kwarc w Cube.

Zauważ, że pokazały się skonfigurowane piny oscylatora na MCU. Jeszcze musisz faktycznie przełączyć taktowanie RTC na zewnętrzne.

I już powinien RTC śmigać na zewnętrznym zegarze.

Flashuję zadowolony, odpalam terminal i co?! Sekundy lecą na oko 2 razy szybciej niż powinny! Skandal!

Chwilę pogrzebałem w necie o co może chodzić i szybko znalazłem przyczynę.

Otóż znakomici chińscy inżynierowie stwierdzili, że położą oscylator zewnętrzny dla RTC i go podłączą do MCU, ale jednocześnie te same piny wyprowadzą na goldpiny, gdyby ktoś chciał ich użyć jako zwykłe GPIO. Pomysł brzmi nieźle w swoim zamyśle…. do czasu, gdy właśnie chcesz użyć tego RTC, nie GPIO.

Jeśli jeszcze nie wiesz, oscylatory powinny zawsze znajdować się jak najbliżesz pinów MCU. Nie jest to bez przyczyny. Chodzi między innymi o pojemności między ścieżkami.

Dorzcuając goldpiny, wprowadzamy dodatkową pojemność pasożytniczą, która jest niemile widziana. Wsadzając do płytki stykowej, te goldpiny oraz pojemność z nimi związana zmienia się jeszcze bardziej w efekcie czego częstotliwość rezonansowa oscylatora/generatora przesuwa się.

Te pojemności pasożytnicze są rzędu pikofaradów. Jednak zwróć uwagę na kondensatory, które kładzie się przy oscylatorach. Jest to ten sam rząd wielkości, więc takie pasożytniecze pojemności ze ścieżek mają wręcz ogromny wpływ na działanie oscylatorów.

Jak to rozwiązać? Przydałoby się pozbyć tych “kondensatorów” na pinach. Najlepiej je po prostu wylutować. Tak też zrobiłem.

Efekt? Sekunda – na oko – znowu trwa około sekundę. Wszyscy jesteśmy uratowani.

Podsumowanie

Dla poprawnego zastosowania baterii oraz zewnętrznego kwarcu przyda się odrobina wiedzy czysto elektronicznej. W jednym i w drugim przypadku ogromną rolę miały pojemności przy tych elementach.

Przeglądając anglojęzyczne fora, natknąłem się na ogromną ilość wątków poświęconych właśnie tym “błędom w STM32” czy w samym BluePill. Niestety rzeczy tego typu przychodzą najczęściej z doświadczeniem…

Na szczęście masz mnie i artykuł tego typu 🙂 Jeżeli pomogłem Ci to podziel się tym wpisem ze znajomymi. Będę niesamowicie wdzięczny!

Pełny projekt wraz z biblioteką znajdziesz jak zwykle na moim GitHubie: LINK

Jeśli zauważyłeś jakiś błąd, nie zgadzasz się z czymś, chciałbyś coś dodać istotnego lub po prostu uważasz, że chciałbyś podyskutować na ten temat, napisz komentarz. Pamiętaj, że dyskusja ma być kulturalna i zgodna z zasadami języka polskiego.

5/5 - (4 votes)

Podobne artykuły

.

8 komentarzy

Optimex · 05/03/2020 o 02:37

Racja, należało o tym wspomnieć aby uniknąć fluktuacji czasoprzestrzeni na bluepillu 😉 Mam natomiast inny problem w związku z tym tematem. Niby wszystko działa jak powinno przy zasilaniu z usb ale na zasilaniu bateryjnym na niektórych płytkach dzieją się właśnie takie rzeczy o których pisałeś tj, albo czas płynie wolniej albo staje w miejscu i po ponownym włączeniu zasilania podstawowego zaczyna liczyć od momentu kiedy wyłączyłem zasilanie. Pinów rezonatora nie lutowałem wcale a na VBAT mam kondensator 100n przy samym pinie i separację diodą od zasilania głównego. Ten problem pojawia się tylko na niektórych płytkach, na innych działa prawidłowo a przynajmniej tak myślę po tygodniu obserwacji. Może to wina akumulatorków 2x 1.2V 40mA NiMH?

    Mateusz Salamon · 10/03/2020 o 09:50

    Ciekawy problem. Pewnie to jakaś “pierdoła” jak to często bywa. Który to STM? Może te 2,4 V ze spadkiem na diodzie to granica działania układu? Daj do tego 100n przy VBAT jeszcze 1u tak, jak jest na Nucleo.

      Optimex · 10/03/2020 o 13:55

      Te na nucleo działają a bluepille nie. Sprawdzę z większym kondensatorem ale to i tak dziwna sprawa bo ten RTC w całości pobiera jakiś znikomy prąd więc 100n powinno wystarczyć. Do tej baterii mam jeszcze podłączoną pamięć szeregową, która też ciągnie jakieś micro ampery. Pamięć trzyma a RTC w blue pillu nie działa. Będę jeszcze badał temat. Może jest to spowodowane spadkiem napięcia na VBAT po odłączeniu zasilania z USB z ok. 3.1v za diodą do tych 2.5v z baterii ale i to nie powinno robić zasadniczej różnicy a już na pewno nie powodować zatrzymywania się timera a przynajmniej tak myślę.

      Mateusz Salamon · 10/03/2020 o 15:07

      Wiesz… nie bez powodu powstał mój wpis o tym, że nie lubię BluePilla. Między innymi przez takie mniej lub bardziej niewyjaśnione rzeczy. Słyszałem ploty, że te MCU to są jakieś spady z wersji z 2x większym FLASHem. Dlatego można “zwiększyć” w nich Flash i jest masa poradników na to. Nie ufam tym mikrokontrolerom i nie użyłbym go w poważniejszym projekcie. Nawet do nauki jest lipa bo uczysz się zwalczać problemy, których na innych płytkach nie ma(jak w komunizmie :D). Kilkanaście zł oszczędności nie jest warte temu, co “daje” nam BluePill. Już lepiej wziąć BlackPilla na ptzykład przy okazji wspierając mnie 🙂 Póki co wygląda o wiele solidniej.

      Optimex · 10/03/2020 o 17:13

      Poniekąd masz rację ale jeszcze spróbuję powalczyć jak już kupiłem te płytki. Te black pille też mogą się okazać chińską podróbą, żyjemy w czasach w których nic nie jest pewne oprócz śmierci i podatków.
      Apropo klonów to zdarzają się płytki z zupełnie innym procesorem np. CKS i to są faktycznie klony F103CB z 2 razy większą ilością flasha. Z tego co się orientuję to rzadko się zdarza przy tych tanich kontrolerach aby były podrobione kiedy na obudowie jest napisane stm32, na allegoro w opiniach produktu ktoś nawet wstawił zdjęcie procka z usuniętą obudową na którym widać sygnaturę i grafikę z rybami 🙂 ale czego ci chińczycy nie podrobią. Jak są w stanie cały procesor skopiować to z sygnaturą też sobie poradzą.

      Mam własną metodę na sprawdzanie oryginalności, na ogół oryginały dają się przetaktować nawet do 120MHz a klony nie. Tylko trzeba ręcznie zegary poustawiać, wszystkie bluepille z stm32 chodzą mi na 120MHz, jak z poprawnością działania na dłuższą metę trudno stwierdzić ale działają, a CKS max 72MHz i przy wyższej prędkości nie rusza wcale.

      Mateusz Salamon · 11/03/2020 o 16:40

      Tak jest – te BlackPille tez mogą być jakimiś podróbkami 😀 Na razie chodzą dobrze, ale i tak łatwiej mi pisać artykuły w oparciu o Nucleo.
      CKSy znam i często Chińczycy nie piszą na Alli, że z nimi sprzedają. To jest jednak “zamiennik” STMów i chyba się z tym jakoś mocno nie chowają. Podobnie są zamienniki nRF24, z którymi kiedyś nieświadomie walczyłem bo nie działało w nich czyszczenie flag przerwań… Nigdy nie dokończyłem pisać libki pod nie, ale pewnie wrócę kiedyś. Tak na prawdę dowiedziałem się, że miałem zamienniki dopiero jak uruchomiłem sklep i zacząłem zwracać na to uwagę.
      To co jest na obudowie to tylko laser niestety 🙂

Kursad · 04/03/2020 o 20:20

Hi
Can you make a new project about mems microphone i2s ??

    Mateusz Salamon · 10/03/2020 o 09:48

    Hi! Unfortunately I don’t have any I2S mic right now… 🙁 But there will be some project in future 🙂

Dodaj komentarz

Avatar placeholder

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *