MSPM0G3507的学习记录(个人记录4)

使用定时器输出PWM

目的:参加电赛,学习记录,创作者的视角来学习。

使用芯片:LP-MSPM0G3507

工具:ccs

例程:timx_timer_mode_pwm_edge_sleep

学习PWM,通过生成不同占空比,不P同周期的WM来控制云台等。

首先在ccs中使用syscfg工具对TIME_PWM配置。

跟定时器的配置一样 ,命名。

对信号基础设置Basic Configuration

Timer Clock Source一般都使用BUSCLK

Calculated Timer Clock Values进一步分频,得到需要的频率。Start Timey一般不勾选,通过代码启动。

PWM的设置PWM Configuration

PWM Mode:3个选项。Edge-aligned Down CountingEdge-aligned Up Counting为边缘对齐的PWM信号。Center-aligned中心对齐的PWM信号。

PWM channel一个定时器可以同时输出4PWM波。频率相同,后面可以设置不同的占空比。

对不同PWM设置占空比

设置不同占空比Desired Duty Cycle (%)

后面的设置

高级设置不常用,在输出PWM波是不用中断。

Pin Configuration引脚设置

PinMuxPeripheral and Pin Configuration为选择哪个定时器输出以及输出引脚设置。

在主程序的代码中,代码简单。大多是由syscfg配置完成。后期我们可以通过代码来设置控制占空比。

 DL_TimerG_startCounter(PWM_0_INST);//定时器开始计数

DL_Timer_startCounter

作用启动定时器计数器

DL-GPIO_rest

作用

通过代码来控制占空比。

原理:通过定义一个函数来控制占空比。

通过查阅  Generated Source   中的.h头文件,我们知道了控制占空比的函数为DL_TimerG_setCaptureCompareValue()

格式如下:DL_TimerG_setCaptureCompareValue(PWM_0_INST, 70, DL_TIMER_CC_0_INDEX);

中间的数值为Counter Compare Value与占空比相关。它的计算方式是

Counter Compare Value等于PWM Period Count减去PWM Period Count乘以占空比

例如:70=100-100*30%

关系还有:PWM Period Count乘以Calculated PWM Frequency (Hz)等于Calculated Clock Frequency (Hz)

函数DL_Timer_setCaptureCompareValue

作用:设置计时器捕获比较值。

格式:

第一个代码:通过按键改变输出的PWM

#include "ti_msp_dl_config.h"

int main(void)
{
    SYSCFG_DL_init();
    DL_TimerG_startCounter(PWM_0_INST );//开始定时器计数,产生PWM波

    while (1) {
        if (DL_GPIO_readPins(GPIO_BUTTON_PORT ,GPIO_BUTTON_PIN_S2_PIN )) 
        //通过按键来改变占空比。
        {
            DL_TimerG_setCaptureCompareValue(PWM_0_INST, 179, DL_TIMER_CC_0_INDEX);
            DL_TimerG_setCaptureCompareValue(PWM_0_INST, 76, DL_TIMER_CC_1_INDEX);
        }
        else {
             DL_TimerG_setCaptureCompareValue(PWM_0_INST, 76, DL_TIMER_CC_0_INDEX);
             DL_TimerG_setCaptureCompareValue(PWM_0_INST, 179, DL_TIMER_CC_1_INDEX);
        }
    }
}

 第二的代码:通过包装一个函数,控制占空比

#include "ti_msp_dl_config.h"

void  set_duty(float duty,uint8_t channe1)//定义函数,进行变量控制
{

    uint32_t Comparevalue;//代表syskgf中的PWM Period Count
     Comparevalue=100-100*duty;//计算Comparevalu,代表的是占空比

    if (channe1==0) 
    {
         DL_TimerG_setCaptureCompareValue(PWM_0_INST,Comparevalue, DL_TIMER_CC_0_INDEX);
         
    }
    else if (channe1==1) {
        DL_TimerG_setCaptureCompareValue(PWM_0_INST, Comparevalue, DL_TIMER_CC_1_INDEX);
    
    }
}



int main(void)
{
    SYSCFG_DL_init();
    DL_Timer_startCounter(PWM_0_INST );//开始定时器计数,产生PWM波
        while (1) {
        if (DL_GPIO_readPins(GPIO_BUTTON_PORT ,GPIO_BUTTON_PIN_S2_PIN )) 
        {
        set_duty(0.3,0);
        set_duty(0.7,1);
        }
        else 
        {    
          set_duty(0.7,0);
          set_duty(0.3,1); 
        }
                 }
}

第三个代码:通过包装两个函数,来控制PWM的频率和占空比并用按键切换 

#include "ti_msp_dl_config.h"
uint32_t period;//定义频率

void set_freq(uint32_t freq,uint8_t channe1)//包装函数,改变方波频率
{
    
     period=PWM_0_INST_CLK_FREQ /freq;//宏定义PWM_0_INST_CLK_FREQ直接调用。
     //计算频率

    DL_Timer_setLoadValue(PWM_0_INST,period);

}

void  set_duty(float duty,uint8_t channe1)//定义函数,进行变量控制
{

    uint32_t Comparevalue;
     Comparevalue=period-period*duty;//计算Comparevalu,代表的是占空比

    if (channe1==0) 
    {
         DL_TimerG_setCaptureCompareValue(PWM_0_INST,Comparevalue, DL_TIMER_CC_0_INDEX);
         
    }
    else if (channe1==1) {
        DL_TimerG_setCaptureCompareValue(PWM_0_INST, Comparevalue, DL_TIMER_CC_1_INDEX);
    
    }
}



int main(void)
{
    SYSCFG_DL_init();
    DL_Timer_startCounter(PWM_0_INST );

        while (1) {
        if (DL_GPIO_readPins(GPIO_BUTTON_PORT ,GPIO_BUTTON_PIN_S2_PIN )) 
        {
        set_freq(100, 1);
        set_duty(0.3,0);
        set_duty(0.7,1);
        }
        else 
        {   
              set_freq(200, 1); 
          set_duty(0.7,0);
          set_duty(0.3,1); 
        }
                 }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值