原文转载于:http://bbs.eeworld.com.cn/thread-446834-1-1.html 非常感谢。
脉冲宽度调制(PWM)是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。PWM信号仍然是数字的,因为在给定的任何时刻,满幅值的直流供电要么完全有(ON),要么完全无(OFF)。电压或电流源是以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去的。通的时候即是直流供电被加到负载上的时候,断的时候即是供电被断开的时候。只要带宽足够,任何模拟值都可以使用PWM进行编码。
在瑞萨的单片机上是可以通过配置寄存器来使得系统输出PWM波形的。数据手册中的表6-1很好的说明了如何使用R7F的TIME寄存器来使得其输出PWM波形。
PWM之所以要配置这么多的寄存器是(上表中只有少部分不用配置),是因为基本上是定时器不仅有PWM输出还有间隔定时器、方波输出、外部事件计数器、分频器、输入脉冲间隔测量、输入信号的高/低电平宽度的测量、延迟计数器、单触发脉冲输出功能,所以要通过配置寄存器来使得TIME从众多功能中选择我们所需要的。
首先配置PER0中的TAU0EN为1,允许输入时钟的供应。再用TPS0来分频得到CK01、CK00这两个时钟(在选择的通道0和通道1是的时钟时可以选择一个时钟作为两个时钟,当然也可以一个通道一个时钟)。接下来是控制定时器单元启停的TE0、TS0、TT0,其中数据手册中对TE0进行了详细的说明。
TS0和TSH0寄存器是触发寄存器,用于初始化定时器/计数器寄存器0n(TCR0n)并开始各通道的计数操作。(启用)TT0和TTH0寄存器为用于停止各通道的计数操作的触发寄存器。(停用)
接下来是控制输出寄存器TOE0、TO0、TOL0、TOM0,其中TOE0寄存器用于允许或禁止各通道的定时器输出。TO0寄存器是各通道的定时器输出的缓冲器寄存器。TOL0寄存器是用于控制各通道定时器输出电平的寄存器。TOM0寄存器用于控制各通道的定时器输出模式。(这里我们选择TOM0的TOM01为1:从属通道输出模式)
下面是TMR0xH和TMR0xL。TMR0n寄存器包括两个8位寄存器,用于设置通道n的操作模式。该寄存器用于选择工作时钟(fMCK),选择计数时钟,选择主/从属,选择16位或8位定时器(仅限通道1),设置开始触发和捕捉触发,选择定时器输入的有效边沿,以及设置操作模式(间隔、捕捉、事件计数器、单计数、或者捕捉&单计数)。
最后是TDR0xH和TDR0xL,其中初值和空占比都是由此设置。在执行连续读取或连续写入操作的过程中,如果插入对TDR0nH的写操作、对TDR0nL的读操作或者对TCR0n的读操作,则将不能保证读取操作和写入操作的数据。