智能车制作

标题: 使用野火库FTM_PWM_Duty函数单独设置占空比不能成功实现 [打印本页]

作者: 逆风,飞翔    时间: 2014-4-8 21:40
标题: 使用野火库FTM_PWM_Duty函数单独设置占空比不能成功实现
主函数中相关代码如下:
// 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;
}

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

作者: 万里无云    时间: 2014-4-8 22:07
你这个很明显没有初始化

作者: 万里无云    时间: 2014-4-8 22:12
话说没有初始化,FTM使能时钟都没有打开,这个错误太明显了
  FTM_PWM_freq(FTM0,300);
    FTM_PWM_Duty(FTM0,CH0,10);
这两句是为了改频率和占空比方便而又写的两个函数,这两个函数里面不包含FTM时钟使能
你打开这三个函数看一下,里面有很大差别,对照数据手册一看就明白了,野火的库没有问题
作者: 逆风,飞翔    时间: 2014-4-8 23:08
万里无云 发表于 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函数更改占空比还是不能输出正确的波形

作者: 万里无云    时间: 2014-4-8 23:28
这个我就真的不知道怎么回事了,看一下你的这一句是不是这样的:  #define FTM_PRECISON 100u
如果是那我就真的不知道为什么了,如果不是,请改为  #define FTM_PRECISON 100u
作者: 逆风,飞翔    时间: 2014-4-8 23:34
万里无云 发表于 2014-4-8 23:28
这个我就真的不知道怎么回事了,看一下你的这一句是不是这样的:  #define FTM_PRECISON 100u
如果是那我就 ...

是的,在FTM.h中有定义,我专门查了的
作者: zhou1994    时间: 2014-4-15 13:00
我用过野火的库,没问题啊。
作者: 万里无云    时间: 2014-4-15 19:02
数据手册里面FTM时钟源为系统时钟,这个时钟实际上是总线时钟,不知道手册上怎样区分系统时钟和总线时钟的
作者: 鱼海森林    时间: 2014-6-26 17:13
FTM_PWM_init(FTM0, CH0, 300, 10);
    FTM_PWM_freq(FTM0,300);
    FTM_PWM_Duty(FTM0,CH0,10);
在主函数哪个地方
作者: 六步上篮    时间: 2014-10-9 11:35
初始化都没有怎么工作
作者: 落花有意1.8    时间: 2016-1-14 16:04
......




欢迎光临 智能车制作 (http://111.231.132.190/) Powered by Discuz! X3.2