MSP430F5529库函数定时器A——硬件PWM

需提前学习:MSP430F5529库函数定时器A——定时中断引脚手册获取

目录

先上代码

详解

引脚复用

选择引脚

获取引脚手册

看手册 

时钟选择

分频

周期

REGISTER选择

比较输出模式

模式类型

 增计数模式下的比较输出

连续计数模式下的比较输出

增减计数模式下的比较输出

占空比选择

Timer_A_outputPWM()初始化

函数定义

参数baseAddress

Timer_A_setCompareValue()函数介绍

函数定义

参数

baseAddress

compareRegister

 compareValue


先上代码

我们先贴代码,再介绍这样方便理解。

#include "driverlib.h"


#define TIMER_PERIOD 8192

void Timer_A0_PWM_Init(void)
{
    Timer_A_outputPWMParam htim = {0};
    //P1.2复用输出
    GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P1, GPIO_PIN2);
    //时钟源选为SMCLK =  1048576 HZ
    htim.clockSource = TIMER_A_CLOCKSOURCE_SMCLK;
    //分频系数设为32  32768HZ
    htim.clockSourceDivider = TIMER_A_CLOCKSOURCE_DIVIDER_32;
    //装载值设为8192 - 1  ,周期为0.25s
    htim.timerPeriod = TIMER_PERIOD - 1;
    //P1.2 对应 TA0.1 故设为TIMER_A_CAPTURECOMPARE_REGISTER_1   定时器为0
    htim.compareRegister = TIMER_A_CAPTURECOMPARE_REGISTER_1;
    //选择复位置位模式
    htim.compareOutputMode = TIMER_A_OUTPUTMODE_RESET_SET;
    //设置占空比,为5%
    htim.dutyCycle = TIMER_PERIOD / 20 ;
    //P1.2 对应 TA0.1 为TIMER_A0_BASE
    Timer_A_outputPWM(TIMER_A0_BASE, &htim);
}


int main(void)
{
    WDT_A_hold(WDT_A_BASE);

    Timer_A0_PWM_Init();

    //interrupts enabled
    __bis_SR_register(GIE);

    while(1)
    {
    }
}


详解

引脚复用

选择引脚

 我们选择P1.2作为硬件PWM输出,他对应的是定时器0的1脚。所以复用引脚为输出,使用GPIO_setAsPeripheralModuleFunctionOutputPin()函数

获取引脚手册

可能有人想知道这个怎么看,首先我们得获引脚手册。打开我的git仓库——>点击引脚功能数据手册英文版——>下载

看手册 

这个引脚对应复用功能在7.2 Signal Descriptions章节,也就是第16页。

时钟选择

clockSource 是时钟选择,我们此处选择SMCLK时钟。

SMCLK系统默认 1048576Hz,ACLK系统默认为32768Hz。

分频

clockSourceDivider 是分频的,如果你不知道这里能填写什么,可以鼠标到clockSourceDivider处,点击F3。你看他上面的注释就是可选参数。

周期

选择的周期数-1存入timerPeriod 中。如果我们定时周期为500,那么存入timerPeriod 的值为499,也就是500-1

REGISTER选择

因为我们设置的是P1.2引脚,查看手册可知,对应的是定时器0的CCI1A。所以此处选择TIMER_A_CAPTURECOMPARE_REGISTER_1,如果是对应的定时器的CCI2A,此处就选择TIMER_A_CAPTURECOMPARE_REGISTER_2。

比较输出模式

compareOutputMode 设置比较输出模式

模式类型

模式有如下

对应可选参数如下

注意:电平输出模式(000)没有选择

#define TIMER_A_OUTPUTMODE_OUTBITVALUE                                 OUTMOD_0
#define TIMER_A_OUTPUTMODE_SET                                         OUTMOD_1
#define TIMER_A_OUTPUTMODE_TOGGLE_RESET                                OUTMOD_2
#define TIMER_A_OUTPUTMODE_SET_RESET                                   OUTMOD_3
#define TIMER_A_OUTPUTMODE_TOGGLE                                      OUTMOD_4
#define TIMER_A_OUTPUTMODE_RESET                                       OUTMOD_5
#define TIMER_A_OUTPUTMODE_TOGGLE_SET                                  OUTMOD_6
#define TIMER_A_OUTPUTMODE_RESET_SET                                   OUTMOD_7

 增计数模式下的比较输出

在增计数模式下,当TAR增加到TAxCCRn或从TAxCCR0计数到0时,定时器输出信号按选择的输出模式发生变化。示例如图所示,该示例利用了TAxCCR0和TAxCCR1。

因为我只讲增计数模式,感觉正常使用也只会用到这个,所以建议看完这个一部分,下面两个可以不看。

连续计数模式下的比较输出

在连续计数模式下,定时器输出波形与增计数模式一样,只是计数器在增计数到TAxCCR0后还要继续增计数到0FFFFh,这样就延长了计数器计数到TAxCCR1数值的时间。在连续计数模式下的输出波形如图所示。在该示例中同样用到了TAxCCR0和TAxCCR1。

增减计数模式下的比较输出

这个用的少 

占空比选择

这个里面的数值你自己填,比如我设置的周期是TIMER_PERIOD。那么我设置占空比为5%,就可以这样写

    //设置占空比,为5%
    htim.dutyCycle = TIMER_PERIOD / 20 ;

Timer_A_outputPWM()初始化

函数定义

void Timer_A_outputPWM(uint16_t baseAddress, Timer_A_outputPWMParam *param)

作用

计时器A运行在增计数模式产生PWM

参数baseAddress

可选值如下

TIMER_A0_BASE
TIMER_A1_BASE
TIMER_A2_BASE

Timer_A_setCompareValue()函数介绍

我们做硬件PWM除了初始化的时候可以进行设置占空比,还可以在其他时刻进行设置占空比。这样就需要使用这个函数了

函数定义

void Timer_A_setCompareValue (  uint16_t baseAddress,uint16_t compareRegister,uint16_t compareValue)

参数

baseAddress

baseAddress与Timer_A_outputPWM()函数的一致

compareRegister

选择所设置更改PWM的引脚

#define TIMER_A_CAPTURECOMPARE_REGISTER_0                                  0x02
#define TIMER_A_CAPTURECOMPARE_REGISTER_1                                  0x04
#define TIMER_A_CAPTURECOMPARE_REGISTER_2                                  0x06
#define TIMER_A_CAPTURECOMPARE_REGISTER_3                                  0x08
#define TIMER_A_CAPTURECOMPARE_REGISTER_4                                  0x0A
#define TIMER_A_CAPTURECOMPARE_REGISTER_5                                  0x0C
#define TIMER_A_CAPTURECOMPARE_REGISTER_6                                  0x0E

 compareValue

设置要最后改成的数值

  • 7
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
您可以使用MSP430F5529库函数来实现PWM驱动直流电机的例程。首先,您可以利用定时器A来生成PWM信号。您可以参考MSP430F5529 DriverLib库函数学习笔记中的定时器A部分,了解如何使用定时器A来生成PWM信号\[1\]。另外,您还可以参考MSP430F5529库函数定时器A——硬件PWM的例程,了解如何在实际操作中使用库函数来实现PWM驱动\[1\]。 在设置GPIO引脚的驱动能力方面,您可以使用GPIO_setDriveStrength函数来设置引脚的驱动能力。例如,如果您想将P1.0设置为强驱动,您可以使用以下代码\[2\]: GPIO_setDriveStrength(GPIO_PORT_P1, GPIO_PIN0, GPIO_FULL_OUTPUT_DRIVE_STRENGTH); 默认情况下,系统将引脚的驱动能力设置为弱驱动。如果您想修改引脚的驱动能力,您可以使用GPIO_REDUCED_OUTPUT_DRIVE_STRENGTH和GPIO_FULL_OUTPUT_DRIVE_STRENGTH参数来设置引脚的驱动能力为弱驱动或强驱动\[3\]。 综上所述,您可以使用MSP430F5529库函数来实现PWM驱动直流电机的例程。您可以参考MSP430F5529 DriverLib库函数学习笔记和MSP430F5529库函数定时器A——硬件PWM的例程来了解如何使用库函数来生成PWM信号和设置引脚的驱动能力。 #### 引用[.reference_title] - *1* [MSP430F5529库函数定时器A——捕获实验](https://blog.csdn.net/qq_63922192/article/details/127779050)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [MSP430F5529库函数GPIO学习](https://blog.csdn.net/qq_63922192/article/details/127673982)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风正豪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值