一、M487 PWM简介 1、EPWM
8个独立PWM 输出,16位计数器,12位预分频,最大时钟 192MHz
12位死区时间
计数方式有:上计数,下计数,上/下计数
支持刹车功能
对每一个PWM输出管脚支持屏蔽功能和三态使能
12个独立PWM 输出,16位计数器,12位预分频,最大时钟 192MHz
可配成12个输入捕获,16位时间值
12位死区时间
计数方式有:上计数,下计数,上/下计数
可配置成3对互补模式PWM输出
有相位同步功能
支持刹车功能可自恢复
对每一个PWM输出管脚支持屏蔽功能和三态使能
可立即触发EADC/DAC启动转换
可延时触发EADC/DAC启动转换(M48xGC/M48xE8)
硬件短路输出检测(M48xGC/M48xE8)
2、BPWM
如果定时器中断信号产生,支持芯片从空闲/掉电模式唤醒
8个独立PWM 输出,16位计数器,12位预分频,最大时钟 192MHz
12位死区时间
计数方式有:上计数,下计数,上/下计数
支持刹车功能
对每一个PWM输出管脚支持屏蔽功能和三态使能 二、软件环境 rt-thread studio
SecureCRT
Logic 1.2.18 三、硬件环境 Nuvoton M487 开发板
Logic逻辑分析仪 四、建立测试环境 1、启动rt-thread studio建立基于Nuvoton M487的基本工程
2、配置工程打开PWM驱动
3、编译并烧写到开发板
在finsh输入list_device查看设备
可以查看PWM设备已经加载成功
4、配置PWM引脚
工程生成的nutool_pincfg.cfg文件好像只能用1.20版本打开,而我用的是1.23版本,又没找到1.20版本
只能在开发板原理图上看看有没现成可用的PWM引脚,在mikroBUS接口上有一个PWM输出
再通过nutool_PinView工具查看相应引脚的PWM通道
EPWM0的CH4通道可以使用
5、编写产生PWM的代码 pwm_dev = (struct rt_device_pwm *)rt_device_find("epwm0");
if (pwm_dev == RT_NULL)
{
//LOG_E("pwm run failed! can't find %s device!
", "epwm0");
return RT_ERROR;
}
rt_pwm_enable(pwm_dev,4);
rt_pwm_set(pwm_dev, 4, 1000, 500); 6、逻辑分析仪工具查看产生PWM信号
与程序设定的PWM频率、占空比一致 五、测评总结 1、工程生成的pincfg文件不能用1.20更高的版本打开,官网也没有1.20版本下载,导致pincfg文件没法配置
2、查看新唐对rt-thread的PWM驱动适配源码的配置项 struct rt_pwm_configuration
{
rt_uint32_t channel; /* 0-n */
rt_uint32_t period; /* unit:ns 1ns~4.29s:1Ghz~0.23hz */
rt_uint32_t pulse; /* unit:ns (pulse<=period) */
/*
* RT_TRUE : The channel of pwm is complememtary.
* RT_FALSE : The channel of pwm is nomal.
*/
rt_bool_t complementary;
}; 只能配置频率、占空比、通道等的简单功能配置,只能作为一个简单PWM信号发生器,其它功能没法通过驱动框架进行配置,如需使用电机驱动,死区控制等的功能还是直接操作StdDriver驱动使用吧 总结一句:这个PWM的驱动适配就是一个鸡肋!!!
原作者:kun222
|