สารบัญ:

ATTiny85 Capacitor Meter: 4 ขั้นตอน
ATTiny85 Capacitor Meter: 4 ขั้นตอน

วีดีโอ: ATTiny85 Capacitor Meter: 4 ขั้นตอน

วีดีโอ: ATTiny85 Capacitor Meter: 4 ขั้นตอน
วีดีโอ: ATtiny85 simplest radio controller - 4 digital channels 2024, พฤศจิกายน
Anonim
ATTiny85 Capacitor Meter
ATTiny85 Capacitor Meter
ATTiny85 Capacitor Meter
ATTiny85 Capacitor Meter

คำแนะนำนี้ใช้สำหรับมิเตอร์ตัวเก็บประจุตาม ATTiny85 พร้อมคุณสมบัติดังต่อไปนี้

  • อิงจาก ATTiny85 (DigiStamp)
  • SSD1306 0.96" OLED Display
  • การวัดความถี่สำหรับตัวเก็บประจุค่าต่ำ 1pF - 1uF โดยใช้ 555 oscillator
  • การวัดเวลาในการชาร์จสำหรับตัวเก็บประจุมูลค่าสูง 1uF - 50000uF
  • 2 พอร์ตแยกกันที่ใช้สำหรับวิธีการลดความจุของ stary
  • ค่ากระแสสองค่าที่ใช้สำหรับเวลาในการชาร์จเพื่อลดเวลาสำหรับตัวเก็บประจุขนาดใหญ่
  • 555 วิธี self-zero เมื่อเริ่มต้นสามารถ rezeroed กับปุ่มกด
  • การทดสอบอย่างรวดเร็วเพื่อเลือกวิธีที่จะใช้สำหรับการวัดในแต่ละรอบ
  • สามารถปรับปรุงความถูกต้องของวิธีเวลาในการชาร์จได้โดยรองรับการปรับความถี่สัญญาณนาฬิกา OSCVAL

ขั้นตอนที่ 1: แผนผังและทฤษฎี

แผนผังและทฤษฎี
แผนผังและทฤษฎี

แผนผังแสดง ATTiny ที่ขับเคลื่อนจอแสดงผล SSD1306 OLED ผ่านอินเทอร์เฟซ I2C ใช้พลังงานโดยตรงจากแบตเตอรี่ LiOn 300mAh และมีจุดชาร์จซึ่งสามารถใช้กับที่ชาร์จภายนอกที่เข้ากันได้กับ LiOn

วิธีการวัดครั้งแรกขึ้นอยู่กับการวัดความถี่ของออสซิลเลเตอร์ที่ทำงานฟรี 555 มีความถี่พื้นฐานที่กำหนดโดยตัวต้านทานและตัวเก็บประจุซึ่งควรมีความแม่นยำสูงเนื่องจากเป็นตัวกำหนดความแม่นยำของการวัด ฉันใช้ตัวเก็บประจุโพลีสไตรีน 820pF 1% ที่ฉันมี แต่ค่าอื่นๆ ประมาณ 1nF สามารถใช้ได้ ต้องป้อนค่าลงในซอฟต์แวร์พร้อมกับค่าประมาณของความจุที่หลงทาง (~20pF) สิ่งนี้ให้ความถี่พื้นฐานประมาณ 16KHz เอาต์พุตของ 555 ถูกป้อนเข้าสู่ PB2 ของ ATTiny ซึ่งตั้งโปรแกรมเป็นตัวนับฮาร์ดแวร์ โดยการวัดการนับในช่วงเวลาประมาณ 1 วินาที ความถี่สามารถกำหนดได้ จะทำเมื่อเริ่มต้นเพื่อกำหนดความถี่พื้นฐาน เมื่อตัวเก็บประจุที่ทดสอบถูกเพิ่มแบบขนานกับตัวเก็บประจุฐาน ความถี่จะลดลง และเมื่อวัดค่านี้และเปรียบเทียบกับความถี่ฐาน จะสามารถคำนวณค่าของความจุที่เพิ่มได้

คุณลักษณะที่ดีของวิธีนี้คือค่าที่คำนวณได้ขึ้นอยู่กับความแม่นยำของตัวเก็บประจุพื้นฐานเท่านั้น ระยะเวลาของการวัดไม่สำคัญ ความละเอียดขึ้นอยู่กับความละเอียดของการวัดความถี่ซึ่งค่อนข้างสูง จึงสามารถวัดความจุเพิ่มเติมได้แม้เพียงเล็กน้อย ปัจจัย จำกัด ดูเหมือนจะเป็น 'สัญญาณรบกวนความถี่' ของ 555 oscillator ซึ่งสำหรับฉันนั้นเทียบเท่ากับ 0.3pF

วิธีนี้สามารถใช้ได้ในช่วงที่เหมาะสม เพื่อปรับปรุงช่วง ฉันซิงโครไนซ์ระยะเวลาการวัดเพื่อตรวจจับขอบของพัลส์ที่เข้ามา ซึ่งหมายความว่าแม้แต่การสั่นของความถี่ต่ำเช่น 12Hz (ด้วยตัวเก็บประจุ 1uF) ก็ถูกวัดได้อย่างแม่นยำ

สำหรับตัวเก็บประจุขนาดใหญ่ วงจรจะถูกจัดเรียงให้ใช้วิธีจับเวลาการชาร์จ ในสิ่งนี้ตัวเก็บประจุที่ทดสอบจะถูกปล่อยเพื่อให้แน่ใจว่ามันเริ่มต้นที่ 0 จากนั้นชาร์จผ่านความต้านทานที่ทราบจากแรงดันไฟฟ้าที่จ่าย ADC ใน ATTiny85 ใช้เพื่อตรวจสอบแรงดันไฟฟ้าของตัวเก็บประจุและวัดเวลาในการชาร์จจาก 0% ถึง 50% ซึ่งอาจใช้ในการคำนวณความจุ เนื่องจากข้อมูลอ้างอิงสำหรับ ADC ก็คือแรงดันไฟฟ้าของแหล่งจ่ายด้วย จึงไม่ส่งผลต่อการวัด อย่างไรก็ตาม การวัดเวลาที่แน่นอนจะขึ้นอยู่กับความถี่สัญญาณนาฬิกา ATTiny85 และการแปรผันของเวลานี้จะส่งผลต่อผลลัพธ์ อาจใช้ขั้นตอนเพื่อปรับปรุงความแม่นยำของนาฬิกานี้โดยใช้การลงทะเบียนการปรับใน ATTiny85 และจะอธิบายในภายหลัง

ในการคายประจุตัวเก็บประจุไปที่ 0V จะใช้ n-channel MOSFET ร่วมกับตัวต้านทานค่าต่ำเพื่อจำกัดกระแสการคายประจุ ซึ่งหมายความว่าแม้แต่ตัวเก็บประจุขนาดใหญ่ก็สามารถระบายออกได้อย่างรวดเร็ว

ในการชาร์จตัวเก็บประจุจะใช้ค่าตัวต้านทานการชาร์จ 2 ค่า ค่าฐานจะให้เวลาในการชาร์จที่เหมาะสมสำหรับตัวเก็บประจุตั้งแต่ 1uF ถึงประมาณ 50uF p-channel MOSFET ถูกใช้ขนานกันในตัวต้านทานที่ต่ำกว่าเพื่อให้สามารถวัดค่าตัวเก็บประจุที่สูงกว่าได้ในช่วงเวลาที่เหมาะสม ค่าที่เลือกจะให้เวลาในการวัดประมาณ 1 วินาทีสำหรับตัวเก็บประจุสูงสุด 2200uF และนานกว่าตามสัดส่วนสำหรับค่าที่มากขึ้น ที่ค่าต่ำสุด ระยะเวลาการวัดต้องเก็บไว้นานพอสมควรเพื่อให้สามารถกำหนดการเปลี่ยนแปลงผ่านเกณฑ์ 50% ได้อย่างแม่นยำเพียงพอ อัตราการสุ่มตัวอย่างของ ADC อยู่ที่ประมาณ 25uSec ดังนั้นระยะเวลาขั้นต่ำที่ 22mSec จะให้ความแม่นยำที่สมเหตุสมผล

เนื่องจาก ATTiny มี IO ที่จำกัด (6 พิน) ดังนั้นการจัดสรรทรัพยากรนี้จึงต้องดำเนินการอย่างระมัดระวัง ต้องใช้ 2 พินสำหรับการแสดงผล 1 สำหรับอินพุตตัวจับเวลา 1 สำหรับ ADC 1 สำหรับการควบคุมการคายประจุและ 1 สำหรับการควบคุมอัตราการชาร์จ ฉันต้องการการควบคุมด้วยปุ่มกดเพื่อให้สามารถตั้งค่าศูนย์ใหม่ได้ทุกเมื่อ ทำได้โดยการไฮแจ็คสาย I2C SCL เนื่องจากสัญญาณ I2C เป็นแบบเปิดโล่ง จึงไม่มีความขัดแย้งทางไฟฟ้าโดยปล่อยให้ปุ่มดึงบรรทัดนี้ให้ต่ำ จอแสดงผลจะหยุดทำงานเมื่อกดปุ่ม แต่จะไม่มีผลใดๆ เนื่องจากจะกลับมาทำงานต่อเมื่อปล่อยปุ่ม

ขั้นตอนที่ 2: การก่อสร้าง

การก่อสร้าง
การก่อสร้าง
การก่อสร้าง
การก่อสร้าง
การก่อสร้าง
การก่อสร้าง

ฉันทำสิ่งนี้เป็นกล่องพิมพ์ 3 มิติขนาดเล็ก 55 มม. x 55 มม. ออกแบบมาเพื่อเก็บส่วนประกอบหลัก 4 ชิ้น; บอร์ด ATTiny85 DigiStamp, จอแสดงผล SSD1306, แบตเตอรี่ LiOn และบอร์ดต้นแบบขนาดเล็กที่มีตัวจับเวลา 55 ตัวและอุปกรณ์ควบคุมการชาร์จ

สิ่งที่แนบมาที่

อะไหล่ที่จำเป็น

  • บอร์ด ATTiny85 DigiStamp ฉันใช้เวอร์ชันที่มีขั้วต่อ microUSB ซึ่งใช้สำหรับอัปโหลดเฟิร์มแวร์
  • SSD1306 I2C OLED Display
  • แบตเตอรี่ LiOn 300mAH
  • แผ่นต้นแบบแผ่นเล็ก
  • ชิปจับเวลา CMOS 555 (TLC555)
  • n-ช่อง MOSFET AO3400
  • p-ช่อง MOSFET AO3401
  • ตัวต้านทาน 4R7, 470R, 22K, 2x33K
  • ตัวเก็บประจุ 4u7, 220u
  • ตัวเก็บประจุแบบแม่นยำ 820pF 1%
  • สวิตช์สไลด์ขนาดเล็ก
  • ส่วนหัว 2 x 3 ขาสำหรับพอร์ตชาร์จและพอร์ตการวัด
  • ปุ่มกด
  • สิ่งที่ส่งมาด้วย
  • ต่อสายไฟ

เครื่องมือที่จำเป็น

  • หัวแร้งหัวแร้ง
  • แหนบ

ขั้นแรกให้สร้างวงจรจับเวลา 555 และส่วนประกอบการชาร์จบนบอร์ดต้นแบบ เพิ่มสายจูงบินสำหรับการเชื่อมต่อภายนอก ติดสวิตซ์เลื่อนและจุดชาร์จและพอร์ตวัดเข้ากับตัวเครื่อง ติดแบตเตอรี่และเดินสายไฟหลักไปยังจุดชาร์จ สวิตช์เลื่อน ต่อกราวด์เพื่อกดปุ่ม ติด ATTiny85 เข้าที่และต่อสายให้เรียบร้อย

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

www.instructables.com/Reducing-Sleep-Curre…

สิ่งนี้ไม่สำคัญเพราะมีสวิตช์เปิดปิดเพื่อปิดมิเตอร์เมื่อไม่ใช้งาน

ขั้นตอนที่ 3: ซอฟต์แวร์

ซอฟต์แวร์สำหรับ Capacitor Meter นี้สามารถพบได้ที่

github.com/roberttidey/CapacitorMeter

นี่คือภาพร่างจาก Arduino มันต้องการไลบรารีสำหรับการแสดงผลและ I2C ซึ่งสามารถพบได้ที่

github.com/roberttidey/ssd1306BB

github.com/roberttidey/I2CTinyBB

สิ่งเหล่านี้ได้รับการปรับให้เหมาะสมสำหรับ ATTiny เพื่อใช้หน่วยความจำน้อยที่สุด ไลบรารี I2C เป็นวิธีการบิตแบงความเร็วสูงซึ่งอนุญาตให้ใช้ 2 พินใดก็ได้ นี่เป็นสิ่งสำคัญเนื่องจากวิธี I2C ที่ใช้พอร์ตอนุกรมใช้ PB2 ซึ่งขัดแย้งกับการใช้ตัวจับเวลา/อินพุตตัวนับที่จำเป็นในการวัดความถี่ 555

ซอฟต์แวร์มีโครงสร้างรอบเครื่องของรัฐซึ่งใช้การวัดผ่านวัฏจักรของสถานะ ISR รองรับโอเวอร์โฟลว์จากตัวนับเวลาเพื่อขยายฮาร์ดแวร์ 8 บิต ISR ที่สองรองรับ ADC ที่ทำงานในโหมดต่อเนื่อง สิ่งนี้ให้การตอบสนองที่รวดเร็วที่สุดต่อวงจรการชาร์จที่ข้ามธรณีประตู

ในช่วงเริ่มต้นของแต่ละรอบการวัด ฟังก์ชัน getMeasureMode จะกำหนดวิธีที่เหมาะสมที่สุดสำหรับการวัดแต่ละครั้ง

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

เมื่อซอฟต์แวร์เริ่มทำงาน การวัด 7 ครั้งแรกจะเป็น 'รอบการปรับเทียบ' ที่ใช้ในการกำหนดความถี่พื้นฐานของ 555 โดยไม่มีตัวเก็บประจุเพิ่ม 4 รอบสุดท้ายเป็นค่าเฉลี่ย

มีการรองรับการปรับการลงทะเบียน OSCAL สำหรับการปรับนาฬิกา ฉันแนะนำให้ตั้งค่า OSCCAL_VAL เป็น 0 ในขั้นต้นที่ด้านบนของแบบร่าง ซึ่งหมายความว่าจะใช้การปรับเทียบจากโรงงานจนกว่าจะทำการจูน

จำเป็นต้องปรับค่าของตัวเก็บประจุฐาน 555 ฉันยังเพิ่มจำนวนเงินโดยประมาณสำหรับความจุที่หลงทาง

หากมีการใช้ตัวต้านทานที่แตกต่างกันสำหรับวิธีการชาร์จ ค่า CHARGE_RCLOW และ CHARGE_RCHIGH ในซอฟต์แวร์จะต้องเปลี่ยนด้วย

ในการติดตั้งซอฟต์แวร์ ใช้วิธี digistamp ปกติในการอัปโหลดซอฟต์แวร์และเชื่อมต่อพอร์ต usb เมื่อได้รับแจ้ง ปล่อยให้สวิตช์เปิดปิดอยู่ในตำแหน่งปิด เนื่องจาก USB จะจ่ายไฟให้กับการทำงานนี้

ขั้นตอนที่ 4: การทำงานและการปรับเทียบขั้นสูง

การดำเนินการนั้นตรงไปตรงมามาก

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

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

การสอบเทียบขั้นสูง

วิธีการชาร์จอาศัยความถี่สัญญาณนาฬิกาสัมบูรณ์ของ ATTiny85 ในการวัดเวลา นาฬิกาใช้ออสซิลเลเตอร์ RC ภายในที่จัดเรียงเพื่อให้นาฬิกา 8MHz เล็กน้อย แม้ว่าความเสถียรของออสซิลเลเตอร์จะค่อนข้างดีสำหรับการแปรผันของแรงดันไฟและอุณหภูมิ แต่ความถี่ของออสซิลเลเตอร์ก็อาจลดลงได้ค่อนข้างสองสามเปอร์เซ็นต์แม้ว่าจะปรับเทียบจากโรงงานแล้วก็ตาม การสอบเทียบนี้จะตั้งค่าการลงทะเบียน OSCCAL เมื่อเริ่มต้น การปรับเทียบจากโรงงานอาจได้รับการปรับปรุงโดยการตรวจสอบความถี่และตั้งค่า OSCCAL ให้เหมาะสมที่สุดเพื่อให้เหมาะกับบอร์ด ATTiny85 โดยเฉพาะ

ฉันยังไม่สามารถปรับวิธีการอัตโนมัติให้เข้ากับเฟิร์มแวร์ได้ ดังนั้นฉันจึงใช้ขั้นตอนแบบแมนนวลต่อไปนี้ สามารถเลือกรูปแบบได้สองแบบขึ้นอยู่กับการวัดภายนอกที่มีอยู่ ไม่ว่าจะเป็นเครื่องวัดความถี่ที่สามารถวัดความถี่ของรูปคลื่นสามเหลี่ยมบนพอร์ต 555 หรือแหล่งกำเนิดคลื่นสี่เหลี่ยมของความถี่ที่ทราบเช่น 10KHz ที่มีระดับ 0V/3.3V ซึ่งสามารถเชื่อมต่อกับพอร์ต 555 และแทนที่รูปคลื่นเพื่อบังคับความถี่นั้นเข้าสู่ตัวนับ ฉันใช้วิธีที่สอง

  1. เริ่มต้นมิเตอร์ด้วยกำลังไฟปกติโดยไม่ต้องต่อตัวเก็บประจุ
  2. เชื่อมต่อเครื่องวัดความถี่หรือเครื่องกำเนิดคลื่นสี่เหลี่ยมกับพอร์ต 555
  3. เริ่มรอบการปรับเทียบใหม่โดยกดปุ่ม
  4. เมื่อสิ้นสุดรอบการปรับเทียบ หน้าจอจะแสดงความถี่ตามที่กำหนดโดยตัวนับและค่า OSCCAL ปัจจุบัน โปรดทราบว่าการใช้รอบการสอบเทียบซ้ำๆ จะสลับไปมาระหว่างการแสดงความถี่ที่วัดได้กับปกติไม่แสดงผล
  5. หากความถี่ที่แสดงน้อยกว่าที่ทราบ แสดงว่าความถี่สัญญาณนาฬิกาสูงเกินไปและในทางกลับกัน ฉันพบว่าการเพิ่มขึ้น OSCCAL ปรับนาฬิกาได้ประมาณ 0.05%
  6. คำนวณค่า OSCCAL ใหม่เพื่อปรับปรุงนาฬิกา
  7. ป้อนค่า OSCCAL ใหม่ลงใน OSCCAL_VAL ที่ด้านบนของเฟิร์มแวร์
  8. สร้างใหม่และอัปโหลดเฟิร์มแวร์ใหม่ ทำซ้ำขั้นตอนที่ 1 -5 ซึ่งควรแสดงค่า OSCCAL ใหม่และการวัดความถี่ใหม่
  9. หากจำเป็นให้ทำซ้ำอีกครั้งจนกว่าจะได้ผลลัพธ์ที่ดีที่สุด

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

แนะนำ: