Getting Started STM32F103C Board with Arduino IDE [LEP]

ในตอนสุดท้ายของการเริ่มต้นใช้งานบอร์ดควบคุม STM32F103C8T6 จะเป็นการนำไปประยุกต์ใช้งานกับวงจรดีซี ทู ดีซี แบบซิงโครนัสบัก คอนเวอร์เตอร์ (DC to DC Synchronous Buck Converter) โดยในการทดลองจะใช้บอร์ดต้นแบบซิงโครนัสบัก คอนเวอร์เตอร์สำเร็จ และรับแรงดันอินพุต (Vi) 20V กำหนดค่าแรงดันเอาต์พุต (Vo) ไว้ที่ 12V/2.4A ต่อเนื่อง (Continuous Power : COP) เป็นบอร์ดแยกให้สามารถทดลองการทำงานได้ง่าย โดยในการทดลองนี้เป็นแนวความคิดเบื้องต้นของการนำไปใช้งานอื่นๆ ต่อไป

Getting Started STM32F103C Board with Arduino IDE
รูปที่ 1 บอร์ดต้นแบบวงจรซิงโครนัสบัก คอนเวอร์เตอร์
Getting Started STM32F103C Board with Arduino IDE
รูปที่ 2 วงจรสำหรับบอร์ดวงจรซิงโครนัสบัก คอนเวอร์เตอร์

รูปที่ 1 และรูปที่ 2 แสดงบอร์ดต้นแบบซิงโครนัสบัก คอนเวอร์เตอร์ และวงจรสำหรับบอร์ดวงจรซิงโครนัสบัก คอนเวอร์เตอร์ สำหรับใช้ในการทดลองโครงงานร่วมกับบอร์ดควบคุม STM32F103C8T6 ทั้งนี้บอร์ดต้นแบบซิงโครนัสบัก คอนเวอร์เตอร์ สามารถต่อใช้งานร่วมกับไมโครคอนโทรลเลอร์อื่นได้ เช่น Arduino, NodeMCU ESP32, NodeMCU ESP8266 และ Raspberry Pi Pico เป็นต้น

#include <HardwareTimer.h>

int pwmValue = 0; 
int setValue = 0;

                            // Use Timer
HardwareTimer pwmtimer4(4); // CH4 = PIN PB9
                            // CH3 = PIN PB8 
                            // CH2 = PIN PB7 
                            // CH1 = PIN PB6                            
void setup() {
  Serial.begin(9600);  
  // Configure Timer 4 for PWM
  pwmtimer4.pause();
  pwmtimer4.setOverflow(1800); // Sets PWM frequency 
  pwmtimer4.setPrescaleFactor(1);                   
  pwmtimer4.refresh();
  pwmtimer4.resume();

  // Set the pin mode for the PWM output pin
  pinMode(PB9, PWM); // Assuming PB9 is connected to Timer 4 
}

void loop() {
  int sensorVo = analogRead(PA2); // Reads 0 - 4095  
  
  if (sensorVo > 2020) {setValue = setValue-5;}  
  if (sensorVo < 2000) {setValue = setValue+5;} 
  
  pwmValue = map(setValue, 0, 4095, 0, 1800);  
  pwmWrite(PB9, pwmValue); // OUTPUT duty cycle 
 
 // Serial.print(" Vo = ");
 // Serial.println(sensorVo);  
  delay(1); 
}

Arduino Library for HardwareTimer.h

Getting Started STM32F103C Board with Arduino IDE
รูปที่ 3 การต่อวงจรระหว่างวงจรซิงโครนัสบัก คอนเวอร์เตอร์ และบอร์ดควบคุม STM32F103C
Getting Started STM32F103C Board with Arduino IDE
รูปที่ 4 แสดงลักษณะการต่อบอร์ดควบคุมร่วมกันสำหรับการทดลอง

รูปที่ 3 และรูปที่ 4 เป็นการต่อวงจรระหว่างวงจรซิงโครนัสบัก คอนเวอร์เตอร์ และบอร์ดควบคุม STM32F103C สำหรับการทดลอง โดยจะใช้ออสซิลโลสโคปวัดสัญญาณพัลซ์วิดมอดูเลตชั่น (CH1) ในการตอบสนองต่อโหลดทางด้านเอาต์พุตที่กระแส 1.2A และ 2.4A รวมทั้งวัดค่าแรงดันเอาต์พุต์ (CH2) ที่เกิดขึ้น

Getting Started STM32F103C Board with Arduino IDE
รูปที่ 5 แสดงค่าแรงดันเอาต์พุต (Vo) ประมาณ 12V
Getting Started STM32F103C Board with Arduino IDE
รูปที่ 6 สัญญาณพัลซ์วิดมอดูเลตชั่น (CH1) และแรงดันเอาต์พุต (CH2)

รูปที่ 5 และรูปที่ 6 แสดงการทดลองที่ 1 โดยวัดค่าแรงดันเอาต์พุต (Vo) มีค่าประมาณ 12V (เมื่อวัดค่าด้วยดิจิตอลมัลติมิเตอร์) ของวงจรซิงโครนัสบัก คอนเวอร์เตอร์ และสัญญาณพัลซ์วิดมอดูเลตชั่นที่ขา PB9 ความถี่สวิตชิ่ง (Fsw) ประมาณ 35kHz (CH1) ค่าแรงดันเอาต์พุต (CH2) ที่เกิดขึ้นในขณะสแตนบาย

Getting Started STM32F103C Board with Arduino IDE
รูปที่ 7 สัญญาณพัลซ์วิดมอดูเลตชั่น (CH1) และแรงดันเอาต์พุต (CH2) เมื่อจ่ายกระแสโหลดที่ 1.2A (ต่อเนื่อง)
Getting Started STM32F103C Board with Arduino IDE
รูปที่ 8 ค่าแรงดันเอาต์พุตเมื่อจ่ายกระแสโหลดที่ 1.2A (ต่อเนื่อง)

รูปที่ 7 และรูปที่ 8 การทดลองที่ 2 เป็นการวัดสัญญาณพัลซ์วิดมอดูเลตชั่น (CH1) และรูปที่ 8 วัดค่าแรงดันเอาต์พุต เมื่อจ่ายกระแสโหลดที่ 1.2A (ต่อเนื่อง) โดยผลการทดลองจะเห็นว่าค่าแรงดันเอาต์พุตลดลง 0.02V เมื่อเทียบกับในขณะที่วงจรกำลังสแตนบาย

Getting Started STM32F103C Board with Arduino IDE
รูปที่ 9 สัญญาณพัลซ์วิดมอดูเลตชั่น (CH1) และแรงดันเอาต์พุต (CH2) เมื่อจ่ายกระแสโหลดที่ 2.4A (ต่อเนื่อง)
Getting Started STM32F103C Board with Arduino IDE
รูปที่ 10 ค่าแรงดันเอาต์พุตเมื่อจ่ายกระแสโหลดที่ 2.4A (ต่อเนื่อง)

รูปที่ 9 และรูปที่ 10 การทดลองที่ 3 เช่นเดียวกับการทดลองที่ 2 เป็นการวัดสัญญาณพัลซ์วิดมอดูเลตชั่น (CH1) และรูปที่ 10 วัดค่าแรงดันเอาต์พุต เมื่อจ่ายกระแสโหลดที่ 2.4A (ต่อเนื่อง) โดยผลการทดลองจะเห็นว่าค่าแรงดันเอาต์พุตลดลง 0.05V เมื่อเทียบกับในขณะที่วงจรกำลังสแตนบาย

Getting Started STM32F103C Board with Arduino IDE
รูปที่ 11 ลักษณะการทดลองวงจรซิงโครนัสบัก คอนเวอร์เตอร์ (1)
Getting Started STM32F103C Board with Arduino IDE
รูปที่ 11 ลักษณะการทดลองวงจรซิงโครนัสบัก คอนเวอร์เตอร์ (2)

สำหรับการเริ่มต้นใช้งานบอร์ดควบคุม STM32F103C8T6 และนำมาประยุกต์ใช้งานกับวงจรดีซี ทู ดีซี แบบซิงโครนัสบัก คอนเวอร์เตอร์ ซึ่งเป็นการใช้งานฟังก์ต่างๆ ภายในชิฟ STM32F103C8T6 บางส่วน ทั้งนี้ยังมีฟังก์อื่นๆ ให้สามารถนำไปประยุกต์การใช้งานต่างๆ ที่หลากหลาย อย่างเช่น ระบบควบคุมอัตโนมัติ (Automatic Control System), วงจรสวิตชิ่งโหมดเพาเวอร์ ซัพพลาย (SMPSU) และวงจรอินเวอร์เตอร์ (Inverter) โดยแนะนำเข้าไปดูในเว็บไซต์ตามลิ้งก์อ้างอิงข้างล่างนี้ครับ. 

Reference

  1. https://www.st.com/en/microcontrollers-microprocessors/stm32f103.html
  2. https://www.st.com/resource/en/datasheet/stm32f103c8.pdf
  3. https://github.com/stm32duino/BoardManagerFiles/raw/master/STM32/package_stm_index.json
  4. https://www.pcb-hero.com/blogs/lickys-column/stm32f103c8t6-blue-pill-development-board
  5. https://forum.arduino.cc/t/wiring-uart-communication-between-arduino-nano-softserial-and-stm32f103c8t6/638799/2
  6. https://reversepcb.com/stm32f103c8t6/
  7. https://www.instructables.com/How-to-Program-STM32F103C8T6-With-ArduinoIDE/
  8. https://www.ti.com/lit/ug/sluu239/sluu239.pdf
  9. https://www.analog.com/media/en/technical-documentation/data-sheets/3731hfb.pdf
  10. https://www.onsemi.com/download/data-sheet/pdf/ncp6332-d.pdf
  11. https://fscdn.rohm.com/en/products/databook/applinote/ic/power/switching_regulator/buck_converter_efficiency_app-e.pdf
  12. https://ww1.microchip.com/downloads/aemDocuments/documents/APID/ApplicationNotes/ApplicationNotes/00793a.pdf
  13. https://www.ti.com/lit/ds/symlink/lm5164.pdf
  14. https://www.st.com/resource/en/application_note/an2603-st1s09-high-efficiency-synchronous-buck-converter-stmicroelectronics.pdf
  15. https://www.we-online.com/components/media/o109025v410%20ANP017c_EN.pdf
  16. https://www.electronicsdna.com/inverter-control-by-arduino-uno/
  17. https://www.electronicsdna.com/voltage-mode-control-flyback-converter-smps-based-on-arduino-uno/
  18. https://www.electronicsdna.com/basics-open-loop-half-bridge-smps-using-arduino-uno/