Hoverboard BLDC Motor vs Odrive 3.6 Setup

  • Konuyu başlatan Konuyu başlatan fide
  • Başlama tarihi Başlama tarihi

fide

Meraklı ve "nasıl" sorusunu seven biri
Katılım
8 Eylül 2021
Mesajlar
2,222
Tezim için Hoverboard BLDC Motor ve Odrive 3.6 sürücü kart ile bir araç yapmaya çlışıyorum. Daha önce Hall effect sensör ile çalıştırmıştım ama şimdi incremental encoder ile güncellemeye çalıştırmak istiyorum.

2~3 gündür uğraşıyorum ama ilerleyemedim.

In [124]: dump_errors(dev0)
system: no error
axis0
axis: Error(s):
AxisError.MOTOR_FAILED
motor: Error(s):
MotorError.PHASE_RESISTANCE_OUT_OF_RANGE
DRV fault: none
sensorless_estimator: no error
encoder: no error
controller: no error
axis1
axis: no error
motor: no error
DRV fault: none
sensorless_estimator: no error
encoder: no error
controller: no error

Aldığım hata yukarıda.

Setup ise aşağıda.
dev0.axis0.motor.config.pole_pairs = 15

dev0.axis1.motor.config.pole_pairs = 15

Because the motors have a high resistance, you need to increase the calibration voltage.

dev0.axis0.motor.config.resistance_calib_max_voltage = 4

dev0.axis1.motor.config.resistance_calib_max_voltage = 4

Lower the current range to get a better reading.

dev0.axis0.motor.config.requested_current_range = 25

dev0.axis1.motor.config.requested_current_range = 25

Lower the bandwidth to get better control.

dev0.axis0.motor.config.current_control_bandwidth = 100

dev0.axis1.motor.config.current_control_bandwidth = 100

Enter the estimated torque constant.

dev0.axis0.motor.config.torque_constant = 8.27 / 16

dev0.axis1.motor.config.torque_constant = 8.27 / 16

The hoverboard motors use hall effect sensors.

dev0.axis0.encoder.config.mode = ENCODER_MODE_HALL

dev0.axis1.encoder.config.mode = ENCODER_MODE_HALL

The hall effect sensors in combination with the magnets produce 90 counts per revolution.

dev0.axis0.encoder.config.cpr = 90

dev0.axis1.encoder.config.cpr = 90

To get better alignment, use 150 pulses for the calibration.

dev0.axis0.encoder.config.calib_scan_distance = 150

dev0.axis1.encoder.config.calib_scan_distance = 150

dev0.axis0.encoder.config.bandwidth = 100

dev0.axis1.encoder.config.bandwidth = 100

Set the controller gains.

dev0.axis0.controller.config.pos_gain = 1

dev0.axis1.controller.config.pos_gain = 1

dev0.axis0.controller.config.vel_gain = 0.02 * dev0.axis0.motor.config.torque_constant * dev0.axis0.encoder.config.cpr

dev0.axis1.controller.config.vel_gain = 0.02 * dev0.axis1.motor.config.torque_constant * dev0.axis1.encoder.config.cpr

dev0.axis0.controller.config.vel_integrator_gain = 0.1 * dev0.axis0.motor.config.torque_constant * dev0.axis0.encoder.config.cpr

dev0.axis1.controller.config.vel_integrator_gain = 0.1 * dev0.axis1.motor.config.torque_constant * dev0.axis1.encoder.config.cpr

Set the velocity limit.

dev0.axis0.controller.config.vel_limit = 10

dev0.axis1.controller.config.vel_limit = 10

Set the control mode to velocity.

dev0.axis0.controller.config.control_mode = CONTROL_MODE_VELOCITY_CONTROL

dev0.axis1.controller.config.control_mode = CONTROL_MODE_VELOCITY_CONTROL

If you are using the latest firmware version.

dev0.config.enable_brake_resistor = True

After changing settings, use save and reboot.

dev0.save_configuration()

dev0.reboot()
 
BLDC motor ile projeye başladığıma pişman oldum ama çözmem lazım bu olayı.

Motor sargısı DC direnci 0.9R

Daha önce aynı konuyu açmıştım ama şimdi bu konu ilgili olsa da encoderden dolayı farklı bir yerde.

 
Gelişme var suçluyu buldum ama şimdilik sonuç yok.
Hall effect sensor yerine encoder kullanınca vel_gain ve pos_gain değerleri değişiyor.

Hall effect sensor için setupta aşağıdaki ayarlar var:
dev0.axis0.controller.config.pos_gain = 1
dev0.axis0.controller.config.vel_gain = 0.02 * dev0.axis0.motor.config.torque_constant * dev0.axis0.encoder.config.cpr
dev0.axis0.controller.config.vel_integrator_gain = 0.1 * dev0.axis0.motor.config.torque_constant * dev0.axis0.encoder.config.cpr

E6B2-CWZ6C 500 pulse encoder için haliyle bu değerler değişiyor. Chatgptye sorup değerleri değiştirdim ama sonuca ulaşamadım.
 
Önce Omron E6B2-CWZ6C ile 1/2 oranda dişli ile kontrol sağlamaya çalıştım ama sürekli olarak motor faz direnci güvenli alanın dışında uyarısı aldım.
IMG_20250404_172605.jpg



Sonrasında sıkıntının motor kaynaklı olduğunu buldum. Aynı setup (kalibrasyon dahil) bir mıtırda çalışırken diğerinde phase_resistance out of range hatası verdi.
Motoru değiştirdim. Dişliler yeni motora sığmadı. Onları da değiştirdim. Buradaki oran 1/1 yan motorun bir devri encoderin de bir devri gali e geldi.

IMG-20250410-WA0010.jpeg




IMG-20250410-WA0006.jpeg
 


 
Toz toplama riskine girmek istemedim. Toz giderek artacak ve ortaya lavabo gideri gibi iğrenç birşey çıkacak.
 
Konuyla alakası yok ama 1~2 görsel daha paylaşayım robottan.
1744450132256.png


1744450146227.png

Lidar Holder. Daha önce lazer kesim saç üzerine sabitlenen Lidarı 3d yazıcı bastığım malzeme ile sigma profil üzerine taşıdım. Hem yer açıldı hem de biraz daha estetik oldu.

1744450221214.png

1744450232348.png


 
Toz toplama riskine girmek istemedim. Toz giderek artacak ve ortaya lavabo gideri gibi iğrenç birşey çıkacak.
Deney için idare eder, ama dışarıda çalışınca çamur da işin içine girer tozda plastiği aşındırır.
Enkoderi motor destek mile yakın yerleştirerek tekerliğe bağlı yuvarlak kutu ile muhafaza etmekte yarar var. Kutu ile sabit mil arasına eklenmiş toz keçesi ise dış etkenlerden korur. Aşağıdakı link örnek olarak verilmiş, keçelerin baya çeşitleri var.
 
Korumayı kendim de basabilirim ama kullanım alanı iç mekanda beton yada parke zemin olacak. Çamur yada irili ufaklı parça ihtimali yok ama toz birikmesi olabilir. Şu anda doktora tezim olan robotu bitirmeye çalışıyorum. Konu gerçek uygulamaya dönerse başka alternatiflerim var.
 
Önceki yazımda motor.phase.resistance value out of range hatası aldığımı belirtmiştim. Hatta bu hatayı aşamadığım için motoru değiştirmek ve dişlileri adapte etmek zorunda kalmdığımı yazmıştım. Suçluyu buldum.

Motor için parametreler var. Bu paramatrelerin çoğu kalibrasyon anında ayarlanıyor ama hangi parametrenin doğru olduğu motordan motora değişiyor.

Phase resistance hatası almamda Hoverboard motorunun ayarlarından kaynaklıydı. Sonunda olyı çözdüm ve motor ayarları yapan gui'ye sahip bir kod buldum. Bu kod ayarların hepsini birden görmemei ve verilen hatayı nispeten anlamamı sağladı.

Sadede gelecek olursak Phase resistance hatasını aşağıdaki parametreleri ayarlayarak çözdüm.

pole pairs: 15
Current limit: 25
calibration current : 5
velocity limit : 2
velocity limit tolerance:1.2
enable brake resistor : True
encoder type: encoder mode incremental
encoder cpr: 2000

phase resistance hatasını çözmemi sağlayan başlıklar:

calibration voltage: 4 (default 2)
scan distance: 150 (default 50)
current control bandwith : 100 (default 1000)
encoder bandwith: 100 (default 1000)
position gain: 1 (default 20)
 
GUI konfigurasyon prg aşağıdan indirilebilir.
odrvAx0.py dosyası Axis0 için ayar sağlıyor.
odrvAx1.py dosyası ise Axis1 için ayar sağlıyor. Aralarında sadece axis0 axis1 farkı var.
ODrive ile uğraşacaklar için faydalı olacaktır. ODrivetool da güzel ama herşey için eşek yüküyle kod yazıp hata alınca samanlıkta iğne aramak hoş olmuyor. Enazından burada ayar yapılan noktalar ve değerlerin hepsi göz önünde.
 

Ekler

Hâlâ sıkıntı var. Motora ayar yapıyor. Test yapıyor ama kapatıp açınca herşey gidiyor.
Bakalım. Çözeceğiz inşallah
 

Sonunda odrive konfigurasyonu tamamladım.
 

Forum istatistikleri

Konular
7,643
Mesajlar
127,534
Üyeler
3,089
Son üye
Talha55tr

Son kaynaklar

Son profil mesajları

Python Geliştirmeye eklediğim yapay zeka sunucusu, yeni başlayanlar için roket etkisi
Bir insanın zeka seviyesinin en kolay tesbiti, sorduğu sorulardır.
yapay zeka interneti yedi bitirdi, arama motoru kullanan, forumlara yazan kaldı mı ?
Freemont2.0 herbokolog Freemont2.0 wrote on herbokolog's profile.
nick iniz yakıyor
:D
az bilgili çok meraklı
Back
Top