Dalam tutorial ini kita akan melihat cara menghubungkan jenis motor yang paling umum ke SBC. Kami juga akan menunjukkan cara menanganinya dengan beberapa contoh. Jenis mesin yang paling umum adalah:
- Motor DC murah dan mudah dikendalikan, hanya diperlukan satu output daya dan ini dapat diaktifkan dengan sinyal PWM.
- Motor servo mirip dengan motor DC, tetapi termasuk elektronik kecil dan potensiometer internal untuk membentuk loop kontrol tertutup, ini memungkinkan sudut rotasi dikontrol. Kontrolnya juga dengan PWM, tetapi dalam hal ini sinyal kontrolnya berdaya rendah dan tahap daya terintegrasi dalam servomotor itu sendiri.
- Motor stepper memiliki beberapa lilitan dan memerlukan urutan untuk dikontrol, tetapi sebagai gantinya mereka memberikan presisi yang tinggi karena mereka maju selangkah demi selangkah setiap kali polaritas lilitannya dibalik.
1. Motor DC
Untuk mengontrol motor DC, kita akan menghubungkannya ke SBC seperti yang ditunjukkan pada diagram berikut:
Kita perlu mengetahui beberapa parameter motor kita, khususnya hubungan antara volt yang diterapkan dan kecepatan motor atau Kv.
Kelas Dc_Motor mewakili motor DC, dikendalikan oleh PWM pada 50Hz. Seperti dapat dilihat, beberapa parameter harus disediakan, seperti tegangan suplai dan konstanta Kv, serta pin yang akan digunakan. Sebagai imbalannya kita mendapatkan dua fungsi: set_voltage dan set_speed.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | kelas Dc_Motor: FREQ_Hz = 50 def __init__( diri, pin, vm, kv ): diri.vm = vm diri.kv = kv diri.pin = pin diri.bodoh = Sbc.Dout() diri.bodoh.set_pwm( diri.pinus, diri.FREQ_Hz, 0 ) diri.set_tegangan( 0 ) def set_tegangan( diri, v ): pulse_percent_on = 100 *v/diri.vm diri.bodoh.set_pwm( diri.pinus, diri.FREQ_Hz, 100-pulsa_persen_on ) def set_kecepatan( diri,rpm): diri.set_voltage (rpm/diri.kv) |
Contoh penggunaannya adalah sebagai berikut:
>>> waktu impor
>>> impor sbc_mtr
>>> motor = sbc_mtr.Dc_Motor( "DOUT3", vm=12, kv=0.5 )
>>> print("Kontrol tegangan")
Kontrol tegangan
>>> motor.set_voltage( 6 )
>>> waktu.tidur( 1 )
>>> motor.set_voltage( 0 )
>>> print("Kontrol kecepatan")
Kontrol kecepatan
>>> motor.set_speed( 100 )
>>> waktu.tidur( 1 )
>>> motor.set_speed( 0 )
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | kelas Motor servo: FREQ_Hz = 50 DUTY_MIN_ms = 0.5 DUTY_MAX_ms = 2.5 def __init__( diri, pin): diri.pin = pin diri.bodoh = Sbc.Dout() diri.bodoh.set_pwm( diri.pinus, diri.FREQ_Hz, 0 ) def set_sudut( diri, angle_deg ): duty_ms = diri.DUTY_MIN_ms + (diri.DUTY_MAX_ms-diri.DUTY_MIN_md)*sudut_deg/ 180 pulsa_persen_on = diri.FREQ_Hz*tugas_ms/ 10 diri.bodoh.set_pwm( diri.pinus, diri.FREQ_Hz, 100-pulsa_persen_on ) |
Dan salah satu contoh penggunaan:
>>> waktu impor
>>> impor sbc_mtr
>>> motor = sbc_mtr.Servo_Motor("DOUT3" )
>>> print("Atur sudut menjadi 90 derajat")
Atur sudut ke 90 derajat
>>> motor.set_angle( 90 )
>>> waktu.tidur( 1 )
>>> print("Atur sudut menjadi 0 derajat")
Atur sudut ke 0 derajat
>>> motor.set_angle( 0 )
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | kelas Stepper_Motor: def __init__( diri, pin): diri.pin = pin diri.bodoh = Sbc.Dout() diri.negara = 0 diri.tangga = 0 diri.dir = 1 diri.Timer = mesin.pengatur waktu ( -1 ) def langkah( diri, arah ): if( diri.negara == 0 ): diri.bodoh.menulis( diri.pin[0], 1 ) diri.bodoh.menulis( diri.pin[1], 1 ) diri.bodoh.menulis( diri.pin[2], 0 ) diri.bodoh.menulis( diri.pin[3], 0 ) elif( diri.negara == 1 ): diri.bodoh.menulis( diri.pin[0], 0 ) diri.bodoh.menulis( diri.pin[1], 1 ) diri.bodoh.menulis( diri.pin[2], 1 ) diri.bodoh.menulis( diri.pin[3], 0 ) elif( diri.negara == 2 ): diri.bodoh.menulis( diri.pin[0], 0 ) diri.bodoh.menulis( diri.pin[1], 0 ) diri.bodoh.menulis( diri.pin[2], 1 ) diri.bodoh.menulis( diri.pin[3], 1 ) elif( diri.negara == 3 ): diri.bodoh.menulis( diri.pin[0], 1 ) diri.bodoh.menulis( diri.pin[1], 0 ) diri.bodoh.menulis( diri.pin[2], 0 ) diri.bodoh.menulis( diri.pin[3], 1 ) diri.tangga += arah diri.negara = (diri.negara + arah) & 0x03 def set_kecepatan( diri, langkah_s, arah ): if( langkah_s dan arah ): diri.Timer.init ( titik=int(1000 /langkah_s), mode=mesin.Timer.PERIODIK, panggilan balik=lambda tmr: diri.langkah (arah)) lain: diri.Timer.deinit() |
Akhirnya, contoh penggunaan:
>>> waktu impor
>>> impor sbc_mtr
>>> motor = sbc_mtr.Stepper_Motor( ["DOUT1", "DOUT2", "DOUT3", "DOUT4"] )
>>> print("Langkah demi langkah")
Setapak demi setapak
>>> untuk i in range( 100 ):
... motor.langkah( 1 )
... waktu.sleep_ms( 10 )
>>> print("Berkelanjutan")
Kontinu
>>> motor.set_speed( 100, -1 )
>>> waktu.tidur( 1 )
>>> motor.set_speed( 0, 0 )