
สารบัญ:
2025 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2025-01-23 15:12

สี่สิบปีที่แล้ว ฉันได้ออกแบบเค้นโมเดลรถไฟแบบ op-amp สำหรับเพื่อนสองสามคน และเมื่อประมาณสี่ปีที่แล้ว ฉันได้สร้างมันขึ้นใหม่โดยใช้ไมโครคอนโทรลเลอร์ PIC โปรเจ็กต์ Arduino นี้สร้างเวอร์ชัน PIC ขึ้นมาใหม่ แต่ยังเพิ่มความสามารถในการใช้การเชื่อมต่อบลูทูธแทนสวิตช์แบบแมนนวลสำหรับการควบคุมปีกผีเสื้อ เบรก และทิศทาง แม้ว่าการออกแบบที่ฉันนำเสนอในที่นี้มีเป้าหมายสำหรับมอเตอร์รางรุ่น 12 โวลต์ แต่ก็สามารถปรับเปลี่ยนได้อย่างง่ายดายสำหรับการใช้งานควบคุมมอเตอร์กระแสตรงอื่นๆ ที่หลากหลาย
ขั้นตอนที่ 1: การปรับความกว้างพัลส์ (PWM)

สำหรับผู้ที่ไม่คุ้นเคยกับ PWM มันไม่น่ากลัวอย่างที่คิด ทั้งหมดที่มีความหมายสำหรับแอปพลิเคชันการควบคุมมอเตอร์อย่างง่ายของเราคือเราสร้างคลื่นสี่เหลี่ยมของความถี่บางอย่างแล้วเราเปลี่ยนรอบการทำงาน รอบการทำงานถูกกำหนดให้เป็นอัตราส่วนของเวลาที่เอาต์พุตสูงแบบลอจิคัลเมื่อเทียบกับช่วงของรูปคลื่น คุณสามารถเห็นได้ค่อนข้างชัดเจนในแผนภาพด้านบนด้วยรูปคลื่นบนสุดที่รอบการทำงาน 10% รูปคลื่นกลางที่รอบการทำงาน 50% และรูปคลื่นด้านล่างที่รอบการทำงาน 90% เส้นประที่ซ้อนทับกันในแต่ละรูปคลื่นแสดงถึงแรงดัน DC ที่เทียบเท่าที่มอเตอร์เห็น เนื่องจาก Arduino มีความสามารถ PWM ในตัว จึงค่อนข้างง่ายที่จะสร้างการควบคุมมอเตอร์กระแสตรงประเภทนี้ ข้อดีอีกประการของการใช้ PWM คือช่วยให้มอเตอร์ไม่สตาร์ทอัพอย่างเฉื่อยชาที่อาจเกิดขึ้นได้เมื่อใช้ DC แบบตรง ข้อเสียอย่างหนึ่งของ PWM คือบางครั้งอาจมีเสียงรบกวนจากมอเตอร์ที่ความถี่ของ PWM
ขั้นตอนที่ 2: ฮาร์ดแวร์



ภาพแรกแสดงการเชื่อมต่อ Arduino สำหรับสวิตช์และโมดูลไดรเวอร์มอเตอร์ LM298 มีตัวต้านทานแบบดึงขึ้นที่อ่อนแอภายใน Arduino ดังนั้นจึงไม่จำเป็นต้องใช้ตัวต้านทานแบบดึงขึ้นสำหรับสวิตช์ สวิตช์ทิศทางเป็นสวิตช์ SPST (ขั้วเดียวแบบเสาเดี่ยว) แบบธรรมดา สวิตช์คันเร่งและเบรกจะแสดงเป็นปุ่มกดแบบสัมผัสที่เปิดอยู่ตามปกติชั่วขณะ
ภาพที่สองแสดงการเชื่อมต่อ Arduino สำหรับโมดูล Bluetooth และโมดูลไดรเวอร์มอเตอร์ LM298 เอาต์พุต Bluetooth TXD เชื่อมต่อโดยตรงกับอินพุตอนุกรม Arduino RX
ภาพที่สามคือโมดูล L298N dual H-bridge โมดูล LM298 มีตัวควบคุมออนบอร์ด 5 โวลต์ที่จัมเปอร์เปิดใช้งานได้ เราต้องการ +5 โวลต์สำหรับ Arduino และ Bluetooth แต่เราต้องการ +12 โวลต์เพื่อขับเคลื่อนมอเตอร์ ในกรณีนี้ เราใช้ +12 โวลต์กับอินพุต "กำลัง +12V" ของ L298N และเราจะปล่อยให้จัมเปอร์ "เปิดใช้งาน 5V" อยู่กับที่ ซึ่งจะช่วยให้ตัวควบคุม 5 โวลต์สามารถส่งออกไปยังการเชื่อมต่อ "+5 power" บนโมดูลได้ เชื่อมต่อกับ Arduino และ Bluetooth อย่าลืมเชื่อมต่อสายกราวด์สำหรับอินพุต +12 และเอาต์พุต +5 เข้ากับโมดูล "power GND"
เราต้องการให้แรงดันเอาต์พุตของมอเตอร์แตกต่างกันไปตาม PWM ที่สร้างโดย Arduino แทนที่จะเปิดหรือปิดเต็มที่ ในการทำเช่นนั้น เราจะถอดจัมเปอร์ออกจาก "ENA" และ "ENB" และเชื่อมต่อเอาต์พุต Arduino PWM ของเรากับ "ENA" บนโมดูล โปรดทราบว่าพินที่เปิดใช้งานจริงนั้นอยู่ใกล้กับขอบบอร์ดมากที่สุด (ถัดจากพิน "อินพุต") พินด้านหลังสำหรับการเปิดใช้งานแต่ละครั้งคือ +5 โวลต์ ดังนั้นเราจึงต้องการให้แน่ใจว่าเราจะไม่เชื่อมต่อกับสิ่งนั้น
หมุด "IN1" และ "IN2" บนโมดูลเชื่อมต่อกับหมุด Arduino ตามลำดับ หมุดเหล่านั้นควบคุมทิศทางของมอเตอร์ และใช่ มีเหตุผลที่ดีที่จะให้ Arduino ควบคุมแทนที่จะเพียงแค่เชื่อมต่อสวิตช์เข้ากับโมดูล เราจะเห็นเหตุผลในการอภิปรายซอฟต์แวร์
ขั้นตอนที่ 3: โมดูลบลูทูธ

รูปภาพที่แสดงนี้เป็นแบบฉบับของโมดูล Bluetooth ที่มีจำหน่าย เมื่อต้องการซื้อ คุณสามารถค้นหาคำว่า “HC-05” และ HC-06” ความแตกต่างระหว่างทั้งสองอยู่ในเฟิร์มแวร์และโดยปกติแล้วจะอยู่ที่จำนวนพินบนบอร์ด ภาพด้านบนเป็นโมดูล HC-06 และมาพร้อมกับเฟิร์มแวร์แบบง่ายที่อนุญาตการกำหนดค่าพื้นฐานเท่านั้น มันยังถูกตั้งค่าเป็นอุปกรณ์บลูทูธ “ทาส” เท่านั้น พูดง่ายๆ ก็คือ มันสามารถตอบสนองต่อคำสั่งจากอุปกรณ์ “Master” เท่านั้น และไม่สามารถออกคำสั่งได้ด้วยตัวเอง โมดูล HC-05 มีความเป็นไปได้ในการกำหนดค่าที่มากกว่า และสามารถตั้งค่าเป็นอุปกรณ์ “หลัก” หรือ “อุปกรณ์รอง” HC-05 มักจะมีหกพินแทนที่จะเป็นเพียงสี่ตัวที่แสดงด้านบนสำหรับ HC-06 หมุดสถานะไม่สำคัญจริงๆ แต่ต้องใช้หมุดคีย์ (บางครั้งใช้ชื่ออื่นเช่น “EN”) หากคุณต้องการกำหนดค่าใดๆ โดยทั่วไป โมดูลไม่จำเป็นต้องมีการกำหนดค่าใดๆ หากคุณพอใจกับอัตราการส่งข้อมูลเริ่มต้นที่ 9600 และไม่สนใจที่จะให้ชื่อเฉพาะกับโมดูล ฉันมีหลายโครงการที่ฉันใช้สิ่งเหล่านี้ ดังนั้นฉันจึงชอบตั้งชื่อตามนั้น
การกำหนดค่าโมดูล Bluetooth คุณต้องซื้อหรือสร้างอินเทอร์เฟซสำหรับพอร์ตอนุกรม RS-232 หรือพอร์ต USB ฉันจะไม่ครอบคลุมถึงวิธีการสร้างมันในโพสต์นี้ แต่คุณควรจะสามารถหาข้อมูลบนเว็บได้ หรือเพียงแค่ซื้ออินเทอร์เฟซ คำสั่งการกำหนดค่าใช้คำสั่ง AT แบบเดียวกับที่ใช้ในสมัยก่อนกับโมเด็มโทรศัพท์ ฉันได้แนบคู่มือผู้ใช้ที่นี่ซึ่งมีคำสั่ง AT สำหรับโมดูลแต่ละประเภท สิ่งหนึ่งที่ควรทราบคือ HC-06 ต้องใช้คำสั่ง UPPERCASE และสตริงคำสั่งต้องดำเนินการให้เสร็จสิ้นภายใน 1 วินาที นั่นหมายความว่าสตริงที่ยาวกว่าบางรายการ เช่น การเปลี่ยนอัตราบอด จะต้องถูกตัดและวางลงในโปรแกรมเทอร์มินัลของคุณ ไม่เช่นนั้นคุณจะต้องตั้งค่าไฟล์ข้อความเพื่อส่ง ข้อกำหนดตัวพิมพ์ใหญ่จะใช้ได้ก็ต่อเมื่อคุณพยายามส่งคำสั่งการตั้งค่าคอนฟิก โหมดการสื่อสารทั่วไปสามารถรับข้อมูล 8 บิตใดก็ได้
ขั้นตอนที่ 4: ซอฟต์แวร์
ซอฟต์แวร์นี้ค่อนข้างง่ายสำหรับทั้งเวอร์ชันแมนนวลและเวอร์ชันบลูทูธ ในการเลือกเวอร์ชันบลูทูธ ให้ยกเลิกการใส่เครื่องหมายคำสั่ง “#define BT_Ctrl”
เมื่อฉันเขียนรหัส PIC ฉันได้ทดลองกับความถี่ PWM และสุดท้ายก็อยู่ที่ 500-Hz ฉันค้นพบว่าหากความถี่สูงเกินไป โมดูล LM298N จะไม่สามารถตอบสนองต่อพัลส์ได้เร็วพอ นั่นหมายความว่าแรงดันไฟขาออกไม่เป็นเชิงเส้นและสามารถกระโดดได้มาก Arduino มีคำสั่ง PWM ในตัว แต่อนุญาตให้คุณเปลี่ยนรอบการทำงานเท่านั้น ไม่ใช่ความถี่ โชคดีที่ความถี่อยู่ที่ประมาณ 490-Hz ซึ่งใกล้เคียงกับ 500-Hz ที่ฉันใช้กับ PIC มากพอ
"คุณสมบัติ" ประการหนึ่งของคันเร่งรถไฟคือความรู้สึกของโมเมนตัมสำหรับการเร่งความเร็วและการเบรกเพื่อจำลองการทำงานของรถไฟจริง ในการทำให้สำเร็จนั้น จะมีการใส่การหน่วงเวลาอย่างง่ายในลูปสำหรับซอฟต์แวร์เวอร์ชันแบบแมนนวล ด้วยค่าที่แสดง จะใช้เวลาประมาณ 13 วินาทีในการเปลี่ยนจาก 0 ถึง 12 โวลต์หรือจาก 12 โวลต์กลับเป็นศูนย์ การหน่วงเวลาสามารถแก้ไขได้ง่ายสำหรับเวลาที่นานขึ้นหรือสั้นลง กรณีเดียวที่ไม่มีโมเมนตัมคือเมื่อสวิตช์ทิศทางเปลี่ยนไป เพื่อวัตถุประสงค์ในการป้องกัน รอบการทำงานของ PWM จะถูกตั้งค่าเป็น 0% ทันทีทุกครั้งที่เปลี่ยนสวิตช์นี้ ส่งผลให้สวิตช์ Direction เป็นสองเท่าของเบรกฉุกเฉิน
เพื่อให้แน่ใจว่าสามารถจัดการสวิตช์ Direction ได้ทันที ฉันจึงใส่รหัสลงในตัวจัดการการขัดจังหวะ นอกจากนี้ยังช่วยให้เราใช้ฟังก์ชัน "ขัดจังหวะการเปลี่ยนแปลง" ได้ ดังนั้นไม่ว่าการเปลี่ยนแปลงจะมาจากต่ำไปสูงหรือสูงไปต่ำ
ซอฟต์แวร์เวอร์ชัน Bluetooth ใช้คำสั่งตัวอักษรเดียวเพื่อเริ่มต้นฟังก์ชัน Forward, Reverse, Brake และ Throttle คำสั่งที่ได้รับจะแทนที่สวิตช์แบบแมนนวล แต่ทำให้เกิดการตอบสนองแบบเดียวกัน แอปที่ฉันใช้ควบคุม Bluetooth เรียกว่า "Bluetooth Serial Controller" โดย Next Prototypes ช่วยให้คุณกำหนดค่าปุ่มกดเสมือนและตั้งค่าสตริงคำสั่งและชื่อของคุณเองสำหรับแต่ละคีย์ นอกจากนี้ยังช่วยให้คุณสามารถกำหนดอัตราการทำซ้ำได้ ฉันจึงตั้งค่าปุ่มเบรกและคันเร่งเป็น 50 มิลลิวินาทีเพื่อให้มีโมเมนตัมประมาณ 14 วินาที ฉันปิดการใช้งานฟังก์ชั่นทำซ้ำสำหรับปุ่มไปข้างหน้าและย้อนกลับ
แค่นี้แหละสำหรับโพสต์นี้ ตรวจสอบคำแนะนำอื่น ๆ ของฉัน หากคุณสนใจโครงการไมโครคอนโทรลเลอร์ PIC ตรวจสอบเว็บไซต์ของฉันที่ www.boomerrules.wordpress.com
แนะนำ:
Steampunk Train: 5 ขั้นตอน (พร้อมรูปภาพ)

Steampunk Train: ฉันโชคดีที่ได้รับฐานรถเข็นที่ใช้แล้วจากเพื่อน ฉันจำเป็นต้องเปลี่ยนแบตเตอรี่ทั้งสองก้อนเพื่อให้มันใช้งานได้ แต่นั่นเป็นราคาเล็กน้อยที่จะต้องจ่ายสำหรับแท่นสร้างเสาเอนกประสงค์ ฉันตัดสินใจเ
Overkill Model Rocket Launch Controller!: 9 ขั้นตอน (พร้อมรูปภาพ)

Overkill Model Rocket Launch Controller!: ในฐานะที่เป็นส่วนหนึ่งของโครงการขนาดใหญ่ที่เกี่ยวข้องกับจรวดจำลอง ฉันต้องการตัวควบคุม แต่เช่นเดียวกับโปรเจ็กต์ทั้งหมดของฉัน ฉันไม่สามารถยึดติดกับพื้นฐานและสร้างคอนโทรลเลอร์แบบปุ่มเดียวแบบใช้มือถือที่เพิ่งเปิดตัวจรวดจำลอง ไม่ ฉันต้องทำงานหนักเกินไป
2019 FRC การเขียน Simple Drive Train (Java): 5 ขั้นตอน

2019 FRC การเขียน Simple Drive Train (Java): คำแนะนำนี้ล้าสมัยแล้ว! โปรดติดตามคำแนะนำต่อไปของฉันในการเขียนโปรแกรม 2019 ปัจจุบัน แม้ว่ามันจะล้าสมัย แต่ก็ยังมีบางสิ่งที่คุณสามารถเรียนรู้เกี่ยวกับมันได้ เช่น วิธีการสร้างชั้นเรียนจริง ๆ และเขียนโค้ด
Garden Train - Arduino Wireless NMRA DCC: 4 ขั้นตอน (พร้อมรูปภาพ)

Garden Train - Arduino Wireless NMRA DCC: นอกเหนือจากคำสั่งก่อนหน้าด้วย DCC บนระบบ dead rail ฉันได้พัฒนาแนวคิดเพิ่มเติมด้วยสถานีบัญชาการ DCC มือถือที่มีปุ่มกดและจอ LCD Command Station มีการเข้ารหัสทั้งหมดที่จำเป็นสำหรับคำสั่ง NMRA DCC อย่างไรก็ตาม
การควบคุม WiFi ของ Model Train โดยใช้ MQTT: 9 ขั้นตอน

การควบคุม WiFi ของ Model Train โดยใช้ MQTT: มีระบบโมเดล TT Scale Train แบบเก่า ฉันมีแนวคิดว่าจะควบคุม locos แยกกันอย่างไร เมื่อคำนึงถึงสิ่งนี้ ฉันได้ก้าวไปอีกขั้นและค้นพบว่าสิ่งที่จำเป็นไม่เพียงแต่ควบคุมรถไฟเท่านั้น แต่มีข้อมูลเพิ่มเติมเกี่ยวกับ