logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[stm32f407-discovery][cube] Nieprawidłowe wypełnienie PWM przy użyciu TIM3

Bernadetka 22 Wrz 2018 14:56 654 8
REKLAMA
  • #1 17454216
    Bernadetka
    Poziom 2  
    Posty: 4
    Potrzebuję zrobic układ który na podstawie odczytu ADC odpowiednio wysterowuje sygnał PWM. Potrezbuje sygnał o częstotliwości 5kHz sterowany w zakresie 0-100. Używam płytki discovery stm32f407, posługuje sie cubem. Korzystam z timera 3 kanału 4, PSC = 99, ARR = 9, CKD = 0.
    Jednak podczas sterowania otrzymuje zupełnie inne wartości wypełnienia.
    Ustawiająć wypełnienie na 50% otrzymuje 100 %,
    wpisując 25% otrzymuje 70%,
    wpisując 10% otrzymuje 40%, a niższej wartości nigdy nie mogę osiągnąć.

    Nie mogę sobie z tym poradzić od jakiegoś czasu, ma ktoś jakiś pomysł gdzie powinnam szukać błędu ?

    Jest to dla mnie dość ważne, prosze pomóżcie koleżance ;( ;)
  • REKLAMA
  • #2 17454246
    Freddie Chopin
    Specjalista - Mikrokontrolery
    Posty: 13336
    Pomógł: 1712
    Ocena: 870
    Bernadetka napisał:
    Nie mogę sobie z tym poradzić od jakiegoś czasu, ma ktoś jakiś pomysł gdzie powinnam szukać błędu ?

    Tak - błąd definitywnie jest w kodzie, którego nie pokazałaś.

    BTW - wartość ARR równa 9 na pewno jest mocno kiepskim pomysłem w tej sytuacji, bo pozwala na regulację PWM zaledwie w 10 krokach (włacznie z 0% i 100%).
  • #3 17458924
    Bernadetka
    Poziom 2  
    Posty: 4
    Bardzo dziękuje za zainteresowanie.

    Jeśli chodzi o wartość ARR to się pomyliłam użyte wartości to :
    ARR - 99
    PSC - 99
    CKD - 0.

    Konfiguracja zegara:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Funkcja inicjalizacji timera :

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Funkcja do sterowania:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #4 17459223
    Freddie Chopin
    Specjalista - Mikrokontrolery
    Posty: 13336
    Pomógł: 1712
    Ocena: 870
    Wygląda w miarę OK (pod warunkiem tego, że w polach struktur których nie inicjalizujesz nie ma śmieci które mocno mieszają), tylko teraz skąd pewność, że wartości które wpisujesz (gdzie?) są faktycznie zapisywane do PWMa? Naprawdę łatwiej by było, gdybyś pokazała może nie cały program, ale wszystkie istotne fragmenty (np. cały main(), kod odpowiedzialny za zmianę wartości PWMa, ...).

    W każdym razie ustawienie timera do takiej funkcjonalności na rejestrach to faktycznie ze 2 czy 3 przypisania, a tutaj oczywiście litania dziwnych wartości przekazywanych do HALa...
  • REKLAMA
  • #5 17460003
    Typek2
    Poziom 13  
    Posty: 39
    Pomógł: 2
    Ocena: 7
    Pamiętaj że niekoniecznie potrzebujesz do tego mikrokontroler.
    Wystarczy układ który ma w sobie generator przebiegu piłokształtnego i komparator.
    Np SG3525.
  • REKLAMA
  • #6 17462697
    Bernadetka
    Poziom 2  
    Posty: 4
    Struktur których nie inicjalizuje ? Które masz na myśli ? W moim mainie nic nie ma, wyrzuciłam wszytsko i w ramach testów używałam tylko fukncji do ustawiania pwm, która załączyłam wyżej i zawsze były błędne wyniki.

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    * w reset value sa tylko wartosci od ADC.

    Jeśli chodzi o HALA to jestem jego wielka przeciwniczka i chciałam napisac to normalnie na rejestrach, bo byłoby o wiele łatwiej i przejrzysciej ale niestety jestem za głupia żeby samemu stworzyc i skonfigurować nowy projekt, probowałam, zajeło mi to tydzień z żadnymi efektami.
  • #7 17462748
    Freddie Chopin
    Specjalista - Mikrokontrolery
    Posty: 13336
    Pomógł: 1712
    Ocena: 870
    No to jak już masz projekt, to po prostu wywal z main() wszystko i sobie ten timer skonfiguruj. Przy okazji - na jakiej podstawie stwierdzasz, że kod nie działa? Oscyloskop? Analizator logiczny? Jakoś inaczej?
  • #8 17463332
    Bernadetka
    Poziom 2  
    Posty: 4
    Przerażają mnie te halowe tony smieci, na tym projekcie ciezko nawet dodać plik (przynajmniej mi ) i pamietam ze mialam jakis problem z konfiguracja na rejestrach na tym projekcie, ale sprobuje jeszcze raz.

    Projekt testuje na uczelni, na oscyloskopie z miliony ;P
  • #9 17463551
    Freddie Chopin
    Specjalista - Mikrokontrolery
    Posty: 13336
    Pomógł: 1712
    Ocena: 870
    Nie ma najmniejszego problemu, żebyś nie ruszała niczego w ogólnej strukturze projektu, tylko po prostu w main() zmieniła inicjalizację i obsługę tego właśnie timera na własny kod. Jak masz debugger to zobacz co dokładnie jest we wszystkich rejestrach tego timera.

Podsumowanie tematu

✨ Użytkownik zmaga się z problemem nieprawidłowego wypełnienia sygnału PWM na płytce STM32F407 Discovery, przy użyciu TIM3. Chociaż ustawił wartości ARR na 99 i PSC na 99, otrzymuje błędne wartości wypełnienia, które nie odpowiadają wprowadzonym wartościom. Uczestnicy dyskusji sugerują, aby użytkownik sprawdził kod, w tym inicjalizację timerów oraz sposób, w jaki wartości PWM są zapisywane. Zwracają również uwagę na możliwość użycia oscyloskopu do weryfikacji sygnału oraz na alternatywne rozwiązania, takie jak zastosowanie układu SG3525 do generacji sygnału PWM.
Wygenerowane przez model językowy.
REKLAMA