Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
nuc980
PWM
NUC980-IOT之PWM测试
发布于 2022-04-12 10:04:19 浏览:875
订阅该版
[tocm] # NUC980-IOT板之PWM评测 ## 一、测评简介 - 本次评测需要验证NUC980的PWM功能,用NUC980的PWM来驱动GP8301,通过调节PWM0-100%占空比,实现0-20mA电流信号的输出。 ## 二、评测环境 - 开发软件:RT-Thread Studio - 评估板:NUC980-IOT V1.0 - 烧写工具:NUWriter ## 三、评测内容 - 使用NUC980的PWM功能来完成对GP8301芯片的驱动,通过调节PWM的占空比,让GP8301输出0-20mA的电流。 ### 3.1、PWM驱动GP8301电路 ![GP8301.png](https://oss-club.rt-thread.org/uploads/20220412/515981d9704f3d2b9a7472e271d1542b.png.webp) - GP8301是一种PAC芯片,即以PWM为接口的DAC芯片。GP8301将0%-100%占空比的PWM输入转换成0/4-20mA电流输出。GP8301内置双路12BIT DAC,输出电流线性误差<0.1%。适合应用与各类仪表、工业控制器等产品。 #### 特点: - PWM转0/4-20mA - GP8301输入信号:0%-100% PWM - 输入PWM频率:50Hz-50KHz - GP8301分辨率:12 BIT - 输出电流线性误差 <0.1% - 电源电压:10V - 30V - 功耗:<2mA - 启动时间:<2ms - 工作温度:-40°C to 85°C(125°C) - 曲线数据:I2C输入电流输出(100点) - 数据:PWM输入电压输出(100点) ![输出特性.png](https://oss-club.rt-thread.org/uploads/20220412/8aad496c64315378417281cd73d04f8b.png.webp) ### 3.2、NUC980-PWM概述 - 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 输出电平。 ### 3.3特性 - 3.3.1、4 个独立的 PWM 输出, 每个通道均带有中断 - 3.3.2、互补的 PWM 对, (CH0, CH1) 及 (CH2, CH3), 支持程序设计死区发生器 - 3.3.3、每对 PWM 内部带有 8 位预分频, 以及除频器 - 3.3.4、高达 16 位的 PWM 计数器以及比较器宽度 - 3.3.5、每个通道均可设置独立的时钟源 - 3.3.6、支持单次或连续模式 ### 3.4、方框图 ![方框图.png](https://oss-club.rt-thread.org/uploads/20220412/2324a50b8eb6b797e0b35e2b69e34cbd.png.webp) ### 3.5、 PWM 定时器开启过程 - 以下以设置 PWM 通道 0 当例子, 说明启动 PWM 的步骤. - 1). 设置时钟选择器 CLKSEL0 (PWM_CSR[2:0]) - 2). 设置预分频器 PRESCALE (PWM_PPR[7:0]) - 3). 设置 CH0INV (PWM_PCR[2]) , 控制输出反转打开或是关闭关闭 - 4). 设置 DZEN01 (PWM_PCR[4]) 控制死区发生器打开/关闭, 若是死区功能开启, 设置死区间隔 DZL01 (PWM_PPR[23:16]) - 5). 设置 CH0MOD (PWM_PCR[3]), 选择工作模式是自动重载或是单次模式. - 6). 设置中断使能位 PIER0 (PWM_PIER[0]) - 7). 设置相应管脚为 PWM 功能 - 8). 将 CH0EN((PWM-PCR[0])) 置 1. 使能 PWM 下数型计数器开始运行,设置 PWMx-CMR 寄存器的和 PWMx_CNR 寄存器位域来设定 PWM 占空比 上述步骤中的 1~8 可以不按照上述的顺序设置,这对 PWM 定时器的正常工作没有影响。 ## 四、代码调试 ### 4.1、建立RT-Thread工程 ![建立工程.png](https://oss-club.rt-thread.org/uploads/20220412/3c5823f4d2f7728847fd24c3ad182f22.png) ### 4.2、RT-Thread设置 在RT-Thread Settings中,PWM默认使能 ![默认使能.png](https://oss-club.rt-thread.org/uploads/20220412/760ccba575a59482d93bf17a13a5c9dd.png.webp) 默认使能PWM0 ![使能PWM0.png](https://oss-club.rt-thread.org/uploads/20220412/2cd575b06cb926eba541060a503148ae.png.webp) ### 4.3、PWM引脚设置初始化 - 在nu_pin_init.c中已对PWM引脚进行初始化,配置PF7和PF8分别为PWM02和PWM03. ``` static void nu_pin_pwm_init(void) { /* PWM02, PWM03: PF[7, 8] */ outpw(REG_SYS_GPF_MFPL, (inpw(REG_SYS_GPF_MFPL) & ~0xF0000000) | 0x40000000); outpw(REG_SYS_GPF_MFPH, (inpw(REG_SYS_GPF_MFPH) & ~0x0000000F) | 0x00000004); } ``` 4.4、PWM应用程序-占空比调节 ``` uint32_t dutysetting=0,addflag=0,reduceflag=0; pwm_dev = (struct rt_device_pwm *)rt_device_find(pwm_name); rt_pwm_enable(pwm_dev, 2); rt_pwm_set(pwm_dev, 2, 100000, dutysetting); ``` - 通过调节dutysetting来完成占空比调节 ### 4.5、测试 通过测试,程序在运行过程中,可以周期性调节占空比,进而让GP8301产生连续的电流变化,为了观察方便,电流从1-18mA成线性变化。 ![测试.png](https://oss-club.rt-thread.org/uploads/20220412/b11761aae7be707d96fae6bdd51ccdc5.png.webp) ## 五、评测感想 RT-Thread在各个行业都有广泛的应用,对个人来讲,这次评测是第一次从零开始接触RT-Thread。RT-Thread Studio界面友好,可以方便的对MCU软件包及外设进行管理,非常适合快速项目应用开发。针对NUC980-IOT板的测试还有很多,以此为契机,把RT-Thread和NUC980应用到实际项目中。
1
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
多明哥
这家伙很懒,什么也没写!
文章
2
回答
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
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部