我做的是一个通过信号发生器发出一个10Khz,占空比97% 的方波,通过改变信号发生器的电压值(100mv -- 3.3V),控制输入信号的幅度,单片机里面就是通过读AD值(12位),进行判断(判断电压幅度的大小,进行相应的输出),输出(DA)。我的判断程序如下:
__IO uint16_t min_s = 0x0040; //是一个电压的阈值.
while(1)
{
value = ADCDualConvertedValue[0]; //获得AD值,存到value里面去。
if(min_s < value) //判断当前的电压是否大于电压的最小值
{
value1 = value;
DAC_SetChannel1Data(DAC_Align_12b_R, value1); //输出
}
else
{
DAC_SetChannel1Data(DAC_Align_12b_R, value1); //输出上一次成立的值
}
}
通过上边的程序,判断,输出的结果跟我想象中的不一样,输出的DA信号,隔一段时间,一段周期,出现一些峰波。正常来说应该是恒定的,变化幅度不大(我想要的看起来至少是一条线)。下面是我通过示波器查看到的数据,为什么会出现这种情况,折的搞不懂为什么,前来求助。 下边附带了几张图,数据是我放大了很多倍的效果。 第一幅图是我想要的效果, 后面的都是实际的效果。 应该怎样处理才可以处理掉那些峰波;
|