วันศุกร์ที่ 15 กรกฎาคม พ.ศ. 2559

การใช้งาน ADC และ PWM

Hello everyone !!

ทำความรู้จักสัญญาณ Analog กันก่อนนะครับ

สัญญาณแอนะล็อก (Analog Signal) เป็นสัญญาณแบบต่อเนื่อง มีลักษณะเป็นคลื่นไซน์ (sine wave) โดยที่แต่ละคลื่นจะมีความถี่และความเข้มของสัญญาณที่ต่างกัน

Credit:  https://th.wikipedia.org



จากรูปด้านบนก็จะเห็นว่า Digital signal จะมีลักษณะที่แน่นอน คือ มีระดับสัญญาณที่ชัดเจนและคาดเดาได้ คือ "0" หรือ "1" (HIGH or LOW) ในขณะที่ Analog signal มีระดับสัญญาณที่ไม่แน่นอน สามารถปรับเปลี่ยนได้ตลอดเวลา

คำถามก็คือ แล้วเราจะอ่านสัญญาณ Analog นี้ได้อย่างไรล่ะ แล้วนำไปใช้งานอะไรได้บ้าง ????
คำตอบก็คือ ต้องใช้ตัวแปลงสัญญาณ Analog to Digital นะซิ

Arduino ได้เตรียมฟังก์ชั่นไว้ให้ สามฟังก์ชั่น คือ

ฟังก์ชั่น analogReference()

ใช้สำหรับกำหนดค่าแรงดันอ้างอิง สามารถกำหนดได้ดังนี้
 1. DEFAULT    ค่าปกติคือ 5V
 2. INTERNAL  - มีค่าเท่ากับ 1.1V สำหรับ ATmega168, ATmega328
                      - มีค่าเท่ากับ 2.56V สำหรับ ATmega8
 3. EXTERNAL  กำหนดได้เองโดยป้องแรงดันเข้าที่ PIN AREF

เช่น
- analogReference(DEFAULT);
- analogReference(INTERNAL);
- analogReference(EXTERNAL);


คำเตือน
ห้ามต่อ AREF PIN กับ 0V หรือมากกว่า 5V เพราะอาจทำให้บอร์ดเสียหายได้ แต่ถ้าต้องการใช้ external voltage จากภายนอกให้กับ AREF ให้เรียกใช้งานฟังก์ชั่น analogReference(EXTERNAL) ก่อนทุกครั้ง และต้องต่อตัวต้านทานขนาด 5k อนุกรมกับ AREF PIN ด้วย แต่แรงดันจะตกลงไปนิดหน่อย ดังตัวอย่างนี้
- สมมติว่าป้องแรงดันภายนอกให้กับ AREF PIN เท่ากับ 2.5V จะได้ 2.5 * 32 / (32 + 5) = ~2.2V
32 คือความต้านทานภายในของ AREF PIN ที่มีค่าเท่ากับ 32k

ฟังก์ชั่น analogRead()

ใช้สำหรับอ่านค่าแรงดันจาก PIN ที่ถูกอ้างอิง ซึ่งจะให้ค่าระหว่าง 0-1023 ฉนั้นหากเรากำหนดแรงดันอ้างอิงไว้ที่ 5V จะได้ 5/1024 = 0.0049V คือความละเอียดในการอ่านค่าแรงดันอินพุต แต่หากกำหนดแรงดันอ้างอิงไว้ที่ 2.56V จะได้ 2.56/1024 = 0.0025V ซึ่งให้ผลลัพธ์ที่ละเอียดกว่า

เช่น
- var = analogRead(A0);
- out = analogRead(A3);


ฟังก์ชั่น analogWrite()

คร่าวหน้ามา ต่อ analogWrite พร้อมตัวอย่างทั้งหมดนะ ครับ

ไม่มีความคิดเห็น:

แสดงความคิดเห็น