STEP MOTORU DC MOTOR GİBİ SÜRME

Başlatan PICaso, 29 Kasım 2019, 17:03:23

PICaso

https://www.linengineering.com/products/stepper-motors/3709-series/#fndtn-web_motor

Arkadaşlar elimde bu motordan var. Dc motor gibi hız kontrolü yapmak istiyorum. 16f678 işlemci ile kontrolünü sağlamak istiyorum. Tecrübe edenlerden yardımlarını bekliyorum.
İyi çalışmalar.

ete

DC motor PWM ile sürülürken devir ayarı için frekansın Duty oranını değiştirirsin.
Step motorda ise sabit duty oranı ile frekansı değiştirmen gerekir.
Beher adım için verilen açıya bakılırsaki bu genellikle 1,8 derece/adım dır. Bir tur için (360derece/1,8 derece=)200 adım gerekir. Bu ise 1 sn de 200 puls yada 200 Hz lik bir sinyale eşdeğerdir. Bu durumda motor 200 Hz de 1 tur/sn hızla yada 60 tur/dak hızla döner. 1Khz lik bir sinyal uygularsanız, 1000/200=5 tur/sn veya 300 devir/dak hız anlamına gelecektir.
Mikroişlemci kullanarak donanımsal PWM uygulamak ve bunu ayarlı frekans ile yapmak biraz zahmetli bir iş. Zira frekans PR2 registerine verilen değer yanında TMR2 sayacına verilen bölme oranına da bağlıdır. İşin içinde 2 parametre olunca biraz akıllıca mantık kullanmak gerekecek. Öncelikle hangi frekanslarda çalışacaksınız bunun sınırlarını min ve maksimum olarak belirleyin.
Bu aralıkta frekansı değiştirebilmek için en azından aynı PR2 değeri ve aynı bölme oranı ile hangi frekans aralığında çalışabilirsiniz onuda belirleyin.
Aşan yada düşük değerlerde bölme oranı değişecektir mutlaka bunuda programa gereken sorgulama satırlarını yazarak halledebilirsiniz.
YUkarıdaki örneğe bakacak olursak 10Khz lik bir sinyal size (10.000/200=50 ve 50x60=)3000 devir/dak lık bir hız sağlayacaktır ki zaten bunun üzerindeki devirlerde step motor mutlaka adım kaçıracaktır. Bu nedenle 4Mhz OSC frekansında sınırları 250 Hz ile 10 Khz aralığında tutmak uygun olacaktır. Bu aralıktaki değerlere bakacak olursak;
250 Hz frekans için PR2=249 ve Bölme oranı ise 1/16 olacak
300 Hz frekans için PR2=207 ve bölme oranı 1/16
500 Hz frekans için PR2=124 ve bölme oranı 1/16
1000 Hz frekans için PR2=62 ve bölme oranı 1/16
2000 Hz frekans için PR2=30 ve bölme oranı 1/16
3000 Hz frekans için PR2=20 ve bölme oranı 1/16
4000 Hz frekans için PR2=15 ve bölme oranı 1/16
5000 hz frekans için PR2=12 ve bölme oranı 1/16
10000 hz frekans için PR2=5  ve bölme oranı 1/16

Görüleceği üzere 250 Hz ile 10000 Hz aralığında değişen sadece PR2 değeri oluyor ve bölme oranı hep 1/16 alınabiliyor.
Bu durumda devreye bir POT ekleyip POT dan okunan değeri PR2 ye vermek üzere 249-5 aralığında değiştirirsek pot değerine bağlı olarak frekansı değiştirmiş olacağız.
Onuda şöyle yapabiliriz. POT un en yüksek değerinde frekansın yüksek olabilmesi için okunan HAM adc değerini 1023 den çıkarmak gerekecektir. Zira Pot yüksek iken PR2 en düşük değerde oluyor. Yani 5 değerinde. Bu durumda PR2 nin en yüksek değerini esas alırsak ki bu 249 dur, (Bu aşamadan sonraki hesapları Basic dili matematiğine göre yapacağım C dilini bilmiyorum)

min değerimiz 5 olacağı için her konumda çıkan sonuca 5 ekleyerek formülü oluşturmak gerekir. Maksimum değerimiz 249 olacağına ve sonuçta bulunan değere 5 ekleneceği için maksimum değeri 249-5=244 kabul etmemiz gerekecektir.
Bu durumda sabit çarpanımız için 244/1023=0,238514174 değerini buluruz. */ parametresini kullanabilmek için bu sayıyı 256 ile çarpıyoruz. sonuç 61,0596 gibi bir değer oluyor. Bu sayıyı 6106 kabul edip çıkan sonucu tekrar 100 e bölmemiz gerekecektir. Bu durumda formülümüz,
PR2=((1023-HAM_ADC)*/6106)/100)+5 şeklinde olacaktır.
İşte bu formül bize ADC den okunacak olan pot değerini 5 - ile 249 aralığında bir değer olarak verecektir.

Eksik olan tek şey Duty oranını sabit %50 kabul etmek ve hatta daha da düşük alınabilir.
Sizede bulunacak yada hesaplanacak birşeyler bırakmak adına PR2 değerinden yola çıkarak ve %50 duty oranını kullanarak Duty Registerine hangi değerin verilmesi gerektiğini hesaplamayı size bırakıyorum. İçinden çıkamazsanız onuda anlatırım. AMa biraz çaba göstermenizi tercih ederim doğrusu. İşlemcilere ait Data sheetlerde gerekenler anlatılıyor PWM kısmına bakın.

İşin birde şematik kısmı var tabiiki. Akıllı uslu bir sürücü de yapmanız gerekiyor. Bunun için Step motorları inceleyip elinizdeki motorun kablo adedine göre uygun bir sürücü bulmaya çalışın. Internet bu konuda derya deniz.

Ete

 
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

PICaso

Alıntı yapılan: ete - 30 Kasım 2019, 10:17:42DC motor PWM ile sürülürken devir ayarı için frekansın Duty oranını değiştirirsin.
Step motorda ise sabit duty oranı ile frekansı değiştirmen gerekir.
Beher adım için verilen açıya bakılırsaki bu genellikle 1,8 derece/adım dır. Bir tur için (360derece/1,8 derece=)200 adım gerekir. Bu ise 1 sn de 200 puls yada 200 Hz lik bir sinyale eşdeğerdir. Bu durumda motor 200 Hz de 1 tur/sn hızla yada 60 tur/dak hızla döner. 1Khz lik bir sinyal uygularsanız, 1000/200=5 tur/sn veya 300 devir/dak hız anlamına gelecektir.
Mikroişlemci kullanarak donanımsal PWM uygulamak ve bunu ayarlı frekans ile yapmak biraz zahmetli bir iş. Zira frekans PR2 registerine verilen değer yanında TMR2 sayacına verilen bölme oranına da bağlıdır. İşin içinde 2 parametre olunca biraz akıllıca mantık kullanmak gerekecek. Öncelikle hangi frekanslarda çalışacaksınız bunun sınırlarını min ve maksimum olarak belirleyin.
Bu aralıkta frekansı değiştirebilmek için en azından aynı PR2 değeri ve aynı bölme oranı ile hangi frekans aralığında çalışabilirsiniz onuda belirleyin.
Aşan yada düşük değerlerde bölme oranı değişecektir mutlaka bunuda programa gereken sorgulama satırlarını yazarak halledebilirsiniz.
YUkarıdaki örneğe bakacak olursak 10Khz lik bir sinyal size (10.000/200=50 ve 50x60=)3000 devir/dak lık bir hız sağlayacaktır ki zaten bunun üzerindeki devirlerde step motor mutlaka adım kaçıracaktır. Bu nedenle 4Mhz OSC frekansında sınırları 250 Hz ile 10 Khz aralığında tutmak uygun olacaktır. Bu aralıktaki değerlere bakacak olursak;
250 Hz frekans için PR2=249 ve Bölme oranı ise 1/16 olacak
300 Hz frekans için PR2=207 ve bölme oranı 1/16
500 Hz frekans için PR2=124 ve bölme oranı 1/16
1000 Hz frekans için PR2=62 ve bölme oranı 1/16
2000 Hz frekans için PR2=30 ve bölme oranı 1/16
3000 Hz frekans için PR2=20 ve bölme oranı 1/16
4000 Hz frekans için PR2=15 ve bölme oranı 1/16
5000 hz frekans için PR2=12 ve bölme oranı 1/16
10000 hz frekans için PR2=5  ve bölme oranı 1/16

Görüleceği üzere 250 Hz ile 10000 Hz aralığında değişen sadece PR2 değeri oluyor ve bölme oranı hep 1/16 alınabiliyor.
Bu durumda devreye bir POT ekleyip POT dan okunan değeri PR2 ye vermek üzere 249-5 aralığında değiştirirsek pot değerine bağlı olarak frekansı değiştirmiş olacağız.
Onuda şöyle yapabiliriz. POT un en yüksek değerinde frekansın yüksek olabilmesi için okunan HAM adc değerini 1023 den çıkarmak gerekecektir. Zira Pot yüksek iken PR2 en düşük değerde oluyor. Yani 5 değerinde. Bu durumda PR2 nin en yüksek değerini esas alırsak ki bu 249 dur, (Bu aşamadan sonraki hesapları Basic dili matematiğine göre yapacağım C dilini bilmiyorum)

min değerimiz 5 olacağı için her konumda çıkan sonuca 5 ekleyerek formülü oluşturmak gerekir. Maksimum değerimiz 249 olacağına ve sonuçta bulunan değere 5 ekleneceği için maksimum değeri 249-5=244 kabul etmemiz gerekecektir.
Bu durumda sabit çarpanımız için 244/1023=0,238514174 değerini buluruz. */ parametresini kullanabilmek için bu sayıyı 256 ile çarpıyoruz. sonuç 61,0596 gibi bir değer oluyor. Bu sayıyı 6106 kabul edip çıkan sonucu tekrar 100 e bölmemiz gerekecektir. Bu durumda formülümüz,
PR2=((1023-HAM_ADC)*/6106)/100)+5 şeklinde olacaktır.
İşte bu formül bize ADC den okunacak olan pot değerini 5 - ile 249 aralığında bir değer olarak verecektir.

Eksik olan tek şey Duty oranını sabit %50 kabul etmek ve hatta daha da düşük alınabilir.
Sizede bulunacak yada hesaplanacak birşeyler bırakmak adına PR2 değerinden yola çıkarak ve %50 duty oranını kullanarak Duty Registerine hangi değerin verilmesi gerektiğini hesaplamayı size bırakıyorum. İçinden çıkamazsanız onuda anlatırım. AMa biraz çaba göstermenizi tercih ederim doğrusu. İşlemcilere ait Data sheetlerde gerekenler anlatılıyor PWM kısmına bakın.

İşin birde şematik kısmı var tabiiki. Akıllı uslu bir sürücü de yapmanız gerekiyor. Bunun için Step motorları inceleyip elinizdeki motorun kablo adedine göre uygun bir sürücü bulmaya çalışın. Internet bu konuda derya deniz.

Ete

 

Ete hocam çok teşekkür ederim verdiğiniz değerli bilgiler için. Aslında yazılımı belli bir kısma kadar yapmıştım ama bu cevabınızla beraber daha da hassaslaştırabileceğim. Duty değerini yazılımda PR2 değişkenine atadığım değerin yarısı olarak CCPRL registırına atamıştım. Motorum 4 kablolu, sürücü kullanmadan transistör ile halledemez miyim?

ete

Elbette 4 kablolu step motoru transistörlü devre ile sürebilirsin. Daha da iyisi ULN serisi bir dizi transistör entegresi ile daha iyi sürebilirsin. Ama güçlü bir sürücü gerekiyor ise bir kaç amperlik NPN transistmörlerle sürmen daha uygun olacaktır.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

PICaso

Alıntı YapOnuda şöyle yapabiliriz. POT un en yüksek değerinde frekansın yüksek olabilmesi için okunan HAM adc değerini 1023 den çıkarmak gerekecektir. Zira Pot yüksek iken PR2 en düşük değerde oluyor. Yani 5 değerinde. Bu durumda PR2 nin en yüksek değerini esas alırsak ki bu 249 dur, (Bu aşamadan sonraki hesapları Basic dili matematiğine göre yapacağım C dilini bilmiyorum)

min değerimiz 5 olacağı için her konumda çıkan sonuca 5 ekleyerek formülü oluşturmak gerekir. Maksimum değerimiz 249 olacağına ve sonuçta bulunan değere 5 ekleneceği için maksimum değeri 249-5=244 kabul etmemiz gerekecektir.
Bu durumda sabit çarpanımız için 244/1023=0,238514174 değerini buluruz. */ parametresini kullanabilmek için bu sayıyı 256 ile çarpıyoruz. sonuç 61,0596 gibi bir değer oluyor. Bu sayıyı 6106 kabul edip çıkan sonucu tekrar 100 e bölmemiz gerekecektir. Bu durumda formülümüz,
PR2=((1023-HAM_ADC)*/6106)/100)+5 şeklinde olacaktır.
İşte bu formül bize ADC den okunacak olan pot değerini 5 - ile 249 aralığında bir değer olarak verecektir.

Arkadaşlar şu kısmı C dilinde nasıl yapabilirim? "*/" parametresi araştırdığım kadarıyla 32 bitlik bir ifadenin ortada ki 16 bitini almaya yarıyormuş.

ete

sayıyı */ ifadesinden sonraki rakam ile çarpıp 256 ya bölmen yeterli.
Aslında madem C dili kullanıyorsun şöylede yapabilirsin.
Bir float değişkeni (CARPAN) tanımlayıp  CARPAN=244/1023=0,238514174 sonucu elde edilen sayıyı direk ADC HAM değeri ile çarpabilirsin. Sonuç aynı olacaktır.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

PICaso

Alıntı yapılan: ete - 02 Aralık 2019, 11:33:18sayıyı */ ifadesinden sonraki rakam ile çarpıp 256 ya bölmen yeterli.
Aslında madem C dili kullanıyorsun şöylede yapabilirsin.
Bir float değişkeni (CARPAN) tanımlayıp  CARPAN=244/1023=0,238514174 sonucu elde edilen sayıyı direk ADC HAM değeri ile çarpabilirsin. Sonuç aynı olacaktır.

Ete

Hocam ben çarpan float değşkenini bölme olarak kullanıyordum. Dediğiniz gibi çarpım olarak düzelttim şu an çalışıyor. Şimdi sürme kısmına geçiyorum.

PICaso



Devreyi bu şekilde tasarladım fakat motor dönmedi. Zannedersem sargıları kısa devre ettim. Half bridge mantığıyla mı sürmem gerekiyor?

yas

Çalışmaması gayet normal. Çünkü motorun her bir ucu için + ve - durumlarının oluşması gerekli. Yani her bir motor ucu için 2 adet transistöre (toplamda 8 adet) ihtiyacınız var. Birde çiziminiz de hatalar mevcut. BC327 PNP tip bir transistör BC337 NPN tip transistör her ikisininde emitör ve kollektör bağlantısı yanlış, ayrıca bu transistörler yüksek akım için uygun değil, bir diğer önemli eksiklikse motor sargılarından devreye dönecek olan ters emk nın sönümlenmesi için gerekli olacak uygun diyotların devrede olmaması.

PICaso

Alıntı yapılan: yas - 02 Aralık 2019, 14:52:53Çalışmaması gayet normal. Çünkü motorun her bir ucu için + ve - durumlarının oluşması gerekli. Yani her bir motor ucu için 2 adet transistöre (toplamda 8 adet) ihtiyacınız var. Birde çiziminiz de hatalar mevcut. BC327 PNP tip bir transistör BC337 NPN tip transistör her ikisininde emitör ve kollektör bağlantısı yanlış, ayrıca bu transistörler yüksek akım için uygun değil, bir diğer önemli eksiklikse motor sargılarından devreye dönecek olan ters emk nın sönümlenmesi için gerekli olacak uygun diyotların devrede olmaması.
Yön kontrolü yapmayacağım için 4 transistör yeterli midir?

mehmet

Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

PICaso




Motoru full step sürdüğümü varsayar isek tek pwm çıkışı ile bunun mümkün olmadığı gözüküyor. Nasıl bir çözüm yolu

izlemeliyim?

yas

en pratik L298n kullanmak olur herhalde, yada L298 + L297 çifti.

ferit06

Neden A4988 Step Motor Sürücü Kartı gibi bir sürücü kullanarak çalıştırayı denemiyorsunuz? Bu sürücülerle çalıştırmak için dışarıdan bir osilator(555 ile olabilir) yeterlidir. Ayrıca yön ve adım (5 farklı adım seçeneği: tam, 1/2, 1/4, 1/8, 1/16 ) de bulunuyor.
Şurada

https://www.robolinkmarket.com/a4988-step-motor-surucu-karti.html?gclid=EAIaIQobChMIzvbchYuZ5gIVyLHtCh33oQPbEAYYASABEgLU3_D_BwE



8,28 TL gibi bir fiyatı var...
 

PICaso

Alıntı yapılan: ferit06 - 03 Aralık 2019, 11:48:34Neden A4988 Step Motor Sürücü Kartı gibi bir sürücü kullanarak çalıştırayı denemiyorsunuz? Bu sürücülerle çalıştırmak için dışarıdan bir osilator(555 ile olabilir) yeterlidir. Ayrıca yön ve adım (5 farklı adım seçeneği: tam, 1/2, 1/4, 1/8, 1/16 ) de bulunuyor.
Şurada

https://www.robolinkmarket.com/a4988-step-motor-surucu-karti.html?gclid=EAIaIQobChMIzvbchYuZ5gIVyLHtCh33oQPbEAYYASABEgLU3_D_BwE

Öğrenmek için kendim birşeyler yapmaya çalışıyorum.


8,28 TL gibi bir fiyatı var...