- ส่วนประกอบที่จำเป็น
- แผนภาพวงจรและการเชื่อมต่อ
- SMT32F103C8 รายละเอียดพิน
- การเขียนโปรแกรม STM32 สำหรับเซอร์โวมอเตอร์
ในอุปกรณ์อิเล็กทรอนิกส์เซอร์โวมอเตอร์ส่วนใหญ่จะใช้ในโครงการหุ่นยนต์เนื่องจากมีความแม่นยำและใช้งานง่าย เซอร์โวมอเตอร์มีขนาดเล็กกว่าและมีประสิทธิภาพและประหยัดพลังงานมาก ให้แรงบิดสูงและสามารถใช้เพื่อยกหรือดันน้ำหนักได้ตามข้อกำหนดของมอเตอร์ ในบทช่วยสอนนี้เราจะเรียนรู้เกี่ยวกับ Servo Motor และ วิธีเชื่อมต่อ Servo กับบอร์ด STM32F103C8 โพเทนชิออมิเตอร์ยังเชื่อมต่อเพื่อเปลี่ยนตำแหน่งของเพลาของเซอร์โวมอเตอร์และ LCD เพื่อแสดงค่ามุม
ส่วนประกอบที่จำเป็น
- STM32F103C8 (Blue Pill) บอร์ด
- เซอร์โวมอเตอร์ (SG90)
- จอแอลซีดี (16x2)
- โพเทนชิออมิเตอร์
- เขียงหั่นขนม
- สายจัมเปอร์
แผนภาพวงจรและการเชื่อมต่อ
SMT32F103C8 รายละเอียดพิน
ในSTM32F103C8เรามีหมุด ADC 10 ตัว (PA0-PB1) และที่นี่เราใช้พินเดียว (PA3) สำหรับ อะนาล็อก () สำหรับการตั้งค่าตำแหน่งเพลาของมอเตอร์ด้วยโพเทนชิออมิเตอร์ นอกจากนี้ในบรรดาพิน PWM 15 พินของ STM32 (PA0, PA1, PA2, PA3, PA6, PA7, PA8, PA9, PA10, PB0, PB1, PB6, PB7, PB8, PB9) จะใช้พินหนึ่งพินในการจัดหาพัลส์ให้กับเซอร์โว ขา PWM ของมอเตอร์ (โดยปกติจะเป็นสีส้ม)
คุณสามารถเรียนรู้เพิ่มเติมเกี่ยวกับ PWM และ ADC ได้โดยอ่านบทความโดยละเอียดด้านล่าง:
- วิธีใช้ ADC ใน STM32F103C8
- การมอดูเลตความกว้างพัลส์ (PWM) ใน STM32F103C8
การเชื่อมต่อระหว่าง STM32F103C8 และ LCD
STM32F103C8 | LCD |
GND | VSS |
+ 5V | VDD |
ไปยัง PIN ของศูนย์โพเทนชิออมิเตอร์ | V0 |
PB0 | อาร์เอส |
GND | RW |
PB1 | จ |
PB10 | D4 |
PB11 | D5 |
พีซี 13 | D6 |
พีซี 14 | D7 |
+ 5V | ก |
GND | เค |
การเชื่อมต่อระหว่างเซอร์โวมอเตอร์และ STM32F103C8
STM32F103C8 |
SERVO |
+ 5V |
สีแดง (+ 5V) |
PA0 |
ส้ม (พิน PWM) |
GND |
สีน้ำตาล (GND) |
การเชื่อมต่อโพเทนชิโอมิเตอร์
เราใช้สองโพเทนชิโอมิเตอร์ที่นี่
1. โพเทนชิออมิเตอร์ทางด้านขวาใช้เพื่อปรับความคมชัดของ LCD มีสามพินขาซ้ายคือ + 5V และขวาสำหรับ GND และพินกลางเชื่อมต่อกับ V0 ของ LCD
2. โพเทนชิออมิเตอร์ทางด้านซ้ายใช้เพื่อเปลี่ยนตำแหน่งเพลาของเซอร์โวมอเตอร์โดยการควบคุมแรงดันไฟฟ้าอินพุตแบบอนาล็อกขาซ้ายมีอินพุต 3.3V และด้านขวามี GND และเอาต์พุตกลางเชื่อมต่อกับ (PA3) ของ STM32
การเขียนโปรแกรม STM32 สำหรับเซอร์โวมอเตอร์
เช่นเดียวกับบทช่วยสอนก่อนหน้านี้เราได้ตั้งโปรแกรม STM32F103C8 ด้วย Arduino IDE ผ่านพอร์ต USB โดยไม่ต้องใช้โปรแกรมเมอร์ FTDI เราสามารถดำเนินการเขียนโปรแกรมได้เหมือน Arduino รหัสที่สมบูรณ์จะได้รับด้านล่างเมื่อสิ้นสุดโครงการ
ก่อนอื่นเราได้รวมไฟล์ไลบรารีสำหรับฟังก์ชันเซอร์โวและ LCD:
# รวม
จากนั้นประกาศหมุดสำหรับจอ LCD และเริ่มต้นใช้งาน ยังประกาศตัวแปรอื่น ๆ สำหรับ PWM และโพเทนชิออมิเตอร์:
const int rs = PB0, th = PB1, d4 = PB10, d5 = PB11, d6 = PC13, d7 = PC14; LiquidCrystal lcd (rs, en, d4, d5, d6, d7); int servoPin = PA0; int potPin = PA3;
ที่นี่เราได้สร้างเซอร์โวตัวแปรด้วย Servo ประเภทข้อมูลและต่อเข้ากับพิน PWM ที่ประกาศไว้ก่อนหน้านี้
เซอร์โวเซอร์โว; servo.attach (เซอร์โวพิน);
จากนั้นอ่านค่าอนาล็อกจากขา PA3 เนื่องจากเป็นขา ADC ซึ่งจะแปลงแรงดันอนาล็อก (0-3.3) เป็นรูปแบบดิจิทัล (0-4095)
analogRead (potPin);
เนื่องจากเอาต์พุตดิจิตอลมีความละเอียด 12 บิตเราจึงต้องได้ค่าในช่วงองศา (0-170) จึงแบ่งค่า ADC (0-4096) ตามมุมสูงสุด 170 องศาดังนั้นเราจึงหารด้วย24
มุม = (อ่าน / 24);
ข้อความด้านล่างทำให้เซอร์โวมอเตอร์หมุนเพลาตามมุมที่กำหนด
servo.write (มุม);
รหัสที่สมบูรณ์จะได้รับด้านล่างและอธิบายได้ดีจากความคิดเห็น