RF ile dc motor hız kontrolü

Başlatan ihsan, 03 Nisan 2014, 03:41:33

ihsan

Merhabalar,

öncelikle şunu belirteyim buraya bir şey yazmadan önce bayağı araştırma yapıyorum daha sonra sorularım varsa cevaba yönelik olarak buraya yazıyorum.

çok kabaca hazır rf modüllerle dc motorun hız kontrol işlemini yapmak istiyorum. ve ben ileri çubuğunu ittirdikçe hızlansın istiyorum. bu devre bir projemizde lazım. bazı pic lerde voltaj karşılaştırıcı yani adc pinler mevcut. aklıma şöyle birşey geldi. verici kısmında bir potansiyometre ile gerilim bölücü yapıp elde ettiğim gerilim farkını adc pinlerine vererek pic e okutmak ve bu bilgiyi rf ile karşıdaki pic e göndermek. işte acaba analog bilgi mi göndermiş oluyoruz bu durumda? eğer öyleyse kısaca analog bilgi nasıl gönderilir tarif edebilir misiniz. çünkü gerisi kolay. adc kodunu yazıp pic in uclarına o farklı voltajları vericem. bu arada c bilgim yok basic olarak uğraşıyorum.

iyi forumlar

est32

güzel düşünmüşsün doğru yoldasın. Ekleme yapalım;
ADC den okuduğun voltaj artık dijitale çevrilmiş demektir ve yolladığın değer de dijital olacaktır.
verici kısımda voltajı ADC ile, analog pin sahibi olmayan bir işlemcide ise POT komutu yöntemi ile oku ve RF modül ile seri olarak yolla. 12F675 bile iş görür
Alıcı kısımda ise donanımsal pwm sahibi bir işlemci kullan ve ADC den okuyup yolladığın değişkeni HPWM komutu ile işlemcinin pwm çıkışına ver, onu da transistör ile güçlendirip motoru sür.(bir nevi tekrar analoğa çevrilmiş oldu, 16F628 iş görür)
Bu şekilde pottan okuduğun analog değeri RF ile göndererek PWM ile de motor hız kontrolü yapmış olursun.
Aklımdaki şeyleri yapıp bitirebilsem bir oyuncak arabada da ben yapmayı düşünüyorum bunu.

ihsan

çok sağol est32, demek doğru yoldayım. süper. hemen kodları araştırıp devam ediyorum. bu arada 2 adet 16f877 var elimde  8)

İlyas KAYA

Vericide ADC yi okuduğunuzda elinizde dijital veri olacak.

Örneğin pottan okuduğunuz değer 124 diyelim

Siz bu 124 rakamını alıcıya seri bilgi olarak göndereceksiniz.
Alıcı; seri olarak aldığı bilgiyi PWM olarak yani analog olarak çıkış yapacak.

Kısaca;
Veri girişi analog , veri transferi dijital , veri çıkışı analog gibi düşünebilirsiniz.

Göz odur ki dağ ardını görsün,
Akıl odur ki başa geleceği bilsin.!

ihsan

#4
sağolun sevgili abilerim kardeşlerim. şimdi şöyle birşey yaptım diyelim. bu sadece gönderici kısmı. 16f877 de alıcı veri bacakları olarak c portunun 7. ve 6. bacakları kullanılıyor. kodları ona göre ayarladım. bu arada şu aşağıdaki kodları hem ete hocamızdan hem de diğer sitelerden aldığım hazır kodları harmanlayarak yazdım. yani sadece mantığı bana ait. rica etsem bilen abilerimden bu mantık doğru mudur bir bakabilirler mi? kodlarda bir yanlışlık var mıdır ?
'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2014 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 4/7/2014                                          *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
TRISA=%00000001
TRISB=0
TRISC=0
TRISD=0
'-------------------------------------------------------------------------------
@ DEVICE pic16F877
@ DEVICE pic16F877, WDT_on
@ DEVICE pic16F877, PWRT_ON
@ DEVICE pic16F877, PROTECT_OFF
@ DEVICE pic16F877, XT_OSC
'-------------------------------------------------------------------------------

Include "modedefs.bas"  'SERİN VE SEROUT KOMUTLARININ ÇALIŞMASI İÇİN GEREKLİ KÜTÜPHANE DOSYASI


Declare Adin_Res = 10       ' 10-bit result required
Declare Adin_Tad = FRC      ' RC oscillator chosen
Declare Adin_Stime = 50     ' Allow 50us sample time
Dim voltbilgisi As Word
TRISA = %00000001           ' Configure AN0 (PortA.0) as an input
ADCON1 = %10000000          ' Set analogue input on PortA.0
voltbilgisi var Word 'SERİ İLETİŞİMDE ALINIP VERİLECEK  VERİ
PORTB=0                     'PORTB İÇERİĞİ SIFIR NEDENİ İSE İLK ENERJİ VERİLDİĞİNDE GİRİŞ VEYA ÇIKIŞLAR AKTİF OLMAMASI İÇİN



BASLA:

voltbilgisi = ADIn 0    ' Place the conversion into voltbilgisi
SerOut PORTC.6,T300,["sifre",voltbilgisi]      'PORTC.6 dan önce sifre'yi sonra voltbilgisi'ni gönder

GoTo BASLA

ihsan

şimdi şöyle birşey yaptım. adc den 1024 lük  değer okudum. rf ile ilettim aldığım 1024 lük adc yi 4 e böldüm ki pwm de çalışsın. çünkü pwm %100 olması için 255 vermek gerekiyor. dosyaları resimleri kodları herşeyi yükledim aşağıdadır. sorunum şu, ısıs da simüle ederken 1 2 saniye boyunca pwm çalışıyor. ışık yanıp sönüyor ve öyle kalıyor. sonra dip switch i açıp kapıyorum ama değişiklik yok. iletim hattına bakıyorum, iletim var.iletim pininde ışık yanıp sönüyor. ama alıcı almıyor galiba. ya da değişik bişeyler gönderiyorum. kodlarıma da baktım. kendimce sorun yok. sizin kod biliginiz benden hayli fazla :) bir bakıp söyleyebilir misiniz nerede hata var ?


VERİCİ KODU:

'****************************************************************
'*  Name    : HPWM-2.BAS                                        *
'*  Author  : [ETE-EROLEC-ERO]                                  *
'*  Notice  : Copyright (c) 2007 [E.T.E]                        *
'*          : All Rights Reserved                               *
'*  Date    : 16.04.2007                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
Device = 16F877
Xtal 4
'OPTION_REG =%00111111
PORTA=0:TRISA=%00000001
PORTB=0:TRISB=%00000001
PORTC=0:TRISC=%00000000
PORTD=0:TRISD=%00000000
ADCON1= %0000001 '
T2CON = %00000101
PR2=249
'-----------------------------------------------------------------
Include "modedefs.bas"  'SERİN VE SEROUT KOMUTLARININ ÇALIŞMASI İÇİN GEREKLİ KÜTÜPHANE DOSYASI
'**************** ADC chanel setting  ************************   
DEFINE ADC_BITS 10    ' ADCIN çözünürlük  (Bits)
DEFINE ADC_CLOCK 1    ' ADC clock kaynağı  (Fosc/8)
DEFINE ADC_SAMPLEUS 3 ' ADC örnekleme zamanı (uSec)
'****************HPWM PRESETİNG*********************
DEFINE CCP1_REG   PORTC    'Hpwm 1 pin port
DEFINE CCP1_BIT     2      'Hpwm 1 pin bit
DEFINE CCP2_REG   PORTC    'Hpwm 2 pin port
DEFINE CCP2_BIT     1      'Hpwm 2 pin bit
'******************* DEĞİŞKENLER  ********************
HAM var Word
X   VAR Word
DUTY VAR Byte   
'---------------------------------------------------------------------------

CCP1CON.2=1
CCP1CON.3=1



DUTY=0
DelayUS 10


BASLA:
If PORTB.0=1 Then
DUTY = ADIn 0
     
     Else DUTY=0
     EndIf
GoTo GONDER

GONDER:
SerOut PORTC.6,T300,["sifre",DUTY]      'PORTC.6 dan önce sifre'yi sonra voltbilgisi'ni gönder
DelayUS 10

GoTo BASLA






ALICI KODU:

'****************************************************************
'*  Name    : HPWM-2.BAS                                        *
'*  Author  : [ETE-EROLEC-ERO]                                  *
'*  Notice  : Copyright (c) 2007 [E.T.E]                        *
'*          : All Rights Reserved                               *
'*  Date    : 16.04.2007                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
Device = 16F877
Xtal 4
'OPTION_REG =%00111111
PORTA=0:TRISA=%00000001
PORTB=0:TRISB=%00000001
PORTC=0:TRISC=%00000000
PORTD=0:TRISD=%00000000
ADCON1= %10001110 '
T2CON = %00000101
PR2=249
'-----------------------------------------------------------------
'**************** RF setting  ************************
Include "modedefs.bas"  'SERİN VE SEROUT KOMUTLARININ ÇALIŞMASI İÇİN GEREKLİ KÜTÜPHANE DOSYASI
'**************** ADC chanel setting  ************************   
DEFINE ADC_BITS 10    ' ADCIN çözünürlük  (Bits)
DEFINE ADC_CLOCK 1    ' ADC clock kaynağı  (Fosc/8)
DEFINE ADC_SAMPLEUS 3 ' ADC örnekleme zamanı (uSec)
'****************HPWM PRESETİNG*********************
DEFINE CCP1_REG   PORTC    'Hpwm 1 pin port
DEFINE CCP1_BIT     2      'Hpwm 1 pin bit
DEFINE CCP2_REG   PORTC    'Hpwm 2 pin port
DEFINE CCP2_BIT     1      'Hpwm 2 pin bit
'******************* DEĞİŞKENLER  ********************
HAM var Word
X   VAR Word
DUTY VAR Byte   
'---------------------------------------------------------------------------

CCP1CON.2=1
CCP1CON.3=1
BASLA:


SerIn PORTC.7,T300,[Wait ("sifre") ,DUTY]      'PORTC.6 dan önce sifre'yi sonra voltbilgisi'ni gönder
DelayMS 10


HPWM 1,DUTY/4,1000 ' Send a 50% duty cycle Pwm signal at 1KHz

GoTo BASLA



ISIS RESMİ:
http://i.imgur.com/hLln7VO.png

Proton, ısıs ve hex dosyaları aşağıdaki linkte.
http://yadi.sk/d/YOkMgSiFM7Fmg

ihsan

bir arkadaşla iletişme geçtim, o projesinde adc bilgisini rf ile gönderip karşıdaki pic de hem step motoru hem de dc motoru kontrol etmiş. rica ettim hex dosyalarını bulup gönderdi. ben kullandım bu kodları. yukarıda yapmaya çalıştığım şeye benziyor. paylaşıyim işine yarayan çıkar dedim.

http://yadi.sk/d/RNzsuqZhMDVvy

bu da arkadaşın blogu;

http://esersenturk.blogspot.com.tr/2013/09/rf-alici-verici-ile-uzaktan-kumandali.html

Powered by EzPortal