Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
PWM
M2354
【NuMaker-M2354试用】PWM测评
发布于 2021-12-18 00:22:59 浏览:876
订阅该版
近两年芯片涨价缺货严重,开始接触国产MCU,正好看到RT论坛的新唐开发板测评活动,果断的接手一个来试试。 **1. 任务说明:** 硬件平台:新唐 NuMaker-M2354开发板 软件平台:RT-Thead V4.0.4 开发环境:MDK V5.36 测评功能:PWM功能 任务周期:2021年11月19日-12月19日 **2.任务开展** 12月1日就拿到了开发板,很漂亮的板子,还自带了一个黑白显示屏,一个ESP的WIFI模块,很符合M2354这款基于M23内核的主打互联网安全性能的MCU气质,比较适用于物联网开发。另外板子集成了Nu-Link2-Me调试编程器。Nu-Link2-Me可透过SWD接口对新唐微控制器进行在线ICP编程与除错,也可以进行离线ICP编程,编程的状态会显示在状态LED上。Nu-Link2-Me也支持虚拟串口(VCOM)功能,可输出消息至终端机窗口,开发使用非常方便。不多说了上图: ![image.png](https://oss-club.rt-thread.org/uploads/20211218/28b06d981a5642e92877eb132acd33e7.png.webp) ![image.png](https://oss-club.rt-thread.org/uploads/20211218/981188edeea7189332118cb2f6057a51.png.webp) ![image.png](https://oss-club.rt-thread.org/uploads/20211218/fce4d225a1c302512a896c4282cd6ff1.png.webp) 很不巧刚好赶上公司一个紧急的项目,不停的加班,收到开发板后不得不先暂时放在一边了。终于在任务最后这几天抽出时间把PWM这块功能进行了一下测试。 **3. PWM模块介绍** 3.1 开发板介绍 3.2 PWM功能模块硬件介绍 PWM的原理和功能就不再赘述了,大家都比较熟悉。下面简单说一下M2354的PWM模块。 M2354的定时器资源十分的丰富,功能比较强大。详细参考一下芯片手册吧。(这里要强烈吐槽一下,新唐的官网打开网页还行,下载芯片手册实在太难了,下载手册需要注册会员,注册完成了以后登陆看不到提示成功或者失败,下载文件的时候就提示先登陆,然后登陆又没反应,如此循环,折腾好长时间硬是没能下载下来,难道是我的电脑问题?头疼。。。) NuMaker-M2354 V1.1的板子板载资源比较丰富,同时也把128个管脚脚都引了出来,还有UNO Interface的一些接口,已经焊好了排座,方便做扩展开发。从原理图上看,这里有几个PWM的接口,正好不用再自己焊排针了,直接用这个来做测试吧。 ![image.png](https://oss-club.rt-thread.org/uploads/20211218/103e65826e7c6dc53e51202fabbe36f3.png.webp) ![image.png](https://oss-club.rt-thread.org/uploads/20211218/d4f6dc91a6364fdea3ffd563234e6059.png.webp) 3.3 PWM功能模块使用说明 PWM的测试的话,需要用到示波器来显示所输出的波形,为了能更好的展示一些PWM的效果,这里准备用三个R、G、B LED灯,利用PWM的特性来实现呼吸灯的效果,这样更能直观的看出PWM的效果。 为了省事儿,这里就用洞洞板手工焊接三个指示灯,并通过杜邦线连接到NuMaker开发板,指示灯的原理图如下,由于这里设计PWM管脚控制的是LED的低边,随着PWM占空比的不断增大,LED也逐渐变暗,占比较减小,LED也逐渐变亮。 ![image.png](https://oss-club.rt-thread.org/uploads/20211218/54ad1bbc3d1592da6f7a2e6fad2fa1e3.png) **4. PWM功能测试** PWM的功能测试上边已经说了要用三个LED灯来做出呼吸灯的效果,来直观的展示PWM的效果,下面就介绍一下软件设计以及测试的整个过程 4.1 开发环境搭建 首先从nuvoton的官网下载相关的资料,和驱动文件。下载完成后进行开发环境的搭建。我们先安装Nu-Link_keil_Driver的驱动,驱动包含MDK的PACK包,安装这个驱动直接一起就把MDK的PACk包也安装了,不用再单独找PACK包安装。 然后就是下载RTT的源码包了,这里选择4.0.4版本。 在RTT的源码包中找到nuvotonnumaker-m2354的bsp文件夹,使用ENV工具,dist出独立的BSP工程文件夹,然后拷到自己的目标文件夹中去,然后就可以在这里进行开发了。 整个开发环境搭建的过程,论坛有大佬总结了一个详细的图解,我觉得比较清晰明了,这里借用下大佬的图,自己省个事儿(嘿嘿。。。。) ![image.png](https://oss-club.rt-thread.org/uploads/20211218/83f3cb286ace29c845f6c3026ea5cc50.png.webp) 4.2 模板下载测试 上一步拷贝出来的模板工程进行编译下载,确认一下是否有错误,程序能否正常运行,一切正常,然后在这个工程基础上添加PWM测试程序。 4.3 软件编写 使用ENV工具,menuconfig功能,来打开epwm1设备。保存并用socns –target=mdk5生成工程。 ![image.png](https://oss-club.rt-thread.org/uploads/20211218/aa7a028fda561072b7b86669b7a210df.png.webp) 新建一个空白文件,保存为breath_led.c,并添加到工程的Applications分组下 然后开始呼吸灯程序的编写,这里用到M2354的epwm1,通道0控制红色LED,通道1控制绿色LED,通到2控制蓝色LED。 软件调用RT的设备框架,代码如下: ``` #include
#include
#include
#define PWM_DEV_NAME "epwm1" #define RED_LED_CHANNEL 0 //红灯使用EPWM通道0,P5---PC12 #define GREEN_LED_CHANNEL 1 //绿灯使用EPWM通道1,P6---PC11 #define BLUE_LED_CHANNEL 2 //蓝灯使用功能WPEM通道2,P7---PC10 #define PERIOD 1000000 //PWM的周期为1ms,单位为ns struct rt_device_pwm *pwm_dev;//pwm设备句柄 rt_uint32_t pulse = 0;//PWM脉宽 rt_uint8_t dir = 1;//PWM脉宽调整方向 static void breath_led_thread_entry(void *param) { while (1) { if(dir) { pulse += 10000;//每次增加10000ns,10us } else { pulse -= 10000;//每次减少10000ns,10us } if (pulse >= PERIOD) { dir = 0; } if(pulse == 0) { dir = 1; } rt_pwm_set(pwm_dev, RED_LED_CHANNEL, PERIOD, pulse);//设置红灯PWM通道周期和脉宽初始值 rt_pwm_set(pwm_dev, GREEN_LED_CHANNEL, PERIOD, pulse);//设置绿灯PWM通道周期和脉宽初始值 rt_pwm_set(pwm_dev, BLUE_LED_CHANNEL, PERIOD, pulse);//设置蓝灯PWM通道周期和脉宽初始值 rt_thread_mdelay(30); } } static int breathe_led_init(void) { rt_thread_t thread; pwm_dev = (struct rt_device_pwm *)rt_device_find(PWM_DEV_NAME); if (pwm_dev ==RT_NULL) { rt_kprintf("Pwm init failed! Can't find %s device!\n", PWM_DEV_NAME); return RT_ERROR; } rt_pwm_set(pwm_dev, RED_LED_CHANNEL, PERIOD, pulse);//设置红灯PWM通道周期和脉宽初始值 rt_pwm_enable(pwm_dev, RED_LED_CHANNEL);//使能设备通道 rt_pwm_set(pwm_dev, GREEN_LED_CHANNEL, PERIOD, pulse);//设置绿灯PWM通道周期和脉宽初始值 rt_pwm_enable(pwm_dev, GREEN_LED_CHANNEL);//使能设备通道 rt_pwm_set(pwm_dev, BLUE_LED_CHANNEL, PERIOD, pulse);//设置蓝灯PWM通道周期和脉宽初始值 rt_pwm_enable(pwm_dev, BLUE_LED_CHANNEL);//使能设备通道 thread = rt_thread_create("breath", breath_led_thread_entry, RT_NULL, 1024, 15, 20); if(thread != RT_NULL) rt_thread_startup(thread); return RT_EOK; } INIT_APP_EXPORT(breathe_led_init); ``` 编译通过 ![image.png](https://oss-club.rt-thread.org/uploads/20211218/9134e38ff0bb52d5ad9a1f1a8b7a2b61.png.webp) 下载运行成功 ![image.png](https://oss-club.rt-thread.org/uploads/20211218/4d720528096aad72bc5322fff1c08c43.png.webp) 调用list_device命令可以看到epwm1设备已添加进来 ![image.png](https://oss-club.rt-thread.org/uploads/20211218/2593f04b24693bd10563de7f5e3e4599.png.webp) 调用pwm_get命令,可以查看epwm的通道的占空比在不断变化 ![image.png](https://oss-club.rt-thread.org/uploads/20211218/ccbd0571675876c1c4fce625dc23d9e1.png) 通过观察3个LED灯和示波器的波形,随着占空比的增大,LED灯逐渐变暗,随着占空比的减小,LED灯逐渐变亮,最终实现呼吸灯的效果,呼吸和波形变化效果如下: ![image.png](https://oss-club.rt-thread.org/uploads/20211218/7b07e9110750df9f3a140c76266ced9c.gif) **5. PWM性能测试** ![image.png](https://oss-club.rt-thread.org/uploads/20211218/e294bd4502ebd951a621232620a31f90.jpg.webp) **6. 可编译下载的代码链接** https://gitee.com/xiaoxiaolisunny/nu-maker-m2354/tree/master **7. 测试问题记录** **8. 心得体会** 新唐提供有PWM的驱动,并且已对接到RT的PWM设备驱动框架,使用时可以直接调用RT的PWM设备框架接口来进行开发,让开发者省去了底层的开发工作,还是非常方便的。另外PWM可以用来做很多有意思的应用,由于时间关系这里就只做了呼吸灯来测试,后期有空可以在做一些其他应用。
0
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
小小李sunny
这家伙很懒,什么也没写!
文章
4
回答
1444
被采纳
289
关注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
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
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部