- PWM (การมอดูเลตความกว้างพัลส์):
- เซอร์โวมอเตอร์และ PWM:
- ส่วนประกอบที่ต้องการ:
- แผนภูมิวงจรรวม:
- คำอธิบายการทำงานและการเขียนโปรแกรม:
Raspberry Pi เป็นบอร์ดที่ใช้โปรเซสเซอร์สถาปัตยกรรม ARM ที่ออกแบบมาสำหรับวิศวกรอิเล็กทรอนิกส์และมือสมัครเล่น PI เป็นหนึ่งในแพลตฟอร์มการพัฒนาโครงการที่น่าเชื่อถือที่สุดในขณะนี้ ด้วยความเร็วโปรเซสเซอร์ที่สูงขึ้นและ RAM 1 GB PI สามารถใช้กับโปรเจ็กต์ที่มีรายละเอียดสูงมากมายเช่นการประมวลผลภาพและ Internet of Things
สำหรับการทำโครงการที่มีรายละเอียดสูงจำเป็นต้องเข้าใจฟังก์ชันพื้นฐานของ PI เราจะกล่าวถึงฟังก์ชันพื้นฐานทั้งหมด ของ Raspberry Pi ในบทช่วยสอนเหล่านี้ ในแต่ละบทช่วยสอนเราจะพูดถึงฟังก์ชันหนึ่งของ PI ในตอนท้ายของซีรีส์การสอน Raspberry Pi นี้คุณจะสามารถทำโปรเจ็กต์ที่มีรายละเอียดสูงได้ด้วยตัวเอง ดูบทช่วยสอนด้านล่าง:
- เริ่มต้นกับ Raspberry Pi
- การกำหนดค่า Raspberry Pi
- ไฟ LED Blinky
- การเชื่อมต่อปุ่ม Raspberry Pi
- Raspberry Pi PWM generation
- การควบคุม DC Motor โดยใช้ Raspberry Pi
- Stepper Motor Control พร้อม Raspberry Pi
- การเชื่อมต่อ Shift Register กับ Raspberry Pi
- การสอน Raspberry Pi ADC
ในการกวดวิชานี้เราจะควบคุม Servo Motor กับราสเบอร์รี่ Pi ก่อนที่จะไปที่เซอร์โวเรามาพูดถึง PWM เพราะแนวคิดในการควบคุมเซอร์โวมอเตอร์มาจากมัน
PWM (การมอดูเลตความกว้างพัลส์):
ก่อนหน้านี้เราเคยพูดถึง PWM หลายครั้งใน: Pulse width Modulation with ATmega32, PWM with Arduino Uno, PWM with 555 timer IC and PWM with Arduino Due PWM ย่อมาจาก 'Pulse Width Modulation' PWM เป็นวิธีการรับแรงดันไฟฟ้าผันแปรจากแหล่งจ่ายไฟที่เสถียร เพื่อความเข้าใจที่ดีขึ้น PWM ให้พิจารณาวงจรด้านล่าง
ในรูปด้านบนหากสวิตช์ปิดอย่างต่อเนื่องในช่วงเวลาหนึ่งไฟ LED จะ 'ON' ในช่วงเวลานี้อย่างต่อเนื่อง หากสวิตช์ปิดเป็นเวลาครึ่งวินาทีและเปิดในครึ่งวินาทีถัดไป LED จะติดเฉพาะในครึ่งวินาทีแรกเท่านั้น ตอนนี้สัดส่วนที่ LED เปิดอยู่ตลอดเวลาเรียกว่า Duty Cycleและสามารถคำนวณได้ดังนี้:
Duty Cycle = เปิดเวลา / (เปิดเวลา + ปิดเวลา)
รอบการทำงาน = (0.5 / (0.5 + 0.5)) = 50%
ดังนั้นแรงดันขาออกเฉลี่ยจะเท่ากับ 50% ของแรงดันแบตเตอรี่
เมื่อเราเพิ่มความเร็วในการเปิดและปิดจนถึงระดับหนึ่งเราจะเห็นไฟ LED จางลงแทนที่จะเป็นเปิดและปิด เนื่องจากสายตาของเราไม่สามารถจับความถี่ที่สูงกว่า 25Hz ได้อย่างชัดเจน พิจารณารอบ 100ms, LED ปิดเป็นเวลา 30msec และเปิดเป็นเวลา 70msec เราจะมีแรงดันไฟฟ้าคงที่ 70% ที่เอาต์พุตดังนั้น LED จะเรืองแสงอย่างต่อเนื่องโดยมีความเข้ม 70%
Duty Ratio ไปจาก 0 ถึง 100 '0' หมายถึงปิดอย่างสมบูรณ์และ '100' ถูกเปิดอย่างสมบูรณ์ Duty Ratio นี้สำคัญมากสำหรับเซอร์โวมอเตอร์ ตำแหน่งของเซอร์โวมอเตอร์จะถูกกำหนดโดย Duty Ratio นี้ ตรวจสอบสิ่งนี้สำหรับการสาธิต PWM พร้อม LED และ Raspberry Pi
เซอร์โวมอเตอร์และ PWM:
เซอร์โวมอเตอร์เป็นการผสมผสานระหว่างมอเตอร์กระแสตรงระบบควบคุมตำแหน่งและเกียร์ เซอร์โวมีแอพพลิเคชั่นมากมายในโลกสมัยใหม่และด้วยเหตุนี้จึงมีให้เลือกหลายรูปทรงและขนาด เราจะใช้SG90 Servo Motorในบทช่วยสอนนี้ซึ่งเป็นหนึ่งในผลิตภัณฑ์ยอดนิยมและราคาถูกที่สุด SG90 เป็นเซอร์โว 180 องศา ดังนั้นด้วยเซอร์โวนี้เราสามารถวางตำแหน่งแกนได้ตั้งแต่ 0-180 องศา
เซอร์โวมอเตอร์ส่วนใหญ่มีสายไฟสามเส้นสายหนึ่งใช้สำหรับแรงดันไฟฟ้าบวกอีกเส้นหนึ่งสำหรับกราวด์และสายสุดท้ายสำหรับการตั้งค่าตำแหน่ง สายสีแดงเชื่อมต่อกับอำนาจลวดสีน้ำตาลมีการเชื่อมต่อกับพื้นและสีเหลืองลวด (หรือสีขาว) มีการเชื่อมต่อสัญญาณ
ในเซอร์โวเรามีระบบควบคุมซึ่งรับสัญญาณ PWM จากพินสัญญาณ มันถอดรหัสสัญญาณและรับอัตราส่วนหน้าที่จากมัน หลังจากนั้นจะเปรียบเทียบอัตราส่วนกับค่าตำแหน่งที่กำหนดไว้ล่วงหน้า หากมีความแตกต่างในค่าจะปรับตำแหน่งของเซอร์โวให้เหมาะสม ดังนั้นตำแหน่งแกนของเซอร์โวมอเตอร์จึงขึ้นอยู่กับอัตราส่วนหน้าที่ของสัญญาณ PWM ที่ขาสัญญาณ
ความถี่ของสัญญาณ PWM (Pulse Width Modulated) อาจแตกต่างกันไปตามประเภทของเซอร์โวมอเตอร์ สำหรับ SG90 ความถี่ของสัญญาณ PWM เป็น 50Hz หากต้องการทราบความถี่ของการทำงานสำหรับเซอร์โวของคุณให้ตรวจสอบแผ่นข้อมูลสำหรับรุ่นนั้น ๆ ดังนั้นเมื่อเลือกความถี่แล้วสิ่งที่สำคัญอีกอย่างที่นี่คือ DUTY RATIO ของสัญญาณ PWM
ตารางด้านล่างแสดงตำแหน่ง Servo สำหรับ Duty Ratio นั้น ๆ คุณสามารถหามุมใดก็ได้โดยเลือกค่าตามนั้น ดังนั้นสำหรับเซอร์โว45ºอัตราส่วนหน้าที่ควรเป็น '5' หรือ 5%
ตำแหน่ง |
อัตราส่วนหน้าที่ |
0º |
2.5 |
90º |
7.5 |
180º |
12.5 |
ก่อนที่จะ เชื่อมต่อเซอร์โวมอเตอร์กับ Raspberry Piคุณสามารถทดสอบเซอร์โวของคุณด้วยความช่วยเหลือของวงจรทดสอบเซอร์โวมอเตอร์นี้ ตรวจสอบโครงการ Servo ด้านล่างของเราด้วย:
- การควบคุมเซอร์โวมอเตอร์โดยใช้ Arduino
- การควบคุมเซอร์โวมอเตอร์ด้วย Arduino Due
- เซอร์โวมอเตอร์เชื่อมต่อกับไมโครคอนโทรลเลอร์ 8051
- การควบคุมเซอร์โวมอเตอร์โดยใช้ MATLAB
- การควบคุมเซอร์โวมอเตอร์โดย Flex Sensor
- การควบคุมตำแหน่งเซอร์โวพร้อมน้ำหนัก (เซนเซอร์แรง)
ส่วนประกอบที่ต้องการ:
ที่นี่เราจะใช้ ราสเบอร์รี่ Pi 2 รุ่น B กับ Raspbian Jessie OS ข้อกำหนดฮาร์ดแวร์และซอฟต์แวร์พื้นฐานทั้งหมดได้กล่าวไว้ก่อนหน้านี้คุณสามารถค้นหาได้ในบทนำ Raspberry Pi นอกเหนือจากที่เราต้องการ:
- หมุดเชื่อมต่อ
- ตัวเก็บประจุ 1000uF
- เซอร์โวมอเตอร์ SG90
- เขียงหั่นขนม
แผนภูมิวงจรรวม:
A1000µF ต้องเชื่อมต่อผ่านรางจ่ายไฟ + 5V มิฉะนั้น PI อาจปิดลงแบบสุ่มขณะควบคุมเซอร์โว
คำอธิบายการทำงานและการเขียนโปรแกรม:
เมื่อทุกอย่างมีการเชื่อมต่อตามวงจรที่เราสามารถเปิด PI เพื่อเขียนโปรแกรมใน PYHTON
เราจะพูดถึงคำสั่งบางอย่างที่เราจะใช้ในโปรแกรม PYHTON
เรากำลังจะนำเข้าไฟล์ GPIO จากไลบรารีฟังก์ชันด้านล่างช่วยให้เราสามารถตั้งโปรแกรมพิน GPIO ของ PI ได้ นอกจากนี้เรายังเปลี่ยนชื่อ "GPIO" เป็น "IO" ดังนั้นในโปรแกรมเมื่อใดก็ตามที่เราต้องการอ้างถึงพิน GPIO เราจะใช้คำว่า 'IO'
นำเข้า RPi.GPIO เป็น IO
บางครั้งเมื่อพิน GPIO ที่เราพยายามใช้อยู่อาจจะทำหน้าที่อื่น ๆ ในกรณีนั้นเราจะได้รับคำเตือนขณะดำเนินการโปรแกรม คำสั่งด้านล่างบอกให้ PI เพิกเฉยต่อคำเตือนและดำเนินการกับโปรแกรม
IO.setwarnings (เท็จ)
เราสามารถอ้างอิงพิน GPIO ของ PI ไม่ว่าจะด้วยหมายเลขพินบนบอร์ดหรือตามหมายเลขฟังก์ชัน เช่นเดียวกับ 'PIN 29' บนกระดานคือ 'GPIO5' เราบอกตรงนี้ว่าเราจะแทนหมุดตรงนี้ด้วย '29' หรือ '5'
IO.setmode (IO.BCM)
เรากำลังตั้งค่า PIN39 หรือ GPIO19 เป็นพินเอาต์พุต เราจะได้เอาต์พุต PWM จากพินนี้
IO.setup (19, IO.OUT)
หลังจากตั้งค่าพินเอาต์พุตแล้วเราจำเป็นต้องตั้งค่าพินเป็นพินเอาต์พุต PWM
p = IO.PWM (ช่องสัญญาณความถี่ของสัญญาณ PWM)
คำสั่งดังกล่าวมีไว้สำหรับตั้งค่าช่องสัญญาณและสำหรับตั้งค่าความถี่ของช่อง " 'p' นี่คือตัวแปรที่สามารถเป็นอะไรก็ได้ เราใช้ GPIO19 เป็น PWM“ ช่องสัญญาณขาออก “ ความถี่ของสัญญาณ PWM” เราจะเลือก 50 เนื่องจากความถี่ในการทำงาน SG90 คือ 50Hz
คำสั่งด้านล่างนี้ใช้เพื่อเริ่มการสร้างสัญญาณ PWM ' DUTYCYCLE ' ใช้สำหรับตั้งค่าอัตราส่วน 'เปิดเครื่อง' ตามที่อธิบายไว้ก่อนหน้านี้
พีเริ่มต้น (DUTYCYCLE)
คำสั่งด้านล่างนี้ใช้เป็นลูปตลอดไปโดยคำสั่งนี้คำสั่งภายในลูปนี้จะดำเนินการอย่างต่อเนื่อง
ในขณะที่ 1:
โปรแกรมควบคุม Servo โดยใช้ Raspberry Piให้สัญญาณ PWM ที่ GPIO19 Duty Ratio ของสัญญาณ PWM มีการเปลี่ยนแปลงระหว่างค่าสามค่าเป็นเวลาสามวินาที ดังนั้นทุก ๆ วินาที Servo จะหมุนไปยังตำแหน่งที่กำหนดโดย Duty Ratio เซอร์โวจะหมุนไปที่0º, 90ºและ180ºอย่างต่อเนื่องในสามวินาที