Dalam PWM dikenal istilah Duty Cycle, yaitu lebar pulsa/sinyal HIGH dalam satu perioda, dimana satu perioda ialah hasil penjumlahan antara sinyal High (sH) dan sinyal Low (sL). sTotal = sH + Sl
untuk mengetahui nilai duty cycle sanggup dipakai rumus sebagai berikut:
Penjelasan:
D = Duty Cycle
sL= sinyal Low
sH = sinyal High
sTotal= sinyal total dalam satu perioda
Vout = tegangan keluaran
V in = Tegangan masukan
Dengan memakai rumus ini, kita sanggup menghitung nilai PWM yang dikeluarkan jikalau diketahui grafiknya menyerupai Gambar 1 diatas. Dari Gambar tersebut, lebar sinyal High per periodenya ialah 20%, sedangkan lebar sinyal Low nya lebih besar, yaitu 80%. Sehingga Vout (tegangan yang dikeluarkan) dari PWM tersebut adalah
Vout = (5 X 20) / 100 = 100 / 100 = 1V
Dari rumus diatas, sanggup diketahui bahwa nilai PWM yang dikeluarkan ialah 1 V.
Pada board Arduino yang memakai mikrokontroler Atmega328P, pin PWM terdapat pada pin digital 3, 5, 6, 9, 10 dan 11. Biasanya pin tersebut ditandai dengan pada Arduino Uno. Untuk memakai PWM pada Arduino, dipakai perintah analogWrite().
PWM (Pulse Width Modulation) sanggup dipakai untuk mengatur kecepatan putaran Motor, atau sanggup dipakai juga untuk mengatur kecerahan lampu, PWM sangat mempunyai kegunaan dalam pengaplikasian robotika, atau umumnya pada sistem – sistem otomatis, contohnya untuk mengatur ketinggian terbang sebuah Drone, atau mengatur kecepatan robot dikala akan belok, dan lain sebagainya.
Dalam Board Arduino, terdapat pin khusus yang sudah disediakan, menyerupai dalam Arduino Uno, pin PWM tersedia pada pin D3, D5, D6, D9, D10 dan D11. dan untuk mengaktifkannya, kita sanggup memakai perintah
analogWrite (pin yang digunakan, nilai PWM);
Contoh Kasus
Misalnya kita ingin mengatur kecepatan Motor DC, dan pin PWM yang kita gunakan ialah pin digital 5, rangkaian sederhana nya sanggup dilihat pada Gambar berikut:
Contoh kegiatan sederhananya ialah sebagai berikut:
int PWM = 3;
void setup(){
pinMode (PWM, OUTPUT);
}
void loop(){
/* manambah kecepatan motor tiap 300ms secara terus menerus */
for (int i=10; i<=255; i++){
delay(300);
} delay (1000);
/* jikalau nilai lebih besar dari 255, maka akan dikurangi setiap 500ms */
for (int i=255; 1>=10; i--){
delay(500);
} delay (1000);
}