Sensörlü fırçasız motor komutasyonunda bekleme süresi.

Başlatan mr.selim, 02 Mart 2017, 20:01:56

mr.selim

while (hall_a == 1 && hall_b == 0 && hall_c == 0) {//001
analogWrite(CfazPwm, speed);
digitalWrite(Afaz, LOW);


Yani if de işleyip çıkıyor sonra tekrar uğruyor. While ile içindeki eşitlik sağlandığı sürece kalsın desek çok mu saçma.

hafta içine sipariş verdim lojik analizör inş ordan tüm görüntüleri ekliyeceğim buraya.

Cemre.

Tekrar tekrar analogwrite digitalwrite yapmaniza gerek yok. Değişiklik yoksa main loopta dönsün program. Bu şekilde programı bloklamayın

mr.selim

Alıntı yapılan: Cemre. - 04 Mart 2017, 11:49:17
Tekrar tekrar analogwrite digitalwrite yapmaniza gerek yok. Değişiklik yoksa main loopta dönsün program. Bu şekilde programı bloklamayın

while e de gerek o zaman. Peki ya kesmeler ? Sadece sürme için kullanılan bir programda kesmeye çok ihtiyaç olucakmıdır ? Teşekkür ederim kafamdaki soruları atıyorum yavaş yavaş.

Cemre.

Gerek vardır. Siz ne kadar hızlı çalıştığını düşünseniz de MCU çoğu zaman çevreden gelen sinyali kaçırmaya meyillidir. Kesmeler bunun için var. Kaçmayın, üstüne gidin öğrenin alışkanlık edinin. Zararı olmaz faydası olur.

(Bundan 5 sene önce ben de kesme neymiş yea diyordum. Buradan bir hocam yine ismini hatırlayamasam da, öğren kaçma demişti. Sağolsun iyi demiş, doğru demiş...)

mr.selim

Alıntı yapılan: Cemre. - 04 Mart 2017, 17:30:08
Gerek vardır. Siz ne kadar hızlı çalıştığını düşünseniz de MCU çoğu zaman çevreden gelen sinyali kaçırmaya meyillidir. Kesmeler bunun için var. Kaçmayın, üstüne gidin öğrenin alışkanlık edinin. Zararı olmaz faydası olur.

(Bundan 5 sene önce ben de kesme neymiş yea diyordum. Buradan bir hocam yine ismini hatırlayamasam da, öğren kaçma demişti. Sağolsun iyi demiş, doğru demiş...)

Nesilden nesile gidiyorsa bende öğreniyim bari. Şaka bi yana öğrenmeye niyetim var da merakımdan sordum çünkü program sadece motor sürmek için çalışıyordu.

Bu arada motor üstünde denemeler yaptım. Motor yüksüz ve bir yere sabitlenmiş durumda kullandım. Sesi gayet güzel ama birkaç sorun çıktı. Yine yorumlayabilirsek sevinirim.

Cemre.


mr.selim

Alıntı yapılan: Cemre. - 03 Mart 2017, 09:16:45
Fonksiyon her çağrıldığında bütün lowside mosları iletime geçirerek fazları kisadevre ediyorsunuz ve bunu çok sık yapıyorsunuz. Eğer değişiklik yoksa bunu yapmayacak şekilde düzenleyin kodunuzu. Bu kadar önemli.

DC motorda uyarma yönü aynı iken alan sargılarını kısadevre ederseniz ne oluyor bir araştırın aklınızda birşeyler canlanacaktır.

Hatırlarsanız böyle bişey üzerinde konuşmuştuk. O çağırılan fonksiyon içindeki Analogwrite ve digitalwrite kısımlarını kaldırınca inanmazsınız ama motor hiçbir şekilde çalışmadı. Neden olduğunu hala çözemedim ama sizin dediğiniz gibi her çağırmada hem high hemde low girişleri sıfıra çekiyoruz ? Niye diye bende düşündüm ama motor çalışmadı.

2. Bir sorum da süreler. Süreyi kaldırdım fakat şöyle bir durum oldu. Motoru elle durdurabiliyoruz. Çok zayıf kaldı ama sessiz güzel. 250 mikrosaniye yapınca motor 1 2 amper akım çekiyor yüksüz. Ama motoru da elle durduramıyoruz. Neler diyebiliriz bu konular hakkında ?

Cemre.

Tamamen kaldıralım demedim, hall effect durumunda değişiklik oldu ise kalmalı. Ama şöyle bir şey yapılabilir. Adımlar bellidir, yani motor saat yönünde dönüyorsa misal hall effect 1 0 0 durumundan 1 1 0 konumuna geçebilir. Bu durumda 1 0 0 konumunda H1 L2 iletimdeyken 1 1 0 konumunda H1 L3 iletimde olacaksa sadece L2 low L3 high yapılır gibi.

Hız kontrolü yaparsanız öyle kafasına göre durmadığını, tutmaya çalıştığınızda (yük bindiğinde) duty artırılıp karşı konulmaya çalışıldığını göreceksiniz. Bu haliyle bir şey beklemeyin.

mr.selim

Alıntı yapılan: Cemre. - 04 Mart 2017, 19:11:34
Tamamen kaldıralım demedim, hall effect durumunda değişiklik oldu ise kalmalı. Ama şöyle bir şey yapılabilir. Adımlar bellidir, yani motor saat yönünde dönüyorsa misal hall effect 1 0 0 durumundan 1 1 0 konumuna geçebilir. Bu durumda 1 0 0 konumunda H1 L2 iletimdeyken 1 1 0 konumunda H1 L3 iletimde olacaksa sadece L2 low L3 high yapılır gibi.

Değişiklik yok ilk kalkışta bile olmuyor. En son konumunu bilsem aslında sizin dediğiniz gibi güzel olur. Ama benim en çok merak ettiğim sadece if ile komutasyon yapıyorken neden sürekli sıfıra çekmek zorunda bıraktırıyor beni.

Alıntı yapılan: Cemre. - 04 Mart 2017, 19:11:34
Hız kontrolü yaparsanız öyle kafasına göre durmadığını, tutmaya çalıştığınızda (yük bindiğinde) duty artırılıp karşı konulmaya çalışıldığını göreceksiniz. Bu haliyle bir şey beklemeyin.

Evet açık döngüde bişey beklemiyorum ancak fonksiyon çıkışında 250 mikrosaniyeden fazla süre olunca elle tutulamayacak torkta olabiliyor. Bu bekleme yi kaldırınca yada azaltınca daha verimli olması gerekirken daha güçsüz olmaya başlaması saçma değil mi ?

mr.selim

İlkinde demek istediğim if ile zaten komutasyon yapıyoruz. Fonksiyona giriyor hall konumunu bulup enerjilendirmesi gerekiyor. Bu her defasında yapılarak bir dönme sağlaması gerekirken benim bunu sıfıra çekme mecburiyetim neden olsun ki ?

Cemre.

Yeni pozisyona geçildiğinde eskiden iletimde olan mos'u kesime götürmeyecek misin?

mr.selim

Alıntı yapılan: Cemre. - 04 Mart 2017, 20:23:10
Yeni pozisyona geçildiğinde eskiden iletimde olan mos'u kesime götürmeyecek misin?
O zaman bunu fonksiyon içinde değil döngü içinde kullanmam gerek yada her komutasyonun sonunda da yapabilirim ? Mesela if içine girdim iletime soktum bekletme ekledim ve çıkışları sıfırladım. Bu iki durumda aynısı oluyor o zaman değil mi ?

Not: Ben yalıtıma geçtiklerini varsayıp soruyu sormuştum da burayı es geçmişim zaten setup da ekledim niye ekliyorum diye.

mr.selim

Alıntı yapılan: mr.selim - 04 Mart 2017, 19:26:48
Evet açık döngüde bişey beklemiyorum ancak fonksiyon çıkışında 250 mikrosaniyeden fazla süre olunca elle tutulamayacak torkta olabiliyor. Bu bekleme yi kaldırınca yada azaltınca daha verimli olması gerekirken daha güçsüz olmaya başlaması saçma değil mi ?

Bu soruma da yorum getirebilir miyiz. Görmediğim bişeyler var hala.

Cemre.

Bilmiyorum. Uygulamaya genel olarak hakim değilim o yüzden söylediklerinizi bazen anlamıyorum. Ben kendi yaptığım ve sorun yaşamadığım şekliyle size yardımcı olmaya çalışıyorum.

mr.selim

Anladım olsun çok yardımcı oldunuz teşekkür ederim.

Belki başkaları da yardımcı olabilicekse Aradığım soru özetle şu olsa gerek: İletimden yalıtıma geçiş süresi çok kısa olduğunda motor durdurulabilecek kadar güçsüz tork üretiyor ancak süre çok uzun olursa motordan elde edilen tork fazla oluyor. Neden ???

Belki böyle daha anlaşılır olurum.