Sabtu, 15 Agustus 2026

Debug program STM32G474RE PWM TIM




Debugging pada STM32 bukan sekadar mencari error compile. Tujuannya adalah menjalankan program secara bertahap sambil melihat nilai variabel, register, peripheral, dan aliran eksekusi secara real-time.

Untuk kasus STM32G474RE + STM32CubeIDE + PWM TIM1, alurnya seperti ini:

1. Build program

Di STM32CubeIDE:

Project → Build Project

Periksa bagian Console.

  • 0 errors → program berhasil dikompilasi.
  • warning → belum tentu fatal.
  • error → program belum bisa di-debug.

2. Pastikan debugger ST-LINK

Nucleo-G474RE sudah memiliki ST-LINK onboard.

Hubungkan USB dari PC ke konektor ST-LINK USB pada board.

Kemudian:

Run → Debug As → STM32 Cortex-M C/C++ Application

CubeIDE akan masuk ke Debug Perspective.


3. Pasang Breakpoint

Breakpoint adalah titik tempat CPU berhenti sementara.

Misalnya program:

HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);

while (1)

{

    HAL_Delay(100);

}

Pasang breakpoint pada:

HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);

Caranya:

double-click nomor baris di sebelah kiri kode.

Akan muncul tanda breakpoint.

Ketika program berjalan dan mencapai baris tersebut, CPU berhenti.


4. Gunakan tombol utama Debug

Di toolbar Debug biasanya ada:

TombolFungsi
▶ ResumeMelanjutkan program
⏸ SuspendMenghentikan CPU
↪ Step IntoMasuk ke dalam fungsi
↷ Step OverMenjalankan satu baris
↩ Step ReturnKeluar dari fungsi
⏹ TerminateMenghentikan debugging

 Yang paling sering digunakan adalah:

Breakpoint → Resume → lihat nilai → Step Over

5. Contoh debugging PWM TIM1

Misalnya Anda ingin:

TIM1_CH1 → PA8 → PWM 1 kHz → duty cycle 50%

Konfigurasi:

HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);

Kemudian:

__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, 500);

Jika:

ARR = 999

CCR1 = 500

maka secara sederhana:

6. Periksa variabel dengan Watch

Saat breakpoint aktif, buka:

Window → Show View → Expressions

Tambahkan:

htim1.Instance

htim1.Init.Prescaler

htim1.Init.Period

Untuk PWM, yang paling penting:

TIM1->PSC

TIM1->ARR

TIM1->CCR1

Misalnya hasil:

PSC  = 169
ARR  = 999
CCR1 = 500

berarti kita dapat memeriksa konfigurasi PWM langsung dari register hardware.


7. Debug register TIM1

Ini bagian yang sangat penting untuk STM32.

Jangan hanya melihat kode C. Periksa juga register peripheral.

Buka:

Window → Show View → SFRs

atau gunakan Live Expressions/Expressions.

Perhatikan:

TIM1->PSC
TIM1->ARR
TIM1->CCR1
TIM1->CR1
TIM1->CCMR1
TIM1->CCER
TIM1->BDTR

Contoh interpretasi:

RegisterYang diperiksa
PSCPrescaler
ARRPeriode PWM
CCR1Duty cycle CH1
CR1Counter configuration
CCMR1PWM mode
CCERChannel enable
BDTRMain Output Enable

8. Mengapa TIM1 berbeda dari timer biasa?

TIM1 adalah Advanced-Control Timer.

Ini penting.

Untuk PWM TIM1/TIM8 terdapat konsep Main Output Enable (MOE) melalui register:

TIM1_BDTR

Bit penting:

MOE = 1

Jika konfigurasi timer terlihat benar tetapi output PWM tidak muncul, BDTR/MOE perlu diperiksa.

Namun jika Anda menggunakan:

HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);

HAL biasanya menangani kebutuhan output utama tersebut untuk penggunaan PWM normal.


9. Debug GPIO PA8

TIM1_CH1 pada konfigurasi umum dapat menggunakan:

PA8

PA8 tidak boleh dikonfigurasi sebagai GPIO Output biasa jika ingin menghasilkan PWM hardware.

Harus menjadi:

PA8
AF1
TIM1_CH1

Di CubeMX:

Pinout → PA8 → TIM1_CH1

Kemudian GPIO akan dikonfigurasi sebagai Alternate Function.

Secara konsep:

TIM1

 │

 └── CH1

      │

      ▼

     PA8

      │

      ▼

    PWM OUT

10. Debug frekuensi PWM

Misalnya clock TIM1:

TIM1CLK = 170 MHz

Prescaler:

PSC = 169

Maka:


Jika:

ARR = 999

maka:



Jadi konfigurasi:

TIM1CLK = 170 MHz
PSC     = 169
ARR     = 999
CCR1    = 500

menghasilkan kira-kira:

PWM = 1 kHz
Duty = 50%

11. Jika PWM tidak keluar

Gunakan urutan debugging berikut:

PROGRAM │ ▼ HAL_TIM_PWM_Start() │ ▼ TIM1 berjalan? / \ NO YES │ │ ▼ ▼ cek clock cek CH1 │ ▼ PA8? / \ NO YES │ │ ▼ ▼ cek AF1 cek CCR1 │ ▼ cek CCER │ ▼ cek BDTR │ ▼ OSCILLOSCOPE

12. Debug dengan oscilloscope

Setelah software benar, ukur:

PA8 ───────── Oscilloscope CH1
GND ───────── Oscilloscope GND

Jika target:

Frequency = 1 kHz
Duty      = 50%

maka waveform kira-kira:

3.3V  ┌───────┐       ┌───────┐
      │       │       │       │
0V ───┘       └───────┘       └────
       0.5 ms   0.5 ms
       <------ 1 ms --------->

Catatan: level logika STM32G474RE umumnya 3.3 V; jangan menghubungkan output PA8 langsung ke beban yang membutuhkan tegangan lebih tinggi.


13. Debug program secara sistematis

Untuk program STM32 yang lebih kompleks, gunakan urutan:

Level 1 — Compile

Apakah program berhasil build?

Level 2 — Program execution

Apakah CPU masuk main()?

Level 3 — Peripheral initialization

Apakah MX_TIM1_Init() dijalankan?

Level 4 — Peripheral start

Apakah HAL_TIM_PWM_Start() dijalankan?

Level 5 — Register

PSC
ARR
CCR1
CCER
BDTR

Level 6 — Pin

PA8 = TIM1_CH1 / AF1

Level 7 — Hardware

Oscilloscope / Logic Analyzer

Ini jauh lebih efektif daripada langsung mengubah-ubah kode secara acak.

Untuk STM32G474RE Anda, pola debug yang paling saya sarankan:

STM32CubeIDE
      │
      ▼
Build
      │
      ▼
Debug
      │
      ▼
Breakpoint
      │
      ▼
main()
      │
      ▼
MX_TIM1_Init()
      │
      ▼
HAL_TIM_PWM_Start()
      │
      ▼
Check TIM1 Registers
      │
      ▼
Check PA8 / AF1
      │
      ▼
Oscilloscope

Intinya: debugging STM32 yang benar dilakukan dari software → peripheral → register → GPIO → sinyal fisik. Untuk kasus PWM TIM1, jangan berhenti pada “program tidak error”; pastikan TIM1 benar-benar running dan PA8 benar-benar mengeluarkan waveform PWM.


Kamis, 13 Agustus 2026

Boost Converter 5V to 12V 10A

 




Ini adalah boost converter berdaya tinggi. Targetnya:

  • Input: 5 V DC
  • Output: 12 V DC
  • Output current: 10 A
  • Output power: 120 W


1. Prinsip dasarnya

Boost converter menaikkan tegangan dengan kombinasi:

Induktor + MOSFET + diode + kapasitor + PWM

Aliran energinya:

5 V → Induktor → MOSFET/Diode → Kapasitor → 12 V / 10 A

MOSFET dinyalakan dan dimatikan dengan frekuensi tinggi. Energi disimpan sementara di induktor ketika MOSFET ON, kemudian dilepaskan ke sisi output ketika MOSFET OFF.


2. Ketika MOSFET ON

Saat MOSFET ON:

5 V ── L ──┬── MOSFET ── GND
           │
           X  diode OFF

Induktor mendapatkan tegangan sekitar 5 V sehingga arus induktor meningkat.

Energi:

Jadi induktor sedang menyimpan energi.

3. Ketika MOSFET OFF

Saat MOSFET OFF, arus induktor tidak dapat berubah secara tiba-tiba.

Akibatnya tegangan pada node switching naik dan diode menjadi forward-biased:

5 V ── L ──►|─── C ─── 12 V
             D
             │
            Load
             │
            GND

Energi yang tersimpan pada induktor sekarang dialirkan ke:

induktor → diode → kapasitor → beban

Inilah yang menyebabkan tegangan output dapat lebih tinggi daripada 5 V.

Sabtu, 08 Agustus 2026

MAPPING PIN OUT ARDUINO KE STM32 MISAL (BOARD NUCLEO-G474RE)

 Jika mau pindah ke microcontroller dari board ARDUINO ke uC STM32 semisal BOARD NUCLEO-G474RE berikut adalah mapping PIN arduino ke nucleo



DOKUMEN RESMI dapat di download di link ini



Senin, 27 Juli 2026

Otak di Balik Otomasi: 4 Rahasia Mengejutkan Mengapa PID Adalah Raja Kontroler Dunia

Otak di Balik Otomasi: 4 Rahasia Mengejutkan Mengapa PID Adalah Raja Kontroler Dunia

Lihat versi video di sini

Bayangkan Anda sedang memprogram sebuah lengan robot untuk meletakkan komponen elektronik yang sangat presisi, atau sekadar menjaga suhu inkubator bayi agar tetap stabil. Bagaimana mesin-mesin ini tahu kapan harus mendorong dengan kuat dan kapan harus mengerem tepat sebelum melampaui target?
Jawabannya bukan terletak pada kecerdasan buatan yang rumit, melainkan pada tiga huruf yang telah mendominasi sejarah otomasi: PID. Berdiri sebagai akronim dari Proportional, Integral, dan Derivative, PID adalah skema kontrol paling populer dalam sejarah teknik. Meskipun terlihat seperti rumus matematika yang kaku, PID sebenarnya adalah sebuah filosofi tentang bagaimana sebuah sistem belajar dari masa lalu, bertindak di masa kini, dan memprediksi masa depan.


Berikut adalah empat rahasia di balik keanggunan mekanis PID yang menggerakkan dunia kita.
1. Kontrol Proporsional (P): Si Pekerja Keras dengan Kelemahan "Garis Finish"
Kontrol paling dasar dalam PID adalah komponen Proporsional. Secara fisik, Anda bisa membayangkan komponen ini sebagai sebuah pegas atau karet gelang. Kekuatan dorongannya (sinyal kontrol) berbanding lurus dengan besarnya kesalahan (error) yang terbaca saat ini. Dalam bahasa teknik, nilai penguatan (gain)
 pada dasarnya adalah "kekakuan" (stiffness) dari pegas sistem Anda.
Namun, ada sebuah realita yang kontra-intuitif di sini. Semakin dekat posisi sistem dengan target, maka error-nya semakin mengecil. Karena sinyal kontrol hanya hasil perkalian antara error dan gain, maka dorongannya pun ikut melemah tepat saat ia hampir sampai.
"Ini adalah hal paling bodoh atau sederhana yang bisa Anda lakukan: mengambil galat (error) dan mengalikannya dengan sebuah nilai gain statis untuk menghitung sinyal kontrol."
Analogi klasiknya adalah menarik balok kayu di atas meja. Saat balok mendekati target, tarikan "pegas" P menjadi sangat lemah. Akhirnya, gaya gesek (friction) pada meja akan menghentikan balok sebelum benar-benar menyentuh titik target. Fenomena inilah yang kita sebut sebagai Steady State Error (galat keadaan tunak). Kontrol P adalah pekerja keras, namun ia cenderung "lemas" dan menyerah tepat di depan garis finish.
2. Kontrol Integral (I): Kekuatan "Mengingat Masa Lalu" untuk Menghapus Kesalahan
Untuk mengatasi kelemahan komponen P, kita membutuhkan komponen Integral. Jika komponen P hanya melihat kondisi saat ini, komponen I bertindak dengan cara "menghitung akumulasi kesalahan" di masa lalu—secara matematis ini adalah luas area di bawah kurva galat.
Bayangkan sebuah tali pink yang terhubung pada sistem. Selama sistem belum mencapai target, "tali" ini akan terus tergulung (wind up), mengakumulasi energi dan tarikan seiring berjalannya waktu. Jika sistem terhenti karena gesekan (seperti pada kontrol P), integrator akan melihat bahwa galat masih ada dan terus menambah kekuatan tarikannya sampai objek tersebut dipaksa bergerak.
"Integrator tidak akan membiarkan sistem memiliki galat keadaan tunak; ia akan terus mendorong hingga galat tersebut hilang."
Namun, ada risiko besar yang disebut Overshoot. Karena integrator telah "menggulung" begitu banyak energi dari kesalahan masa lalu (disebut juga Integral Windup), ia tidak bisa berhenti seketika saat target tercapai. Sistem memiliki semacam inersia mental yang membuatnya meluncur melampaui target sebelum akhirnya berbalik arah.
3. Kontrol Derivatif (D): Sang Peramal Masa Depan yang Menenangkan Sistem
Komponen Derivatif adalah penyeimbang yang elegan. Jika Integral seringkali menyebabkan sistem berosilasi liar karena terlalu banyak "momentum," Derivatif berfungsi sebagai rem otomatis. Analogi fisiknya adalah mencelupkan sistem ke dalam cairan kental seperti madu.
Madu memberikan efek Damping (peredaman). Komponen D tidak peduli pada besarnya galat, ia hanya peduli pada kecepatan atau kemiringan (slope) perubahan galat tersebut. Karena ia melihat seberapa cepat sistem bergerak, ia bisa "meramal" bahwa sistem akan segera menabrak target dan memberikan perlawanan untuk memperlambatnya.
Penting untuk diingat bahwa kontrol D memiliki karakteristik unik:
  • Hanya bekerja saat dinamis: Ia hanya menghasilkan sinyal saat sistem sedang bergerak atau berubah. Saat sistem diam (statis), kontribusi D adalah nol.
  • Bukan pemain tunggal: Kontrol D tidak bisa bekerja sendirian karena ia tidak tahu di mana targetnya; ia hanya tahu seberapa cepat ia bergerak. Ia membutuhkan P atau I untuk menentukan arah.
  • Prediktor yang Stabil: Dengan melihat laju perubahan, ia bertindak sebagai peredam yang mencegah sistem melompat-lompat tak terkendali.
4. Paradoks Garis Finish: Siapa yang Sebenarnya Bekerja Saat Target Tercapai?
Hal paling mengejutkan dalam sistem PID terjadi saat galat akhirnya mencapai nol (Steady State). Secara matematis, sebuah paradoks terjadi pada titik ini:
  1. Komponen P bernilai nol, karena tidak ada galat untuk dikalikan.
  2. Komponen D bernilai nol, karena sistem sudah tenang dan tidak ada perubahan kecepatan.
  3. Hanya komponen Integral yang tetap bekerja.
Inilah yang disebut "Paradoks Integrator." Jika galat tidak nol, sinyal kontrol akan terus tumbuh menuju tak terhingga. Maka, secara matematis, integrator "memaksa" galat menjadi nol absolut. Di garis finish, komponen integrator adalah satu-satunya yang aktif memegang beban, menjaga posisi agar tidak bergeser, sementara komponen lainnya sudah berhenti bekerja.
Kesimpulan: Harmoni Antara Masa Lalu, Masa Kini, dan Masa Depan
PID bukan sekadar rumus, melainkan sebuah simfoni waktu. P bertindak untuk masa kini, I menebus kesalahan masa lalu, dan D mengantisipasi masa depan. Untuk memahami cara mengaturnya, berikut adalah panduan praktis (Rules of Thumb) saat Anda meningkatkan nilai gain:
Parameter (Peningkatan Gain)
Respon Kecepatan & Overshoot
Dampak Akhir pada Galat & Stabilitas
Kp (Proporsional)
Rise Time Menurun; Overshoot Naik
Galat (SSE) Berkurang; Stabilitas Menurun
Ki (Integral)
Rise Time Menurun; Overshoot Naik
Galat (SSE) Dihapus; Stabilitas Menurun
Kd (Derivatif)
Efek Kecil pada Kecepatan
Overshoot Turun; Stabilitas Meningkat
Memahami PID memberikan kita perspektif yang lebih dalam daripada sekadar teknik mesin. Ini adalah tentang keseimbangan. Terlalu reaktif pada masa kini membuat kita lelah (P), terlalu terbebani masa lalu membuat kita sulit berhenti (I), dan terlalu waspada pada masa depan bisa membuat kita ragu untuk bergerak (D).
Jika mesin saja membutuhkan harmoni antara ketiga waktu ini untuk mencapai stabilitas, mungkinkah rahasia yang sama bisa kita terapkan untuk mencapai keseimbangan dalam dinamika kehidupan kita sendiri?

ADS Article