|
楼主 |
发表于 2011-8-4 22:31:14
|
显示全部楼层
回复【6楼】bai_yechuang
-----------------------------------------------------------------------
就是当红外编码器没经过一个扇叶时就会触发一次中断,中断服务程序计数器+1.这样转一圈就是8个脉冲。
程序如下:
u16 d07_speed_base=40;//基准脉冲
u16 d07_lspeed_count; //左轮脉冲
u16 d07_rspeed_count; //右轮脉冲
/*******************************************************************************
* Function Name : EXTI2_IRQHandler
* Description : 右轮速度编码器中断函数
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void EXTI2_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line2)!=RESET)
{
d07_rspeed_count++;
//-----------------------------------------------------------------
EXTI_ClearITPendingBit(EXTI_Line2);//清中断请求标志位
}
}
/*******************************************************************************
* Function Name : EXTI3_IRQHandler
* Description : 左轮速度编码器中断函数
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void EXTI3_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line3)!=RESET)
{
d07_lspeed_count++;
//-----------------------------------------------------------------
EXTI_ClearITPendingBit(EXTI_Line3);//清中断请求标志位
}
}
void speed_check_07(void)//每100MS检测一次
{
if(d07_lspeed_count>5)
{
if(d07_lspeed_count>d07_speed_base)
{
CCR1_Val-=50;
TIM3_OCInitStructure.TIM_Pulse=CCR1_Val; //输出比较值 调制占空比
TIM_OC1Init(TIM3, &TIM3_OCInitStructure);//初始化TIM3 通道1
}
else if(d07_lspeed_count<d07_speed_base)
{
CCR1_Val+=50;
TIM3_OCInitStructure.TIM_Pulse=CCR1_Val; //输出比较值 调制占空比
TIM_OC1Init(TIM3, &TIM3_OCInitStructure);//初始化TIM3 通道1
}
d07_lspeed_count=0;
}
if(d07_rspeed_count>5)
{
if(d07_rspeed_count>d07_speed_base)
{
CCR2_Val-=50;
TIM3_OCInitStructure.TIM_Pulse=CCR2_Val; //输出比较值 调制占空比
TIM_OC2Init(TIM3, &TIM3_OCInitStructure);//初始化TIM3 通道1
}
else if(d07_rspeed_count<d07_speed_base)
{
CCR2_Val+=50;
TIM3_OCInitStructure.TIM_Pulse=CCR2_Val; //输出比较值 调制占空比
TIM_OC2Init(TIM3, &TIM3_OCInitStructure);//初始化TIM3 通道1
}
d07_rspeed_count=0;
}
else
{
}
}
//=====================================================================================================================
这样出来的效果是:每个轮子的脉冲频率在几个频率之间跳动
396HZ 378HZ 403HZ 409HZ 431HZ 438HZ (基准频率是400HZ).
不知道怎么回事,像这种速度校正该怎么计算呢???? |
|