Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread一般讨论
M2354
【NuMaker-M2354试用】定时器——单路PWM
发布于 2021-12-16 11:56:52 浏览:877
订阅该版
[tocm] #### 环境介绍 Keil : 版本5.34.0.0 编译器V6 官方SDK版本:Nuvoton.NuMicro_DFP.1.3.12 RT_THREAD -3.15 nano 请在KEil 的Run-Time Environment环境进行下载 #### 芯片资源介绍 手上的这个M2354芯片定时器资源十分的丰富,6个32位定时器,每个定时器有 1 个 24 位向上计数器。其中TMR0-TMR3四个功能强大,有带死去的互补PWM功能适合电机控制,TMR4-TMR5 PWM简单一些。详细功能参考TRM_M2354_Series_EN_Rev1.01文档 第6章9小节。 该芯片的PWM功能和定时器的功能比较独立,寄存器都是独立的,PWM有自己的计数器16位,比较器和重装载寄存器。详细功能参考手册6.9.6 PWM的功能描述 #### 例程功能介绍 绿灯在使用操作RT RTOS 一个线程实现绿灯1秒闪烁一次。 实现功能: 定时器0的通道1 10KHz 的PWM 输出控制一个LED实现呼吸灯 **关注点:**PWM时钟计算、PWM周期计算 #### 工作原理: 设置计数模式的PWM为向上计数,(另有向下计数、中心对齐计数模式) 计数操作模式为自动自动重载模式(另有单次模式) 输出模式为独立模式,(另外有互补输出模式,一般驱动上下MOS) P**WM脉冲发生器利用计数器和比较器事件产生PWM输出脉冲。**在Timer0 ~ Timer3 PWM中,事件分为上计数型和下计数型的零点和周期点,上下计数型的中心点,三种计数类型的计数器等于比较器点。 下面是向上计数的事件点, ![1639574977496.png](https://oss-club.rt-thread.org/uploads/20211216/c7b04378ce4e06a6bdc71462a4adfd0c.png.webp) ![1639571267132.png](https://oss-club.rt-thread.org/uploads/20211216/203c66ed9b9ac44a46e086fa631e8c5c.png) 向上计数的就这个三点决定占空比,分别是PWM的周期起点,跳变点,周期终点 这个对比事件和零点事件还有一个优先级的问题,不过以从文档中并没有太理解说明的问题 ![1639571462266.png](https://oss-club.rt-thread.org/uploads/20211216/33cf2db8c0a485926c16237dbeced626.png.webp) 根据事件优先级的限制,PWM发生器只支持上计数和上下计数两种占空比为0%和100%的PWM输出波形。下图是向上计数的占空比从0%到100%PERIOD为4,CMP值不同 (原文), 这句话不是很好理解,理解的朋友可以留言一下 但是可以确认PWM零点事件到比较事件区间是一个电平,比较事件到周期点一个电平。比较值大于重装载值,计数器为0,是一种电平,小于是,是一种电平。具体电平和极性有关。 ![1639620532954.png](https://oss-club.rt-thread.org/uploads/20211216/db44960282c56851058f3d8acdca064a.png.webp) 最后我们实现一个10Khz频率,占空比可调的功能 TIME_CLK 96MHz PWM分频96,pwm的基础频率就是1Mhz ,pwm的基础频率/计数值 = 周期10Khz 现在PWM的控比只和比较值有关了,我们在程序运行的时候不断更改就可以调整占空比了 TIMERx_PWMPOLCTL[0] 控制PWM输出的极性。 配置步骤 - 确认外设时钟源,以及频率,设置预分频器 - 设置工作模式 - 设置CMP 的初始值 - 配置中断优先级 - 使能中断,TIMERx_CMP与TIMERx_CNT值匹配中断,TIF中断。 - 使能定时器 代码 初始化函数 ``` void TIMER0_PWM_Init(void) { /*使能外设时钟*/ CLK_EnableModuleClock(TMR0_MODULE); CLK_SetModuleClock(TMR0_MODULE, CLK_CLKSEL1_TMR0SEL_PCLK0, 0); /*重映射引脚*/ SYS->GPB_MFPL &= ~(TM0_PB5_Msk | EPWM1_BRAKE0_PB7_Msk); SYS->GPB_MFPL |= (TM0_PB5 | EPWM1_BRAKE0_PB7); TPWM_ENABLE_PWM_MODE(TIMER0); TPWM_ENABLE_INDEPENDENT_MODE(TIMER0); TPWM_SET_COUNTER_TYPE(TIMER0, TPWM_UP_COUNT); TPWM_ENABLE_OUTPUT(TIMER0, TPWM_CH0); // TPWM_ConfigOutputFreqAndDuty(TIMER0, 1000, 50); //SDK提供的api TPWM_SET_CMPDAT(TIMER0, 49); TPWM_SET_PERIOD(TIMER0, 99); TPWM_SET_PRESCALER(TIMER0,95); TPWM_START_COUNTER(TIMER0); } ``` 应用线程 ``` static void rt_pwm_thread_entry(void* parameter) { static uint8_t temp; static uint8_t flag; while(1) { if(flag == 0) { temp++; if(temp >= 100) { flag = 1; } } else { temp--; if(temp <= 0) { flag = 0; } } TPWM_SET_CMPDAT(TIMER0, temp); rt_thread_delay(15); } } ``` 输出结果 ![image.png](https://oss-club.rt-thread.org/uploads/20211216/c2a9b4104f593295f43ae218213cddc5.jpg.webp) 使用下来,芯片PWM功能都大同小异,不过从寄存器数量可以看出来M2354定时器PWM功能很丰富 代码https://gitee.com/z-day-by-day/nu-maker-m2354 演示视频https://www.bilibili.com/video/BV1BS4y1Q7ri?spm_id_from=333.999.0.0
0
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
wenkit
这家伙很懒,什么也没写!
文章
3
回答
0
被采纳
0
关注TA
发私信
相关文章
1
有关动态模块加载的一篇论文
2
最近的调程序总结
3
晕掉了,这么久都不见layer2的踪影啊
4
继续K9ii的历程
5
[GUI相关] FreeType 2
6
[GUI相关]嵌入式系统中文输入法的设计
7
20081101 RT-Thread开发者聚会总结
8
嵌入式系统基础
9
linux2.4.19在at91rm9200 上的寄存器设置
10
[转]基于嵌入式Linux的通用触摸屏校准程序
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
freemodbus
PWM
flash
cubemx
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
编译报错
Debug
rt_mq_消息队列_msg_queue
SFUD
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
踩姑娘的小蘑菇
4
个答案
1
次被采纳
红枫
4
个答案
1
次被采纳
张世争
4
个答案
1
次被采纳
Ryan_CW
4
个答案
1
次被采纳
xiaorui
1
个答案
1
次被采纳
本月文章贡献
catcatbing
3
篇文章
5
次点赞
qq1078249029
2
篇文章
2
次点赞
xnosky
2
篇文章
1
次点赞
Woshizhapuren
1
篇文章
5
次点赞
YZRD
1
篇文章
2
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部