打印
[技术问答]

N76E003 PWM 程序及分析(边沿对齐、独立输出模式)

[复制链接]
787|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
注销|  楼主 | 2020-9-8 10:17 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
N76E003 包含三对( 6个PWM通道) 16位精度、可调周期和占空比的PWM输出


让我们来看看六个通道的引脚分别是


可能有同学会疑问,为什么P1.5和P0.3都是PWM5,那如果要使用PWM5,该如何选择引脚呢?我们来看看芯片内部的原理图。

还是以PWM5为例:芯片内部是通过一个二选一选择器来进行引脚选择的,通过PIO05/PIO15寄存器来进行数据选择.

如果我们选择使用P0.3作为PWM5的输出管脚,PIOCON0|=0x20;即可
贴心的新唐官方,为了让我们不用每次都去查表,在function_define.h中,提前将这些寄存器进行了宏定义。PWM5_P03_OUTPUT_ENABLE这样就可以了~

管脚选择完成后,我们开始配置PWM发生器,其中包含两种模式,边沿对齐或中心对齐,其中包含PWM频率和占空比的计算方法,之后的程序中我们会用到。这里我们配置为边沿对齐型clr_PWMTYP;





然后我们将要模式配置独立输出模式(独立输出模式,可以让每个通道单独输出)

clr_PWMMOD0; clr_PWMMOD1;

接下来配置周期寄存器

脉冲宽度调制发生器时钟由系统时钟或定时器1计数溢出产生,可通过PWM时钟预分频调整1/1~1/128除频。 PWM周期由16位周期寄存器 {PWMPH, PWMPL} 组合预先设置。所有PWM通道共享同一个16位周期计数器,周期是相同的。下图可以看出,周期、占空比之间的关系


在PWMPH,PWMPL中配置的数据,在通过下图的公式进行计算

在官方例程中将周期配置为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占空比


之后将PWMRUN和LOAD置高,即可开始运行


set_LOAD;

set_PWMRUN;




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



使用特权

评论回复
沙发
InsistSth| | 2021-4-9 14:23 | 只看该作者
那楼主请教个问题,如果我在程序中要改变PWM占空比寄存器的值,请问要如何实现呢?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

56

主题

1499

帖子

2

粉丝