DocIDO18940 Rev 9 sayfa 384

Başlatan z, 14 Eylül 2022, 17:02:40

z

Kart uzerinde deneme yapip asagidaki durumu test etmedim. Ancak dokumandaki verilere gore;

DocIDO18940 Rev 9 sayfa 384

MOE=0
OSSI=1
OSSR=X
CCxE=0 
CCxNE=1

Durumu icin OCx cikisin Off State durumunda (Output Enable fakat inactive state) oldugu yaziyor.

Burda hata yok mu? Cikisin Disable olmasi gerekmiyor mu?

Ayni hatanin CCxNE=0 icin de oldugunu dusuuyorum. (Tabloda sondan bir ustteki satir)


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

Tagli

İnceleyip üzerinde düşünme zamanım olmadı ama benim gibi 18940 koduyla arayıp da bulamayan arkadaşlar için yazayım:

Anladığım kadarıyla z, F103 reference manual'deki (bendeki DocID13902 Rev 16) "Table 83. Output control bits for complementary OCx and OCxN channels with break feature" tablosundan bahsediyor. TIMx_CCER register açıklamasının altında bir yerde verilmiş. Daha önce gördüğümü hatırlıyordum ama bulmak için epey bir aramam gerekti dokümanda. Bendekinde 354. sayfada imiş.
Gökçe Tağlıoğlu

Cemre.

#2
Merhaba, MOE biti için yapılan açıklamaya bakılırsa her zaman "disabled" olmak zorun değil.

Bit 15 MOE: Main output enable
This bit is cleared asynchronously by hardware as soon as the break input is active. It is set
by software or automatically depending on the AOE bit. It is acting only on the channels
which are configured in output.

0: OC and OCN outputs are disabled or forced to idle state.
1: OC and OCN outputs are enabled if their respective enable bits are set (CCxE, CCxNE in TIMx_CCER register).

Idle state ise OSSI biti ile tanımlanıyor. Zaten dikkat edilirse tabloda bu değerin 1 olması durumunda ilgili çıkışın aktif olacağı belirtiliyor. Sorun yok gibi?


OSSI açıklaması ile daha anlamlı hale geliyor...

Bit 10 OSSI: Off-state selection for Idle mode
This bit is used when MOE=0 on channels configured as outputs.
0: When inactive, OC/OCN outputs are disabled (OC/OCN enable output signal=0).
1: When inactive, OC/OCN outputs are forced first with their idle level as soon as CCxE=1 or CCxNE=1. (OC/OCN enable output signal=1)

z

ST oncesi TI cipleri ile calistim ve her iki firmanin dokumanlarini kiyasladigimda TI dokumanlarini cok daha anlasilir buluyorum.

Ozellikle ST'nin ADC ve Timer yapilandirmalarini register bazinda yaparken her defasinda o sayfa bu sayfa gezinmek durumunda kaliyorum.

Bugun ST nin TIM1 registerlerini tek sayfada anlasilir kilmak icin TI dokumanlarina benzetmeye calistim.

Fakat su anda asagidaki calismamda cok hata var.





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

z

#4
STSPIN32F0 ile ilk kez 6 step trapezoidal surus teknigini kullanacagim.
Bu cip icinde 32F031 barindiriyor ve Tim1 cikisinda MOS suruculeri de iceren bir kontrol blogu barindiriyor.

6 step tekniginde her hangi bir anda faz cikislarindan birisi bosta oldugundan bu faza ait MOSlarin her ikisinin de OFF olmasi gerekiyor.
En tepede verdigim dokumanda (STM103 icin degil STM031 icindi yanlis yazmisim.) 

OCXE=0 OCXNE=0 iken complementary cikislarin her ikisinin de 0 olmasini beklerken (384 nolu sayfa da oyle olmasi gerektigini soyluyor) low side mos suruluyor. (OCX pini H oluyor.) Yani faz cikislarini bosta birakamiyorum illaki saseye cekiliyor.

STM32F103 cipinde bahsettigim sorun yok.

Isin icinden cikamadim. Kucuk bir ihtimal olarak STSPIN32F0 cipinde TIM1 pwm cikislari dogrudan cip cikisina bagli olmadigindan (arada mos surucu blogu var) acaba cipin icindeki bu kontrol blogu mu bu gariplige neden oluyor diye dusunmeye basladim.

Fakat dedigim gibi olursa o zaman bu ciple 6 step kontrol yapilamaz. Bu cok sacma olur ve bu ciple 6 step trapezoidal kontrol yapilabiliyor. Acaba pwm kullanmadan mi 6 step yapiyorlar bilmiyorum.

Gozden kacirdigim bir sey mi var?

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

ex_machina

Herhangi bir kanalı "Low" veya "High" olmaya zorlamak için TIM1_CCMR1->OC1M, TIM1_CCMR1->OC2M ve TIM1_CCMR2->OC3M registerlerini kullabilirsiniz.
Ama öncesinde TIM1_CR2->CCPC bitini aktifleştirmek lazım. Bu sayede kanalları yönlendirme aşamasında yapılan değişikler "COM Event" gerçekleşinceye kadar buffer'da tutulacak.

Motor dönerken, yani bir stepten diğerine geçerken ki zaman boşluğunda, bir sonraki step için gereken yönlerdirmeleri gerekli registerlere yüklüyoruz.
Artık sizin uygulamaya göre hall sensör, donanımsal zero-cross veya yazılımsal zero-cross detektörden sinyal geldiğinde TIM1_EGR->COMG bitini set ederek yazılımsal
"COM-Event" oluşturuyoruz. Bu event oluştuğu anda önceden güncellenmiş shadow registerler ana registere yüklenecek, dolayısıyla PWM yönlendirme aşamasında hiç zaman kaybedilmemiş olacak. Böylece çok yüksek devirlere çıkmak mümkün olacak.