PWM, ADC, DAN INTERRUPT
a) Asistensi dilakukan 1x
b) Praktikum dilakukan 1x
a) Memahami cara penggunaan PWM, ADC, dan Interrupt pada
Development Board yang digunakan
b) Memahami cara menggunakan komponen input dan output yang
mengimplementasikan PWM, ADC, dan Interrupt pada Development Board
yang digunakan
a.) STM32 NUCLEO-G474RE
b.) STM32F103C8
j.) Heartbeat Sensor
4.1 ADC
ADC atau Analog to Digital
Converter merupakan salah satu perangkat elektronika yang digunakan sebagai
penghubung dalam pemrosesan sinyal analog oleh sistem digital. Fungsi utama
dari fitur ini adalah mengubah sinyal masukan yang masih dalam bentuk sinyal
analog menjadi sinyal digital dengan bentuk kode-kode digital.
Pada mikrokontroler STM32, terdapat
dua ADC (Analog-to-Digital Converter) 12-bit yang masing-masing memiliki hingga
16 kanal eksternal. ADC ini dapat beroperasi dalam mode single-shot atau scan
mode. Pada scan mode, konversi dilakukan secara otomatis pada sekelompok input
analog yang dipilih. Selain itu, ADC ini memiliki fitur tambahan seperti
simultaneous sample and hold, interleaved sample and hold, serta single shunt.
ADC juga dapat dihubungkan dengan DMA untuk meningkatkan efisiensi transfer
data. Mikrokontroler ini dilengkapi dengan fitur analog watchdog yang
memungkinkan pemantauan tegangan hasil konversi dengan akurasi tinggi, serta
dapat menghasilkan interupsi jika tegangan berada di luar ambang batas yang
telah diprogram. Selain itu, ADC dapat disinkronkan dengan timer internal
(TIMx dan TIM1) untuk memulai
konversi, pemicu injeksi, serta pemicu DMA, sehingga memungkinkan aplikasi
untuk melakukan konversi ADC secara terkoordinasi dengan timer.
Pada STM32 Nucleo G474RE, terdapat
blok ADC (Analog-to-Digital Converter) yang digunakan untuk mengubah sinyal
analog menjadi data digital. STM32 G474RE memiliki beberapa unit ADC (seperti
ADC1, ADC2, ADC3, dan ADC4) yang memungkinkan proses konversi dilakukan secara
paralel untuk meningkatkan kecepatan akuisisi data. Setiap ADC mendukung
resolusi hingga 12-bit, dengan fitur tambahan seperti oversampling untuk
meningkatkan akurasi dan mengurangi noise pada sinyal.
Setiap unit ADC dapat mengakses
banyak channel input yang terhubung ke berbagai pin GPIO, sehingga memungkinkan
pembacaan berbagai sensor secara fleksibel. ADC pada STM32 G474RE juga
dilengkapi dengan fitur scan mode untuk membaca beberapa channel secara
berurutan, serta mode continuous conversion yang memungkinkan pembacaan data
secara terus-menerus tanpa intervensi CPU. Selain itu, terdapat injected
channel yang berfungsi sebagai channel prioritas untuk kebutuhan real-time.
ADC ini juga mendukung berbagai
sumber trigger, seperti timer (TIM) atau sinyal eksternal, sehingga dapat
disinkronkan dengan modul lain seperti PWM untuk aplikasi kontrol tertutup
(closed-loop). Proses konversi dilakukan melalui tahap sampling dan quantization,
dengan hasil akhir disimpan pada register data ADC. Dengan fitur-fitur
tersebut, ADC pada STM32 G474RE sangat cocok digunakan dalam aplikasi seperti
pembacaan sensor, monitoring tegangan, serta sistem kendali berbasis sinyal
analog yang membutuhkan kecepatan dan presisi tinggi.
4.2 PWM
PWM (Pulse Width Modulation) adalah salah satu teknik modulasi
dengan mengubah lebar pulsa (duty cylce) dengan nilai amplitudo dan
frekuensi yang tetap. Satu siklus pulsa merupakan kondisi high kemudian
berada di zona transisi ke kondisi low. Lebar pulsa PWM berbanding lurus
dengan amplitudo sinyal asli yang belum termodulasi.
Duty Cycle adalah perbandingan
antara waktu ON (lebar pulsa High) dengan perioda. Duty Cycle biasanya
dinyatakan dalam bentuk persen (%).

Gambar 1. Duty Cycle
Duty Cycle = tON / ttotal
Ton = Waktu ON atau Waktu
dimana tegangan keluaran berada pada posisi tinggi (high atau 1)
Toff = Waktu OFF atau Waktu
dimana tegangan keluaran berada pada posisi rendah (low atau 0)
Ttotal = Waktu satu siklus
atau penjumlahan antara Ton dengan Toff atau disebut juga dengan “periode
satu gelombang”
PWM pada STM32 dihasilkan menggunakan timer internal yang
berfungsi sebagai penghitung waktu dengan berbagai mode operasi.
Mikrokontroler ini memiliki empat timer 16-bit (TIM1–TIM4), yang dapat
dikonfigurasi untuk menghasilkan sinyal dengan frekuensi dan duty cycle
tertentu. Timer bekerja dengan menghitung hingga nilai tertentu
berdasarkan frekuensi clock, lalu mengubah status register untuk
menghasilkan gelombang persegi. STM32 memiliki 15 pin yang mendukung
PWM, beberapa di antaranya berasal dari timer tingkat lanjut seperti TIM1,
yang memiliki fitur tambahan seperti complementary output. Selain
menghasilkan sinyal PWM, timer juga bisa digunakan untuk mengukur sinyal
eksternal (input capture), menghasilkan sinyal berbasis waktu (output
compare), dan membuat satu pulsa berdasarkan trigger (one pulse mode). PWM
sering digunakan untuk mengontrol kecepatan motor, mengatur kecerahan LED,
dan berbagai aplikasi berbasis waktu lainnya.
Pada STM32 Nucleo G474RE, PWM dihasilkan melalui blok timer
(TIM) yang terdiri dari beberapa jenis, seperti advanced-control timer
(TIM1, TIM8), general-purpose timer (TIM2–TIM5), dan basic timer. Setiap
timer memiliki beberapa channel yang dapat digunakan untuk menghasilkan
sinyal PWM, sehingga memungkinkan banyak output PWM dikendalikan secara
bersamaan pada berbagai pin GPIO. Timer pada STM32 G474RE umumnya
memiliki resolusi hingga 16-bit atau lebih (tergantung jenis timer),
dilengkapi dengan prescaler untuk pengaturan frekuensi yang presisi, serta
register pembanding (CCR) untuk mengatur duty cycle dari
0–100%. Selain itu, setiap channel PWM dapat dikonfigurasi secara
independen, baik dalam mode edge-aligned maupun center-aligned, sehingga
cocok untuk aplikasi seperti kontrol motor dan konversi daya. STM32 G474RE
juga mendukung fitur lanjutan seperti complementary output, dead-time
insertion, break input, dan sinkronisasi antar timer, yang sangat penting
dalam sistem power electronics dan inverter. Pengaturan PWM dapat
dilakukan secara fleksibel melalui register timer atau menggunakan library
seperti HAL/LL, serta dapat diaktifkan atau dihentikan secara terpusat,
memungkinkan sinkronisasi beberapa sinyal PWM untuk aplikasi yang lebih
kompleks dan presisi tinggi.
4.3 INTERRUPT
Interrupt adalah mekanisme yang
memungkinkan suatu instruksi atau perangkat I/O untuk menghentikan
sementara eksekusi normal prosesor agar dapa diproses lebih dulu seperti
memiliki prioritas tertinggi. Misalnya, saat prosesor menjalankan tugas
utama, ia juga dapat terus memantau apakah ada kejadian atau sinyal dari
sensor yang memicu interrupt. Ketika terjadi interrupt eksternal, prosesor
akan menghentikan sementara tugas utamanya untuk menangani interrupt
terlebih dahulu, kemudian melanjutkan eksekusi normal setelah
selesai menangani interrupt tersebut. Fungsi yang menangani interrupt
disebut Interrupt Service Routine (ISR), yang dieksekusi secara otomatis
setiap kali interrupt terjadi.
Pada STM32F103C8, semua pin GPIO
dapat digunakan sebagai pin interrupt, berbeda dengan Arduino Uno yang
hanya memiliki pin tertentu (misalnya pin 2 dan 3). Untuk mengaktifkan
interrupt di STM32 menggunakan Arduino IDE, digunakan fungsi attachInterrupt(digitalPinToInterrupt(pin),
ISR, mode). Parameter pin menentukan pin mana yang digunakan untuk
interrupt, ISR adalah fungsi yang dijalankan saat interrupt terjadi, dan
mode menentukan jenis perubahan sinyal yang memicu interrupt. Mode yang
tersedia adalah RISING (dari LOW ke HIGH), FALLING (dari HIGH ke LOW), dan
CHANGE (baik dari LOW ke HIGH maupun HIGH ke LOW). Saat menggunakan lebih
dari satu interrupt secara bersamaan, terkadang perlu memperhatikan
batasan tertentu dalam pemrograman.
Pada STM32 Nucleo G474RE, sistem
interrupt merupakan mekanisme yang memungkinkan mikrokontroler merespons
suatu kejadian (event) secara langsung tanpa harus terus-menerus melakukan
polling. Dengan interrupt, CPU dapat menghentikan sementara proses utama
untuk menjalankan fungsi khusus yang disebut Interrupt Service Routine
(ISR), sehingga meningkatkan efisiensi dan respons sistem secara
real-time. STM32 G474RE menggunakan NVIC (Nested Vectored
Interrupt Controller) untuk mengatur berbagai sumber interrupt, seperti
dari timer (TIM), ADC, UART, GPIO (external interrupt), dan periferal
lainnya. Setiap sumber interrupt memiliki prioritas tertentu yang dapat
diatur, sehingga memungkinka penanganan beberapa interrupt secara
bersamaan (nested interrupt). Selain itu, sistem ini mendukung preemption
dan subpriority untuk pengelolaan interrupt yang lebih
kompleks. Interrupt dapat dipicu oleh berbagai kondisi, seperti perubahan
logika pada pin GPIO (EXTI), selesainya konversi ADC, overflow pada timer,
atau penerimaan data komunikasi. Ketika interrupt terjadi, program akan
lompat ke ISR yang sesuai, kemudian setelah selesai, eksekusi akan kembali
ke program utama. STM32 G474RE juga menyediakan fitur enable/disable
interrupt secara fleksibel melalui register maupun library seperti HAL.
Dengan adanya interrupt, STM32
G474RE sangat cocok untuk aplikasi real-time seperti sistem kendali,
monitoring sensor, komunikasi data, dan otomasi, karena mampu merespons
kejadian penting dengan cepat tanpa membebani CPU secara terus-menerus.
4.2 STM 32 NUCLEO G474RE
STM32 NUCLEO-G474RE merupakan papan
pengembangan (development board) berbasis mikrokontroler STM32G474RET6 yang
dikembangkan oleh STMicroelectronics. Board ini dirancang untuk memudahkan
proses pembelajaran, pengujian, dan pengembangan aplikasi sistem tertanam
(embedded system), baik untuk pemula maupun tingkat lanjut. STM32 Nucleo-G474RE
mengintegrasikan antarmuka ST-LINK debugger/programmer secara onboard sehingga
pengguna dapat langsung melakukan pemrograman dan debugging tanpa perangkat
tambahan. Adapun spesifikasi dari STM32 NUCLEO-G474RE adalah sebagai berikut:


4.3 STM32F103C8
STM32F103C8 adalah mikrokontroler
berbasis ARM Cortex-M3 yang dikembangkan oleh STMicroelectronics.
Mikrokontroler ini sering digunakan dalam pengembangan sistem tertanam karena
kinerjanya yang baik, konsumsi daya yang rendah, dan kompatibilitas dengan berbagai
protokol komunikasi. Pada praktikum ini, kita menggunakan STM32F103C8 yang
dapat diprogram menggunakan berbagai metode, termasuk komunikasi serial
(USART), SWD (Serial Wire Debug), atau JTAG untuk berhubungan dengan komputer
maupun perangkat lain. Adapun spesifikasi dari STM32F4 yang digunakan dalam
praktikum ini adalah sebagai berikut:
A. BAGIAN-BAGIAN PENDUKUNG
1) STM32 NUCLEO-G474RE
1. RAM (Random Access Memory) RAM
(Random Access Memory) pada STM32 NUCLEO-G474RE digunakan sebagai memori
sementara untuk menyimpan data selama program berjalan. Mikrokontroler
STM32G474RET6 memiliki RAM sebesar 128 KB yang berfungsi untuk menyimpan variabel,
buffer data, stack, dan heap.
2. Memori Flash Eksternal STM32
NUCLEO-G474RE tidak menggunakan memori flash eksternal. Seluruh program dan
data permanen disimpan pada memori Flash internal mikrokontroler STM32G474RET6
dengan kapasitas 512 KB. Memori flash ini bersifat non-volatile, sehingga data
dan program tetap tersimpan meskipun catu daya dimatikan.
3. Crystal Oscillator STM32
NUCLEO-G474RE menggunakan osilator internal (HSI – High Speed Internal) sebagai
sumber clock utama secara default. Penggunaan clock internal ini membuat board
dapat beroperasi tanpa memerlukan crystal oscillator eksternal. Clock berfungsi
sebagai sumber waktu untuk mengatur kecepatan kerja CPU dan seluruh peripheral.
4. Regulator Tegangan Untuk
memastikan pasokan tegangan yang stabil ke mikrokontroler.
5. Pin GPIO (General Purpose
Input/Output): Pin GPIO pada STM32 NUCLEO-G474RE digunakan sebagai antarmuka
input dan output digital yang fleksibel.
2) STM32F103C8
1. RAM (Random Access Memory)
STM32F103C8 dilengkapi dengan 20KB
SRAM on-chip. Kapasitas RAM ini memungkinkan mikrokontroler menjalankan
berbagai aplikasi serta menyimpan data sementara selama eksekusi program.
2. Memori Flash Internal
STM32F103C8 memiliki memori flash internal sebesar 64KB atau 128KB, yang
digunakan untuk menyimpan firmware dan program pengguna. Memori ini
memungkinkan penyimpanan kode program secara permanen tanpa memerlukan media
penyimpanan eksternal.
3. Crystal Oscillator STM32F103C8
menggunakan crystal oscillator eksternal (biasanya 8MHz) yang bekerja dengan
PLL untuk meningkatkan frekuensi clock hingga 72MHz. Sinyal clock yang stabil
ini penting untuk mengatur kecepatan operasi mikrokontroler dan komponen
lainnya.
4. Regulator Tegangan STM32F103C8
memiliki sistem pengaturan tegangan internal yang memastikan pasokan daya
stabil ke mikrokontroler. Tegangan operasi yang didukung berkisar antara 2.0V
hingga 3.6V.
5. Pin GPIO (General Purpose
Input/Output) STM32F103C8 memiliki hingga 37 pin GPIO yang dapat digunakan
untuk menghubungkan berbagai perangkat eksternal seperti sensor, motor, LED,
serta komunikasi dengan antarmuka seperti UART, SPI, dan I²C.