打印

用STC单片机的PCA做的双积分AD测量电路,发上来的数据不稳

[复制链接]
1267|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
any_014|  楼主 | 2015-3-13 11:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 any_014 于 2015-3-13 11:50 编辑

其实是抄别人的电路。
原理大致是这样子的:
1.首先对被测信号(0-100mV)进行定时积分,20ms。
2.单片机控制切换模拟开关,运放变为对基准电压信号(200mV)积分,看积分电路的输出什么时候能够达到2.5V。
3.一旦达到2.5V,单片机控制模拟开关,再次切换到被测信号,周而复始。




主程序是这么写的。
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;            
                }
        }
}


以下是测量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               十进制数
感觉跳动太大了。




2PT_0_3.zip

60.67 KB

程序

相关帖子

沙发
hnkf118| | 2015-3-13 13:32 | 只看该作者
软件延时不准确。

使用特权

评论回复
板凳
any_014|  楼主 | 2015-3-13 15:02 | 只看该作者
本帖最后由 any_014 于 2015-3-13 15:13 编辑
hnkf118 发表于 2015-3-13 13:32
软件延时不准确。

谢谢。没想过可能是这个问题。

使用特权

评论回复
地板
any_014|  楼主 | 2015-3-13 16:52 | 只看该作者
hnkf118 发表于 2015-3-13 13:32
软件延时不准确。

我又想了想.
对被测信号积分20ms,这个不是要求准确的20ms,只要每次延时都是一致的时间即可,这样的话,软件延时也是可以的吧?并且,我再这个20ms延时的时候是关闭总中断的.

使用特权

评论回复
5
any_014|  楼主 | 2015-3-13 17:25 | 只看该作者
因为被测信号是0-100mV的小信号,是不是系统噪声的原因?
但,我抄的对象,输出是PWM转4-20mA,精度貌似还可以。

使用特权

评论回复
6
any_014|  楼主 | 2015-3-14 11:30 | 只看该作者
试着将PCA的计时器的时钟源有Fosc/12改为Fosc/2,结果测试数据还是蹦。
也怀疑过运放和积分电容,将抄袭目标板的运放和电容置换过来,现象依旧。

使用特权

评论回复
7
any_014|  楼主 | 2015-3-20 11:44 | 只看该作者
本帖最后由 any_014 于 2015-3-20 11:46 编辑

找到了,是串口发送数据影响了误差,当PCAFlag标志有效后,不应在此事将计数值发出去,而应立刻切换到基准信号通道。否则会由于串口发送占了一定时间,使被测信号的积分时间变长,对基准信号的积分时间段的开始位置就相应延后,最后对捕获值造成了影响。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

132

帖子

3

粉丝