[技术问答] N76E003 PWM 程序及分析(边沿对齐、独立输出模式)

[复制链接]
1169|1
 楼主| 注销 发表于 2020-9-8 10:17 | 显示全部楼层 |阅读模式
N76E003 包含三对( 6个PWM通道) 16位精度、可调周期和占空比的PWM输出


让我们来看看六个通道的引脚分别是
70.jpg
可能有同学会疑问,为什么P1.5和P0.3都是PWM5,那如果要使用PWM5,该如何选择引脚呢?我们来看看芯片内部的原理图。
70.jpg
还是以PWM5为例:芯片内部是通过一个二选一选择器来进行引脚选择的,通过PIO05/PIO15寄存器来进行数据选择.
70.jpg
如果我们选择使用P0.3作为PWM5的输出管脚,PIOCON0|=0x20;即可
贴心的新唐官方,为了让我们不用每次都去查表,在function_define.h中,提前将这些寄存器进行了宏定义。PWM5_P03_OUTPUT_ENABLE这样就可以了~

管脚选择完成后,我们开始配置PWM发生器,其中包含两种模式,边沿对齐或中心对齐,其中包含PWM频率和占空比的计算方法,之后的程序中我们会用到。这里我们配置为边沿对齐型clr_PWMTYP;
70.jpg
70.jpg
70.jpg
70.jpg
然后我们将要模式配置独立输出模式(独立输出模式,可以让每个通道单独输出)
70.jpg
clr_PWMMOD0; clr_PWMMOD1;

接下来配置周期寄存器

脉冲宽度调制发生器时钟由系统时钟或定时器1计数溢出产生,可通过PWM时钟预分频调整1/1~1/128除频。 PWM周期由16位周期寄存器 {PWMPH, PWMPL} 组合预先设置。所有PWM通道共享同一个16位周期计数器,周期是相同的。下图可以看出,周期、占空比之间的关系
70.jpg
在PWMPH,PWMPL中配置的数据,在通过下图的公式进行计算
70.jpg
在官方例程中将周期配置为1ms,分频设置为8分频PWM_CLOCK_DIV_8;


PWM frequency = Fpwm/((PWMPH,PWMPL) + 1) <Fpwm = Fsys/PWM_CLOCK_DIV> = (16MHz/8)/(0x7CF + 1)= 1KHz (1ms)


接下来就是配置PWM5的占空比
我们将占空比配置为周期的一半,按照上图公式,也就是1000>0X03F8.


PWM5H = 0x03;                                                PWM5L = 0xe8;


以上,我们就成功配置好了~PWM5以周期1ms输出0.5ms占空比
70.jpg
之后将PWMRUN和LOAD置高,即可开始运行


set_LOAD;

set_PWMRUN;


70.jpg
70.jpg
由逻辑分析仪可以看出,程序按照设计要求运行。
至此,一个最简单的PWM输出程序,就完成了,最后附上完整工程代码


146105f56e9c8e3834.png


InsistSth 发表于 2021-4-9 14:23 | 显示全部楼层
那楼主请教个问题,如果我在程序中要改变PWM占空比寄存器的值,请问要如何实现呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

57

主题

1530

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部