สารบัญ:
- ขั้นตอนที่ 1: การแก้ไข
- ขั้นตอนที่ 2: เหตุใด AnalogRead () จึงส่งคืนค่าระหว่าง 0 ถึง 1023
- ขั้นตอนที่ 3: AREF คืออะไร?
- ขั้นตอนที่ 4: AREF ภายนอก
- ขั้นตอนที่ 5: ภายใน AREF
วีดีโอ: พิน Arduino AREF: 6 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:04
ในบทช่วยสอนนี้ เราจะมาดูวิธีที่คุณสามารถวัดแรงดันไฟฟ้าที่มีขนาดเล็กลงและมีความแม่นยำมากขึ้นโดยใช้พินอินพุตแบบอะนาล็อกบน Arduino หรือบอร์ดที่เข้ากันได้ร่วมกับพิน AREF อย่างไรก็ตาม ก่อนอื่น เราจะทำการแก้ไขเพื่อให้คุณได้รับข้อมูลที่รวดเร็ว โปรดอ่านโพสต์นี้ให้ครบถ้วนก่อนที่จะทำงานกับ AREF ในครั้งแรก
ขั้นตอนที่ 1: การแก้ไข
คุณอาจจำได้ว่าคุณสามารถใช้ฟังก์ชัน Arduino analogRead() เพื่อวัดแรงดันไฟฟ้าของกระแสไฟฟ้าจากเซ็นเซอร์และอื่น ๆ โดยใช้หมุดอินพุตแบบอะนาล็อกตัวใดตัวหนึ่ง ค่าที่ส่งคืนจาก analogRead() จะอยู่ระหว่างศูนย์ถึง 1,023 โดยมีค่าศูนย์เท่ากับศูนย์โวลต์และ 1023 แสดงถึงแรงดันไฟฟ้าในการทำงานของบอร์ด Arduino ที่ใช้งานอยู่
และเมื่อเราพูดถึงแรงดันไฟฟ้าในการทำงาน นี่คือแรงดันไฟฟ้าที่ Arduino สามารถใช้ได้หลังจากวงจรจ่ายไฟ ตัวอย่างเช่น หากคุณมีบอร์ด Arduino Uno ทั่วไปและเรียกใช้จากซ็อกเก็ต USB แน่นอนว่ามี 5V ให้กับบอร์ดจากซ็อกเก็ต USB บนคอมพิวเตอร์หรือฮับของคุณ แต่แรงดันไฟฟ้าจะลดลงเล็กน้อยเมื่อกระแสลมรอบๆ วงจรไปยังไมโครคอนโทรลเลอร์ - หรือแหล่ง USB ยังไม่สมบูรณ์
สิ่งนี้สามารถแสดงให้เห็นได้อย่างง่ายดายโดยการเชื่อมต่อ Arduino Uno กับ USB และวางชุดมัลติมิเตอร์เพื่อวัดแรงดันไฟฟ้าข้ามพิน 5V และ GND บอร์ดบางอันจะคืนค่าต่ำสุดที่ 4.8 V บางบอร์ดจะสูงกว่าแต่ยังคงต่ำกว่า 5V ดังนั้น หากคุณกำลังเล็งเพื่อความแม่นยำ ให้จ่ายไฟให้กับบอร์ดของคุณจากแหล่งจ่ายไฟภายนอกผ่านซ็อกเก็ต DC หรือพิน Vin เช่น 9V DC หลังจากนั้นผ่านวงจรควบคุมกำลัง คุณจะได้ไฟ 5V ที่ดี เช่น รูปภาพ
นี่เป็นสิ่งสำคัญเนื่องจากความถูกต้องของค่า analogRead() ใดๆ จะได้รับผลกระทบจากค่า 5 V จริง หากคุณไม่มีตัวเลือกใดๆ คุณสามารถใช้คณิตศาสตร์บางส่วนในภาพสเก็ตช์ของคุณเพื่อชดเชยแรงดันตกคร่อมได้ ตัวอย่างเช่น ถ้าแรงดันไฟฟ้าของคุณคือ 4.8V – ช่วง analogRead() ที่ 0~1023 จะสัมพันธ์กับ 0~4.8V และไม่ใช่ 0~5V นี้อาจฟังดูเล็กน้อย แต่ถ้าคุณใช้เซ็นเซอร์ที่คืนค่าเป็นแรงดันไฟฟ้า (เช่น เซ็นเซอร์อุณหภูมิ TMP36) ค่าที่คำนวณได้จะไม่ถูกต้อง ดังนั้นเพื่อความถูกต้อง ให้ใช้แหล่งจ่ายไฟภายนอก
ขั้นตอนที่ 2: เหตุใด AnalogRead () จึงส่งคืนค่าระหว่าง 0 ถึง 1023
ทั้งนี้เนื่องมาจากมติของ ADC ความละเอียด (สำหรับบทความนี้) คือระดับที่บางสิ่งสามารถแสดงเป็นตัวเลขได้ ยิ่งความละเอียดยิ่งสูง ก็ยิ่งมีความแม่นยำมากขึ้นในการนำเสนอบางสิ่ง เราวัดความละเอียดในแง่ของจำนวนบิตของความละเอียด
ตัวอย่างเช่น ความละเอียด 1 บิตจะอนุญาตเพียงค่าสอง (สองยกกำลังหนึ่ง) – ศูนย์และหนึ่งค่า ความละเอียด 2 บิตจะอนุญาตให้สี่ (สองยกกำลังสอง) ค่า - ศูนย์หนึ่งสองและสาม หากเราพยายามวัดช่วงห้าโวลต์ด้วยความละเอียดสองบิต และแรงดันไฟฟ้าที่วัดได้คือสี่โวลต์ ADC ของเราจะคืนค่าตัวเลขเป็น 3 - เนื่องจากสี่โวลต์อยู่ระหว่าง 3.75 ถึง 5V มันง่ายกว่าที่จะจินตนาการสิ่งนี้ด้วยภาพ
ดังนั้นด้วยตัวอย่าง ADC ที่มีความละเอียด 2 บิต จึงสามารถแสดงแรงดันไฟฟ้าที่มีค่าผลลัพธ์ที่เป็นไปได้สี่ค่าเท่านั้น หากแรงดันไฟฟ้าขาเข้าอยู่ระหว่าง 0 ถึง 1.25 ADC จะส่งกลับค่าตัวเลข 0; หากแรงดันไฟฟ้าตกระหว่าง 1.25 ถึง 2.5 ADC จะส่งกลับค่าตัวเลขเป็น 1 เป็นต้น ด้วยช่วง ADC ของ Arduino ที่ 0~1023 – เรามีค่าที่เป็นไปได้ 1024 ค่า – หรือ 2 ยกกำลัง 10 ดังนั้น Arduinos ของเราจึงมี ADC ที่มีความละเอียด 10 บิต
ขั้นตอนที่ 3: AREF คืออะไร?
ในการย่อเรื่องยาว เมื่อ Arduino ของคุณใช้การอ่านแบบอะนาล็อก มันจะเปรียบเทียบแรงดันไฟฟ้าที่วัดที่ขาอะนาล็อกที่ใช้กับสิ่งที่เรียกว่าแรงดันอ้างอิง ในการใช้งานแบบอนาลอกแบบปกติ แรงดันอ้างอิงคือแรงดันไฟฟ้าในการทำงานของบอร์ด
สำหรับบอร์ด Arduino ที่ได้รับความนิยมมากกว่า เช่น บอร์ด Uno, Mega, Duemilanove และ Leonardo/Yún แรงดันใช้งาน 5V หากคุณมีบอร์ด Arduino Due แรงดันไฟฟ้าที่ใช้งานคือ 3.3V หากคุณมีอย่างอื่น – ตรวจสอบหน้าผลิตภัณฑ์ Arduino หรือสอบถามผู้จำหน่ายบอร์ดของคุณ
ดังนั้น หากคุณมีแรงดันอ้างอิง 5V แต่ละหน่วยที่ส่งคืนโดย analogRead() มีค่าเท่ากับ 0.00488 V. (คำนวณโดยการหาร 1024 เป็น 5V) เกิดอะไรขึ้นถ้าเราต้องการวัดแรงดันไฟฟ้าระหว่าง 0 ถึง 2 หรือ 0 ถึง 4.6? ADC จะรู้ได้อย่างไรว่าช่วงแรงดันไฟฟ้าของเรา 100% คืออะไร?
และในนั้นก็มีเหตุผลสำหรับพิน AREF AREF หมายถึง การอ้างอิงแบบอะนาล็อก ช่วยให้เราสามารถป้อนแรงดันอ้างอิงของ Arduino จากแหล่งจ่ายไฟภายนอก ตัวอย่างเช่น หากเราต้องการวัดแรงดันไฟฟ้าด้วยช่วงสูงสุด 3.3V เราจะป้อน 3.3V ที่ราบรื่นลงในพิน AREF ซึ่งอาจมาจาก IC ควบคุมแรงดันไฟฟ้า
จากนั้นแต่ละขั้นตอนของ ADC จะแสดงประมาณ 3.22 มิลลิโวลต์ (แบ่ง 1,024 เป็น 3.3) โปรดทราบว่าแรงดันอ้างอิงต่ำสุดที่คุณมีได้คือ 1.1V AREF มีสองรูปแบบ – ภายในและภายนอก ลองตรวจสอบกัน
ขั้นตอนที่ 4: AREF ภายนอก
AREF ภายนอกเป็นที่ที่คุณจ่ายแรงดันอ้างอิงภายนอกให้กับบอร์ด Arduino ซึ่งอาจมาจากแหล่งจ่ายไฟที่มีการควบคุม หรือหากคุณต้องการ 3.3V คุณสามารถรับได้จากพิน 3.3V ของ Arduino หากคุณกำลังใช้แหล่งจ่ายไฟภายนอก อย่าลืมเชื่อมต่อ GND กับพิน GND ของ Arduino หรือหากคุณใช้แหล่งสัญญาณ 3.3V ของ Arduno – เพียงแค่เรียกใช้จัมเปอร์จากพิน 3.3V ไปยังพิน AREF
หากต้องการเปิดใช้งาน AREF ภายนอก ให้ใช้สิ่งต่อไปนี้ในการตั้งค่าเป็นโมฆะ ():
analogReference(ภายนอก); // ใช้ AREF สำหรับแรงดันอ้างอิง
การตั้งค่านี้จะกำหนดแรงดันอ้างอิงให้กับสิ่งที่คุณเชื่อมต่อกับพิน AREF ซึ่งแน่นอนว่าจะมีแรงดันไฟฟ้าระหว่าง 1.1V และแรงดันการทำงานของบอร์ด ข้อควรทราบที่สำคัญมาก - เมื่อใช้การอ้างอิงแรงดันไฟฟ้าภายนอก คุณต้องตั้งค่าการอ้างอิงอะนาล็อกเป็น EXTERNAL ก่อนใช้ analogRead() วิธีนี้จะป้องกันไม่ให้คุณลัดวงจรแรงดันอ้างอิงภายในที่ทำงานอยู่และพิน AREF ซึ่งอาจทำให้ไมโครคอนโทรลเลอร์บนบอร์ดเสียหายได้ หากจำเป็นสำหรับการใช้งานของคุณ คุณสามารถเปลี่ยนกลับเป็นแรงดันการทำงานของบอร์ดสำหรับ AREF (นั่นคือ – กลับสู่ปกติ) โดยทำดังนี้
analogReference (ค่าเริ่มต้น);
ตอนนี้เพื่อสาธิต AREF ภายนอกในที่ทำงาน เมื่อใช้ AREF 3.3V ภาพร่างต่อไปนี้จะวัดแรงดันไฟฟ้าจาก A0 และแสดงเปอร์เซ็นต์ของ AREF ทั้งหมดและแรงดันไฟฟ้าที่คำนวณได้:
#รวม "LiquidCrystal.h"
LiquidCrystal LCD (8, 9, 4, 5, 6, 7);
int อนาล็อกอินพุต = 0; // พินอะนาล็อกของเรา
อนาล็อก int = 0; // เก็บค่าร้อยละลอยเข้ามา = 0; // ใช้เพื่อเก็บค่าร้อยละ แรงดันลอย =0; // ใช้สำหรับเก็บค่าแรงดันไฟ
การตั้งค่าเป็นโมฆะ ()
{ lcd.begin(16, 2); analogReference(ภายนอก); // ใช้ AREF สำหรับแรงดันอ้างอิง }
วงเป็นโมฆะ ()
{ จอแอลซีดีชัดเจน (); analogamount=analogRead(อนาล็อกอินพุต); เปอร์เซ็นต์=(จำนวนแอนะล็อก/1024.00)*100; แรงดันไฟฟ้า=จำนวนแอนะล็อก*3.222; // เป็นมิลลิโวลต์ lcd.setCursor(0, 0); lcd.print("% ของ AREF: "); lcd.print(เปอร์เซ็นต์ 2); lcd.setCursor(0, 1); lcd.print("A0 (mV): "); lcd.println (แรงดัน 2); ล่าช้า (250); }
ผลลัพธ์ของภาพร่างด้านบนแสดงในวิดีโอ
ขั้นตอนที่ 5: ภายใน AREF
ไมโครคอนโทรลเลอร์บนบอร์ด Arduino ของเราสามารถสร้างแรงดันอ้างอิงภายในที่ 1.1V และเราสามารถใช้สิ่งนี้กับงาน AREF ได้ เพียงใช้บรรทัด:
analogReference (ภายใน);
สำหรับบอร์ด Arduino Mega ให้ใช้:
analogReference(INTERNAL1V1);
ในการตั้งค่าเป็นโมฆะ () และคุณกำลังปิด หากคุณมี Arduino Mega จะมีแรงดันอ้างอิง 2.56V ซึ่งเปิดใช้งานด้วย:
analogReference(INTERNAL2V56);
สุดท้าย – ก่อนที่จะตัดสินผลลัพธ์จากพิน AREF ของคุณ ให้ปรับเทียบค่าที่อ่านได้จากมัลติมิเตอร์ที่รู้จักเสมอ
บทสรุป
ฟังก์ชัน AREF ช่วยให้คุณมีความยืดหยุ่นมากขึ้นในการวัดสัญญาณอนาล็อก
โพสต์นี้มาถึงคุณโดย pmdway.com - ทุกอย่างสำหรับผู้ผลิตและผู้ที่ชื่นชอบอุปกรณ์อิเล็กทรอนิกส์ พร้อมบริการจัดส่งฟรีทั่วโลก
แนะนำ:
การลอยแบบอะคูสติกด้วย Arduino Uno ทีละขั้นตอน (8 ขั้นตอน): 8 ขั้นตอน
การลอยแบบอะคูสติกด้วย Arduino Uno ทีละขั้นตอน (8 ขั้นตอน): ตัวแปลงสัญญาณเสียงล้ำเสียง L298N Dc ตัวเมียอะแดปเตอร์จ่ายไฟพร้อมขา DC ตัวผู้ Arduino UNOBreadboardวิธีการทำงาน: ก่อนอื่น คุณอัปโหลดรหัสไปยัง Arduino Uno (เป็นไมโครคอนโทรลเลอร์ที่ติดตั้งดิจิตอล และพอร์ตแอนะล็อกเพื่อแปลงรหัส (C++)
VISUINO ลูกเต๋ากลิ้งโดยใช้โมดูล OLED ขนาด 0.96 นิ้ว 4 พิน: 7 ขั้นตอน
VISUINO Rolling Dice ใช้โมดูล OLED ขนาด 0.96 นิ้ว 4 ขา: ในบทช่วยสอนนี้ เราจะใช้ OLED Lcd และ Visuino เพื่อสร้าง Rolling Dice เมื่อเรากดปุ่มบนเขียงหั่นขนมของเรา ดูวิดีโอสาธิต
DIP Tune Selector โดยใช้ 1 พิน: 4 ขั้นตอน
DIP Tune Selector ใช้ 1 พิน: เมื่อก่อนฉันทำงานกับ "กล่องดนตรี" โปรเจ็กต์ที่ต้องเลือกระหว่างตัวอย่างเพลงต่างๆ มากถึง 10 รายการ ตัวเลือกที่เป็นธรรมชาติสำหรับการเลือกจูนเฉพาะคือสวิตช์จุ่ม 4 พินเนื่องจากสวิตช์ 4 ตัวมีการตั้งค่าที่แตกต่างกัน 24=16 ชม
Midi Record/Play/Overdub ด้วยการเชื่อมต่อแบบ 5 พิน: 3 ขั้นตอน
Midi Record/Play/Overdub ด้วยการเชื่อมต่อ 5-Pin: * ใช้ชิป ATMega-1284 ที่ทำงานที่ 8 MHz พร้อม RAM 4 k Bytes และ eeprom 4 kBytes* ใช้ขั้วต่อ DIN 5-pin แบบเก่า * ช่วยให้สามารถบันทึกและเล่นภาพ, เช่นเดียวกับ overdub: บันทึกพร้อมกับสิ่งที่คุณบันทึกไว้ก่อนหน้านี้ * เมนูเต็ม * คาปา
บอร์ดพัฒนา PIC 18 พิน: 3 ขั้นตอน
บอร์ดพัฒนา PIC 18 พิน: ฉันเคยเล่นกับ Microchip PIC มานานแล้ว แต่มักจะทำโดยไม่มีบอร์ดพัฒนาบางรูปแบบอยู่เสมอ ด้วยเหตุนี้ ฉันได้ออกแบบบอร์ดพื้นฐานที่ฉันหวังว่าจะได้รับข้อมูลบางอย่าง ยังไม่ได้ทำบอร์ดนี้เลยเพราะรอกิ