MSP430 ve PWM ile Dc Motor Kontrolü

Msp430 u ilk defa elime aldım. Tüm özelliklerini elimden geldiği kadar sırayla anlatmaya çalışacağım. İlk konumuz pwm kullanımı olacak. Code Composer Studio adlı derleyicinin kullanımı hem basit hem hoşuma gitti. Texas Instruments son dönemlerde çok fazla kampanya yapıyor ve mikro denetleyicilerini tanıtmaya çalıyor. Bu da bizim işimize yaramıyor değil. Web sitesinde ayrıntılı dökümanlar ve örnekler sayesinde msp430 u anlamak cok daha kolay oluyor. Bu denemede MSP430G2231 adlı mikro denetleyiciyi kullanacağım. Bu mikro denetleyicinin datasheetine buradan bakabilirsiniz. Aşağıdaki resim de Msp430G2231 in şemasına ait.

Msp430 üzerinde tümleşik osilatör (DCO) bulunmaktadır. Şimdilik yanında gelen mikro kristali kullanmayacağım.Denetleyici üzerinde 1 adet 16 bitlik TimerA ve onunla birlikte 2 tane Capture/Compare Registerı (CCR) bulunmakta. Aşağıdaki tabloda denetleyicide bulunan Capture/Compare pinlerinin özellikleri yazıyor.

Ancak elimizde 2 adet CCR olmasına rağmen sadece tek pwm sinyali alabiliyoruz. 3 adet CCR olsaydı 2 adet pwm çıkışı alabilirdik. CCR’lerden biri duty cycle ayarlarken diğeri periyodu ayarlıyor o yüzden sadece tek gerçek pwm sinyali alabiliyoruz. Ancak 2 farklı metodla 2 CCR registerdan 2 pwm sinyalide alabiliriz. Birinci metod ile (CCR0 set/reset outmode yaparak) iki çıkıştan aynı frekansı alırız ve 1 clock cycle süresince 1 pulse alabiliriz. İkinci metod ile (toggle mode) yarım frekans ve %50 duty cycle alabiliriz. Bu metodlar şimdilik biraz ayrıntı olacak daha sonra bu metodlara tekrar değineceğim.

DCO (Digitally Controlled Oscillator) kullandığımız için motorun ortalama hızı hiçbir şekilde değişmez. Bunun için msp430 ile birlikte gelen kristali kite lehimleyebilirsiniz. Ancak pwm için şart değil. Bu denemede ben kullanmayacağım. Motoru p1.2 çıkışına resimdeki gibi bağladım. Transistor kullanarak motor sürücü kullanmaktan kurtulduk.

Şimdi geldik program aşamasına;;

//******************************************************************************
//  MSP430G2231 Deneme - Timer_A, PWM TA1, Up/Down Mode, DCO SMCLK
//
//  Açıklama : Bu program ile  P1.2 den 1 PWM sinyali alacağız.

//Timer_A ile up/down mode kullandık.
//  CCR0 nin değeri : 128, Bu değer PWM periyodu/2 yi verir.

//CCR1 deki değer PWM duty cycles i verir.
//  P1.2 : %75 duty cycle,%25 pwm
//******************************************************************************

#include  <msp430g2231.h>

void main(void)
{
WDTCTL = WDTPW + WDTHOLD;                 // WDT'yi durdurduk.
P1DIR |= 0x0C;                            // P1.2 ve P1.3 output yaptık.
P1SEL |= 0x0C;                            // P1.2 ve P1.3 TA1/2 ayarını yaptık.
CCR0 = 128;                               // PWM Periyot/2
CCTL1 = OUTMOD_6;                         // CCR1 toggle/set
CCR1 = 32;                                // CCR1 PWM duty cycle
TACTL = TASSEL_2 + MC_3;                  // SMCLK, up-down mode

_BIS_SR(LPM0_bits);                       // LPM0 girdik.

}

Bu resimde de görüldüğü gibi kare dalgalarımızı periyot ve duty cycle değerlerine göre oluşturuyoruz.

Resimdeki kare dalgaların max değerleri bize Vcc değerini verir. En alt sıfır değeri ise Vss tir. Vcc=3.6volt Vss=0 volttur.Duty Cycle yüksekte kalma süresidir.Formülsel olarak ;;

Pwm Yüzdesi = (Duty Cycle/Periyod)*100

Verdiğimiz değerlere göre voltaj hesalayalım.

Son Voltaj = Vcc * (100-Pwm Yüzdesi) şeklinde sonuca ulaşabiliriz.

Yukarıdaki kodumuzu göre formüle dökersek;;

Pwm Yüzdesi = (32/128)*100 = %25

Pwm verilmediğinde max 3.19 volt çıkış alabiliyoruz. %25 pwm verildiğinde 2.34volt çıkış aldım.

Son Voltaj = 3.19* (%100-%25) = 2.39 degerini formülden bulduk.

Formül ve gerçek degerlerde çok az bir sapma olsada verdiğimiz %25 pwm den %75 lik çıkış voltajı aldık. %40lık pwm verseydik %60lık çıkış voltajı alırdık. Duty Cycle değerini sıfır verirsek %100 lük çıkış voltajı elde ederiz. İlk yazımın da sonuna geldik. Elimden geldiği kadar size msp430 üzerinde pwm ile dc motor kontrolünü anlatmaya çalıştım. Bir sonraki yazımda görüşmek üzere…

//******************************************************************************
//  MSP430G2xx1 Demo – Timer_A, PWM TA1, Up/Down Mode, DCO SMCLK
//
//  Description: This program generates one PWM output on P1.2 using
//  Timer_A configured for up/down mode. The value in CCR0, 128, defines the PWM
//  period/2 and the value in CCR1 the PWM duty cycles.
//  A 75% duty cycle is on P1.2.
//  SMCLK = MCLK = TACLK = default DCO
//
//               MSP430G2xx1
//            —————–
//        /|\|              XIN|-
//         | |                 |
//         –|RST          XOUT|-
//           |                 |
//           |         P1.2/TA1|–> CCR1 – 75% PWM
//
//  D. Dang
//  Texas Instruments, Inc
//  October 2010
//  Built with CCS Version 4.2.0 and IAR Embedded Workbench Version: 5.10
//******************************************************************************#include  <msp430g2231.h>

void main(void)
{
WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
P1DIR |= 0x0C;                            // P1.2 and P1.3 output
P1SEL |= 0x0C;                            // P1.2 and P1.3 TA1/2 options
CCR0 = 128;                               // PWM Period/2
CCTL1 = OUTMOD_6;                         // CCR1 toggle/set
CCR1 = 32;                                // CCR1 PWM duty cycle
TACTL = TASSEL_2 + MC_3;                  // SMCLK, up-down mode

_BIS_SR(LPM0_bits);                       // Enter LPM0
}

8030 Total Views 3 Views Today

Yorumu formunu geç

    • cenk on 20 Mart 2011 at 12:15
    • Cevapla

    Burada pwm sinyalini direk dc motor almadi dimi bunun için ne gerekior

    1. Ben burada direk baglanti yaptim. Neden derseniz ek olarak motor surucuyle ugrasmak istemedim. Eger size 3,6 volt yetmiyorsa motor surucu kesinlikle sart.

    • cenk on 20 Mart 2011 at 20:25
    • Cevapla

    sanırım msp430 launchpad çift motor direk kullanamıcaz

    1. Kullanabilirsiniz tabikide. Ancak kit ile birlikte gelen g2231 adli mikrodenetleyici ile 2 adet pwm cikisi alamazsiniz. Onun yerine msp430 uyumlu ve 3CCR a sahip bir mikrodenetleyici takmalisiniz.

    • cenk on 14 Nisan 2011 at 10:00
    • Cevapla

    stepper motor veya step motoru istediğimiz pine direk bağlıyabilirmiyiz.Yapısı dağa değişik ve arada hep breadboard kullanmışlar.sanırım volt artırmak için

  1. Msp430dan 3volt cikis alabildigimiz icin genelde motorlara yetmeyecegi ve motoru 2 yonlu surmek icin ekstra motor surucuye ihtiyac duyariz. Bunun icin breadboard kullanilmistir.

    Ek olarak kesinlikle motorlari msp430 a direk baglamayiniz…Yoksa geri beslemeden dolayi msp430 u bozabilirsiniz. Icinde diyot yapisi bulunan 1Amper akima dayanan lm293d yi kullanabilirsiniz. Eger yetmezse 2Ampere dayanan l298 i kullanabilirsiniz. Ancak l298 in icinde diyot yoktur o yuzden cikislarina diyotlari siz yerlestirmelisiniz.

    Step motorlara gelince;
    Dedigim gibi hicbir motoru direk pine baglamayiniz. Ben yukarida oyle yaptim ugrasmak istememistim 🙂 .
    Step motor icin ULN2003 entegresini kullanmanizi tavsiye ederim.

    • ali on 02 Mayıs 2011 at 05:16
    • Cevapla

    Dc motor iki ucu var ya orada giden akımı nasıl ikiye ayırdık fiziksel olarak

    1. Ben direk +ucunu giris pinine diger ucunu topraga bagladim ancak siz motor surucuyle kullanin ve motor suruclere motorlar output pinleriyle baglanir.

    • ozer on 07 Mayıs 2011 at 14:48
    • Cevapla

    Merhaba,
    hocam msp430 ile dahili timerli frekansmetre nasil yapabilirim.yapacagim frekansmetre frenkansi herhangi bir kaynaktan alip, olculen frekans 3 adet 7 segment gostergede goruntulenecek.msp430 ile calismaya baslayali cok olmadi bu yuzden cok az bilgim var.Yardimci olursaniz sevinirim.

    • zafer on 22 Mayıs 2011 at 04:44
    • Cevapla

    Capture modunu kullanarak, uygulanan sinyalin yükselen kenarlarında kesme oluşturup, kesmeler arası zamanı hesaplarsanız ve bunu F = 1/T de yerine koyarsanız frekansı elde etmiş olursunuz. Eğer msp430g2231 kullanıyorsanız elde edilen rakamı displayde görüntülemek için, 7447 kullanıp tarama yaptırmanız gerekecek. Çünkü pin sayınız yeterli değil. 3 basamaklı bir sayıyı formatlayarak displayde görüntüleyebileceğiniz kodlar ve devre elimde mevcut. İsterseniz size ulaştırabilirim. Frekansı hesaplama konusunda datasheet’e bir gözatmanızın faydası olacağını düşünüyorum.

    • Mahir Erdoğan on 23 Mayıs 2011 at 13:51
    • Cevapla

    Merhaba hocam benim sorum işlemciden ziyade sürücü devresi ile ilgili, 24 volt 30 amper çeken 400 watt lık bir DC motor üçün hangi mosfeti kullanmalıyım?

    Teşekkürler

    Saygılar

    1. Hic o kadar guclu bir motor kullanmadigim icin bilemiyorum. Ancak googledan bir bakin isterseniz.

    • Twisekisa on 26 Mayıs 2011 at 08:07
    • Cevapla

    Iyi bir baslangic

    • ozer on 28 Mayıs 2011 at 01:19
    • Cevapla

    tesekkurler.

  2. Kit üzerinde motor sürerken eğer motor sürücü kullanmayacaksak yeni eklediğim motor sürme metodunu kullanabilirsiniz.

    • FG on 02 Nisan 2012 at 02:16
    • Cevapla

    merhaba . ben l293d kullanarak açık ve kapalı devre dc motor kontrolü yapmak istiyorum. yardımcı olabilir misiniz

    • kbrd on 26 Nisan 2017 at 13:14
    • Cevapla

    merhaba dc motor hız ve yön kotnrlnü encoderdan gelen bilgi ile yapmam gerekiyor. yarıdımcı olma sansınız var mı?

Bir cevap yazın

E-Posta adresiniz yayınlanmayacaktır.

This site uses Akismet to reduce spam. Learn how your comment data is processed.