สัญญาณ PWM ถูกสร้างโดยตัวจับเวลาบนชิป AVR แต่ละตัวจับเวลาสามารถสร้างสัญญาณ PWM บนพินที่แตกต่างกันสองหรือสามตัว แต่ละขามีวงจรการทำงานเป็นของตัวเอง แต่ใช้ความถี่ PWM ร่วมกัน คุณสามารถเปลี่ยนความถี่ของ PWM ได้โดยการเปลี่ยนแหล่งสัญญาณนาฬิกาสำหรับตัวจับเวลา โดยค่าเริ่มต้นพวกเขาใช้นาฬิกา CPU หารด้วย 64 เช่น พวกเขาตั้งค่าพรีสเกลเลอร์ไว้ที่ 64 โดยรหัสเริ่มต้นของ Arduino เพื่อสร้างความสับสนมากขึ้นมีสองโหมด PWM ที่แตกต่างกัน: PWM ที่รวดเร็วและเฟสที่ถูกต้อง PWM ใน PWM ที่รวดเร็วตัวจับเวลานับเป็น 255 จากนั้นโอเวอร์โฟลว์และเริ่มต้นใหม่จาก 0 (256 สถานะที่แตกต่างกัน) ในการแก้ไขเฟส PWM ตัวจับเวลานับเป็น 255 จากนั้นเปลี่ยนทิศทางและนับถอยหลังสู่ศูนย์เปลี่ยนทิศทางและอื่น ๆ (510 สถานะที่แตกต่างกัน)
Arduino Mega มี 5 ตัวจับเวลา, timer0 - timer4 เนื่องจากตัวจับเวลา 0 ใช้สำหรับฟังก์ชั่นมิลลิวินาทีและไมโครวินาทีจึงใช้ PWM ที่รวดเร็วในขณะที่ตัวจับเวลาอื่นถูกกำหนดค่าสำหรับ PWM ที่ถูกต้องสำหรับเฟส ผลลัพธ์นี้มีความถี่ที่แตกต่างกันในพินที่แตกต่างกัน:
การคำนวณคือ: สถานะจำนวนนาฬิกา / Prescaler / PWM
สถานการณ์นั้นเหมือนกันสำหรับบอร์ด Arduino อื่น ๆ ทั้งหมดที่ฉันรู้จักยกเว้นว่ามีตัวจับเวลาน้อยกว่าที่เชื่อมต่อกับพินที่แตกต่างกัน
คุณสามารถเปลี่ยนความถี่ PWM ได้โดยเปลี่ยนการจับเวลาล่วงหน้า ดูหน้านี้: http://playground.arduino.cc/Main/TimerPWMCheatsheet
นอกจากนี้ยังเป็นไปได้ที่จะทำให้ตัวจับเวลานับเป็นค่าที่แตกต่างจาก 255 ในตัวจับเวลา 8 บิตคุณจะคลายหมุดออก แต่ในตัวจับเวลา 16 บิตคุณสามารถใช้ Input Capture Register เพื่อกำหนดค่า TOP ฟังก์ชั่นการจับภาพอินพุตนั้นเป็นคุณสมบัติที่ไม่ค่อยได้ใช้ในชุมชน Arduino ดังนั้นคุณน่าจะพลาดไม่ได้
ไลบรารี Arduino อนุญาตให้คุณใช้ความละเอียด 8 บิตเท่านั้นแม้แต่บนตัวจับเวลา 16 บิต หากคุณต้องการความละเอียดสูงกว่าคุณจะต้องเขียน analogWrite ของคุณเองหรือใช้ห้องสมุดที่สร้างขึ้นเพื่อวัตถุประสงค์ บน Arduino Mega timer0 และ timer2 คือ 8 บิตในขณะที่ส่วนที่เหลือเป็น 16 บิต
ด้วยการเปลี่ยนโหมดของตัวจับเวลา 16 บิตเพื่อใช้ความละเอียดเต็มรูปแบบเมื่อรวมกับการเปลี่ยนพรีสเกลเลอร์และค่า TOP คุณจะสามารถรับความถี่ PWM ได้หลากหลายมาก
ความถี่สูงสุดที่คุณสามารถทำได้คือนาฬิกา / 4 โดยการตั้งค่าพรีสเกลเลอร์เป็น 1 และ TOP ถึง 3 ในโหมด PWM ที่รวดเร็ว - ไม่อนุญาตให้ใช้ค่าต่ำกว่า สิ่งนี้จะให้ PWM 4 MHz ที่มีความละเอียด 2 บิต สามารถอยู่ที่ 0%, 25%, 50% หรือ 75% ของเวลา ค่า TOP ที่สูงขึ้นจะให้ความละเอียดที่สูงขึ้นในความถี่ต่ำ
สำหรับคำอธิบายอีกต่อไปอ่านบทความหรือดูที่แผ่นข้อมูล
เปลี่ยน prescaler โหมด PWM หรือค่าสูงสุดสำหรับ timer0 ประสงค์ยุ่งกับและmillis()
micros()