stm定时器采集高电平数据有波动
通过STM32F103RCT6需要采集3路方波的高电平,没有使用输入捕获采集(输入捕获是特定的引脚,比较麻烦)采集的方波的周期是7MS频率145HZ,通过定时加外部中断的方式实现了采集,由于对采集电平的精度有要求,所以在串口直接打印得到的数据上看会有最小位数为10左右的跳动。但是通过软件滤波没有实现平稳的输出。我个人觉得是采集的方式有问题,导致的数据跳动,有没有高手请教一下,通过软件来修正一下,使用了窗口滑动滤波测试效果很差,延迟比较严重。初始化部分TIM2_Cap_Init(0XFFFF,100-1); //1US分辨率 计数值65535 最大60ms
TIM3_Cap_Init(0XFFFF,100-1); //1US分辨率 计数值65535 最大60ms
TIM4_Cap_Init(0XFFFF,100-1); //1US分辨率 计数值65535 最大60ms
delay_us(10);
EXTI_PA1_Init(); //配置外部中断1
EXTI_PA2_Init(); //配置外部中断2
EXTI_PA3_Init(); //配置外部中断3
unsigned short High_Time_us_PA1=0; //PA1高电平时间
unsigned short High_Time_us_PA2=0; //PA2高电平时间
unsigned short High_Time_us_PA3=0; //PA3高电平时间
void EXTI1_IRQHandler(void) //EXTI_Line1
{
if(EXTI_GetITStatus(EXTI_Line1)!= RESET)
{
if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1)) //上升沿中断
{
TIM2->CNT=0; //从0开始计数
TIM_Cmd(TIM2,ENABLE);//启动定时器2
}
else //下降沿中断
{
High_Time_us_PA1=TIM2->CNT;//将高电平时间读出来
TIM_Cmd(TIM2,DISABLE); //关闭定时器2等待下次测量
TIM2->CNT=0; //计数值清零
}
EXTI->PR = EXTI_Line1;//清除中断标志
}
}
void EXTI2_IRQHandler(void) //EXTI_Line2
{
if(EXTI_GetITStatus(EXTI_Line2)!= RESET)
{
if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_2)) //上升沿中断
{
TIM3->CNT=0; //从0开始计数
TIM_Cmd(TIM3,ENABLE);//启动定时器3
}
else //下降沿中断
{
High_Time_us_PA2=TIM3->CNT;//将高电平时间读出来
TIM_Cmd(TIM3,DISABLE); //关闭定时器3等待下次测量
TIM3->CNT=0; //计数值清零
}
EXTI->PR = EXTI_Line2;//清除中断标志
}
}
void EXTI3_IRQHandler(void) //EXTI_Line3
{
if(EXTI_GetITStatus(EXTI_Line3)!= RESET)
{
if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_3)) //上升沿中断
{
TIM4->CNT=0; //从0开始计数
TIM_Cmd(TIM4,ENABLE);//启动定时器4
}
else //下降沿中断
{
High_Time_us_PA3=TIM4->CNT;//将高电平时间读出来
TIM_Cmd(TIM4,DISABLE); //关闭定时器4等待下次测量
TIM4->CNT=0; //计数值清零
}
EXTI->PR = EXTI_Line3;//清除中断标志
}
}
:):lol :):):):):) 我没有实际做过不过感觉你这个属于正常吧1us的分辨率波动个7-8us很正常
再说了输入信号的稳定性也有关系啊
页:
[1]