查看: 2252|回复: 3

[求助] 关于KE04 PWM输出问题

[复制链接]
  • TA的每日心情
    开心
    2024-6-14 08:06
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    12

    主题

    42

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    247
    最后登录
    2024-6-14
    发表于 2019-5-28 18:51:43 | 显示全部楼层 |阅读模式
    以前在k22上做电机控制没有遇到问题,现在把代码移植到KE04。一个定时器控制一个步进电机。用了FTM2和TPM0。加速曲线从500HZ加速的1.5k。遇到的问题,做加减速的时候,TPM0这路电机工作很正常。FTM2这路就出现了问题。1、占空比配置的是50%,结果就10~30%之间波动。2、频率不对,初始频率应该是500hz,结果是1.6K左右。3、加速完频率不对,应该是1.5k,结果是3.7k左右。
    配置代码如下。
    /********************
    **函数名称:电机引脚初始化
    **函数说明:
    **输入参数:
    ********************/

    void motor_gpio_init(void)
    {
    /*--------------clock引脚-------------*/
      PORT_SetPinSelect(motor1_clock_module, motor1_cloc_pin); //选择定时器模块
      PORT_SetPinSelect(motor2_clock_module, motor2_cloc_pin);

    /*--------------dir引脚-------------*/
      gpio_output_config(motor1_dir_gpio,motor1_dir_pin,0);
      gpio_output_config(motor2_dir_gpio,motor2_dir_pin,0);

    /*--------------half引脚-------------*/
      gpio_output_config(motor1_half_gpio,motor1_half_pin,0);
      gpio_output_config(motor2_half_gpio,motor2_half_pin,0);
    /*--------------定时器2配置-------------*/   
      ftm_config_t ftmInfo;
      ftm_PWM_Param.chnlNumber = kFTM_Chnl_3;
            ftm_PWM_Param.level = kFTM_LowTrue;//低电平更新频率
            ftm_PWM_Param.dutyCyclePercent = 50u;//占空比50%
            ftm_PWM_Param.firstEdgeDelayPercent = 0U; //定时器0无该参数

      FTM_GetDefaultConfig(&ftmInfo);//默认配置
      FTM_Init(FTM2, &ftmInfo);
      FTM_UpdateChnlEdgeLevelSelect(FTM2, kFTM_Chnl_3, kFTM_LowTrue);
      FTM_EnableInterrupts(FTM2, kFTM_Chnl3InterruptEnable);//开中断
      EnableIRQ(FTM2_IRQn); //中断使能
      FTM_StartTimer(FTM2, kFTM_SystemClock);
    /*--------------定时器0配置-------------*/   
      tpm_config_t tpmInfo;
      tpm_PWM_Param.chnlNumber = kTPM_Chnl_1;
            tpm_PWM_Param.level = kTPM_LowTrue;     //低电平更新频率
            tpm_PWM_Param.dutyCyclePercent = 50u;//占空比50%

      TPM_GetDefaultConfig(&tpmInfo);
      TPM_Init(TPM0, &tpmInfo);
      TPM_EnableInterrupts(TPM0, kTPM_Chnl1InterruptEnable);
      EnableIRQ(TPM0_IRQn);
      TPM_StartTimer(TPM0, kTPM_SystemClock);
    }


    /********************
    **函数名称:电机变速运行
    **函数说明:
    **输入参数:u8_motor_nunber:电机号,1~2
    ********************/
    void motor_change_speed(uint8_t u8_motor_nunber,uint16_t u16_motor_speed)
    {
            switch(u8_motor_nunber)
            {
                            case motor1://        1号电机
                            FTM_SetupPwm(FTM2, &ftm_PWM_Param, 1u, kFTM_CenterAlignedPwm,u16_motor_speed, CLOCK_GetFreq(kCLOCK_TimerClk));
                            FTM_SetSoftwareTrigger(FTM2, true);//定时器0无该配置
                    break;
                    case        motor2://        2号电机
                            TPM_SetupPwm(TPM0, &tpm_PWM_Param, 1u, kTPM_CenterAlignedPwm,u16_motor_speed, CLOCK_GetFreq(kCLOCK_TimerClk));
                    break;
                   
                    default:       
                    break;
            }

    }


    我知道答案 目前已有3人回答
    天气不错
    回复

    使用道具 举报

    该用户从未签到

    712

    主题

    6371

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    24897
    最后登录
    2025-7-21
    发表于 2019-5-29 14:04:19 | 显示全部楼层
    你的意思是KE04的FTM运行从K22移植过来的代码无法输出想要的PWM波,是这样吗?
    如果是,建议单独测试FTM看看或者与官方例程代码对比一下
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-6-14 08:06
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    12

    主题

    42

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    247
    最后登录
    2024-6-14
     楼主| 发表于 2019-5-29 18:21:57 | 显示全部楼层
    小恩GG 发表于 2019-5-29 14:04
    你的意思是KE04的FTM运行从K22移植过来的代码无法输出想要的PWM波,是这样吗?
    如果是,建议单独测试FTM看 ...

    版主你好,问题已经有解决方法了。修改PWM频率,直接配置为输出比较模式,在中断里设置MOD的数值,就可以改变了。
    天气不错
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-6-14 08:06
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    12

    主题

    42

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    247
    最后登录
    2024-6-14
     楼主| 发表于 2019-5-29 18:24:09 | 显示全部楼层
    找了两天问题,应该是自己对库函数没理解清楚。如果输出PWM要修改频率,那么配置输出比较模式,在中断中修改MOD寄存器的值,就可以完成频率修改。
    天气不错
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-22 07:35 , Processed in 0.091132 second(s), 23 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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