สารบัญ:

การสร้างสัญญาณ PWM ความละเอียดสูงสำหรับ RC Servos ด้วยอุปกรณ์ STM32: 3 ขั้นตอน
การสร้างสัญญาณ PWM ความละเอียดสูงสำหรับ RC Servos ด้วยอุปกรณ์ STM32: 3 ขั้นตอน

วีดีโอ: การสร้างสัญญาณ PWM ความละเอียดสูงสำหรับ RC Servos ด้วยอุปกรณ์ STM32: 3 ขั้นตอน

วีดีโอ: การสร้างสัญญาณ PWM ความละเอียดสูงสำหรับ RC Servos ด้วยอุปกรณ์ STM32: 3 ขั้นตอน
วีดีโอ: สิ่งที่ต้องรู้ก่อนใช้งานเซอร์โวมอเตอร์กับ Arduino | How to use Servo Motor with Arduino 2024, กรกฎาคม
Anonim
การสร้างสัญญาณ PWM ความละเอียดสูงสำหรับ RC Servos ด้วยอุปกรณ์ STM32
การสร้างสัญญาณ PWM ความละเอียดสูงสำหรับ RC Servos ด้วยอุปกรณ์ STM32
การสร้างสัญญาณ PWM ความละเอียดสูงสำหรับ RC Servos ด้วยอุปกรณ์ STM32
การสร้างสัญญาณ PWM ความละเอียดสูงสำหรับ RC Servos ด้วยอุปกรณ์ STM32
การสร้างสัญญาณ PWM ความละเอียดสูงสำหรับ RC Servos ด้วยอุปกรณ์ STM32
การสร้างสัญญาณ PWM ความละเอียดสูงสำหรับ RC Servos ด้วยอุปกรณ์ STM32

ขณะนี้ ฉันกำลังสร้างเครื่องส่ง/เครื่องรับ RC โดยใช้ชิป SX1280 RF เป้าหมายหนึ่งของโครงการคือฉันต้องการความละเอียดเซอร์โว 12 บิตจากแท่งทั้งหมดไปจนถึงเซอร์โว ส่วนหนึ่งเนื่องจากเซอร์โวดิจิตอลสมัยใหม่มีความละเอียด 12 บิต อย่างที่สอง เครื่องส่งสัญญาณระดับไฮเอนด์ก็ใช้ 12 บิตอยู่ดี ฉันกำลังตรวจสอบว่าฉันสามารถสร้างสัญญาณ PWM ความละเอียดสูงบนอุปกรณ์ STM32 ได้อย่างไร ตอนนี้ฉันกำลังใช้ยาสีดำ (STM32F103C8T8) สำหรับต้นแบบ

ขั้นตอนที่ 1: รายการชิ้นส่วน

ฮาร์ดแวร์

  • บอร์ดพัฒนา STM32F103 ใดๆ (เม็ดสีน้ำเงิน เม็ดสีดำ ฯลฯ)
  • ธนาคารพลังงาน USB เป็นแหล่งจ่ายไฟ
  • โปรแกรมเมอร์ STM32 (Segger j-links, ST-LINK/V2 หรือเพียงแค่โคลน st-link)

ซอฟต์แวร์

  • STM32CubeMX
  • Atolic TrueSTUDIO สำหรับ STM32
  • แหล่งที่มาของโครงการจาก github

ขั้นตอนที่ 2: ทางออกที่ชัดเจน

ทางออกที่ชัดเจน
ทางออกที่ชัดเจน
ทางออกที่ชัดเจน
ทางออกที่ชัดเจน
ทางออกที่ชัดเจน
ทางออกที่ชัดเจน

น่าจะเป็นทางออกที่ง่ายที่สุดคือการใช้ตัวจับเวลาตัวใดตัวหนึ่งที่สามารถสร้างสัญญาณ PWM เช่น TIM1-3 บน STM32F103 สำหรับเซอร์โวดิจิตอลสมัยใหม่ อัตราเฟรมสามารถลดลงเหลือ 5 มิลลิวินาทีหรือมากกว่านั้น แต่สำหรับเซอร์โวอนาล็อกแบบเก่า ควรเป็น 20 มิลลิวินาทีหรือ 50 เฮิรตซ์ ดังนั้น ในสถานการณ์กรณีที่เลวร้ายที่สุด เรามาสร้างเรื่องนั้นกัน ด้วยนาฬิกา 72 MHz และความละเอียดตัวนับตัวจับเวลา 16 บิต เราจำเป็นต้องตั้งค่าตัวจับเวลาล่วงหน้าของตัวจับเวลาเป็น 23 ขั้นต่ำเพื่อให้ครอบคลุมอัตราเฟรม 20 ms ฉันเลือก 24 เพราะจากนั้นเป็นเวลา 20 มิลลิวินาที ฉันต้องตั้งค่าตัวนับเป็น 60000 อย่างแน่นอน คุณสามารถดูการตั้งค่า CubeMX และสัญญาณ PWM 1 และ 1.5 ms ที่สร้างขึ้นในภาพหน้าจอ ขออภัย สำหรับ 1ms ตัวนับของตัวจับเวลาควรตั้งไว้ที่ 3000 ซึ่งจะทำให้เรามีความละเอียดเพียง 11 บิตเท่านั้น ไม่เลว แต่เป้าหมายคือ 12 บิต ดังนั้นลองอย่างอื่น

แน่นอน ถ้าฉันจะเลือกไมโครคอนโทรลเลอร์ที่มีตัวจับเวลาแบบ 32 บิต เช่น STM32L476 ความละเอียดนี้จะสูงขึ้นมากและปัญหาก็จะได้รับการแก้ไข

แต่ในที่นี้ ฉันอยากจะเสนอทางเลือกอื่นที่จะเพิ่มความละเอียดให้มากขึ้น แม้กระทั่งใน STM32F103

ขั้นตอนที่ 3: Cascading Timers สำหรับความละเอียดสูงขึ้น

ตัวจับเวลาแบบเรียงซ้อนสำหรับความละเอียดสูงขึ้น
ตัวจับเวลาแบบเรียงซ้อนสำหรับความละเอียดสูงขึ้น
ตัวจับเวลาแบบเรียงซ้อนสำหรับความละเอียดสูงขึ้น
ตัวจับเวลาแบบเรียงซ้อนสำหรับความละเอียดสูงขึ้น
ตัวจับเวลาแบบเรียงซ้อนสำหรับความละเอียดสูงขึ้น
ตัวจับเวลาแบบเรียงซ้อนสำหรับความละเอียดสูงขึ้น

ปัญหาหลักของวิธีแก้ไขก่อนหน้านี้คืออัตราเฟรม (20 ms) ค่อนข้างสูงเมื่อเทียบกับสัญญาณ PWM ที่สร้างขึ้นจริง (ระหว่าง 1 ถึง 2 ms) ดังนั้นเราจึงสูญเสียบิตที่มีค่าสำหรับ 18 ms ที่เหลือเมื่อเรารอ เฟรมถัดไป ซึ่งสามารถแก้ไขได้ด้วยตัวจับเวลาแบบเรียงซ้อนโดยใช้คุณสมบัติลิงก์ตัวจับเวลาสำหรับการซิงโครไนซ์

แนวคิดคือฉันจะใช้ TIM1 เป็นต้นแบบเพื่อสร้างอัตราเฟรม (20 ms) และ TIM2, TIM3 เพื่อรับมือกับสัญญาณ PWM เป็นทาส เมื่อมาสเตอร์ทริกเกอร์ทาส พวกมันจะสร้างสัญญาณ PWM ในโหมดพัลส์เดียวเท่านั้น ดังนั้นฉันต้องครอบคลุม 2 ms ในตัวจับเวลาเหล่านั้นเท่านั้น โชคดีที่คุณสามารถเรียงตัวจับเวลาเหล่านั้นในฮาร์ดแวร์ได้ ดังนั้นการซิงโครไนซ์นี้จึงไม่ต้องการการแทรกแซงจากโปรเซสเซอร์ และมันแม่นยำมากเช่นกัน ความกระวนกระวายใจอยู่ในขอบเขต ps คุณสามารถดูการตั้งค่า CubeMX ได้จากภาพหน้าจอ

อย่างที่คุณเห็น ฉันเลือก 3 เป็นพรีสเกลาร์ ดังนั้นสำหรับ 2 มิลลิวินาที ฉันต้องตั้งค่า 48000 ในตัวนับของตัวจับเวลา สิ่งนี้ทำให้เรา 24000 สำหรับ 1 ms ซึ่งจริง ๆ แล้วเราต้องการมากกว่าสำหรับความละเอียด 14 บิต ตาด้า…

โปรดดูภาพหน้าจอของออสซิลโลสโคปในบทนำเพื่อผลลัพธ์สุดท้าย แชนเนล 3 (สีม่วง) เป็นการขัดจังหวะของตัวจับเวลาหลักซึ่งจะกระตุ้นการบรรเทาเพื่อสร้างหนึ่งพัลส์ ช่องสัญญาณ 1 และ 4 (ลำแสงสีเหลืองและสีเขียว) เป็นสัญญาณ PWM จริงที่สร้างโดยตัวจับเวลาที่แตกต่างกัน โปรดทราบว่ามันซิงค์กันแต่จะซิงค์ที่ขอบต่อท้าย นั่นเป็นเพราะโหมด PWM 2 นี่ไม่ใช่ปัญหาเพราะอัตรา PWM สำหรับเซอร์โวนั้นยังคงถูกต้อง

ประโยชน์อื่นๆ ของโซลูชันนี้คือการเปลี่ยนอัตราเฟรมหมายถึงการเปลี่ยนช่วงเวลาใน TIM1 เท่านั้น สำหรับเซอร์โวดิจิตอลสมัยใหม่ คุณสามารถเพิ่มได้ถึง 200-300 เฮิรตซ์ แต่โปรดอ่านคู่มือของเซอร์โวหากคุณต้องการปรับแต่ง

แนะนำ: