您好!
我试图学习如何使用模块DA14531的外围设备和使用的例子。
我设法产生一个脉宽调制和删除的for循环,改变脉宽调制直流和固定到50%,但频率是问题
我不明白它使用的公式,数据表上说:
定时器2\u时钟\u频率\u赫兹/所需频率\u赫兹−1
示例中有一个函数:
定时器2_pwm_freq_set();
但是我不能得到想要的频率
我可以移动参数来获得接近的结果,但关键是要知道确切的公式,而不是猜测。。。
我做错什么了吗?
您好!
我试图学习如何使用模块DA14531的外围设备和使用的例子。
我设法产生一个脉宽调制和删除的for循环,改变脉宽调制直流和固定到50%,但频率是问题
我不明白它使用的公式,数据表上说:
定时器2\u时钟\u频率\u赫兹/所需频率\u赫兹−1
示例中有一个函数:
定时器2_pwm_freq_set();
但是我不能得到想要的频率
我可以移动参数来获得接近的结果,但关键是要知道确切的公式,而不是猜测。。。
我做错什么了吗?
嗨,麦格,
感谢您的在线提问以及您对我们的微型模块解决方案的兴趣。定时器2\u pwm\u freq\u set()配置三重\u pwm\u频率寄存器。请参阅DA14531数据表中的表327:三重\U PWM \U频率(0x50003408)以检查应如何配置。
我猜您使用的是SDK的timer2示例。我能问一下你想要完成什么,PWM输出信号应该是什么吗?是否要更改占空比?
关于频率,还请阅读timer2,h头文件中timer2\u pwm\u freq\u set()上方的注释。
谢谢,下午好
你好,
是的,我正在使用Timer2(PWM)的sdk中的示例
我想做的是得到1kHz,然后把占空比改在0-100%之间
只是现在我把它设置为50%a没有任何问题我的问题仍然是频率
在这个例子中是这样的
//系统时钟除以8,是定时器2的输入时钟源(根据
//到上面的clk\ U div\ U config结构)。PWM\ U频率
定时器2\脉宽调制\频率设置(5001600000/8);
它能提供500Hz的频率
但我注意到这个例子是基于DA14585设备(我读到的是16MHz的),我的设备是32Mhz的,数据表上说
所以我改成
ttimer2\u脉宽调制\u频率设置(10004000000);
我得到的频率是3.676Hz。。。
数据表上说,三重脉冲宽度调制频率注册表有以下公式:
pwm频率=模块频率/(值+1)
这是函数->timer2\u pwm\u freq\u set()中的精确公式
我仍然不知道为什么我得到如此低的频率,甚至没有一个整数3.676Hz这有点奇怪
为了得到1khz的频率,我将值改为
定时器2\脉宽调制\频率设置(6700u,100000);
我在示波器里得到了1.053kHz,但对我来说真的很奇怪
时钟
静态tim2\u配置\u t配置=
{
.clk\u source=TIM2\u clk\u SYS,
.hw\u pause=TIM2\u hw\u pause\u关闭
};
这很有效谢谢你的回复
示例代码没有这一行:“.clk\u source=TIM2\u clk\u SYS,”
用这个我设置:
//系统时钟除以8,是定时器2的输入时钟源(根据上面的clk\u div\u config结构)
timer2_pwm_freq_set(pwm_frequency,2000000);//在我的例子中,pwm_frequency=1000
我得到的频率和我设定的一样
你好,waiteyang,谢谢你的建议!这对其他社区很有帮助。
你好,麦格。很高兴你解决了这个问题。
谢谢,下午好