ใครพอ มีลิ้งแนะนำ บ้างคับ พอดี ผม ลองไป ต่อ ใช้ งาน บอร์ด ATmega1280 อะคับ ผม เอา ขา Vccของ ACS-712 ต่อ 5v ขา Gnd ของ ACS712ต่อ
Gnd ของบอร์ด แล้วเอา ขา Vout ของ ACS-712 ต่อ กับ พอร์ด Analog 1 แล้วแสดง ค่า analogRead ของ พอร์ต A1 แล้วค่ามัน ได้ 512 - 511 ประมาณนั้นอะคับ เวลา ลองใช้เตารีด เสียบวัดกระแสดู ค่าก้อเท่าเดิม ขึ้นๆ ลงๆ
รูปอุปกรณ์ ผมอัฟให้ดูแล้วน่ะคับ
ลองขยายก่อนเข้า adc ครับ
(http://circuits.datasheetdir.com/98/ACS712-circuits.jpg)
Quote from: amaloma on February 14, 2013, 09:05:44 PM
ลองขยายก่อนเข้า adc ครับ
(http://circuits.datasheetdir.com/98/ACS712-circuits.jpg)
จะลอง ดูน่ะคับ ถ้า ต่อ ตามนี้ แล้ว ค่า ที่ออกมาจาก Vout จะเป็นค่าอะไรหรอคับ
ตอนไม่มีกระแสไหล Vo = 2.5V อยู่แล้วครับ พอมีกระแสไหลสัญญาณมันจะเป็น Sine ครับ 50 hz
จะอ่านต้อง Sampling ที่ 1 ms จำนวน 20 ครั้ง (20 ms = 50hz)อย่างเดียวครับ แล้วเข้าสมการ IRms ถึงจะได้
Quote from: Neo on February 14, 2013, 11:19:56 PM
ตอนไม่มีกระแสไหล Vo = 2.5V อยู่แล้วครับ พอมีกระแสไหลสัญญาณมันจะเป็น Sine ครับ 50 hz
จะอ่านต้อง Sampling ที่ 1 ms จำนวน 20 ครั้ง (20 ms = 50hz)อย่างเดียวครับ แล้วเข้าสมการ IRms ถึงจะได้
ผมลอง อ่านค่า 20 ครั้ง แล้วใส่ Delay(1) ได้จิงๆ ด้วยอะคับ เวลาเสียบ หัวแร้ง ค่า เปลี่ยนจาก ปกติมัน จะ 512 แต่ตอนเสียบมัน จะเปลี่ยนตัวเลข เป็น 510-508 ประมาณนี้อะคับ แล้วสมดาร IRms เป็นไงหรอคับ
RMS สร้างอาร์เรย์ ๑ มิติ บวกยกกำลังสองสะสม หารด้วย จำนวนทั้งหมด แล้วถอดรากที่สอง
Dim Isamp As word
Dim Isamp2 As Long
Dim SumI2 as Single
Dim Icount as Byte
DeclareFunction Irms() As Single
Function Irms () As Single
Isum2 = 0
For Icount = 1 to 20
Isamp = GetADC(1)
Isamp = 512 - Isamp 'ลบออกจาก 2.5 V
Isamp2 = Isamp ^ 2 'ยกกำลังสอง
Isum2 = Isum2 + Isamp2 'บวกสะสม
Waitms 1
Next
Isum2 = Isum2/20 ' หารด้วยจำนวนทั้งหมด
Irms = SQR(Isum2) ' ถอดรากที่สอง
Irms = Irms * 20 'แบ่งสเกล 512 ระดับ = 20 A
Irms = Irms / 512 'หารด้วยจำนวนสเกล
End Function
Quote from: JMew on February 16, 2013, 03:12:35 AM
RMS สร้างอาร์เรย์ ๑ มิติ บวกยกกำลังสองสะสม หารด้วย จำนวนทั้งหมด แล้วถอดรากที่สอง
Dim Isamp As word
Dim Isamp2 As Long
Dim SumI2 as Single
Dim Icount as Byte
DeclareFunction Irms() As Single
Function Irms () As Single
Isum2 = 0
For Icount = 1 to 20
Isamp = GetADC(1)
Isamp = 512 - Isamp 'ลบออกจาก 2.5 V
Isamp2 = Isamp ^ 2 'ยกกำลังสอง
Isum2 = Isum2 + Isamp2 'บวกสะสม
Waitms 1
Next
Isum2 = Isum2/20 ' หารด้วยจำนวนทั้งหมด
Irms = SQR(Isum2) ' ถอดรากที่สอง
Irms = Irms * 20 'แบ่งสเกล 512 ระดับ = 20 A
Irms = Irms / 512 'หารด้วยจำนวนสเกล
End Function
ขอบคุณมากๆคับสำหรับข้อมูลเป็นประโบชน์มากคับ