stm32f103c8 TIMER 2 ,3, 4 sorunum

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

z

Timer 2,3 ve 4 u birerbir ayni olacak sekilde ve center align modunda pwm uretecek sekilde kuruyorum.
Master Slave gibi bir kurulum yapmiyorum.

Timerlarin cnt registerleri 0.

Timer 2 yi baslatiyorum. Ardindan 10us sonra Timer 3 u baslatiyorum. Ardindan 10us sonra da Timer 4 u baslatiyorum.

Bu sartlar altinda Timerlarin pwm cikislari arasinda 10us kayma olmasi gerekir.

Fakat 3 timerdan  ikisi  senkronize cikis veriyor.

Kafayi yiyecegim.


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

muhendisbey

Buna benzer bir sıkıntı yaşadım ve çözemedim. Sonrasında derme çatma bir çözümle yoluma devam etmiştim. Cevabı ben de merak ediyorum.

Naçizane ilk önerim 5-20-40us gibi farklı süreler verip hangi iki timer'ın senkron çalıştığını bulmaya çalışırdım.
Sonrasında datasheet üzerinden bu timer hakkında özel bir durum var mı, bu timerları kullanan başka bir birim var mı diye bakardım.
Zulmü alkışlayamam, zalimi asla sevemem; Gelenin keyfi için geçmişe kalkıp sövemem.

Tagli

Alıntı yapılan: z - 17 Eylül 2022, 01:13:25Ardindan 10us sonra Timer 3 u baslatiyorum.
Bunu nasıl yapıyorsun? Yani 10 us gecikmeyi?
Gökçe Tağlıoğlu

z

#3
Alıntı yapılan: Tagli - 17 Eylül 2022, 10:45:56Bunu nasıl yapıyorsun? Yani 10 us gecikmeyi?

Timerlar ilk basta init edildi ama start edilmediler.

1. timera start ver.
10us bekle.
2. timera start ver
10us bekle.
3. timera start ver

timerlara start  vermeden once cnt degerlerini degistirerek de timerlar arasinda kayma yapabilirsin.

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

Tagli

O 10 us bekleme olayını komutların zamanlaması ile tam tutturamıyor olabilirsin. Başlatmadan önce kaydırma yapmak mantıklı. Ancak eş zamanlı başlangıç için timer'ların birbirlerini tetikleme özelliğini kullanman doğru olur. Yani 10 us kayık CNT değerleri ile 3 timer da aynı anda başlamalı. İçlerinden birini master yap, diğerleri slave timer olarak master'a bağlansın, aynı anda tetiklensinler.

3 timer'ı aynı anda başlatmak için
TIM3 ve TIM4'ü SMS = 0b110 (Slave Mode Selection = Trigger Mode) olarak ayarla
TIM3 ve TIM4'ün TS bitleri ile ITR kaynaklarını TIM2 olacak şekilde ayarla
TIM2'de MMS = 0b001 (Master Mode Selection = Enable) olarak ayarla
TIM2'yi başlat

Denemedim ama bu şekilde çalışması lazım.
Gökçe Tağlıoğlu

z

#5
Ben ayni anda tetiklensin istemiyorum. 10us olmasin da 8 us olsun digeri 10us sonra degil de 12us sonra olsun dert degil.

Neyse sorunu cozdum. shadow registerler sorun yaratiyor. soft olarak update event ureterek timerin 0 yada ARR degeri yuklendigini biliyoruz.

istedigim faz farkini olusturmak icin farkli zamanlarda update event olusturunca cozuldu.

Artik timer modullerine bir kez faz farki verdimmi bir daha update eventi soft olarak vermedikce MCU calistigi surece faz farki korunuyor.

Bu sayede tek MCU ile cok sayida step motor kontrol ederken sargi akimlarini cok daha dogru olcmenin yolu acilmis oldu.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

JOKERAS

Temp-Shadow-Load Buffer.Bu tip Buffer varsa bunları Update etmek için bir Switch olmalı.
Değeri hazırla,update et Son olarak yükle.Aksi halde içinde önceki rastgele değer ne ise
o kalacak.

Bu İşlemcilerin açık Datahshetleri yokmu?İnternetten bulduğum şemalarda bir halt yok.
Registerleri,Modülleri gösteren açık Pdfleri nerede bu işlemcilerin.

z

Sevinmistim ancak Update eventi de kod icinde yapinca gene olmadi.

Shadow registerleri devre disi birakip ilk degerleri dogrudan hedef registerlere yukluyorum. o da cozum olmuyor.

@Tagli nin yontem de ise yaramadi.

Ne oluyorsa bir sekilde iki ayri timerin pwm cikislari kendiliginden senkron hale geliyor. Fakat diger ucuncu timer istedigim gibi faz kayikligi olusturuyor.

Debug modunda timerlariin CEN bitlerini mouse ile tiklarsam sorun yok timerlar faz farkli calisiyor.
Gerci bunda da sorun var 4-5 cesit faz kayikligi olusturabiliyorum sadece.

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

JOKERAS

Center Allingned Modu Zaten Hepsini aynı hizada başlat demek değilmi?
Eğer öyle ise bu durumda DeadBand,Blanking gibi Registerler olmalı.
Onlara vereceğin değer ile Başlangıç ve bitişleri ayarlanabilir.

Bilmediğim bir işlemci,mantık kuruyorum.






marecrisium

Errata sheette Timerlarla ilgili çeşitli hatalardan bahsediyor. Belki sizin sorununuzun nedeni olabilirler.

z

#10
Alıntı yapılan: JOKERAS - 17 Eylül 2022, 14:57:19Center Allingned Modu Zaten Hepsini aynı hizada başlat demek değilmi?
Eğer öyle ise bu durumda DeadBand,Blanking gibi Registerler olmalı.
Onlara vereceğin değer ile Başlangıç ve bitişleri ayarlanabilir.

Bilmediğim bir işlemci,mantık kuruyorum.

Tek bir timerin pwm cikislarindan bahsetmiyorum. Birbiriyle alakasiz timerlarla derdim.

Islemciye ne? Kimi ne zaman baslatirsam baslatirim. Bir birine senkron olsun olmasin benim tercihimde olmali.

Benim bedereksizligimdendir diyecegim ama atmadigim takla kalmadi. Belki basit bir hata yapiyorum.

Problemi gormek isteyenlerin yapmasi gerekenler;

Timer 2, 3 ve 4 u center align modda pwm uretecek sekilde kursunlar.
Compare degeri olarak hepsine %50 duty verecek yuklemeyi yapsinlar.
Sonra Timerlari farkli zamanlarda calistirarak Timerlarin faz farkli calistigini gorsunler.

Bende sadece bir timer digerlerinden faz farkli calisiyor. Diger ikisi ayni fazda calisiyor.

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

Bu arada gecen aylarda aliexpressden 5 tane blue pill sparis etmistim. ilk kez bluepill sorunu ile karsilastim.

Sorunlu kartta STM32F103C8 cipinde Time4 yok. ADC calismiyor. Rami 10K civarinda.






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

devrecii

Timere hiçbir özellik eklemeden denedin mi normal pwm center özelliği olmayan. o zaman çalışıyor mu ? Eğer calışmıyorsa stm8 de bir deneyeyim.

Belki kesme compare vs vs istekleri cpu da fazla transitörlere yollara vs sebep olacağı için bilerek böyle tasarlamışlardır diye düşündüm.


JOKERAS

3 Timerı farklı zamanlarda aktif edip Faz kayması oluşturmak pek mantıklı gelmedi.

ARR(Auto Reload Register) Bufferını temizleyip yada farklı değerler yazarak denedinmi?
Bu Buffere yazılan değer taşınca Update Event-İnterrupt oluşur diye anlıyorum.
Update Event ne demek?ARR Bufferı artık yeni değer yüklenmeye hazır demek.
Aksi halde mevcut değer işlenirken Update yapmanın mantığı yok,yapamazsın demek.

Değeri hazırla, Event oluşunca Değer otomatik yüklenir, yeni değer hazırlanır.
Buffer'a vereceğin değerlerle istediğin gibi oyna.

Ne bileyim dediğim gibi bildiğim bir işlemci değil mantık kuruyorum.







elektronik kassabı

Soruya tam yanıt değil ama meselenin kendisi için şöyle bir fikrim var. 2 tane zamanlayıcı üniteden 3'er adet CCx alın. (CCx: her modülde 4 adet olan karşılaştırıcı) A zamanlayıcısı CCx'lerinde center-aligned-PWM'nin yükselen kenarlarını normal PWM olarak üretin. B zamanlayıcısı CCx'lerinde düşen kenarları normal ama terslenmiş PWM olarak üretin. İki zamanlayıcıyı ayarladıktan sonra hemen ardı ardına başlatırsanız faz açılarını ona göre çok kolay ayarlayabilirsiniz. PWM çıkışlarını open-drain olarak ayarlayın. CCx çiftinin çıkışlarını fiziksel olarak birleştirin. Bu düğümü pull-up yapın. Böylece bu düğüm bir VE işleminin sonucu olsun. Sonuç olarak, işte yap-boz donanımsal bir 3 faz devre :)

Soruya tam yanıt beklemek için bu zamanlayıcıları ayarlamak için ne yaptınız ne ettiniz ayrıntılı bir şekilde ortaya dökmeniz gerekir.

z

Bu konuya kafa yoran/deneme yapan yok mu?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com