Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 28 mar 2024, o 18:28


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 
Autor Wiadomość
PostNapisane: 29 sty 2018, o 16:23 
Offline
Nowy

Dołączył(a): 29 sty 2018
Posty: 4
Pomógł: 0

Witam piszę aplikację obsługującą silnik krokowy. Wykorzystuje do tego PWM ( Nie pytać dlaczego, tak chciał prowadzący). Na początku robiłem to na przerwaniach, ale się nie spodobało. Miałem wykorzystać do tego DMA + PWM i ładować z DMA wartości do periodu, tak aby okres ten był zmienny. Napisałem aplikację, ale niestety nie zmienia się period jest dalej stały. Rejestr periodu wyciągnąłem z dokumentacji i ująłem w programie ( ARR ) . Analizowałem kod i nie mogę dojść do tego co jest w kodzie nie tak. Wstawiam tu implementację kodu z samymi konfiguracjami DMA TIMERA i PWM'a z wypełnioną inkrementującymi się wartościami (okres powinien być coraz dłuższy). Z góry dziękuję za ewentualną pomoc / podpowiedź. Pozdrawiam.

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 sty 2018, o 16:51 
Offline
Użytkownik

Dołączył(a): 22 gru 2013
Posty: 296
Lokalizacja: Szczecin
Pomógł: 47

Nie wnikając w szczegóły w:
DMAInit.DMA_PeripheralBaseAddr = (u16)TIM1_ARR_Address;

adres ARR powinien być chyba 32 bitowy? (czy się mylę?)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 sty 2018, o 17:00 
Offline
Nowy

Dołączył(a): 29 sty 2018
Posty: 4
Pomógł: 0

Tak zgadza się powinien być 32 bitowy zmieniłem to, ale nadal mam kłopot i walczę z tym



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 sty 2018, o 17:18 
Offline
Użytkownik

Dołączył(a): 22 gru 2013
Posty: 296
Lokalizacja: Szczecin
Pomógł: 47

Strzelam:
DMAInit.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word;

ps. tak na "oko" ( nie chce mi się grzebać w dokumentacji, bo za duża) ale może Half..



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 sty 2018, o 17:46 
Offline
Nowy

Dołączył(a): 29 sty 2018
Posty: 4
Pomógł: 0

Niestety błąd dalej występuję. Coś czuję, że to nie jest związane z tym.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 sty 2018, o 19:00 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 lut 2016
Posty: 248
Lokalizacja: Norwegia
Pomógł: 16

a bufor nie powinien być też 32 bitowy? widzę że u Ciebie jest u16 PWM_Buf[198];

_________________
SP2LUB - LA1BUA



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 sty 2018, o 19:39 
Offline
Użytkownik

Dołączył(a): 22 gru 2013
Posty: 296
Lokalizacja: Szczecin
Pomógł: 47

w STM32F10x DMA może przesyłać dane po 8, 16 lub 32 bity.
Trzeba tylko nad tym zapanować.



ps. przestudiuj: AN2548



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 sty 2018, o 06:52 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2012
Posty: 35
Pomógł: 4

A czy inkrementacja adresu peryferiów nie powinna zostać wyłączona?

DMAInit.DMA_PeripheralInc = DMA_PeripheralInc_Enable;



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO