你需要比较两次差值是否符号相反,从而得出最值
比如说:
void GenPulse(void)
{
static s16 lastDeltaAD = 0;
static s16 lastAD = 0;
s16 curAD = (s16)ADC1->DR;
s16 deltaAD = lastAD - curAD;
if(deltaAD > 0){
if(lastDeltaAD<=0){
GPIO_WriteBit(GPIOB, GPIO_Pin_6, Bit_SET);
delay(10);
GPIO_WriteBit(GPIOB, GPIO_Pin_6, Bit_RESET);
}
}else{
if(lastDeltaAD>0){
GPIO_WriteBit(GPIOB, GPIO_Pin_6, Bit_SET);
delay(10);
GPIO_WriteBit(GPIOB, GPIO_Pin_6, Bit_RESET);
}
}
lastDeltaAD = deltaAD;
lastAD = curAD;
}
其实这样也不太可行的,AD采样的结果本来就有毛刺,需要滤波后处理,但这样一来实时性也跟不上
具体要看你的应用是什么
|