สารบัญ:

Arduino และ TI ADS1110 16-bit ADC: 6 ขั้นตอน
Arduino และ TI ADS1110 16-bit ADC: 6 ขั้นตอน

วีดีโอ: Arduino และ TI ADS1110 16-bit ADC: 6 ขั้นตอน

วีดีโอ: Arduino และ TI ADS1110 16-bit ADC: 6 ขั้นตอน
วีดีโอ: Getting Started with ADC Functionality of ESP32 using MicroPython 2024, กรกฎาคม
Anonim
Arduino และ TI ADS1110 16-bit ADC
Arduino และ TI ADS1110 16-bit ADC

ในบทช่วยสอนนี้ เราจะตรวจสอบการใช้ Arduino เพื่อทำงานกับ Texas Instruments ADS1110 ซึ่งเป็น IC ตัวแปลงอนาล็อกเป็นดิจิตอลขนาด 16 บิตที่เล็กแต่มีประโยชน์อย่างเหลือเชื่อ

สามารถทำงานได้ระหว่าง 2.7 ถึง 5.5 V ดังนั้นจึงเหมาะสำหรับ Arduino Due และบอร์ดพัฒนาแรงดันต่ำอื่นๆ ก่อนดำเนินการต่อ โปรดดาวน์โหลดเอกสารข้อมูล (pdf) เนื่องจากจะเป็นประโยชน์และอ้างอิงถึงในบทช่วยสอนนี้ ADS1110 ให้ทางเลือกแก่คุณสำหรับ ADC ที่แม่นยำกว่าที่ ADC แบบ 10 บิตของ Arduino นำเสนอ และค่อนข้างใช้งานง่าย อย่างไรก็ตาม มีเฉพาะส่วนเปล่าใน SOT23-6 เท่านั้น

ขั้นตอนที่ 1:

ภาพ
ภาพ

ข่าวดีก็คือคุณสามารถสั่งซื้อ ADS1110 ที่ติดตั้งบนกระดานฝ่าวงล้อมที่สะดวกมาก ADS1110 ใช้บัส I2C เพื่อการสื่อสาร และเนื่องจากมีเพียงหกพินที่คุณไม่สามารถตั้งค่าที่อยู่บัสได้ แต่คุณสามารถเลือกจาก ADS1110 ได้ 6 รุ่น ซึ่งแต่ละอันมีที่อยู่ของตัวเอง (ดูหน้า 2 ของแผ่นข้อมูล)

ดังที่คุณเห็นในภาพด้านบน ป้ายของเรามีเครื่องหมาย "EDO" ซึ่งตรงกับที่อยู่รถบัส 1001000 หรือ 0x48h และด้วยวงจรตัวอย่าง เราใช้ตัวต้านทานแบบดึงขึ้น 10kΩ บนบัส I2C

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

ขั้นตอนที่ 2: การลงทะเบียนการกำหนดค่า

พลิกไปที่หน้าที่สิบเอ็ดของแผ่นข้อมูล การลงทะเบียนการกำหนดค่ามีขนาดหนึ่งไบต์ และเมื่อ ADS1110 รีเซ็ตในวงจรพลังงาน คุณจะต้องรีเซ็ตการลงทะเบียนหากความต้องการของคุณแตกต่างจากค่าเริ่มต้น แผ่นข้อมูลอธิบายได้ค่อนข้างเรียบร้อย… บิต 0 และ 1 กำหนดการตั้งค่าเกนสำหรับ PGA (แอมพลิฟายเออร์เกนที่ตั้งโปรแกรมได้)

หากคุณเพียงแค่วัดแรงดันไฟฟ้าหรือทดลอง ให้ปล่อยค่าเหล่านี้เป็นศูนย์เพื่อให้ได้ 1V/V ถัดไป อัตราข้อมูลสำหรับ ADS1110 จะถูกควบคุมด้วยบิต 2 และ 3 หากคุณเปิดสุ่มตัวอย่างอย่างต่อเนื่อง ค่านี้จะกำหนดจำนวนตัวอย่างต่อวินาทีที่ ADC ถ่าย

หลังจากทดลองกับ Arduino Uno ไปบ้างแล้ว เราพบว่าค่าที่ส่งกลับจาก ADC ลดลงเล็กน้อยเมื่อใช้อัตราที่เร็วที่สุด ดังนั้นปล่อยให้เป็น 15 SPS เว้นแต่จะกำหนดเป็นอย่างอื่น บิต 4 ตั้งค่าการสุ่มตัวอย่างแบบต่อเนื่อง (0) หรือการสุ่มตัวอย่างแบบครั้งเดียว (1) ละเว้นบิต 5 และ 6 อย่างไรก็ตาม พวกมันจะถูกตั้งค่าเป็น 0 เสมอ

สุดท้ายบิต 7 – หากคุณอยู่ในโหมดสุ่มตัวอย่างครั้งเดียว การตั้งค่าเป็น 1 ขอตัวอย่าง และการอ่านจะบอกคุณว่าข้อมูลที่ส่งคืนเป็นข้อมูลใหม่ (0) หรือเก่า (1) คุณสามารถตรวจสอบว่าค่าที่วัดได้นั้นเป็นค่าใหม่ หากบิตแรกของไบต์การกำหนดค่าที่มาหลังข้อมูลเป็น 0 จะเป็นค่าใหม่ หากส่งคืน 1 แสดงว่าการแปลง ADC ยังไม่เสร็จสิ้น

ขั้นตอนที่ 3: การลงทะเบียนข้อมูล

เนื่องจาก ADS1110 เป็น ADC แบบ 16 บิต จึงส่งกลับข้อมูลมากกว่าสองไบต์ แล้วตามด้วยค่าของการลงทะเบียนการกำหนดค่า ดังนั้นหากคุณขอสามไบต์ ล็อตทั้งหมดจะกลับมา ข้อมูลอยู่ในรูปแบบ "ส่วนเติมเต็มของสอง" ซึ่งเป็นวิธีการใช้ตัวเลขที่มีลายเซ็นพร้อมเลขฐานสอง

การแปลงสองไบต์นั้นทำได้โดยคณิตศาสตร์ง่ายๆ เมื่อสุ่มตัวอย่างที่ 15 SPS ค่าที่ส่งกลับโดย ADS1110 (ไม่ใช่แรงดันไฟฟ้า) จะอยู่ระหว่าง -32768 ถึง 32767 ไบต์ที่สูงกว่าของค่าจะถูกคูณด้วย 256 จากนั้นจึงบวกกับไบต์ที่ต่ำกว่า - ซึ่งคูณด้วย 2.048 และสุดท้าย หารด้วย 32768 อย่าตื่นตระหนก เพราะเราจะทำในตัวอย่างภาพร่างที่กำลังจะมีขึ้น

ขั้นตอนที่ 4: โหมด ADC แบบปลายเดี่ยว

โหมด ADC แบบปลายเดียว
โหมด ADC แบบปลายเดียว

ในโหมดนี้ คุณสามารถอ่านแรงดันไฟฟ้าที่อยู่ระหว่างศูนย์และ 2.048 V (ซึ่งเป็นแรงดันอ้างอิงในตัวสำหรับ ADS1110) วงจรตัวอย่างนั้นง่าย (จากแผ่นข้อมูล)

อย่าลืมตัวต้านทานแบบดึงขึ้น10kΩบนบัส I2C ภาพร่างต่อไปนี้ใช้ ADS1110 ในโหมดเริ่มต้น และเพียงแค่คืนค่าแรงดันที่วัดได้:

// ตัวอย่าง 53.1 - โวลต์มิเตอร์ด้านเดียว ADS1110 (0~2.048VDC) #include "Wire.h" #define ads1110 0x48 float แรงดันไฟฟ้า, ข้อมูล; ไบต์ ไบต์ต่ำ ไบต์ต่ำ configRegister; การตั้งค่าเป็นโมฆะ () { Serial.begin (9600); Wire.begin(); } วงเป็นโมฆะ () { Wire.requestFrom(ads1110, 3); while(Wire.available()) // ตรวจสอบให้แน่ใจว่าข้อมูลทั้งหมดมาใน { highbyte = Wire.read(); // ไบต์สูง * B11111111 ไบต์ต่ำ = Wire.read(); // ไบต์ต่ำ configRegister = Wire.read (); }

ข้อมูล = ไฮไบต์ * 256;

ข้อมูล = ข้อมูล + ไบต์ต่ำ; Serial.print("ข้อมูล >>"); Serial.println (ข้อมูล ธ.ค.); Serial.print("แรงดันไฟฟ้า >>"); แรงดันไฟฟ้า = ข้อมูล * 2.048; แรงดันไฟฟ้า = แรงดันไฟฟ้า / 32768.0; Serial.print (แรงดันไฟฟ้า ธ.ค.); Serial.println("V"); ล่าช้า (1000); }

ขั้นตอนที่ 5:

ภาพ
ภาพ

เมื่ออัปโหลดแล้ว ให้เชื่อมต่อสัญญาณเพื่อวัดและเปิดจอภาพแบบอนุกรม คุณจะเห็นสิ่งที่คล้ายกับภาพมอนิเตอร์แบบอนุกรมที่แสดงในขั้นตอนนี้

หากคุณต้องการเปลี่ยนเกนของแอมพลิฟายเออร์เกนที่ตั้งโปรแกรมได้ภายในของ ADC – คุณจะต้องเขียนไบต์ใหม่ลงในรีจิสเตอร์การกำหนดค่าโดยใช้:

Wire.beginTransmission(ads1110);Wire.write (ไบต์การกำหนดค่า); Wire.endTransmission();

ก่อนขอข้อมูล ADC นี่จะเป็น 0x8D, 0x8E หรือ 0x8F สำหรับค่าเกน 2, 4 และ 8 ตามลำดับ – และใช้ 0x8C เพื่อรีเซ็ต ADS1110 กลับเป็นค่าเริ่มต้น

ขั้นตอนที่ 6: โหมด ADC ที่แตกต่างกัน

โหมด ADC ดิฟเฟอเรนเชียล
โหมด ADC ดิฟเฟอเรนเชียล

ในโหมดนี้ คุณสามารถอ่านความแตกต่างระหว่างแรงดันไฟฟ้าสองค่าที่แต่ละค่าอยู่ระหว่างศูนย์และ 5 V ได้ วงจรตัวอย่างนั้นง่าย (จากแผ่นข้อมูล)

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

เราหวังว่าคุณจะพบว่าสิ่งนี้น่าสนใจและอาจเป็นประโยชน์อีกครั้ง โพสต์นี้มาถึงคุณโดย pmdway.com - ทุกอย่างสำหรับผู้ผลิตและผู้ที่ชื่นชอบอุปกรณ์อิเล็กทรอนิกส์ พร้อมบริการจัดส่งฟรีทั่วโลก

แนะนำ: