DC Motor adalah motor elektrik yang menggunakan arus terus (DC – Direct Current). DC Motor mempunyai dua terminal sahaja. Motor akan berpusing apabila dua terminal tersebut diberikan voltan mengikut keperluannya misalnya 12V. Arah pusingannya pula bergantung kepada polarity bekalan.
Bagi mengawal DC Motor menggunakan microcontroller, H-bridge driver digunakan. H-bridge driver contohnya L293 atau L298. L298 adalah untuk kegunaan arus motor yang lebih tinggi. Dengan driver ini, terdapat dua input yang membolehkan mengawal arah pusingan motor sama ada pusingan jam ataupun lawan pusingan jam. Juga terdapat input enable yang membolehkan mengawal kelajuan motor dengan memberikan PWM kepada pin tersebut. Di bawah adalah litar DC Motor menggunakan L298.
Kelajuan motor diukur dalam revolutions perminute (rpm) ataupun bilangan pusingan dalam satu minit. Bagi mengira pusingan per minit, encoder bersama dengan infrared sensor digunakan. Encoder adalah plate yang mempunyai bilah yang diletakkan supaya berpusing bersama shaft motor. Infrared akan membaca bilah-bilah tersebut untuk menghasilkan pulse. Ianya bergantung kepada bilangan bilah encoder tersebut.
Misalnya, saya menggunakan encoder yang mempunyai 8 bilah. Oleh itu, 1 pusingan motor akan menghasilkan 8 pulse. Bagaimana ingin menukarkan kepada unit rpm.
Di dalam program PIC, tetapkan jangka masa untuk mengira bilangan pulse. Misalnya dalam jangka masa 0.5 saat. Di dalam masa 0.5s, apabila motor berpusing akan menghasilkan x bilangan pulse. Pengiraan rpm adalah seperti rumus di bawah.
Berikut adalah videonya.
PIC Source Code
Sertai Telegram Group bagi dapatkan source code
82 responses to “PIC Lesson: DC Motor”
Slm;
En shah kalau boleh share the complete schematic diagram dgn part no components…terima kasih
Complete schematic untuk L298 dah ada kat atas tu.
salam,
Cik Shahrul bagaimana kalau saya mggunakan motor AC yang voltan 12V untuk mengawal speed motor…?? kalau motor AC tidak boleh guna motor apakah yang sesuai yang mempunyai daya kilas yang kuat dan RPM laju…?? sbb saya hndak menggunakan motor tersebut sebagai pemotong ubi….
Ada ke motor AC 12V? Motor AC biasanya rating power tinggi dan nak mengawalnya biasa control frequency. Nak cari motor yg tinggi tork dan rpm, boleh cari DC motor je. Tp, agak susah la coz hanya salah satu je tinggi atau ambil pertengahan je.
1. saya pakai motor air cond untuk kereta…sbnrnya saya pun x tahu sama ada motor itu AC atau DC. tp saya ada tanya pnsyarah saya dia kta mungkin motor itu AC katanya..
2. pastu sekarang projek saya ni mggunakan satu motor power window, saya nk prgramkan ia bergerak ulang alik. Dan motor air cond yang satu lagi saya hendak motor tersebut dikawal dengan litar ‘speed motor controler’ dan sekarang saya menggunakan PIC16F877…soalan saya apabila saya menggunakan ‘bridge driver L298’ adakah saya tidak perlu guna litar ‘ulang alik’ dan adakah L298 tersebut sesuai dengan kedua-dua arus motor yang saya pakai?? dan sbnarnya setakat manakah arus yang boleh masuk bridge tersebut…??
salam en shah, saya nk tnya..dalam projek saya, saya menggunakan motor driver md30b dari cytron..
masalah saya sekarang adalah utntk menggerakkan motor dc fwd n rev…
coding yg saya belajar menggunakan l239d…
bole tak en shah sharekan mcm mana nk wat connection utk motor driver tuh..saya kurang faham…
pasangkan MD30B dipadankan dgn DC Motor Lesson
PWM <--> RC2
CW <--> RC0
CCW <--> RC3
bagaimana utk mengawal kelajuan dc motor tersebut dgn menggunakan pwm??
Kawal kelajuan DC Motor dengan mengubah duty cycle nya. Frequency nya juga boleh di setting untuk dapatkan performance mengikut motor tersebut.
salam nizam,
saya nak tanya.. saya guna driver motor md30b, saya connect pwm pada rc2, pastu rd1-ccw and rd0-cw..
codingnye seperti kat bawah ni
#include
#include
//define pins
#define RUN1 PORTDbits.RD1
#define CCW1 PORTDbits.RD0
#define PWM1 CCPR1L //PIN RC2
//brushless motor subroutine
void setup(void);
void setup_pwm (void);
void motors (unsigned char, unsigned char, char, char);
void brake (void);
void turnleft (void);
void turnright (void);
//setup brushless motors subroutine
void setup (void)
{
TRISBbits.TRISB3 = 0; //PWM2
TRISCbits.TRISC2 = 0; //PWM1
TRISDbits.TRISD0 = 0; //CCW1
TRISDbits.TRISD1 = 0; //RUN1
TRISDbits.TRISD2 = 0; //RUN2
TRISDbits.TRISD3 = 0; //CCW2
RUN1 = 1; //break motor 1
CCW1 = 1; //motor1 rotate in countclockwise
PWM1 = 0; //clear motor 1 PWM
RUN2 = 1; //break motor 2
CCW2 = 0; //motor2 rotate in clockwise
PWM2 = 0; //clear motor 2 PWM
}
//setup pwm (pulse width modulation) for brushless motors
void setup_pwm (void)
{ //find 100 PR2, decimal = 100: hex = 0x64
PR2 = 0x64; //20.2 usec (20MHz osc) 49.5kHz (1 int period(4 cycle of clock) > calc 256 period > freq of 256 period)
CCP1CON = 0x0C; //b’00001100′ PWM1 activated
CCP2CON = 0x0C; //PWM2 activated
T2CON = 0x04; //b’00000100; TMR2 ON, Postscale 1:1, Prescaler = 1
}
//brushless motors control subroutine
void motors (unsigned char speed1, unsigned char speed2, char direction1, char direction2)
{ //motor 1 = left motor :: motor 2 = right motor
//examples : motors (200,200,1,1); move robot forward
// motors (200,200,0,0); move robot backward
//declare motor speed
PWM1 = speed1;
PWM2 = speed2;
//declare motors rotate direction
if (direction1 == 0) //setup motor1 direction
CCW1 = 0;
else
CCW1 = 1;
if (direction2 == 0) //setup motor2 direction
CCW2 = 1;
else
CCW2 = 0;
RUN1 = 0; //run motor1
RUN2 = 0; //run motor2
}
//brake brushless motors subroutine
void brake (void) //brake both brushless motors
{
//brake oriental motors instatenously
//example : brake();
RUN1 = 1;
RUN2 = 1;
Delay10KTCYx(9); //delay 10 ms for next command
}
//robot self turn left using sensor feedback subroutine
void turnleft (void)
{
motors (100,100,0,1);
}
//robot self turn right using sensor feedback subroutine
void turnright (void)
{
motors (100,100,1,0);
}
tapi motor tu just gerak pada arah cw je.. ccw tak gerak..
thanks 🙂
Sorry, x dpt kesan apa salah. Mungkin silap hardware ataupun software.
adakah saya guna enhanced PWM? sebab tu pada portD data jadi disabled??
x de la, bkn enhanced PWM. Bila PortD dh set output, dh boleh guna dh. PortD x de special function lain. Jika guna Hi-Tech, boleh gunakan program lesson diatas.
salam en. shah, saya menggunakan litar diatas bersama pic16f877..mslhya saya x jumpa kmponen yang bridge kbp306g tu…. saya cari beberapa buah negeri tapi tetap jumpa.. adakah en.shah ada jual komponen tersebut atau saya blh mggunakan yang lain…model yang manakah sesuai….
KBP306G adalah bridge diode dlm 1 komponen, ada jual kat Jalan Pasar, KL. Kalau tiada komponen tu, boleh ganti dgn 1N4001 x4.
salam en shah.. dimane sy bleh bendapatkan circuit scematic dan component2 yang digunakan dalam project ini?.. sy menggunakan sensor yang sama dengan en shah iaitu optical copper..dan menggunakan dc motor. tapi project saya memerlukan penggunaan RF module. bahagian transmitter dan reciver telah siap dan berfungsi.. sy sekarang ingin menggabungkan bahagian rf dan pwm motorcontroller saya bersame lcd.. sebarang petolonggan amat sy hargai..sbb dah pening mencari coding yang sesuai.. fikir nak tambah 1 lagi circuit seperti en shah buat nie kepada rf part saya.
pic:16f876a
Komponen schematic diatas boleh beli di Jalan Pasar, KL.
en shahrul.. boleh tunjukkan contoh programming utk count optical copper tu?
Program kat atas dah ada count optical encoder.
tatic void interrupt isr(void)
{
if(TMR0IF==1){
TMR0IF=0;
counter[0]++;
if(counter[0]>=4883){
counter[0]=0;
rpm=(int)(15*counter[1]);
counter[1]=0;}
}
if(INTF==1){
INTF=0;
counter[1]++;}
code ni utk kira optical copper ke?.. and camner nak set pic utk kira 0.5saat tu..da teliti 1 coding en shah..xdpt carik.. and ape gune
if(counter[0]>=4883)
4883 tu utk ape?.
maaf la jika banyak bertanya..sebarang bantuan amat dihargai
counter[0] sebanyak 4883 untuk set timer 0.5s.
frequency = Crystal_freq/(4x256xPreescalexCounter) = 20000000/(4x256x2x4883)=2Hz (T=0.5s)
counter[1] untuk kira bilangan pulse encoder
sy ada buat final projek pasal fish tank dan nk gna motor DC untuk pum air..so sy nk tya motor DC ni dia ada byk jenis ke?ataupun nk bg cdgn lain untuk sy pakai motor jenis lain selain DC untuk pump tekanan air…
nurul, pilih DC motor ikut speed dan tork nya saja. X de jenis2 lain. Water pump, kene cari DC Water Pump.
salam shahrul, sy nak nya knapa perlu h-bridge,knapa x pkai simple relay
ws, wan. Guna relay x boleh programkan PWM untuk kawal speed. Guna H-bridge ni pun simple juga.
salam…
sy nk tnye..
1]cmne nk tau encoder yg sy pkai tu ade brp bilah?
2]kalo sy xpkai PIC, cmne sy nk tetapkn brp jgka msa yg sy nk guna?
3]ape fungsi bnde hitam yg ada kat shaf dc motor dlm video tu? utk kira bilah ke?
ws, yana
1) Kalau bilah terdedah boleh kira. Kalau encoder yg guna hall effect, baca datasheet bilangan pulse/rotation nya
2) Boleh tetapkan masa ikut sesuai dgn bilangan pulse/rotation. Jika bilangan pulse/rotation besar, boleh kurangkan masa.
3) Itu bahagian encoder.
kalo pulse/rotation tuk encoder ialah 500,mse yg sesuai tuk sy gune brpe? sbb sy guna simulation time dlm matlab.jd motor akn run ikut stoptime yg sy set dlm matlab.
yana, boleh guna masa 0.1s, jd rpm=1.2 x pulse.
so overall eq rev/min=1.2 x pulse. ok itu sy phm.tp pulse tu sy nk amik dr nilai mne? sbb yg 500 tu sy da gne dlm psm kn.
moto driver ape yg boleh keluarkan output lebih dri 4Ampere?…
sbb sy guna moto driver L293d utk run kan moto power window…power supply sy guna laptop adaptor laptop(output:18v,3.5A)
sy guna moto driver L293d xboleh sbb L293d hanya kuarkan output 600mA per channel
man, cytron.com.my ada jual motor driver current tinggi.
erk..sy dh tgok moto driver yg cytron jual..mahalnya…
huu..actually nak cari moto driver yg leh support current smpi 4A..
soalan:moto driver L298 bleh support x..sy baca datasheet dia kata leh support “up to 4A dc curent”..apa maksudnya..minta maaf kalu byk byk bertanya..basic knowledge xmantap…
Salam Shahrul,
Saya sedang mengusahakan/membuat/menjual kuih tiram untuk bekalan kedai2/perseorangan dan untuk tempahan raya.
Saya memerlukan bantuan/khidmat nasihat dan tunjuk ajar bagi mengubah mesin penggelek kuih kayuhan manual kepada automation putaran menggunakan AC atau DC motor yang sesuai.
Persoalan :
1. Motor type manakah perlu saya gunakan AC or DC
2. Berapa watt or terque yang diperlukan
3. Bagaimana untuk mengawal kelajuan / on / off
4. Bagaimana mengawal kepanasan motor DC/AC
5. Apakan komponan2 yang diperlukan
6. Berapakan anggaran kos
Saya memerlukan automation ini bagi memudahkan/mempercepatkan process pembuatan bagi tempahan saya.
Saya amat berharap Shahrul dapat membantu saya dengan kepakaran serta pengalam mendalam didalam bidang teknologi dan kejuruteraan ini.
Terima Kasih.
Mazlan Arik
NIlai, NS
012 – 6303798
ws, Mazlan.
Sumber bekalan yg mudah diperolehi adalah AC berbanding DC. Kalau DC, perlu guna AC-DC converter.
Jadi, saya rasa sesuai guna Motor AC. Motor AC mesti dijual berserta motor driver nya untuk mengawal kelajuan.
Anggaran kos, saya x tahu sebab belum pernah guna Motor AC. Mungkin boleh tanya Zull Design, beliau buat rekacipta untuk IKS. Laman webnya http://www.zulldesign.com.my
Dalam industri, iks dan automasi biasa juga kita guna
jenis pengawal motor AC atau DC seperti jenama oriantal motor lihat http://www.orientalmotor.com/ setiap motor boleh disesuikan bersama pilihan gear, driver contoller yang sesuai untuk torque tertentu, dan mudah digunakan. Kat malaysia terdapat ramai juga supplier motor jenis brand ni.
assalam saudara shahrul…saya ingin bertanya bagaiamana cara menggunakan software HI-TECH C Compiler V9.82..sbb sebelum ini saya menggunakan HITECH C COMPILER UTK PIC 18…Tp build not success sbb driver utk pic 18 x de…lg satu software HI-TECH C Compiler V9.82 boleh d download secara free ke? boleh kah saudara bg linknya…
ws, baca cara guna MPLab. Compiler Hi-Tech boleh download free kat htsoft.com.
terima kasih saudara eng shahrul..boleh tak saudara uploadkan litar di atas…ia berkaitan dgn projek sem akhir saya..
Kat atas sudah diberikan skematik.
Assalam en shahrul…saya menghadapi masalah dengan software simulation cicuit ini,sy menggunakan proteus tp x dpt output yg diharapkn…motor bergerak tapi tiada display pd lcd…sy kurang fhm dengan connection pd
#define LCD_PULSE() ((LCD_EN=1),(LCD_EN=0))….lcd pulse ini perlu disambung pada kaki mana pada pic?
ws, nuraini. LCD_PULSE() bukan mana2 pin, ini adalah function untuk bagi pulse pada pin LCD_EN. Baca Lesson LCD.
wanna asking, my project is lawn mover controlled by RF module. can U help me in source code. I used PIC16F877A connect to L293D to relay then motor, because my motor use high current, U can see my project block diagram at here>> http://www.electronic-circuits-diagrams.com/forum/viewtopic.php?t=4962&sid=90d50542ab44bbc451b4127e4c29c51b
You study for your own. See Low Cost RF Module or XBee Module.
assalam en shahrul, boleh saya tahu apa kegunaan KBP306G itu?
ws, bridge diode mmg diperlukan dlm litar DC Motor. Sila rujuk datasheet L298.
Salam,En.Shahrul. Info yg diberikan sgt berguna. Saya akan memanfaatkannya sebaik mungkin. But I want to ask sumthing here. Sy meggunakan rotary encoder produk dr Cytron dan telahpun sambungkn encoder ini pada PIC. tetapi saya xdapat generated pulses yg sebetulnya. Blh bantu saya dalam masalah ini? saya meggunakan software MicroC.
ws, FDH. Contoh di atas dah ditunjukkan rotary encoder. Lebih drpd tu, saya x boleh nak tolong.
slm…selepas da kira pwm iaitu freq n duty cyclenya, mcm mane plak nak hantar signal pwm digital tu ke kaki pic sbg output…output ini saya akan guna untuk on-off mosfet untuk drive on-off solenoid…harap saudara dpt explain ckit…sy x dpt figure persoalan ini kerana x nampak pun dlm source code saudara…klau saudara sudi kongsi, bleh emailkan sy source code(.c; .h) tersebut ke ‘mtaufiq23@gmail.com’
ws, mtaufiq23. Output pada CCP1 (RC2). Tgk dlm header file LibraryPWM.h. Source code dah ada semua kat atas dan header file.
kenapa i tak boleh buid ur syntax??? izzit ur syntax right ??
wong, saya dah compile source code ni berkali2, ok je. Kalau source code ni error, semua source code lain dalam blog ini juga error.
salam en shahrul,kalau sy nak buat mcm project ni,tp guna PIC 16F877A, coding yg digunakan sama x dengan PIC yg en pakai ni ??
ws, configuration PIC16F877A berbeza. Guna je la PIC16F887, lebih baru berbanding PIC16F877A.
ws, configuration PIC16F877A berbeza. Guna je la PIC16F887, lebih baru drpd PIC16F877A.
dengan menggunakan motor 12v ni,boleh bagi litar penuh dan programmernya skali?untuk kawal pic16f877a.
daniel, boleh guna litar dan program di atas. Lebih baik guna PIC16F887 drpd PIC16F877A.
TERIMA KASIH MR.SHAHRULNIZAM..
Assalam en shahrul,
Project saya memerlukan pengawalan 2 motor Dc oleh button yang berlainan.
2 LCD juga digunakan untuk paparan putaran / hasil keluaran setiap motor Dc.
Soalan saya,
Boleh xprogram yang en sertakan diatas dimasukkan dalam program pic saya ini?
w/salam, ashraf. Program tu untuk motor, boleh je la. Tambah dgn program LCD.
salam,nizam saya nak buat projek mengunakan dua motor.blh tlg x dri segi program n litar skematik..
w/salam, bukhari. Itu kena bayar.
Salam. Nak tnya, kena dc motor backward xfunction bila sambung menggunakan timer relay. example timer relay jenama anv-h3m-c. dc motor hnya boleh forward, tetapi bila timing foward habis, dc motor xboleh backward. dc motor repeat forward.
w/salam, fizi. Saya x tahu.
salam nk tny .. kgunaan motor dc ni ape ?? saya xfaham sangat .. dan sesuai untuk membuat mesin apa ?
assalamualaikum, saya nak tanya, en shah pndai tak nak olah sesuatu benda?contohnya car alarm system? saya nak mintak bantuan
w/salam, husnina. Mungkin boleh, sila e-mail saya kat Tentang Saya.
assalammualaikum abang shah sy pelajar tahun akhir sebuah university di malaysia, boleh x klo saya nak tgk cooding pic untuk project pic dc motor abg ini serta schematic project ini sebb project sy ad related dengan project ini cume bezanya sy mengunakan can-bus network untuk menghantar maklumat tentang kelajuan speed motor ini… jika ad abg ad kenakan bayaran saya snggup bayar yang termampu..
waalaikumussalam, wan raimi. Sila e-mail saya kat Tentang Saya.
abg shah saya nak tanye soalan boleh x kelajuan speed motor tu diadjust semula sebagai contoh apabila pemberat diletakkan di encoder n menyebabkan kelajuan motor berkurang, so saya nak speed selepas pemberat diletak mantain mengikut speed asal sama sebelum pemberat diletakkan.. arap abang shah dapat bantu.
khairul, itu buat program PID. Saya x boleh tolong sebab sgt byk projek yg hendak dibuat.
okey abang sharul terima kasih, saya ada satu lagi soalan macam mana abang bt lcd dispaly baca speed dc mator adakah bardasarkan rumus rpm yang abang bg kt pic lesson ini.
salam…nk tnye…formula ni boleh gune dlm arduino x??kalo leh cmne care nk tulis dlm program jz utk rumus shj
w/salam, john. Formula boleh guna dlm Arduino. Ni bukan basic programming, guna External Interrupt dan Timer Interrupt.
minta izin copy 🙂
Boleh copy.
salam….nak mohon copy sebagai rujukan
w/salam, boleh copy.
salam..nak tanya mcm mana kalau kita nak buat motor tu dlm putaran 90° ulang alik dlm progamming tu kena tambah apa and sya guna pic18
W/salam, kena tempah projek.
Assalamualaikum
Boleh x explain mengenai dc motor with back emf
Sekian
Waalaikumussalam. Itu basic boleh google je. Saya fokus pada programming.