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输出程序,就完成了,最后附上完整工程代码
|