stm32f103c8 TIMER 2 ,3, 4 sorunum

Başlatan z, 17 Eylül 2022, 01:13:25

JOKERAS

Alıntı yapılan: z - 22 Eylül 2022, 22:11:08Tamam da en tepedeki ilk mesajimda ne dedigim anlasilmiyor mu?

Ohooo seninle isimiz var. 3 ayri timer var diyorum. Her birinin sayicisi ayri. Hani tek bir counter olsa da tum compare registerleri buna bagli olsa tamam da 3 ayri timer var. Her birinin counteri ayri. Bunlari diledigin zaman enable edip saydirabilir yada durdurabilirsin. Ilk deger atayabilirsin. Sayarken icerigini degistirebilirsin.

Benimle işin yok zaten.İş senin işin.Ortaya,konuya yazman yeterli.
Bu anlattığın Standart Pwm.


Alıntı yapılan: z - 22 Eylül 2022, 22:11:08Simdi laf oyunlari yappma. soft olarak baslatirsan herbirini ard arda baslatmak icin 72Mhz islemcide cok az bir kaybin olur.
Onu da gectim. Birisini master secersen diger ikisini slave yapabilirsin. @Taglinin onerdigi sekilde sen masteri enable ettiginde master da slaveleri enable eder. Gene belki 1 clk falan gecikme olabilir. Derdim zaten o degil.
Gayet mantıklı olduğunu düşündüğüm bir şeye Laf oyunu dedinya ne diyim.

Demekki İşlemci Clock'u 72 değilde 10mhz falan olsa razı olacaksın yani öylemi?

Master-Salveları aktif ediyorda Masterın gecikmesi ne olacak?
2 Salve Senkron,Master Asenkron.

Bu İnstruction farkını senin gibi bir Matematikçi nasıl olurda kabul eder?


Senin demene göre 3 ayrı Timer var istediğin zaman bunları aktif ediyorsun.
Örneklemek gerekirse 3 ayrı işlemci ile Pwm üretmek gibi.
Senin yorumuna göre Timer ile tıpkı bunun benzerini yapmak.
Bu 3 ayrı işlemciyi işlemciyi 10'ar ms saniye arayla başlattık,doğal olarak 3 işlemci
pwm Fazları 10'ar ms kayık çalışıyor diyelim.Yani senin istediğin şekilde.

Şimdi bu ayrı ayrı Faz farklı ürettiğim Pwm'lerin orta noktalarını Aynı hizaya almak istiyorum.
Ne yapmam gerekir?İşlemci clocklarını Senkron etmem gerekmezmi?
Bunu yaparsam Pwmler aynı orjinden başlar.Ne oldu?Hepsi sendeki probleme döndü.

Sonuçta sendeki problem böyle bir şey diye düşünüyorum.
Onun için,hiç bilmediğim bir işlemcinin bir sürü Pdf'ni inceleyip sırf tartışılsın
bilen bilmeyen yarın bir gün uğraşmasın,aşina olsun diye.

Yukarıdaki pdf'in 18.Sayfasındaki sinyali istemiyormusun?
Eğer bu ise istediğin Asimetirk Pwm diye özellikle Pdf te belirtmiş.
Bunu niye yapmış bu Stm.



,







z

#31
Arkadaslar.

Sorumu  basitlestireyim:

3 ayri timeri farkli zamanlarda baslatmak istiyorum. Fakat nasil oluyorsa 3 timerdan birisi ne yapip ediyor 2 timerdan birisi ile senkron calisiyor.

Bu durumu scop ile 3 timerin pwm cikisindan kolayca gozleyebiliyorum.

-------------------------------

Ben bu durumla 3 ayri motor icin 6 ayri pwm uretirken karsilastim. O yuzden center align vs dedim. Kafa karistirici olmus.
Derdim her bir motora uygulanan voltajlari diger motorlarin voltajindan faz farkli yapmak.

Soyle dusunun.

3 tane 3 fazli alternatorum var. Bunlari gelisiguzel zamanlarda calistiriyorum. Fakat o da nesi? Iki alternator ne yaparsam yapayim daima senkron calisiyor.


23 Eylül 2022, 09:30:03
@JOKERAS dilim kopaydida es zamanli demeseydim ne diyim.

Benim derdim 3 timeri es zamanli calistirmak degil. Orda olayi anlatabilmek icin 3 timeri da es zamanli calisitirirsak 3 pwm de senkron olur demek istedim. Ama ben zaten es zamanli olmasini istemiyorum o yuzden de timer counterlari farkli zamanlarda calistiriyorum.
Yani eszamanli calistirmayi zaten istemiyorum.


Bu islemcideki timer mimarisini bilmezsen sallar durursun. Kod parcasi vs vermiyorum cunku sorunu dile getirdim. Merak eden diledigi dilde yazar gorur.

Verdigin dokumani dikkate almiyorum. Cunku asimetrik moda giris yaparken soyle demis.

This feature is not available in the original series.

Yani okumama bile gerek yok.

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Erol YILMAZ

Frekanslarını az farklı yapabilirseniz işiniz çözülmez mi ?

z

#33
Yok o zaman faz farki gezinir durur.

Ben bir kere faz farkini fixleyecegim bir daha hic dokunmayacagim.

Aslinda yapmak istedigimi, neden boyle bir yapiya ihtiyac duyuyorum anlatsam iyi olur fakat konu dagilir gider.

Yoksa center align mod nedir? Bir timerin 3 PWM cikisiyla  faz farkli 3 gerilim nasil elde edilir gayet iyi biliyorum. Oyle olmasa motorlari donduremem.

Umarim sorun benim sapsalligimdan cikar.

Belki bluepill deki islemci ST islemcinin clonudur timer yapisi ST ile  bire bir implement edilmemistir.


Bana e^st de diyebilirsiniz.   www.cncdesigner.com

elektronik kassabı

Bu sorun bir şekilde çözülür ama hassas bir faz farkı yaratabileceğiniz bir yöntem değil bence. Daha önce yaptığım öneri programlama açısından bir seferlik de olsa uğraştırabilir ama bence denemenize değer, bu şekilde hiç uğraşmadan her işlemcide her frekansta her koşulda fazları hassas bir şekilde bölebilirsiniz. Üstelik 1 zamanlayıcı ve 2 CCx cebinizde kalır :D Daha önceki gönderiye ek olarak:



z

#35


3 timerin 3 pwm cikisi.

Toplam 9 cikis sinyali var. Timerlarin mesela 1. kanallarina bakarsaniz duty ler ayni frekanslar ayni ama faz farki var.

Ayni sekilde 2. cikislari ve 3. cikislarda da her seyin ayni sadece faz farki oldugunu gorebilirsiniz.

Fakat ben bu durumu yapamiyorum asagidaki gibi oluyor.

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

JOKERAS

Demekki konuyu irdelemesek Sen kendi kafandakini,Üye arkadaşlar da kendi kafalarında
anladıklarına göre Sallayıp duracaktı.
Şemayı baştan çizsen bir çok kişi olayı Şak diye anlardı.
6 veya 9Pwm ilk defa şema ile anlaşıldı.Ben öyle anladım en azından.

z

#37
Basindan beri farkli bir sey demedim ki.

Timerlarin tek bir kanalini ornek verdim. 3 timerin da birinci cikisi uzerinden konustum. @Tagli hic ikiletmedi konuyu sak diye anladi.

Diger ikisini siz araya sokusturdunuz.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Yuunus

o zaman timer lari @Tagli nin dedigi gibi master slave olarak kurup ITR ler ile tetiklemen gerek,

z

Yukaridaki mesajlarimdan birisinde ise yaramadigini yazmistim.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

flowchartx

Çıkışları direkt pwm olarak değilde set reset yaparak pulseları üretseniz nasıl olur acaba ?

Yuunus

Alıntı yapılan: z - 23 Eylül 2022, 02:04:42Yukaridaki mesajlarimdan birisinde ise yaramadigini yazmistim.
yazdiginin farkindayim ama bundan baska yol yok gibi, tekrar gozden gecir istersen.

z

#42
Eger timerlari soft gecikmelerle enable yaparsam;

Ilk enable edilen TIM4 olursa
Ikinci enable edilen Timer 2 olursa
Ucuncu enable edilen Timer 3 olursa

Istedigim oluyor.

Fakat enable siralamasini herhangi bir sekilde degistirirsem bahsettigim sorun ortaya cikiyor.

Sorunun cozumune yonelik belki de gereksiz pek cok register yuklemesi yaptim. Simdi fazlalik oldugunu dusundugum yuklemeleri temizleyecegim.

Calisan kodlarim asagidaki gibi. (Timer Register adreslerimin index degerleri ST nin hazirladigi index degerlerinden farklidir. Fakat ayni amaci gerceklestirir.)

;***********************************************************************************************
; TIMER 4, 3, 2 PWM uretecek (Center PWM)
;***********************************************************************************************
 
TimerInit   LDR    R0, =TMR_BASE
 
            MOV    R1, #0x20                  ; ARR registeri not buffered
            STR    R1, [R0, #TIM2_CR1]
            STR    R1, [R0, #TIM3_CR1]
            STR    R1, [R0, #TIM4_CR1]
 
            LDR    R1, =PERYOD                ; ARR registerlerine derhal deger yukleyelim
            STR    R1, [R0, #TIM2_ARR]
            STR    R1, [R0, #TIM3_ARR]
            STR    R1, [R0, #TIM4_ARR]
 
            MOV    R1, #0x000
            STR    R1, [R0, #TIM2_CNT]
            STR    R1, [R0, #TIM3_CNT]
            STR    R1, [R0, #TIM4_CNT]
 
            MOV    R1, #0x7070                ; Pre Load disable, Mode=7
            STR    R1, [R0, #TIM2_CCMR1]
            STR    R1, [R0, #TIM3_CCMR1]
            STR    R1, [R0, #TIM4_CCMR1]
 
            STR    R1, [R0, #TIM2_CCMR2]
            STR    R1, [R0, #TIM3_CCMR2]
            STR    R1, [R0, #TIM4_CCMR2]
 
            LDR    R1, =PERYOD>>1             ; CH1 ve CH2 %50 pwm ile baslasin
            STR    R1, [R0, #TIM2_CCR1]
            STR    R1, [R0, #TIM3_CCR1]
            STR    R1, [R0, #TIM4_CCR1]
 
            STR    R1, [R0, #TIM2_CCR2]
            STR    R1, [R0, #TIM3_CCR2]
            STR    R1, [R0, #TIM4_CCR2]
 
            LDR    R1, =PERYOD-1
            STR    R1, [R0, #TIM2_CCR4]       ; Orta noktada event uretsin
            STR    R1, [R0, #TIM3_CCR4]       ; Orta noktada event uretsin
            STR    R1, [R0, #TIM4_CCR4]       ; Orta noktada event uretsin
 
            MOV    R1, #0x7878                ; Pre Load enable, Mode=7
            STR    R1, [R0, #TIM2_CCMR1]
            STR    R1, [R0, #TIM3_CCMR1]
            STR    R1, [R0, #TIM4_CCMR1]
 
            STR    R1, [R0, #TIM2_CCMR2]
            STR    R1, [R0, #TIM3_CCMR2]
            STR    R1, [R0, #TIM4_CCMR2]
 
            MOV    R1, #0xA0                  ; Artik ARR registeri buffered
            STR    R1, [R0, #TIM2_CR1]
            STR    R1, [R0, #TIM3_CR1]
            STR    R1, [R0, #TIM4_CR1]
 
            MOV    R1, #0x00
            STR    R1, [R0, #TIM2_CR2]        ; 
            STR    R1, [R0, #TIM3_CR2]
            STR    R1, [R0, #TIM4_CR2]
 
            MOV    R1, #0x00
            STR    R1, [R0, #TIM2_SMCR]
            STR    R1, [R0, #TIM3_SMCR]
            STR    R1, [R0, #TIM4_SMCR]
 
            MOV    R1, #0x10
 
            STR    R1, [R0, #TIM2_DIER]
            STR    R1, [R0, #TIM3_DIER]
            STR    R1, [R0, #TIM4_DIER]
 
            MOV    R1, #0x0011                ; cmp output enable (Ch1 ve CH2)
            STR    R1, [R0, #TIM2_CCER]
            STR    R1, [R0, #TIM3_CCER]
            STR    R1, [R0, #TIM4_CCER]
 
            MOV    R1, #0xA1
            STR    R1, [R0, #TIM4_CR1] ; Timer 4 firla.
 
            MOV    R2, #1000
DLY1        SUBS   R2, #1
            BNE    DLY1
 
            STR    R1, [R0, #TIM2_CR1] ; Timer 2 firla.
 
            MOV    R2, #1000
DLY2        SUBS   R2, #1
            BNE    DLY2
 
            STR    R1, [R0, #TIM3_CR1] ; Timer 3 firla
 
            BX     LR

Hala hata yapmiyorsam ST'nin dokumante etmedigi, belki aciklamaya ihtiyac duymadigi donanim ozelligi ya da sorunu var.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

JOKERAS

Bence hala olmadı o.Olduğunu sanıyorsun.

Sanırım ben olayı çözdüm.Kutlama kutlama müzikleri,çalınsın,Konfetiler
Pastalar,Havai fişekler hazırlansın.İzzet ikram beklerim.

Eğer olayı gerçekten çözdüysem bunun ne kadar basit,bir o kadar da ne
kadar zor olduğu ortaya çıkacak.

Yuunus

@z hocam timer enable dan kastin clock aktif etmekse ilk birkac donguden sonra herkes esitlenir zaten, buda senin istemedigin durum, sanirim senin asil yapman gereken  ARR vs hangisiyse o registerlerini surekli kontrol edip timerlar ile tetikleme yapman gerekiyor, isin bitincede durduracaksin sanirim, bunun adida ust seviyede master slave olarak geciyor, yinede prg. man  bakmak gerek.