Witam,
Na wstępie zaznaczam, iż nie miałem do tej pory dużo wspólnego z układami ARM, stąd też taki mogłoby się wydawać banalny dylemat.
Do rzeczy:
-Na 6 wyprowadzeniach (PB10 - PB15) mikrokontrolera STM32L152RBT6 uzyskać chcę przebieg jak poniżej:
- t1 jest czasem pomiędzy zewnętrznym zdarzeniem (zielona linia), a pierwszą serią impulsów. Ten czas jest zmienny w trakcie wykonywania programu.
-t2 jest czasem pomiędzy dwoma kolejnymi seriami impulsów.
-t3 - czas trwania pojedynczej serii impulsów - zarówno t2 jak i t3 są niezmienne w trakcie działania programu.
- T - spodziewany okres między dwoma kolejnymi zdarzeniami (0.02 s) (Wymagane zgłoszenie błędu, jeśli okres ten znacznie będzie odbiegał od wzorca)
Mam problem jak to ugryźć. Rozwiązanie stricte sprzętowe, choć idealne ze względu na niezawodność i nieblokujące, raczej byłoby trudne w realizacji (wymagałoby konfiguracji i synchronizacji 4 timerów).
Aktualnie skłaniam się ku rozwiązaniu z dwoma timerami:
Jeden (uruchomiony w przerwaniu) odliczałby czas t1, oraz kontrolował czas między zdarzeniami.
Drugi (uruchomiony przez poprzedni po odliczeniu czasu t1) musiałby wygenerować dokładnie 6 impulsów o okresie t2 i wypełnieniu t3/t2.
Do tego konieczna byłaby odpowiednia modulacja generowanych impulsów, oraz maszyna stanów załączająca odpowiednie wyjścia w trakcie trwania impulsów.
1) Czy takie rozwiązanie ma sens? Czy, być może, da się to rozwiązać inaczej, prościej?
2) Jak rozwiązać kwestię wygenerowania dokładnie 6 impulsów?
3) Jak rozwiązać kwestię modulacji wygenerowanych 6 impulsów?
Chciałbym, żeby cała operacja wykonywała się możliwie nieblokująco i niezależnie od CPU.
Z góry dziękuję za wszelkie wskazówki i poświęcony czas.
Pozdrawiam!
Na wstępie zaznaczam, iż nie miałem do tej pory dużo wspólnego z układami ARM, stąd też taki mogłoby się wydawać banalny dylemat.
Do rzeczy:
-Na 6 wyprowadzeniach (PB10 - PB15) mikrokontrolera STM32L152RBT6 uzyskać chcę przebieg jak poniżej:
![[stm32 M3] - Strategia konfiguracji timerów dla uzyskania pożądanego przebiegu [stm32 M3] - Strategia konfiguracji timerów dla uzyskania pożądanego przebiegu](https://obrazki.elektroda.pl/6696132300_1360240417_thumb.jpg)
- t1 jest czasem pomiędzy zewnętrznym zdarzeniem (zielona linia), a pierwszą serią impulsów. Ten czas jest zmienny w trakcie wykonywania programu.
-t2 jest czasem pomiędzy dwoma kolejnymi seriami impulsów.
-t3 - czas trwania pojedynczej serii impulsów - zarówno t2 jak i t3 są niezmienne w trakcie działania programu.
- T - spodziewany okres między dwoma kolejnymi zdarzeniami (0.02 s) (Wymagane zgłoszenie błędu, jeśli okres ten znacznie będzie odbiegał od wzorca)
Mam problem jak to ugryźć. Rozwiązanie stricte sprzętowe, choć idealne ze względu na niezawodność i nieblokujące, raczej byłoby trudne w realizacji (wymagałoby konfiguracji i synchronizacji 4 timerów).
Aktualnie skłaniam się ku rozwiązaniu z dwoma timerami:
Jeden (uruchomiony w przerwaniu) odliczałby czas t1, oraz kontrolował czas między zdarzeniami.
Drugi (uruchomiony przez poprzedni po odliczeniu czasu t1) musiałby wygenerować dokładnie 6 impulsów o okresie t2 i wypełnieniu t3/t2.
Do tego konieczna byłaby odpowiednia modulacja generowanych impulsów, oraz maszyna stanów załączająca odpowiednie wyjścia w trakcie trwania impulsów.
1) Czy takie rozwiązanie ma sens? Czy, być może, da się to rozwiązać inaczej, prościej?
2) Jak rozwiązać kwestię wygenerowania dokładnie 6 impulsów?
3) Jak rozwiązać kwestię modulacji wygenerowanych 6 impulsów?
Chciałbym, żeby cała operacja wykonywała się możliwie nieblokująco i niezależnie od CPU.
Z góry dziękuję za wszelkie wskazówki i poświęcony czas.
Pozdrawiam!