สร้างสัญญาณ PWM ด้วย Arduino โดยรับสัญญาณมาสร้าง

มันเป็นประมาณนี้อะครับ แล้วอาจารย์เขาอยากให้วงจรน้อยเท่าที่จะทำได้ครับ

เบื้องต้นต้องอ่าน ดาต้าชีต ของ Atmega328 ดูครับต้องเปลี่ยนโหมดสัญญาณ referent ใหม่ให้ตรงที่เอามาให้ดูนี้คือ แบบฟันปลาครับ เปิดดาต้าชีตไล่ดูว่าอันไหนตรงกับที่เราต้องการ แล้วศึกษาต่อไปว่าเราจะกำหนดค่าให้มันได้อย่างไร เอาข้อมูลที่ได้มาคุยกันครับ

ที่พี่บอกโหมด ใช่โหมดนี้ไหมอะครับ แล้วผมจะต้อง set ค่าหรืออะไรยังไงหรอครับ

1.อ่านกระทู้ referent แล้วตอบผมหน่อยว่าผมตั้งโหมดด้วยคำสั้งอะไร?
2.ศึกษาเรื่องการดึงค่าสัญญาณคอมแพออกมาดู เผื่อสามารถเอาสโคปจับสัญญาณคอมแพกับสัญญาณอินพุตที่เข้ามา ตอนนั้นเหมือนผมเคยเห็นผ่านๆ แต่ก็ไม่แน่ใจ

ปล. อันไหนที่ผมรู้ผมจะตอบให้เลยนะครับ แต่ถ้านอกเหนือจากที่ผมรู้ ผมจะไกร์ให้น้องไปค้นคว้ามา แล้วเอามาคุยกันดู ว่ามีความเป็นไปได้มากน้อยแค่ไหน

เทคนิกคือได้ข้อมูลอะไรมาก็เอามาแปะไว้ในกระทู้นี้ก่อน จากนั้นก็เอาข้อมูลมาวิเคราะห์ว่า ได้อะไรจากมันบ้าง ใช้งานพื้นที่กระทู้นี้ได้เต็มที่ไม่ต้องกลัวรก ครับ

TCCR1A กับ TCCR1B ใช่ไหมอะครับ
แล้วก็ตั้งค่าให้เป็น 40kHz แล้วก็เอาไปเปรียบเทียบกับสัญญาณ Absolute sine ที่รับเข้ามาใช่ไหมอะครับ หรือว่าผมต้องไปศึกษาการดึงค่าสัญญาณคอมแพครับ

1 Like

อ่านวิธีเขียนเป็นคำสั่งจากการเลือกโหมดให้ละเอียดครับ ตัวอย่างผมอธิบายไว้ค่อนข้างละเอียด

ในส่วนของ 40kHz คำนวนออกมาในตารางดูว่าได้ 40kHz ไหม เช็คสมการด้วยว่าโหมดนี้ใช้สมการอะไรคำนวน

ส่วนเรื่องการดึงค่าออกมาคอมแพ อันนี้ผมเสริมให้เฉยๆ เป็นทางเลือกที่สอง เผื่อทางที่ 1 ไม่เวิร์ค ก็ใช้แผน 2 ไป แต่ต้องศึกษาความเป็นไปได้ก่อนว่ามันทำได้จริงรึป่าว หรือมันมีแผน 3 ที่อาจจะง่ายกว่านี้ครับ

อย่างที่บอกข้อมูลที่มีมันช่วยเราตัดสินใจง่ายขึ้น อาจจะอย่าพึ่งเจาะลึกทางใดทางหนึ่ง ถ้ายังมีเวลา ค้นคว้าดูทางเลือกเรามีกี่ทาง ที่สามารถทำได้ สมมติ หามาแล้วมี 3 ทาง ที่ทำได้ก็เลือกทางที่ง่ายสุดก่อนเพื่อเซพเวลาอีกที

1581333657517 พี่ครับผมเห็นแค่สูตรนี้อะครับ ผมไม่เข้าใจว่าเราจะต้องกำหนดอะไรเท่าไหร่บ้างครับ แล้วจะเขียนโค้ดยังไงให้มัน compare กันอะครับ

ผมต้องไว้ในหัวข้อ

การเลือกค่าปรีสเกลเลอร์

ครับ

ลองอ่านแล้วอธิบายให้ฟังหน่อย ในความเข้าใจของตัวเองว่าใจความคืออะไร

คือผมเข้าใจว่า การปรีสเกลเลอร์ เป็นการหารความถี่เพื่อให้ได้ความถี่สัญญาณที่ต้องการ คือเหมือนเราคำนวณสูตรในโหมดที่เราเลือก แล้วเลือกใช้ค่า Top ที่เป็นจำนวนเต็ม แต่ผมไม่เข้าใจค่าของ fclkl/O อันนี้คือค่าอะไรหรอครับ แล้วในโหมดที่ผมใช้ มันก็ไม่มีค่า top ในสมการครับ อย่างงี้ต้องเลือกยังไงหรอครับ

เราใช้โหมดไหนครับ ในหัวข้อนั้น มีสมการ fclkl/O อยู่ด้วยรึป่าว ถ้าไม่มีแสดงว่าใช้สมการเดียวกันได้ ถ้าเป็นอย่างนั้นก็คำนวณหาค่า Top ที่เป็นจำนวนเต็ม ออกมา ว่าได้เท่าไหร่ด้วยการแทนที่ความถี่ 40kHz เหมือนตัวอย่าง

ผม ใช้โหมด fast pwm mode ครับ มีค่าfclkl/O ด้วยอะครับ 1581333657517
อย่างงี้ต้องทำยังไงหรอครับ

ในดาต้าชีตมันจะบอกอยู่นะครับ มันบอกว่าคือค่าอะไร?

มันคือค่า timer/counter timing ใช่ไหมอะครับ. แล้วในตัวอย่างพี่แทนค่ามันด้วยค่าเท่าไหร่หรอครับ

ผมลองแทนค่า ในสูตร 40k=fclkio/(8*256). มันได้ค่าออกมา 81.92M อะครับ

ไม่น่าจะใช่นะครับ มันคือค่า ความถี่สูงสุดของชิบ หรือ Clock speed ครับ

แล้วอย่างงี้เราพอจะมีวิธีกำหนดความถี่ของ สัญญาณฟันปลาได้ไหมอะครับ

ก็อย่างที่บอกครับ แทนค่าสมการหาค่า top ออกมา

พี่ครับแล้วผมจะเขียนโค้ดยังไงดี ให้มัน compare กันอะครับ

ได้ค่า top รึยังครับ แล้วแทน clock speed ไปเท่าไหร่?

พี่ครับในโหมดการทำงานอะพี่ เราต้องเลือกใช้ 8bit หรือ 16 bit หรอครับ คือผมเห็นว่าชื่อโหมดเดียวกัน แต่ว่าสมการไม่เหมือนกัน แล้วใน 8bit มันไม่มีค่า topในสมการ แต่ว่าใน 16 bit มันมีค่า top อยู่ในสมการ แต่ว่ารูปกราฟใน 16bit มันไม่ค่อยเหมือนกับใน 8 bit อะครับ

หาข้อมูลเรื่อง fast pwm mode atmega328 มาให้ดูหน่อยครับ ว่าเขามีวิธีคำนวณหรือเขียนโค้ตอย่างไร ถ้าพอมีข้อมูล ลิงเพิ่ม fast pwm mode atmega328 40kHz ดู