论坛元老
 
- 积分
- 3772
- 金钱
- 3772
- 注册时间
- 2015-4-26
- 在线时间
- 765 小时
|
没有滤波,啥都没有,只是输出有效值,误差在3V,波动范围7V左右。
[mw_shl_code=applescript,true] StartSampling(usAdcDate);
#if 0
printf("Original datas :\n");
for (i = 0; i < (MAX_COVERT_CNT); i++)
{
printf("[%d] %d, ", i, usAdcDate);
}
#endif
printf("\nEffective datas :\n");
for (i = 0, tmp = 0; i < (MAX_COVERT_CNT); i++)
{
if (usAdcDate == 0)
{
/*if (i < (MAX_COVERT_CNT - 1))
{
if (usAdcDate[i + 1] == 0)
{
break;
}
}
else
{
break;
}*/
break;
}
else
{
tmp += (u32)usAdcDate * (u32)usAdcDate;
}
printf("[%d] %d, ", i, usAdcDate);
}
f_tmp = (float)tmp / i;
f_tmp = sqrt((double)f_tmp);
f_tmp = f_tmp * 330 / 4096; // 放大100倍
tmp = (u32)f_tmp;
printf("\nResult : %d.%02d\n", tmp / 100, tmp % 100);
/* 原理图中交流信号经过二极管才进入cpu,半波整流:Uo-rms = Ui-rms * 0.71 */
f_tmp = f_tmp / 0.71; // 计算二极管之前的电压
tmp = (u32)f_tmp;
printf("Before Diode Voltage = %d.%02d\n", tmp / 100, tmp % 100);
f_tmp /= 11; // 运放放大倍数 = 11
tmp = (u32)f_tmp;
printf("Load Res Voltage = %d.%02d\n", tmp / 100, tmp % 100);
f_tmp *= 1500.0;
tmp = (u32)f_tmp;
if (last_tmp == 0 || ((last_tmp > tmp) ? (last_tmp - tmp) : (tmp - last_tmp)) < DIFFERENCE_LIMIT_VAL)
{
last_tmp = tmp;
printf("Source Voltage = %d.%02d\n", tmp / 100, tmp % 100);
}
else
printf("ERROR\n");[/mw_shl_code]
|
|