1195|0

6060

帖子

6

TA的资源

版主

楼主
 

【MSPM0L1306 LaunchPad™ 开发套件】4-2 定时器的多种模式体验之PWM输出 [复制链接]

 

        上一章咱们对通用定时器的定时功能有了初步的了解与测试,本次将体验定时器的PWM输出能力

        首先在syscfg配置文件添加一个PWM,如下图:

        这个时候发现了一个小问题:

        定时器默认是TIMG0且无法修改,不要担忧,更改使用的定时器是在下方的PinMux配置:

        先择不同的定时器自动会切换到不同的IO口输出,继续进行定时器的PWM配置。

        首先进行定时器的基础配置,这个主要涉及到的就是PWM输出的周期,主要做的工作就是配置时钟源和分频系数以及PWM的周期,这一部分其实和定时功能的基础配置相同,只是最终的指示效果不同,配置完成之后可知直观的看到PWN的频率,例如上图最终配置的PWM的频率为500Hz;

        接下来进行PWM配置:

            选择模式:模式包括边对其向下计数、边对齐向上计数,中心对齐上下计数,边沿对齐可以产生更高频率的,中心对齐产生的是对称的PWM,此处测试选择边对其向下计数模式;

            选择通道:TIMG定时器都有两个通道,此处测试选择通道0;

            通道配置:包括初始状态、比较值等,可以通过设置占空比自动挡计算;

            更新模式:选择立即生效。

        基本配置完成,使用小锤子编译一下,然后DL_TimerG_startCounter(PWM_1_INST);启用定时器就可以了,这里需要注意,定时器1的PWM输出通道0对应的是PA0,这个和LED1的控制引脚重复,请关闭此前对于LED1的IO口初始化以及控制程序,上电下载后测试如下:

        PWM频率与占空比与设定一致。

应用实现:

        根据开发板的现有配置结合定时器的PWM输出,可以使用LED1实现呼吸灯的作用,呼吸灯的实现主要是通过TIMG0的定时功能控制TIMG PWM输出的占空比,由于定时需要将TIMG0定时通过syscfg配置文件修改为10ms,然后修改定时中断如下:

void TIMER_0_INST_IRQHandler(void)
{
    switch (DL_TimerG_getPendingInterrupt(TIMG0)) {
        case DL_TIMER_IIDX_ZERO:
            if(LED.UpFlag == 0)
            {
                LED.Upcnt++;
                if(LED.Upcnt%100 == 0)
                {
                    LED.UpFlag = 1;
                    LED.state++;
                    LED.Upcnt = 0;
                }
            }

            LED.PWMcnt++;
            if(LED.PWMcnt >= 10 && LED.PWMcnt <= 90)
            {
                DL_TimerG_setCaptureCompareValue(PWM_1_INST, 20*(100-LED.PWMcnt), DL_TIMER_CC_0_INDEX);
            }
            else if(LED.PWMcnt > 110 && LED.PWMcnt <= 190)
            {
                DL_TimerG_setCaptureCompareValue(PWM_1_INST, 20*(LED.PWMcnt-100), DL_TIMER_CC_0_INDEX);
            }
            if(LED.PWMcnt >= 200)
                LED.PWMcnt = 0;

            break;
        default:
            break;
    }
}

效果如下:

呼吸灯

 

此帖出自MSPM0 MCU论坛
点赞 关注
个人签名

在爱好的道路上不断前进,在生活的迷雾中播撒光引

 
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表