LPC804开发(5.PWM使用)

本文详细介绍了STM32中PWM输出的配置,包括基本使用、如何更改占空比和频率,以及对比了官方复杂程序。作者强调了CTIMER的设置方法和注意事项,提醒读者避免直接使用官方示例。
摘要由CSDN通过智能技术生成

1.前言

早上花了点时间学习了一下官方的例程,总的来说PWM输出还是比较简单的。

2.基本使用

首先在开始前我不建议大家照搬官方的程序,因为官方的程序非常复杂,其实官方自己有更简单的方法但是SDK里没有用,我也不知道为什么,SDK没有更新?

这是程序本体,下面我来一个个介绍

    /* Enables clock for switch matrix.: enable */
    CLOCK_EnableClock(kCLOCK_Swm);

    /* TimerMatchChannel1 connect to P0_12 */
    SWM_SetMovablePinSelect(SWM0, kSWM_T0_MAT_CHN3, kSWM_PortPin_P0_12);

    /* Disable clock for switch matrix. */
    CLOCK_DisableClock(kCLOCK_Swm);

    CTIMER_GetDefaultConfig(&config);

    CTIMER_Init(CTIMER0, &config);

    CTIMER_SetupPwm(CTIMER0,kCTIMER_Match_2,kCTIMER_Match_3,25,1000,CLOCK_GetFreq(kCLOCK_CoreSysClk),0);

//    CTIMER_UpdatePwmDutycycle(CTIMER0,kCTIMER_Match_2,kCTIMER_Match_3,45);

    CTIMER_StartTimer(CTIMER0);

9565441e98eb4dbb84d350f18c773b0d.png 

 首先,前三行是对端口的初始化。我们将ctimer0匹配3与0_12挂钩。两个匹配关系如下

75080094ef1e488a9f1381157b5407e6.png

8a024df9fbb046df9fc37b1f1b809b08.png

因此如果大家要输出管脚,则改的是后面的。

8cca3e529fa24df4b9dd9523f90464a6.png

然后是获取默认配置,将配置投入进定时器,主要设置分频,一般也不用改。

 

 

958fea3858b24bba995d055e54e4061d.png 这一句话是配置PWM的核心,我们来主要来分析一下,先看一下函数原型。

644dafd658db4569b180bd42cc105780.png

第一个参数是定时器,ctimer0,没啥好说的。第二个参数是指定控制PWM周期的通道,然后是指定输出通道。这里注意一下,周期通道与输出通道不能一样,在函数本体里也有这样一句话

1a1b9eae46c0410d89cc0eb0913f6113.png

当两个值一样了,就认为失败了。

我们继续分析函数,第三个是默认占空比0~100,不能有小数。第四个参数是频率,单位是Hz。然后是定时器的时钟频率,我这里是15Mhz。最后一个参数,是否开启中断(0:关闭/1:开启)

我再分析一下我写入的函数。

CTIMER_SetupPwm(CTIMER0,kCTIMER_Match_2,kCTIMER_Match_3,25,1000,CLOCK_GetFreq(kCLOCK_CoreSysClk),0);

首先指定定时器0输出;匹配2作为周期通道;匹配3作为输出通道;默认占空比是25%;输出频率是1Khz;定时器频率是核心时钟,也就是15000000;不用开启中断。

等这都设置完成,开启定时器就可以了。

b013c6f495a74d69a4386635ea4af972.png

下面我们来验证一下

2c13837dc5e243a08b8b77ca1745df00.jpeg

79ab057e629e497b985c1ce4dbc36aac.png

可以看到输出符合我们的预期。

而官方的程序比较复杂,完全不建议大家去研究,效果是相同的。

2.1变占空比

下面我再说一说怎么改变占空比

bee26c994fae40c0ae5c682e7e48eab7.png

官方给我们提供了CTIMER_UpdatePwmDutycycle这个函数,用法也比较简单

eea7ec50cbed4893bd73da722f545e38.png

依然是timer0,中间两个通道照抄初始化时的通道,最后一个是你想输出的占空比。我们再来测试一下。

fd9087048e3d4f05882f5f596b6a46a0.png

可以看到,占空比确实是修改了。

2.2变频

除了占空比,频率也是可变的,但是这个频率变起来比较复杂,会涉及到计算。

首先,我们PWM的频率是怎么来的?PWM的频率是根据匹配2来设置的,这里我借用正点原子的教程来解释。匹配值也就是ctimer频率除以想要的频率,最后记得减一,默认分频是+1的。

75080094ef1e488a9f1381157b5407e6.png

因此的我们的算法就是:(主频/想要频率)-1。写法如下

CTIMER_UpdatePwmPulsePeriod(CTIMER0,kCTIMER_Match_2,(CLOCK_GetFreq(kCLOCK_CoreSysClk) / 2000) - 1U);

 最后我们不仅仅要更新匹配2,还要更新匹配3

5070f48451224d18a0f69f7dc9687aa2.png

我们来实验一下

0cc7023f87314291918d5ad3088b5763.png

可以看到频率和占空比都对了。

3.总结

总的来说804里面只有一个定时器,这极大地限制了使用场景,PWM与基础定时器不能同时使用,我也依然在想办法去拓展功能,后面如果找到了方法可以拓展定时器功能我再发布吧。下面我打算先更新AD/DA的使用,这两天快递太慢了,到现在逻辑分析仪还没到。好了还是那句话,学浅才疏,有事么问题欢迎讨论。

 

  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值