Stepper Motor

Başlatan onurinci, 14 Ağustos 2013, 03:16:48

onurinci

Hocam selam

bir stepper motor ile potansiyometre yapmaya çalıştım, stepper miline dimmer pot'u bağlı bu uzun ömürlü bir telli pot.bir sitede hazır kod buldum fakat bu çok eski bir basic idi bunu günümüze adapte etmeye çalıştım. motor sağa doğru bir kere dönüyor ,periyodik olarak sola hep dönüyor. halbuki koda bakınca bir sol bir sağ dönmesi gerekiyor.aralarda beklemeler falan var bu cihaz pille çalıştığı için sleep le uyutuluyor.simulasyon yapayım diye süreleri minimuma indirdim.tabi hazır kod'da ya yazar baskı hatası yaptığını düşünüyorum çünki kod'un arasına END serpiştirmiş. en dibe goto şuraya git dedim bu sefer simulasyon return stack hatası verdi bir göz gezdirirseniz sevinrim.

bu yazarın verdiği orijinal kod
' Heat Beacon Stepper Motor Control
'
' "Defeating Infrared Motion Sensors" − GBPPR 'Zine #23
i  var Byte                         ' Set variables
B1 var Byte
i = 0                               ' Initialize everything to 0
B1 = 0
Pause 5000                          ' Wait a bit
Poke 134, 128                       ' Set Port B1−6 output, Port B7 i
For i = 1 to 11                     ' Step motor 44 times, increase i
  Gosub Stepper1                    ' 44 * 7.5 = 330 degrees of trave
Next i                              ' 44 * 5 seconds = 220 seconds or
Button 7, 0, 255, 0, B1, 1, Loop1   ' Check time delay switch, if ope
Sleep 600                           ' 600 seconds or 10 minutes
Loop2:
For i = 1 to 11   ' Reverse direction of pot, lower intensity
  Gosub Stepper2
Next i
Low 0            ' Power stepper motor down
Low 1
Low 2
Low 3
End              ' Touching of little boys
Loop1:           ' If time delay switch is closed:
Sleep 1800       ' 1,800 seconds or 30 minutes
Goto Loop2
Stepper1:       
  Poke 6, 12     ' Output: 1100
  Pause 5000     ' Wait 5 seconds
  Poke 6, 6      ' Output: 0110
  Pause 5000     ' Wait 5 seconds
  Poke 6, 3      ' Output: 0011
  Pause 5000     ' Wait 5 seconds
  Poke 6, 9      ' Output: 1001
  Pause 5000     ' Wait 5 seconds
  Return
Stepper2:
  Poke 6, 9      ' Output: 1001
  Pause 5000     ' Wait 5 seconds
  Poke 6, 3      ' Output: 0011
  Pause 5000     ' Wait 5 seconds
  Poke 6, 6      ' Output: 0110
  Pause 5000     ' Wait 5 seconds
  Poke 6, 12     ' Output: 1100
  Pause 5000     ' Wait 5 seconds
  Return


buda naçizane kurcaladığım kod
[@ Device PIC16F628A,WDT_ON,PWRT_ON,PROTECT_OFF, CPD_OFF,MCLR_OFF,BOD_OFF,INTRC_OSC_NOCLKOUT,LVP_OFF
DEFINE OSC 4 'Oscillator speed in MHz     

' Heat Beacon Stepper Motor Control
'
' "Defeating Infrared Motion Sensors" - GBPPR 'Zine #23
i  var Byte                         ' Set variables
B1 var Byte
i = 0                               ' Initialize everything to 0
B1 = 0
Pause 500                          ' Wait a bit
TRISB = %10000000   ' Set Port B1-6 output, Port B7 input
For i = 1 to 2'11                     ' Step motor 44 times, increase intensity
  Gosub Stepper1                    ' 44 * 7.5 = 330 degrees of travel
Next i
                             ' 44 * 5 seconds = 220 seconds or 3.6 minutes
Button 7, 0, 255, 0, B1, 1, Loop1   ' Check time delay switch, if open:
Sleep 1'00 
                         ' 600 seconds or 10 minutes
Loop2:
For i = 1 to 2'11   ' Reverse direction of pot, lower intensity
  Gosub Stepper2
Next i

Low 0            ' Power stepper motor down
Low 1
Low 2
Low 3

Loop1:           ' If time delay switch is closed:
Sleep 10'1800       ' 1,800 seconds or 30 minutes
Goto Loop2

Stepper1:       
  PORTB=%1100     ' Output: 1100
  Pause 500'0     ' Wait 5 seconds
  PORTB=%0110       ' Output: 0110
  Pause 500'0     ' Wait 5 seconds
  PORTB=%0011       ' Output: 0011
  Pause 500'0     ' Wait 5 seconds
  PORTB=%1001       ' Output: 1001
  Pause 500'0     ' Wait 5 seconds
  Return
 
Stepper2:
  PORTB=%1001       ' Output: 1001
  Pause 500'0     ' Wait 5 seconds
  PORTB=%0011       ' Output: 0011
  Pause 500'0     ' Wait 5 seconds
  PORTB=%0110       ' Output: 0110
  Pause 500'0     ' Wait 5 seconds
  PORTB=%1100      ' Output: 1100
  Pause 500'0     ' Wait 5 seconds
  Return

  'End              ' Touching of little boys
/code]

Saygılar.

ete

#1
Bu şekilde bakmam zor. Buraya rar olarak hem programı hemde simulasyonu koy bakayım.
Bipolar step motorla uğraşıyorsun anlaşılan. Aslında pot'u bir servo ile kontrol etsen daha uygun olurdu ama step motorda olur.
Her şeyden önce elindeki motorun adım başına kaç derece döndüğünü tespit etmen gerekiyor. Adamın örneğindeki 7,5 derece dönüyormuş Bu yüksek bir miktar. genelde motorlar 1,8 derece dönerler. Böylece bir tam tur için  360/1,8=200 puls almaları gerekir.
Yarım adım çalıştırmada puls miktarı iki katına çıkar.
İlişikte acemilik dönemlerimde yazdığım ve fiziki olarak da çalıştırdığım bir step motor sistemine ait dosyaları yolluyorum.
Buradan kendine bir pay çıkartabilirsin.
Yolladığım sistemde motorun belirli bir açıya kadar döndürülmesi yer almıyor. Ancak uyarlaması son derece kolay.
Elindeki motor adım başına 1,8 derece ilerliyor ise Tam tur 200 puls gerektirir demiştim. Bir potansiyometre 270 derece dönebilir. Bu durumda 270/1,8=150 puls eder. Demekki potu tam çevirmek için motora 150 puls vermen gerekir.
Pot'u yarım çevirmek için motora 75 puls vermen gerekir.
Şimdi bunu nasıl verirsin ona bakalım. İlk açılışta program yarım adım çalışır. Diyelimki yarım adım çalıştırıyoruz. Puls miktarlarının 2 katını alacağız demektir.
Önce değişkenlere;
INDEX VAR BYTE şeklinde bir index değişkeni ilave et.
Programın sonuna DON_PULS diye bir etiket yerleştir ve oraya;
DON_PULS:
        INDEX=7 
      for I=0 to 149 ' (Pot yarım tur dönecek normalde 75 puls gerekir ancak yarım adımda bu 150 puls olacaktır)
        PORTB=A[INDEX]
        INDEX=INDEX-1:IF INDEX=255 then INDEX=7
        PAUSE SURE
      NEXT 
      pause 5000  '5 sn bekle
      for I=149 to 0 step-1  'bu sefer potu yarım tur geri çeviriyoruz
          PORTB=A[INDEX]
        INDEX=INDEX+1:IF INDEX=8 then INDEX=0
        PAUSE SURE
      NEXT
       pause 500
       goto don
şeklinde satırlar ilave et.
Programda yer alan BAS isimli etiketi bul ve ona aşağıdaki ilaveyi yap
BAS:   
        GOTO  DON_PULS
hepsi bu kadar. Böylece Don_Puls etiketinde I döngüsünü ne kadarlık kurarsan motor o kadar puls üretip dönecektir.
Sana düşen sistemde buılunan Tam adım ve Çift adım dönme modlarınıda denemek olacaktır.
Ete

onurinci

Hocam selam
verdiğiniz altın öüdü inceleyeceğim.
istediğiniz döküman ekte.
saygılar.

http://s3.dosya.tc/server9/VVcSdT/DefeatingPassiveInfraredMotionSensors.rar.html

onurinci

http://s3.dosya.tc/server9/w1uBA5/Ete_Try.rar.html

Hocam klavyenize sağlık fevkalade çalıştı kalın sağlıcakla.

öbür dosya her halde hatalı yazılmış idi.

Powered by EzPortal