Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
nuc980
PWM
Nuvoton_新唐mcu
NUC980测评——PWM
发布于 2022-03-24 11:21:25 浏览:1220
订阅该版
开发板:新唐NK-980IOT V1.0 开发工具:RT-Thread Studio 2.21;NUWriter 1.18 RT-Thread版本:4.05 ![IMG20220324102533.jpg](https://oss-club.rt-thread.org/uploads/20220324/f1aa7d71e3d10a40c2fd16302700e4f8.jpg.webp) 一、NUC980脉宽调制(PWM)介绍 1、概述 NUC980有两组PWM,分别为PWM0和PWM1,每个PWM有4个独立的PWM输出,CH0~CH3,或者作为两个带有可编程死区发生器的互补的PWM对,(CH0,CH1),(CH2,CH3)。 每两个PWM输出,(CH0,CH1),(CH2,CH3),共享同一个8-位预分频,同一个提供5级分频(1,1/2,1/4,1/8,1/16)的时钟分频器。每个PWM输出有一个用于PWM周期控制的独立的16位PWM下数型计数器,和一个用于PWM占空比控制的16位比较器。每一个死区发生器有两个输出,第一个死区发生器的输出是CH0和CH1,而第二个死区发生器的输出是CH2和CH3。PWM控制器一共提供4个独立的PWM中断标志,当某一个PWM周期下数计数器计数到0时,相应的中断标志由硬件置位。当PWM中断源和相应的中断使能位有效时,PWM中断将会被触发。每一个PWM输出都可以被配置为单次模式来产生仅一个PWM周期的信号,或者连续模式来连续输出PWM波形。 当DZEN01(PWM_PCR[4])位被设置为1时,CH0与CH1执行互补的PWM对功能,这一对PWM的时序,周期,占空比,和死区时间由PWM通道0定时器和死区发生器0决定。同样,当DZEN23(PWM_PCR[5])位被设置为1时,互补的PWM对(CH2,CH3)由PWM通道2控制。 为防止PWM驱动输出引脚输出不稳定波形,16位周期下数型计数器和16位比较器均采用双缓存,当用户向计数器/比较器缓存寄存器内写入值时,只有当下数型计数器的值计数到0时,更新的值才会被重载下数型计数器/比较器。该双缓存特性可以避免PWM输出时产生干扰波形。 当16位下数型计数器达到0时,中断要求产生。如果PWM输出被设置为连续模式,当下数计数器计数到0时,下数计数器会重复自动重新装载PWMx_CNR寄存器中CNR的值,并开始减计数。如果PWM输出被设置为单次模式,当下数计数器计数到0时,停止计数,并产生一个插断要求。 PWM比较器用于脉冲宽度调制,当下数计数器的值与比较寄存器的值匹配时,计数器控制逻辑会改变PWM输出电平。 2、特性 (1)4个独立的PWM输出,每个通道均带有中断 (2)互补的PWM对,(CH0,CH1)及(CH2,CH3),支持程序设计死区发生器 (3)每对PWM内部带有8位预分频,以及除频器 (4)高达16位的PWM计数器以及比较器宽度 (5)每个通道均可设置独立的时钟源 (6)支持单次或连续模式 ![图1.png](https://oss-club.rt-thread.org/uploads/20220324/e7c717a80866382bb00c7e3d3c9cb5da.png.webp) 3、功能描述 (1)PWM定时器操作 PWM周期和占空比控制由PWMx_CNR寄存器和PWMx_CMR寄存器决定。PWM定时器工作时序如下图。脉宽调制的公式如下: PWM频率=PWM_CLK/((prescale+1)*(clockdivider))/(CNR+1) PWM占空比=(CMR+1)/(CNR+1) 由输出波形来看,当CMR>=CNR:PWM输出总是为高。当CMR
#include
#include
#define pwm_name "pwm0" struct rt_device_pwm *pwm_dev; /* PWM设备句柄 */ int main(int argc, char **argv) { uint32_t duty=0,d=0; pwm_dev = (struct rt_device_pwm *)rt_device_find(pwm_name); rt_pwm_enable(pwm_dev, 2); rt_pwm_enable(pwm_dev, 3); rt_pwm_set(pwm_dev, 2, 100000, duty); rt_pwm_set(pwm_dev, 3, 100000, duty); while (1) { rt_pwm_set(pwm_dev, 2, 100000, duty); rt_pwm_set(pwm_dev, 3, 100000, duty); rt_kprintf("dutycycle=%u\r\n",duty); if(d==0) { duty+=5000; } if(d==1) { duty-=5000; } if(duty>90000) d=1; if(duty<6000) d=0; rt_thread_mdelay(500); } } ``` 三、测试 通过测试发现LED5从亮到暗,再从暗到亮,周期性变化,示波器的PWM03的波形占空比也是周期性的变化。 程序代码:[https://gitee.com/pandw/rt-thread-nuc980-pwm](https://gitee.com/pandw/rt-thread-nuc980-pwm) 视频:[https://www.bilibili.com/video/BV1iF411W7wp/](https://www.bilibili.com/video/BV1iF411W7wp/) 四、感想 使用RT-Thread操作系统进行操作真是非常简单,但是由于该操作系统可以用于多个设备,会使设备的个性化不是很完整,如NUC980的死区设置、单次操作在操作系统给的指令中体现不出来,这点还需要努力。
1
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
主战坦克
主战坦克
文章
5
回答
0
被采纳
0
关注TA
发私信
相关文章
1
玩iot camera笔记之3测试试用3路pwm
2
[已解决]PWM输出异常分析
3
给RT-Thread添加PWM驱动框架
4
关于rt-thread-3.1.0 pwm
5
关于rt-thread的PWM框架在stm32f103vf应用的疑问
6
rt-thread stm32 bsp adc pwm 外设适配好了吗
7
stm32f103ze 添加pwm 设备失败
8
【正点原子】潘多拉IoT-STM32L475开发板 用menuconfig 看不到PWM....
9
关于rtthread 4.0.0版本中pwm的初始化定时器寄存器读写问题
10
RT-Thread正点原子战舰V3使用PWM设备驱动没有输出
推荐文章
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
flashDB
GD32
socket
中断
编译报错
Debug
SFUD
rt_mq_消息队列_msg_queue
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
a1012112796
10
个答案
1
次被采纳
踩姑娘的小蘑菇
4
个答案
1
次被采纳
红枫
4
个答案
1
次被采纳
张世争
4
个答案
1
次被采纳
Ryan_CW
4
个答案
1
次被采纳
本月文章贡献
catcatbing
3
篇文章
5
次点赞
YZRD
2
篇文章
5
次点赞
qq1078249029
2
篇文章
2
次点赞
xnosky
2
篇文章
1
次点赞
Woshizhapuren
1
篇文章
5
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部