我在中学物理中学到的检测电流的方法是在电路中串接一个电阻,然后检测这个电阻上的电压,然后根据欧姆定律计算出电路中的电流。这种方法简单可靠,但在实际应用中,有一个难题:如果传入的电阻阻值太大,那么将严重影响原有电路的正常工作,如果传入的阻值太小,那么测得的电压就会太低,难以得到精确的结果。还有另外一个问题:在测量电阻两端电压时,测量电路与实际电路没有隔离,有可能产生危险。
根据维基百科的定义,霍尔效应(Hall effect)是指当固体导体放置在一个磁场内,且有电流通过时,导体内的电荷载子受到洛伦兹力而偏向一边,继而产生电压(霍尔电压)的现像。电压所引致的电场力会平衡洛伦兹力。通过霍尔电压的极性,可证实导体内部的电流是由带有负电荷的粒子(自由电子)之运动所造成。霍尔效应于1879年被埃德温·赫伯特·霍尔(Edwin Herbert Hall)发现。
下图能够比较生动的描述这一现象:
Allegro公司设计生产的ACS712 IC是一款基于霍尔效应的电流传感器,性能很好,使用也很简单,下图是其数据手册的一部分:
典型应用电路如下:
基于ACS712传感器,我制作了一个Arduino Shield,集成了OLED显示屏,做成为了一个电压电流表。
电路图如下图所示:
PCB如下图所示:
组装完毕的效果:
下图是ACS712芯片的细节:
我使用的芯片型号是ACS712TELC-20A,最大电流是20安培,1安培电流对应的电压为100毫伏。具体的应用程序如下,供大家参考:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
#include "U8glib.h" U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_NO_ACK|U8G_I2C_OPT_FAST); // Fast I2C / TWI float voltage = 0.0; float amp = 0.0; uint8_t pwr_5v_pin = A0; uint8_t vol_in_pin = A2; uint8_t amp_in_pin = A1; void draw(void) { char str_temp[6]; dtostrf(voltage, 4, 2, str_temp); char buf[16]; memset(buf,0,sizeof(buf)); snprintf(buf,sizeof(buf)-1,"U: %s V",str_temp); u8g.drawStr( 0, 15, buf); memset(buf,0,sizeof(buf)); memset(str_temp,0,sizeof(str_temp)); dtostrf(amp, 4, 2, str_temp); snprintf(buf,sizeof(buf)-1,"I: %s A",str_temp); u8g.drawStr( 0, 30, buf); u8g.drawStr( 0, 45, "diynova.com"); u8g.drawStr( 0, 60, "Believe you can!"); } void get_voltage_and_amp() { uint16_t pwr_5v = analogRead(pwr_5v_pin); uint16_t vol_in = analogRead(vol_in_pin); voltage = ((float)(vol_in * 11)) * (3.3/1024); float pwr_real_vol = ((float)(pwr_5v * 2)) * (3.3/1024); uint16_t amp_in = analogRead(amp_in_pin); float amp_in_vol = ((float)amp_in) * (3.3/1024); amp = (amp_in_vol - (pwr_real_vol / 2)) * 10; // 100mv/A } void setup(void) { u8g.setColorIndex(255); u8g.setFont(u8g_font_unifont); } void loop(void) { get_voltage_and_amp(); u8g.firstPage(); do { draw(); } while( u8g.nextPage() ); delay(300); } |
参考资料:
https://en.wikipedia.org/wiki/Hall_effect