Picproje Elektronik Sitesi

DİJİTAL & ANALOG ELEKTRONİK => Malzeme Bilgisi => Konuyu başlatan: baran123 - 20 Şubat 2017, 18:32:52

Başlık: BLDC sürücüleri ve akım ölçümü
Gönderen: baran123 - 20 Şubat 2017, 18:32:52
Bitirme projemde bir BLDC kontrolü yapacağım.
Sürücü kısmının tasarımında kafam karışıyor.
Çok yüksek güçte olmayan bir BLDC motor için 2 yöndede dönebilen ve akım-RPM değerlerini ölçebileceğim bir tasarım yapmak istiyorum.
Bu noktada ki ilk sorum hazır bir BLDC sürücü mü kullanmak yoksa mosfet sürücüler ile sıfırdan oluşturmak mı ?
Örnek olarak ilk karşıma çıkan TI - DRV8302
Başlık: Ynt: BLDC sürücüleri ve akım ölçümü
Gönderen: apsis - 20 Şubat 2017, 20:28:34
Ben de bitirme olarak sabit kanatlı drone yapmayı planlıyorum. Motor sürücülerinde DRV10983 drv3205 entegrelerini kullanmayı düşünüyorum.
Yalnız sadece motor kontrol edecekseniz biraz basit kalmaz mı?
Başlık: Ynt: BLDC sürücüleri ve akım ölçümü
Gönderen: baran123 - 20 Şubat 2017, 21:17:27
Hocam sadece motor değil motor sadece bir kısmı :)
Başlık: Ynt: BLDC sürücüleri ve akım ölçümü
Gönderen: apsis - 20 Şubat 2017, 22:48:34
He tamam o zaman. Çünkü size yakışmazdı :). Ben de minimum titreşim istenen küçük bir makine için bu sürücülerden kullanmayı düşünüyorum. Bunlar aşırı akım uyarılarına kadar bir çok bilgiyi veriyor. Profesyonel açıdan kullanılabilir derim. Benim yazdığım koddaki entegrelerin birine dışarıdan mosfet de bağlanabiliyordu sanırım.
Başlık: Ynt: BLDC sürücüleri ve akım ölçümü
Gönderen: baran123 - 23 Şubat 2017, 16:24:46
STM32F103C8T6 için PWM sinyallerini oluşturmaya başladım. Şuan için test amaçlı bir 20kHz sinyal oluşturdum.
Fakat henüz Complement Çıkışları aktif edemedim.
(http://i.hizliresim.com/ojnvZX.png)


#define PWM_PERIOD  (3599)

TIM_TimeBaseInitTypeDef TIM_BaseStruct;
    TIM_OCInitTypeDef TIM_OCStruct;
    TIM_BDTRInitTypeDef TIM_BDTRInitStruct;

    TIM_BaseStruct.TIM_Prescaler = 0;

    TIM_BaseStruct.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_BaseStruct.TIM_Period = PWM_PERIOD; // ((72 MHz / 20kHz) - 1) = 3599
    TIM_BaseStruct.TIM_ClockDivision = TIM_CKD_DIV1;
    TIM_BaseStruct.TIM_RepetitionCounter = 0;

    TIM_TimeBaseInit(TIM1, &TIM_BaseStruct);

    TIM_OCStruct.TIM_OCMode = TIM_OCMode_PWM1;
    TIM_OCStruct.TIM_OutputState = TIM_OutputState_Enable;
    TIM_OCStruct.TIM_OutputNState = TIM_OutputNState_Enable;
    TIM_OCStruct.TIM_OCPolarity = TIM_OCPolarity_Low;
    TIM_OCStruct.TIM_OCNPolarity = TIM_OCNPolarity_Low;
    TIM_OCStruct.TIM_OCIdleState = TIM_OCIdleState_Set;
    TIM_OCStruct.TIM_OCNIdleState = TIM_OCIdleState_Reset;

    TIM_OCStruct.TIM_Pulse = (((PWM_PERIOD + 1) * 25) / 100) - 1;
    TIM_OC1Init(TIM1, &TIM_OCStruct);
    TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);

    TIM_OCStruct.TIM_Pulse = (((PWM_PERIOD + 1) * 50) / 100) - 1;
    TIM_OC2Init(TIM1, &TIM_OCStruct);
    TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable);

    TIM_OCStruct.TIM_Pulse = (((PWM_PERIOD + 1) * 75) / 100) - 1;
    TIM_OC3Init(TIM1, &TIM_OCStruct);
    TIM_OC3PreloadConfig(TIM1, TIM_OCPreload_Enable);

    /*TIM_BDTRInitStruct.TIM_OSSRState = TIM_OSSRState_Enable;
    TIM_BDTRInitStruct.TIM_OSSIState = TIM_OSSIState_Enable;
    TIM_BDTRInitStruct.TIM_LOCKLevel = TIM_LOCKLevel_1;
    TIM_BDTRInitStruct.TIM_DeadTime = 117;
    TIM_BDTRInitStruct.TIM_Break = TIM_Break_Enable;
    TIM_BDTRInitStruct.TIM_BreakPolarity = TIM_BreakPolarity_High;
    TIM_BDTRInitStruct.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable;

    TIM_BDTRConfig(TIM1, &TIM_BDTRInitStruct);*/

    TIM_Cmd(TIM1, ENABLE);
    TIM_CtrlPWMOutputs(TIM1, ENABLE);