查看: 4073|回复: 7

[求助] K60如何输出指定脉冲数(不使用外部引脚输入捕捉)

[复制链接]
  • TA的每日心情
    开心
    2019-7-2 13:42
  • 签到天数: 31 天

    连续签到: 1 天

    [LV.5]常住居民I

    12

    主题

    253

    帖子

    0

    高级会员

    Rank: 4

    积分
    576
    最后登录
    2020-4-7
    发表于 2016-8-2 15:11:39 | 显示全部楼层 |阅读模式
    K60如何输出指定脉冲数,
    我用FTM模块产生PWM信号,希望精确控制输出脉冲个数(0~5000)。
    不使用外部引脚输入捕捉,能不能做到?
    我知道答案 目前已有7人回答
    回复

    使用道具 举报

    该用户从未签到

    712

    主题

    6371

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    24858
    最后登录
    2025-7-17
    发表于 2016-8-2 15:29:22 | 显示全部楼层
    你好,设置溢出中断,然后在中断中计数,计数到你期望的个数时,关掉FTM或者输出通道即可。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-7-2 13:42
  • 签到天数: 31 天

    连续签到: 1 天

    [LV.5]常住居民I

    12

    主题

    253

    帖子

    0

    高级会员

    Rank: 4

    积分
    576
    最后登录
    2020-4-7
     楼主| 发表于 2016-8-2 16:51:31 | 显示全部楼层
    我现在是这么做的,程序中现在还有其它三个中断。输出脉冲数总是会不对。要么多一些,要么少一些。误差万分之四左右。这个误差不能减少了,不知道是怎么回事。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-7-2 13:42
  • 签到天数: 31 天

    连续签到: 1 天

    [LV.5]常住居民I

    12

    主题

    253

    帖子

    0

    高级会员

    Rank: 4

    积分
    576
    最后登录
    2020-4-7
     楼主| 发表于 2016-8-2 16:52:28 | 显示全部楼层
    小恩GG 发表于 2016-8-2 15:29
    你好,设置溢出中断,然后在中断中计数,计数到你期望的个数时,关掉FTM或者输出通道即可。
    ...

    我现在是这么做的,程序中现在还有其它三个中断。输出脉冲数总是会不对。要么多一些,要么少一些。误差万分之四左右。这个误差不能减少了,不知道是怎么回事。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    712

    主题

    6371

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    24858
    最后登录
    2025-7-17
    发表于 2016-8-3 13:28:55 | 显示全部楼层
    bjx1234 发表于 2016-8-2 16:52
    我现在是这么做的,程序中现在还有其它三个中断。输出脉冲数总是会不对。要么多一些,要么少一些。误差万 ...

    中断中处理的代码帖出来给我看看呢。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-7-2 13:42
  • 签到天数: 31 天

    连续签到: 1 天

    [LV.5]常住居民I

    12

    主题

    253

    帖子

    0

    高级会员

    Rank: 4

    积分
    576
    最后登录
    2020-4-7
     楼主| 发表于 2016-8-3 17:01:50 | 显示全部楼层
    void BSP_PWM_Init(void)
    {
        ftm_init_struct.FTM_Ftmx    = FTM0_BASE_PTR;   //使能FTM0通道
        ftm_init_struct.FTM_Mode    = FTM_MODE_PWM;    //使能PWM模式
        ftm_init_struct.FTM_PwmFreq = 10u;              //PWM频率50Hz
        ftm_init_struct.FTM_ToiEnable = DEF_DISABLED;
        ftm_init_struct.FTM_Isr = BSP_FTM_isr;
       
        dvFTM_Init(ftm_init_struct);
       
        dvFTM_PWM_Enable(ftm_init_struct.FTM_Ftmx,                //使用FTM0
                         FTM_Ch4,                      //使能Ch0通道
                         (FTM_PERIOD_TIME / 2u),       //占空比 50%, 占空比数值为0表示高电平
                         PTD4,                         //使用Ch0通道的PTD4引脚
                         ALIGN_LEFT);                     //脉宽左对齐

        dvFTM_EnableIrq(ftm_init_struct);
       
        // 输出为0
        dvFTM_PWM_Change(FTM_Ch4, ftm_init_struct, FTM_PERIOD_TIME, DEF_TRUE);  /* 占空比数值为0表示高电平 */
    }
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-7-2 13:42
  • 签到天数: 31 天

    连续签到: 1 天

    [LV.5]常住居民I

    12

    主题

    253

    帖子

    0

    高级会员

    Rank: 4

    积分
    576
    最后登录
    2020-4-7
     楼主| 发表于 2016-8-3 17:02:44 | 显示全部楼层
    void BSP_FTM_isr(void)
    {
        if(FTM0_BASE_PTR->SC & FTM_SC_TOF_MASK)
        {
            FTM0_BASE_PTR->SC &= ~FTM_SC_TOF_MASK;  //The TOF bit is cleared by writing 0 ,clear flag
            
            if(ProcPulseCnt > 0)
            {
                ProcPulseCnt--;
                ProcPulseTestCnt++;
            }
            //if(ProcPulseCnt == 0)
            else
            {
                ftm_init_struct.FTM_Ftmx->OUTMASK |= FTM_OUTMASK_CH4OM_MASK;
                ftm_init_struct.FTM_Ftmx->SC &= ~FTM_SC_TOIE_MASK;  //关中断
                //dvFTM_DisableIrq(ftm_init_struct);
            }
        }
    }
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    712

    主题

    6371

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    24858
    最后登录
    2025-7-17
    发表于 2016-9-1 11:31:46 | 显示全部楼层
    bjx1234 发表于 2016-8-3 17:02
    void BSP_FTM_isr(void)
    {
        if(FTM0_BASE_PTR->SC & FTM_SC_TOF_MASK)

    楼主把FTM的中断优先级调为你几个中断中的最高优先级。
    这样防止其他中断抢占FTM中断,50HZ的中断已经很慢了。
    建议你测试可以把其他中断屏蔽掉试试,看看还会不会出现脉冲少的情况。
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-18 13:21 , Processed in 0.099769 second(s), 28 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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