查看: 8226|回复: 7

[求助] KEAZ128芯片PWM占空比改变求助

[复制链接]

该用户从未签到

6

主题

52

帖子

0

注册会员

Rank: 2

积分
106
最后登录
2017-12-14
发表于 2016-11-9 09:08:30 | 显示全部楼层 |阅读模式
各位大神:
       小弟用KEAZ128芯片写的一个PWM初始化程序和改变PWM占空比程序。(芯片:KEAZ128,调试板:TRK-KEA128,调试软件:KDS)
       程序中PWM初始化可以用,但单步调试通不过。改变PWM占空比程序没有效果。
       求教各位大神,我程序中哪里不对?
       代码附下:
       uint16_t MOD_temp;


       void  Init_FTM2_generate_PWM(uint8_t channel, uint16_t frequent, uint8_t duty_cycle)
{
        uint16_t CnV_temp;
        if(frequent > 30000)
                frequent = 30000;
        else if(frequent < 50)
                frequent = 50;
        if(duty_cycle > 100)
                duty_cycle = 100;
        else if(duty_cycle < 0)
                duty_cycle = 0;
        MOD_temp = (uint16_t)((3000000 + (frequent >> 1)) / frequent);


        SIM_SCGC  |= SIM_SCGC_FTM2_MASK ;
        FTM2_MODE |= FTM_MODE_WPDIS_MASK;
        FTM2_SC   |= FTM_SC_PS(0X03);        //分频后始终频率3 000 000 HZ
        *((&FTM2_C0SC) + (uint32_t)(2 * channel)) |= FTM_CnSC_MSB_MASK |  FTM_CnSC_ELSB_MASK;                           
        *((&FTM2_C0SC) + (uint32_t)(2 * channel)) &= ~FTM_CnSC_ELSA_MASK;
        FTM2_CNT   = 0;
        FTM2_SC   &= ~FTM_SC_TOIE_MASK;
        FTM2_MODE |= FTM_MODE_FTMEN_MASK;
        FTM2_COMBINE = 0;
        FTM2_CNTIN   = 0;
        FTM2_MOD   = MOD_temp;   
        CnV_temp = (uint16_t)((float)MOD_temp * duty_cycle / 100);
        *((&FTM2_C0V) + (uint32_t)(2 * channel)) = CnV_temp;
        FTM2_SC   |= FTM_SC_CLKS(1);    //select system clock
}




void FTM2_PWM_duty(uint8_t chan, uint8_t duty)
{
        if(duty > 100)
                duty = 100;
        else if(duty < 0)
                duty = 0;
        FTM2_MODE |= FTM_MODE_WPDIS_MASK;


        *((&FTM2_C0V) + (uint32_t)(2 * chan)) = (uint16_t)((float)MOD_temp * duty / 100);


}

我知道答案 目前已有7人回答
回复

使用道具 举报

该用户从未签到

6

主题

52

帖子

0

注册会员

Rank: 2

积分
106
最后登录
2017-12-14
 楼主| 发表于 2016-11-9 09:45:33 | 显示全部楼层
PWM及占空比改变问题解决了,但这个代码依然无法单步运行。
而且程序烧录进去之后,在Debug环境中还没点运行,程序就自动运行。再点击运行或者单步都没什么效果。
不加上面这段代码跑其他代码都正常单步,Debug环境点击运行程序才开始跑。只要加入上面代码,就无法单步,程序烧进去之后就自动运行。求解!谢谢!
回复 支持 反对

使用道具 举报

该用户从未签到

712

主题

6371

帖子

0

超级版主

Rank: 8Rank: 8

积分
24890
最后登录
2025-7-21
发表于 2016-11-10 09:27:39 | 显示全部楼层
这么奇怪啊,有设置断点让程序运行停在main()吗?
回复 支持 反对

使用道具 举报

该用户从未签到

6

主题

52

帖子

0

注册会员

Rank: 2

积分
106
最后登录
2017-12-14
 楼主| 发表于 2016-11-11 10:30:39 | 显示全部楼层
小恩GG 发表于 2016-11-10 09:27
这么奇怪啊,有设置断点让程序运行停在main()吗?

     有设置断点让程序运行停在main()的第一条语句。
      
回复 支持 反对

使用道具 举报

该用户从未签到

6

主题

52

帖子

0

注册会员

Rank: 2

积分
106
最后登录
2017-12-14
 楼主| 发表于 2016-11-11 10:35:26 | 显示全部楼层
小恩GG 发表于 2016-11-10 09:27
这么奇怪啊,有设置断点让程序运行停在main()吗?

我试过,偶尔程序会停在main()的第一句,即使停在了第一句,PWM初始化也不能单步运行下去。
但程序烧进去后,用起来好像也没什么错误。
好奇怪哦。
回复 支持 反对

使用道具 举报

该用户从未签到

6

主题

52

帖子

0

注册会员

Rank: 2

积分
106
最后登录
2017-12-14
 楼主| 发表于 2016-11-11 10:37:42 | 显示全部楼层
上面程序正常使用要把  FTM2_MODE |= FTM_MODE_FTMEN_MASK;  
                         改成 FTM2_MODE &= ~FTM_MODE_FTMEN_MASK;
                         或者不写这一句。
回复 支持 反对

使用道具 举报

  • TA的每日心情
    奋斗
    2018-12-26 09:25
  • 签到天数: 6 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    0

    主题

    10

    帖子

    0

    新手上路

    Rank: 1

    积分
    37
    最后登录
    2018-12-26
    发表于 2018-12-6 16:49:57 | 显示全部楼层
    学习了,谢谢楼主,请教一个问题,借用你的两个函数,为何输出始终是高电平,请问你遇到过吗?谢谢,新手求教
    还可以
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2018-12-26 09:25
  • 签到天数: 6 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    0

    主题

    10

    帖子

    0

    新手上路

    Rank: 1

    积分
    37
    最后登录
    2018-12-26
    发表于 2018-12-6 17:25:36 | 显示全部楼层
    上一个问题已经解决,另一个问题,void FTM2_PWM_duty(uint8_t chan, uint8_t duty)函数中chan变量是什么作用?谢谢
    还可以
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-21 17:42 , Processed in 0.097855 second(s), 28 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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