查看: 5353|回复: 15

[已解决] 关于KL14的capture功能(已解决)

[复制链接]

该用户从未签到

4

主题

72

帖子

0

新手上路

Rank: 1

积分
92
最后登录
1970-1-1
发表于 2013-8-18 16:11:50 | 显示全部楼层 |阅读模式
通过PE添加组件运用Capture功能,捕获其下降沿。生成如下的函数(其中两个):
** ===================================================================
**     Method      :  TU1_GetCounterValue (component TimerUnit_LDD)
**
**     Description :
**         Returns the content of counter register. This method can be
**         used both if counter is enabled and if counter is disabled.
**         The method is not available if HW doesn't allow reading of
**         the counter.
**     Parameters  :
**         NAME            - DESCRIPTION
**       * DeviceDataPtr   - Device data structure
**                           pointer returned by  method.
**     Returns     :
**         ---             - Counter value (number of counted ticks).
** ===================================================================
*/
TU1_TValueType TU1_GetCounterValue(LDD_TDeviceData *DeviceDataPtr)
{
  (void)DeviceDataPtr;                 /* Parameter is not used, suppress unused argument warning */
  return (TU1_TValueType)TPM_PDD_ReadCounterReg(TPM0_BASE_PTR);
}
** ===================================================================
**     Method      :  TU1_GetCaptureValue (component TimerUnit_LDD)
**
**     Description :
**         Returns the content of capture register specified by the
**         parameter ChannelIdx. This method is available when at least
**         one channel is configured.
**     Parameters  :
**         NAME            - DESCRIPTION
**       * DeviceDataPtr   - Device data structure
**                           pointer returned by  method.
**         ChannelIdx      - Index of the component
**                           channel.
**       * ValuePtr        - Pointer to return value of the
**                           capture register.
**     Returns     :
**         ---             - Error code, possible codes:
**                           ERR_OK - OK
**                           ERR_PARAM_INDEX - ChannelIdx parameter is
**                           out of possible range
**                           ERR_NOTAVAIL -  The capture mode is not
**                           selected for selected channel.
**                           ERR_SPEED - The component does not work in
**                           the active clock configuration
** ===================================================================
*/
LDD_TError TU1_GetCaptureValue(LDD_TDeviceData *DeviceDataPtr, uint8_t ChannelIdx, TU1_TValueType *ValuePtr)
{
  (void)DeviceDataPtr;                 /* Parameter is not used, suppress unused argument warning */
  /* Parameter test - this test can be disabled by setting the "Ignore range checking"
     property to the "yes" value in the "Configuration inspector" */
  if (ChannelIdx > LAST_CHANNEL) {     /* Is the channel index out of range? */
    return ERR_PARAM_INDEX;            /* If yes then error */
  }
  if ((ChannelMode[ChannelIdx]) != 1u) { /* Is the channel in capture mode? */
    return ERR_NOTAVAIL;               /* If not then error */
  }
  *ValuePtr = (TU1_TValueType)(TPM_PDD_ReadChannelValueReg(TPM0_BASE_PTR, ChannelDevice[ChannelIdx]));
  return ERR_OK;                       /* OK */
}
若我需要计数在某一段时间内其下降沿,是用这个函数吗LDD_TError TU1_GetCaptureValue(LDD_TDeviceData *DeviceDataPtr, uint8_t ChannelIdx, TU1_TValueType *ValuePtr)
我知道答案 目前已有14人回答
回复

使用道具 举报

  • TA的每日心情
    开心
    2018-7-2 06:04
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    59

    主题

    2888

    帖子

    10

    金牌会员

    Rank: 6Rank: 6

    积分
    6020
    最后登录
    2020-9-28
    发表于 2013-8-19 09:33:39 | 显示全部楼层

    回复:关于KL14的capture功能

    如果你用LPTMR去做输入捕捉,TU1_GetCounterValue这个函数,能反映出你这段时间内捕捉到的下降沿个数。当然是在你的下降沿个数没有溢出的情况下,所以最好知道输入频率范围去决定多久读一次这值。
    最好你能将你的工程上传,因为不清楚你对TU1的具体配置。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    4

    主题

    72

    帖子

    0

    新手上路

    Rank: 1

    积分
    92
    最后登录
    1970-1-1
     楼主| 发表于 2013-8-19 14:15:16 | 显示全部楼层

    RE:关于KL14的capture功能

    利用1s的timer,在1s时间内捕获输入下降沿。因为输入波形的频率在200Hz~800Hz,因而不会有下降沿的溢出。详情请见附件,谢谢!

    S_TimerInterrupt_PWM2.rar

    1.35 MB, 下载次数: 14

    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-2 06:04
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    59

    主题

    2888

    帖子

    10

    金牌会员

    Rank: 6Rank: 6

    积分
    6020
    最后登录
    2020-9-28
    发表于 2013-8-19 15:10:04 | 显示全部楼层

    回复:关于KL14的capture功能

    我觉得如果你要用TPM的Input Capture Mode方式捕捉下降沿,那么就是捕捉到一次下降沿并进入中断用个变量自增加1,然后你1s时间到了去读那个变量的值就是你所想要的1s内捕捉到的下降沿个数。(这样是平均转速)
     
    你提到的两个函数,不是用来做那功能的。如果你想测2次下降沿脉冲时间间隔,倒是可以2次下降沿中断读CnV值计算出出2次下降沿时间间隔,再换算成频率。但是这样得出的瞬时转速而不是平均转速。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    4

    主题

    72

    帖子

    0

    新手上路

    Rank: 1

    积分
    92
    最后登录
    1970-1-1
     楼主| 发表于 2013-8-19 15:46:35 | 显示全部楼层

    RE:关于KL14的capture功能

    1. 若使用平均转速的功能,需要用到的函数是?
    2. 若要用瞬时转速的功能,是否是用TU1_GetCounterValue这个函数?
    可是TU1_GetCounterValue这个函数与Channel (n) Value (TPMx_CnV)寄存器好像没有关系吧?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-2 06:04
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    59

    主题

    2888

    帖子

    10

    金牌会员

    Rank: 6Rank: 6

    积分
    6020
    最后登录
    2020-9-28
    发表于 2013-8-19 16:43:26 | 显示全部楼层

    回复:关于KL14的capture功能

    1、平均转速就是单位时间去看捕捉到的下降沿脉冲个数。TU1_OnChannel2这个通道2捕获中断服务函数,在这个函数中使一个全局变量+1。在TMR1000ms_OnInterrupt中断服务函数中读取该全局变量值并清零以备下一秒测脉冲个数。每次进TMR1000ms_OnInterrupt函数读取得全局变量值除以你的时间就得出频率了(你1s进一次就不用除了)。从你的程序看capture_counter变量就当做我说的那个全局变量吧。
     
    2、瞬时速度其实就是2次下降沿捕捉的CnV值得差(当然要配好模块频率,使2次捕捉间无溢出),TU1_GetCaptureValue是得到CnV值的。
    但我觉得你测风扇转速,1秒的平均转速就好,没必要测什么瞬时转速,因为万一你传感器输出有点毛刺正好那下被捕捉到就无法反应真实转速了。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-2 06:04
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    59

    主题

    2888

    帖子

    10

    金牌会员

    Rank: 6Rank: 6

    积分
    6020
    最后登录
    2020-9-28
    发表于 2013-8-19 17:04:33 | 显示全部楼层

    回复:关于KL14的capture功能

    其实我觉得,如果你只需测量一路,那么Low-Power Timer (LPTMR)模块的Pulse Counter模式更适合你。那个模式就是用来计脉冲个数的,你只要固定时间去读取LPTMRx_CNR寄存器值就能得到脉冲个数了。
    像TPM模块的输入捕捉会每次捕获下降沿就进一次中断,感觉很不好。
    网友还有用DMA计脉冲个数的方法,你也可以去参考下。www.nxpic.org.cn/bbs/article_891_299898.html
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    4

    主题

    72

    帖子

    0

    新手上路

    Rank: 1

    积分
    92
    最后登录
    1970-1-1
     楼主| 发表于 2013-8-19 19:29:05 | 显示全部楼层

    回复:关于KL14的capture功能

    没有找到独立的Capture组件,我是通过添加PWM1组件自动生成的TU1。在TU1中选择Channel list中增加通道,做Capture功能。使用PWM组件,对于device的选择,只能TPM,无法使用LPTMR。如附件所示。
    untitled - 副本.jpg
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-2 06:04
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    59

    主题

    2888

    帖子

    10

    金牌会员

    Rank: 6Rank: 6

    积分
    6020
    最后登录
    2020-9-28
    发表于 2013-8-21 11:23:13 | 显示全部楼层

    回复:关于KL14的capture功能

    不好意思没看到回复晚了。
    如果你只要测一路,那就用LPTMR吧,就这个图标:
    1.jpg
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    4

    主题

    72

    帖子

    0

    新手上路

    Rank: 1

    积分
    92
    最后登录
    1970-1-1
     楼主| 发表于 2013-8-21 13:35:29 | 显示全部楼层

    回复:关于KL14的capture功能

    尝试使用LPTMR组件,但是其Pin选择只有如附件中所示。没有我所需要的Pin脚。
    LPTMR.JPG
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-20 11:21 , Processed in 0.105921 second(s), 31 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表