智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 10419|回复: 10
打印 上一主题 下一主题

使用野火库FTM_PWM_Duty函数单独设置占空比不能成功实现

[复制链接]

1

主题

22

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
402
威望
216
贡献
112
兑换币
134
注册时间
2013-7-13
在线时间
37 小时
毕业学校
暂无
跳转到指定楼层
1#
发表于 2014-4-8 21:40:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主函数中相关代码如下:
// FTM_PWM_init(FTM0, CH0, 300, 10);
    FTM_PWM_freq(FTM0,300);
    FTM_PWM_Duty(FTM0,CH0,10);

使用FTM_PWM_init函数可以实现正确的波形输出
但是注释掉init函数,单独使用freq和Duty函数的时候不能输出正确的波形
使用Jlink单步调式的时候发现程序卡在红字部分,如下:

void FTM_PWM_Duty(FTMn ftmn, CHn ch, u32 duty)
{
    u32 cv;
    u32 mod;
    ASSERT( (ftmn == FTM0) || ( (ftmn == FTM1 || ftmn == FTM2 ) && (ch <= CH1)) ); //检查传递进来的通道是否正确
    ASSERT(duty <= FTM_PRECISON);     //用断言检测 占空比是否合理
    //占空比 = (CnV-CNTIN)/(MOD-CNTIN+1)
    mod = FTM_MOD_REG(FTMx[ftmn]);        //读取 MOD 的值
    cv = (duty * (mod - 0 + 1)) / FTM_PRECISON;
    // 配置FTM通道值
    FTM_CnV_REG(FTMx[ftmn], ch) = cv;
}

新手上路,求解各位前辈高手!
回复

使用道具 举报

4

主题

38

帖子

0

精华

知名人物

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

积分
23865
威望
19719
贡献
4074
兑换币
164
注册时间
2012-11-8
在线时间
36 小时
2#
发表于 2014-4-8 22:07:12 | 只看该作者
你这个很明显没有初始化
回复 支持 反对

使用道具 举报

4

主题

38

帖子

0

精华

知名人物

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

积分
23865
威望
19719
贡献
4074
兑换币
164
注册时间
2012-11-8
在线时间
36 小时
3#
发表于 2014-4-8 22:12:12 | 只看该作者
话说没有初始化,FTM使能时钟都没有打开,这个错误太明显了
  FTM_PWM_freq(FTM0,300);
    FTM_PWM_Duty(FTM0,CH0,10);
这两句是为了改频率和占空比方便而又写的两个函数,这两个函数里面不包含FTM时钟使能
你打开这三个函数看一下,里面有很大差别,对照数据手册一看就明白了,野火的库没有问题
回复 支持 反对

使用道具 举报

1

主题

22

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
402
威望
216
贡献
112
兑换币
134
注册时间
2013-7-13
在线时间
37 小时
毕业学校
暂无
4#
 楼主| 发表于 2014-4-8 23:08:41 | 只看该作者
万里无云 发表于 2014-4-8 22:12
话说没有初始化,FTM使能时钟都没有打开,这个错误太明显了
  FTM_PWM_freq(FTM0,300);
    FTM_PWM_Duty ...

    FTM_PWM_init(FTM0, CH0, 300, 10);
    //FTM_PWM_freq(FTM0,300);
    FTM_PWM_Duty(FTM0,CH0,30);
初始化以后再使用Duty函数更改占空比还是不能输出正确的波形
回复 支持 反对

使用道具 举报

4

主题

38

帖子

0

精华

知名人物

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

积分
23865
威望
19719
贡献
4074
兑换币
164
注册时间
2012-11-8
在线时间
36 小时
5#
发表于 2014-4-8 23:28:07 | 只看该作者
这个我就真的不知道怎么回事了,看一下你的这一句是不是这样的:  #define FTM_PRECISON 100u
如果是那我就真的不知道为什么了,如果不是,请改为  #define FTM_PRECISON 100u
回复 支持 反对

使用道具 举报

1

主题

22

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
402
威望
216
贡献
112
兑换币
134
注册时间
2013-7-13
在线时间
37 小时
毕业学校
暂无
6#
 楼主| 发表于 2014-4-8 23:34:00 | 只看该作者
万里无云 发表于 2014-4-8 23:28
这个我就真的不知道怎么回事了,看一下你的这一句是不是这样的:  #define FTM_PRECISON 100u
如果是那我就 ...

是的,在FTM.h中有定义,我专门查了的
回复 支持 反对

使用道具 举报

32

主题

3009

帖子

0

精华

杰出人士

学期班的来卖萌?

Rank: 12Rank: 12Rank: 12

积分
14832

在线王奖章活跃会员奖章优秀会员奖章论坛元老奖章资源大师奖章

威望
5952
贡献
3172
兑换币
4257
注册时间
2013-11-26
在线时间
2854 小时
7#
发表于 2014-4-15 13:00:52 | 只看该作者
我用过野火的库,没问题啊。
回复 支持 反对

使用道具 举报

4

主题

38

帖子

0

精华

知名人物

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

积分
23865
威望
19719
贡献
4074
兑换币
164
注册时间
2012-11-8
在线时间
36 小时
8#
发表于 2014-4-15 19:02:55 | 只看该作者
数据手册里面FTM时钟源为系统时钟,这个时钟实际上是总线时钟,不知道手册上怎样区分系统时钟和总线时钟的
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

注册会员

Rank: 2

积分
13
威望
9
贡献
4
兑换币
3
注册时间
2014-6-26
在线时间
0 小时
毕业学校
中国大学
9#
发表于 2014-6-26 17:13:19 | 只看该作者
FTM_PWM_init(FTM0, CH0, 300, 10);
    FTM_PWM_freq(FTM0,300);
    FTM_PWM_Duty(FTM0,CH0,10);
在主函数哪个地方
回复 支持 反对

使用道具 举报

28

主题

2228

帖子

1

精华

杰出人士

Rank: 12Rank: 12Rank: 12

积分
15817

论坛元老奖章在线王奖章活跃会员奖章优秀会员奖章资源大师奖章

QQ
威望
7430
贡献
4213
兑换币
5193
注册时间
2013-12-9
在线时间
2087 小时
10#
发表于 2014-10-9 11:35:01 | 只看该作者
初始化都没有怎么工作
回复 支持 反对

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-9-29 13:27 , Processed in 0.377287 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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