MODUL 2
PWM, ADC & INTERRUPT
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
1. STM32F103C8
2. Heartbeat Sensor SPESIFIKASI :
- Biometric Pulse Rate or Heart Rate detecting sensor
- Plug and Play type sensor
- Operating Voltage: +5V or +3.3V
- Current Consumption: 4mA
- Inbuilt Amplification and Noise cancellation circuit.
- Diameter: 0.625”
- Thickness: 0.125” Thick
A. 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.
B. 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 (%).
- 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.
C. Interrupt
Interrupt adalah mekanisme yang memungkinkan suatu instruksi atau perangkat I/O untuk
menghentikan sementara eksekusi normal prosesor agar dapat 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 memungkinkan 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.
D. STM32 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:
Bagian-bagian pendukung 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
E. 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:
Bagian-bagian pendukung 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.
Komentar
Posting Komentar