其实是抄别人的电路。
原理大致是这样子的:
1.首先对被测信号(0-100mV)进行定时积分,20ms。
2.单片机控制切换模拟开关,运放变为对基准电压信号(200mV)积分,看积分电路的输出什么时候能够达到2.5V。
3.一旦达到2.5V,单片机控制模拟开关,再次切换到被测信号,周而复始。
主程序是这么写的。
[mw_shl_code=c,true]void main(void)
{
init();
Delay20ms();
while(1)
{
if (PCAFlag == 1)
{
SendData(CCAP0H); //发送捕获时间低位
SendData(CCAP0L); //发送捕获时间高位
P1 &= 0xf0; //切换到基准电压通道
P1 |= 0x02;
EA = 0; //关闭中断
Delay20ms(); //对200mV基准电压积分20ms
EA = 1; //开中断
CH = 0; //PCA计数器清零
CL = 0;
P1 &= 0xf0; //切换到被测通道
P1 |= 0x07;
PCAFlag = 0; //捕获标志位清零
RUNLED = !RUNLED;
}
}
}
[/mw_shl_code]
以下是测量50mV电压,串口接收过来的数据:
37 7B 37 86 37 90 37 97 37 A1 37 A9 37 B3 37 BC 37 62 37 74 十六进制数
14203 14214 14224 14231 14241 14249 14259 14268 14178 14196 十进制数
感觉跳动太大了。
|