调试一个ai8051u+电流传感器_ACS712ELCTR-05B-T程序,使用P1.7脚对ACS712ELCTR-05B-T的输出电压进行AD转换后计算电流。程序采用8bit。
根据ACS712ELCTR-05B-T手册,电流在0-5A时,其输出电压:2.5V+-0.925V,输出灵敏度:185mV/A。
程序主要检测方法是20MS的时间内连续对ACS712ELCTR-05B-T的输出电压进行20次采样,通过冒泡法查找到电压的最大值后,再换算成检测电流值。AD转换程序参考了擎天柱例程中的09.ADC采样NTC数据-软件防抖-过采样使用-串口1返回结果程序。
在换算时,包含以下语句:
const float K=Vref/4096/0.185/1.414; //计算常数
float Current_temp=0.0;
Current_temp = (adc - 2048)*K; //换算出电流值,ADC为ADC采样值
调试程序时,用电位器对5V电源分压后接入P1.7脚进行模拟。由于是模拟,当AD输入电压低于2.5V时,冒泡法查找到电压的最大值就会小于2048 ,(adc - 2048)就会变成负数,此时导致程序复位。
请教一下大家在这条语句中,为什么(adc - 2048)变成负数后会导致MCU复位呢?
下面是电流换算的程序:
- /******************** 计算电流 *********************/
-
- #define Vref 5.0
- #define Sensitvity 0.185
- #define Zero_point 2.5
- float CalculationCurrent(u16 adc)
- {
- //电流传感器_ACS712ELCTR-05B-T
- //量程:5A
- //输出灵敏度:185mV/A(对应5A电流时输出约925mV)
- //精度:±1.5%
- //工作电压:4.5V~5.5V
- //输出电压:2.5V+-0.925
-
- const float K=Vref/4096/0.185/1.414; //计算常数
- float Current_temp=0.0; //电流计算结果
- Current_temp = (adc - 2048)*K; //Zero_point理论值为2048,对应采样电压2.5V
- return Current_temp;
- }
复制代码
下面附上用到的8位擎天柱例程:09.ADC采样NTC数据-软件防抖-过采样使用-串口1返回结果
09.ADC采样NTC数据-软件防抖-过采样使用-串口1返回结果.zip
(117.07 KB, 下载次数: 5)
|