金牌会员
![Rank: 6](static/image/common/star_level3.gif) ![Rank: 6](static/image/common/star_level2.gif)
- 积分
- 1370
- 威望
- 687
- 贡献
- 393
- 兑换币
- 427
- 注册时间
- 2015-10-17
- 在线时间
- 145 小时
- 毕业学校
- 工大
|
5#
![](static/image/common/ico_lz.png)
楼主 |
发表于 2016-2-21 21:29:09
|
只看该作者
但是我500线的编码器确实转一圈是1000个脉冲啊。我是用的山 外的库,void PIT0_IRQHandler(void);
/*!
* @BRIEF main函数
* @since v5.0
* @note FTM 正交解码 测试
*/
void main(void)
{
printf("\n*****FTM 正交解码 测试*****\n");
ftm_quad_init(FTM1); //FTM1 正交解码初始化(所用的管脚可查 port_cfg.h )
pit_init_ms(PIT0, 2000); //初始化PIT0,定时时间为: 500ms
set_vector_handler(PIT0_VECTORn ,PIT0_IRQHandler); //设置PIT0的中断服务函数为 PIT0_IRQHandler
enable_irq (PIT0_IRQn); //使能PIT0中断
while(1);
}
/*!
* @brief PIT0中断服务函数
* @since v5.0
*/
void PIT0_IRQHandler(void)
{
int16 val;
val = ftm_quad_get(FTM1); //获取FTM 正交解码 的脉冲数(负数表示反方向)
ftm_quad_clean(FTM1);
if(val>=0)
{
printf("\n正转:%d",val);
}
else
{
printf("\n反转:%d",-val);
}
PIT_Flag_Clear(PIT0); //清中断标志位
}
我把采集时间放到2000ms放慢了一点以便我能在一次中断到下一次中断之间能转完一圈。亲测一圈脉冲1000,您说得意思我都理解,但是还是不能解释我这边的问题啊
|
|