akım ve gerilim arasında faz farkını ölçmek

Başlatan magnetron, 08 Ağustos 2021, 21:34:51

magnetron

merhaba forum,

akım ve gerilim arasında fazfarkını ekli kod ile öçmek istiyorum

bu kodda bir sorun var diye düşünüyorum

şöyleki akım sıfır geçişini TIM1_CC1 ile yakalıyorum
voltajı ise TIM1_CC4 ile yakalıyorum

sorum şu; akım veya voltaj interruptlardan birisi ötekinden önce gelicek mecburen

o zaman fazfark hesaplayan satırda
akım Capture önce gelirse voltaj capture güncel değerde olmuycak
aynı şekilde voltaj capture önce gelirse akım capture güncel değerde olmuycak

bu sorunu nasıl aşabilirim

not fazfark int32_t, capture değişkenleri uint16_t

not: frekans 35 khz

teşekkür

void TIM1_CC_IRQHandler(void)
{
  /* USER CODE BEGIN TIM1_CC_IRQn 0 */

	/*WRITE_REG(TIM1->SR, ~(TIM_SR_CC1IF));*/
	if (LL_TIM_IsActiveFlag_CC1(TIM1))
	  {//ijkl++;
		CC1capture=LL_TIM_IC_GetCaptureCH1(TIM1); LL_TIM_ClearFlag_CC1(TIM1);}
	if (LL_TIM_IsActiveFlag_CC4(TIM1))
	  {//ijkl++;
		CC4capture=LL_TIM_IC_GetCaptureCH4(TIM1); LL_TIM_ClearFlag_CC4(TIM1);}

	fazfark=CC1capture - CC4capture;

quarko

Gerilim ve/veya akımda harmonik olması durumunda sıfır geçişler vasıtasıyla faz farkı ölçümü doğru sonuç vermeyebilir. Bunu dikkate almak lazım. Eğer öyle bir durum yoksa interruptların önce gelme durumlarını engellemek için durumlar state lere bölerek faz farkı hesaplayabilirsiniz. 
"Vicdanın ziyası ulum-u diniyedir. Aklın nuru fünun-u medeniyedir. İkisinin imtizacıyla hakikat tecelli eder."

ziyaretci

Bir tanesini referans aldım.

-A sinyali
-B sinyali

A'yı referans aldım. A'nın her yükselen kenarında her iki sayacın değerlerini sıfırladım. B'nin her yükselen kenarında A'nın sayacının değerini aldım.

Buradan A'nın değerini şu işleme tabi tuttum: Açı = A*360*f = A*360*1/T


z

Mantiken;

Counter uygun bir frekansda CPU clkdan turetlmis palsleri saysin.

A sifir gecis int urettiginde Counteri oku ardindan sifirla. T1Eski=T1,  T1=Counter  Counter=0
B sifir gecis int urettiginde Counteri oku ve sakla. (T2)


Peryod = T1- T1Eski

Aci=T2*360/Peryod

T1 - T1Eski hesaplamalari negatif cikarsa Timer tasmis demektir dogru degeri gene hesaplayabilirsin.
Eger A ve B yer degisirse aci 90 dereceden buyuk olur 360 - Aci olarak duzeltirsin.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

magnetron

#4
merhaba tekrar

faz detektor şeması ve dedektor çıkışların osiloskoptaki görüntüsü böyle

bu pikler yüzünden faz farkını hatalı ölçüyor - timer girişlerde capture filtre N=8 olarak ayarlı

ne yapılabilir ? teşekkür




Yuunus