Modul 2 PWM,ADC&INTERUPT
PRATIKUM UC&UP
MODUL 2
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
4.1 ADC
Analog to Digital Converter (ADC) merupakan salah satu komponen penting dalam sistem embedded, khususnya pada mikrokontroler, yang berfungsi sebagai jembatan antara dunia analog dan dunia digital. Dalam praktiknya, banyak sensor seperti sensor suhu, cahaya, tekanan, maupun tegangan menghasilkan sinyal dalam bentuk analog yang bersifat kontinu terhadap waktu. Sementara itu, mikrokontroler seperti keluarga STM32 hanya mampu memproses data dalam bentuk digital (diskrit). Oleh karena itu, diperlukan ADC untuk mengubah sinyal analog tersebut menjadi representasi digital berupa kode biner.
Proses konversi ADC secara umum terdiri dari tiga tahapan utama, yaitu:
Sampling, yaitu pengambilan nilai tegangan analog pada waktu tertentu.
Quantization, yaitu proses pembulatan nilai analog ke level diskrit tertentu.
Encoding, yaitu pengubahan hasil kuantisasi menjadi kode biner.
Pada mikrokontroler STM32, ADC umumnya memiliki resolusi hingga 12-bit. Hal ini berarti sinyal analog yang masuk akan dikonversi ke dalam 2¹² = 4096 level diskrit, dengan rentang nilai digital dari 0 hingga 4095. Semakin tinggi resolusi ADC, maka semakin halus tingkat pembacaan sinyal analog dan semakin tinggi pula akurasinya.
Pada seri STM32, termasuk STM32 Nucleo G474RE, tersedia beberapa unit ADC seperti ADC1, ADC2, ADC3, dan ADC4. Keberadaan beberapa ADC ini memungkinkan proses konversi dilakukan secara paralel, sehingga sangat berguna untuk aplikasi yang membutuhkan kecepatan sampling tinggi, seperti sistem kontrol real-time atau akuisisi data multi-sensor.
Setiap unit ADC pada STM32 G474RE memiliki beberapa fitur unggulan, antara lain:
Multi-channel input: Setiap ADC dapat membaca hingga puluhan channel yang terhubung ke pin GPIO yang berbeda, sehingga memungkinkan pembacaan banyak sensor secara bersamaan.
Scan Mode: Mode ini memungkinkan ADC membaca beberapa channel secara berurutan secara otomatis tanpa intervensi CPU.
Single Conversion Mode: ADC hanya melakukan satu kali konversi ketika dipicu.
Continuous Conversion Mode: ADC melakukan konversi secara terus-menerus tanpa perlu pemicu ulang.
Injected Channel: Channel prioritas yang dapat digunakan untuk kebutuhan real-time dan dapat menginterupsi proses konversi reguler.
Oversampling: Teknik untuk meningkatkan resolusi efektif dan mengurangi noise dengan cara mengambil beberapa sampel dan merata-ratakannya.
Analog Watchdog: Fitur pemantauan nilai ADC yang akan menghasilkan interupsi jika nilai berada di luar batas yang telah ditentukan.
Selain itu, ADC pada STM32 juga dapat diintegrasikan dengan DMA (Direct Memory Access), sehingga data hasil konversi dapat langsung ditransfer ke memori tanpa membebani CPU. Hal ini sangat penting dalam aplikasi dengan kebutuhan kecepatan tinggi dan efisiensi sistem.
ADC juga dapat disinkronkan dengan timer internal seperti TIMx, yang memungkinkan proses konversi dilakukan secara terjadwal. Sinkronisasi ini sering digunakan dalam sistem kontrol tertutup (closed-loop control), misalnya pada kontrol motor atau sistem power elektronik, di mana pembacaan sensor harus selaras dengan sinyal PWM.
Dengan berbagai fitur tersebut, ADC pada STM32 sangat cocok digunakan dalam berbagai aplikasi seperti:
Monitoring tegangan dan arus
Pembacaan sensor analog (LM35, LDR, dll.)
Sistem kontrol industri
Akuisisi data berbasis IoT
Sistem kendali berbasis sinyal analog
4.2 Pulse Width Modulation (PWM)
Pulse Width Modulation (PWM) adalah teknik modulasi sinyal digital yang digunakan untuk mensimulasikan sinyal analog dengan cara mengatur lebar pulsa (duty cycle) pada sinyal dengan frekuensi tetap. PWM banyak digunakan dalam sistem embedded karena efisien, sederhana, dan dapat dihasilkan langsung oleh timer pada mikrokontroler.
Sinyal PWM terdiri dari dua kondisi utama, yaitu kondisi HIGH (logika 1) dan LOW (logika 0), yang berulang secara periodik. Dalam satu periode sinyal PWM, terdapat waktu ON (HIGH) dan waktu OFF (LOW). Perbandingan antara waktu ON terhadap total periode disebut sebagai duty cycle, yang biasanya dinyatakan dalam persen (%).
Secara matematis, duty cycle dapat dirumuskan sebagai:
Duty Cycle(%)=TONTTOTAL×100%Duty\ Cycle (\%) = \frac{T_{ON}}{T_{TOTAL}} \times 100\%Duty Cycle(%)=TTOTALTON×100%
Di mana:
TONT_{ON}TON adalah waktu sinyal berada pada kondisi HIGH
TTOTALT_{TOTAL}TTOTAL adalah total periode sinyal
Nilai duty cycle ini berbanding lurus dengan nilai rata-rata tegangan keluaran. Sebagai contoh:
Duty cycle 0% → tegangan rata-rata 0V
Duty cycle 50% → tegangan rata-rata sekitar setengah dari tegangan maksimum
Duty cycle 100% → tegangan maksimum
Pada mikrokontroler STM32, PWM dihasilkan menggunakan modul timer (TIM), seperti TIM1, TIM2, TIM3, dan lainnya. Timer ini memiliki fitur capture/compare yang memungkinkan pengaturan duty cycle secara presisi.
Beberapa fitur penting PWM pada STM32 antara lain:
Prescaler dan Auto-Reload Register (ARR) untuk mengatur frekuensi PWM
Capture/Compare Register (CCR) untuk mengatur duty cycle
Mode PWM (PWM Mode 1 & 2) untuk menentukan bentuk sinyal
Output Compare untuk menghasilkan sinyal PWM pada pin output
Dead-time insertion (khusus timer advanced) untuk aplikasi power seperti inverter
PWM banyak digunakan dalam berbagai aplikasi, seperti:
Pengaturan kecepatan motor DC
Pengendalian servo motor
Dimming LED (pengaturan kecerahan)
Sistem switching power supply
Kontrol daya pada inverter dan converter
Dalam sistem yang lebih kompleks, PWM sering dikombinasikan dengan ADC untuk membentuk sistem kontrol tertutup (closed-loop system). Sebagai contoh, ADC digunakan untuk membaca nilai sensor (seperti suhu atau kecepatan), kemudian PWM digunakan untuk mengontrol aktuator (seperti kipas atau motor) berdasarkan hasil pembacaan tersebut.
4.3 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.
4.4 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.
4.5 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.
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. STM32
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