190 likes | 411 Views
Pulse Width Modulation. PWM Features. 特征概要 4通道, 每通道各有一独立 16 位计数器, 一个通用时钟产生器,提供13种不同时钟 一个模 n 计数器提供11种时钟 两个独立线性分频器可对模 n 计数器输出再分频 通道编程 独立的使能/禁止命令 独立时钟选择 独立周期和占空比, 双缓冲系统 可编程选择输出信号极性 可编程选择输出信号是中间对齐还是左对齐. View of the external PWM’ Signals. 4 路与 PIOA 复用的输出 专用大电流输出引脚
E N D
PWM Features • 特征概要 • 4通道, 每通道各有一独立16位计数器, • 一个通用时钟产生器,提供13种不同时钟 • 一个模n计数器提供11种时钟 • 两个独立线性分频器可对模n计数器输出再分频 • 通道编程 • 独立的使能/禁止命令 • 独立时钟选择 • 独立周期和占空比, 双缓冲系统 • 可编程选择输出信号极性 • 可编程选择输出信号是中间对齐还是左对齐
View of the external PWM’ Signals • 4 路与PIOA复用的输出 • 专用大电流输出引脚 • 与 PA0,PA1 ,PA2复用 (对应 于PWM0, PWM1 和 PWM2) ,允许用户驱动外部电路的电流达到 16 mA (一般引脚为8mA)
PWM into the AT91SAM7S • PMC 必须首先被编程以使能PWMC的时钟 • 置位PMC_PCER 的 bit 10 (PID10). • PIO 控制器需被编程以使能相应的引脚功能 • 如下所示, 使用 PIO_PDR (PIO Disable Register) 禁止PIO对应的输出线 • 选择对应的 Peripheral A 或 B于 PIO_ASR 或 PIO_BSR, 以将PWM的各通道输出到正确的引脚.
PWM CHANNEL PWM Architecture • PWM 外设可被分成如下两部分 • 1°- PWM控制器由下列部件构成 • 时钟发生器 => 从主时钟 (MCK)产生需要的时钟 • 通道控制 => 使能/禁止通道 • 中断发生器 • 2°- 通道模块: • 时钟选择器 • 通道运行方式管理器 • 占空比与频率控制 • 计数值 • 更新寄存器
PWM PWMC: Clock Generator PWM_MR (Mode Register) 27 24 23 16 11 8 7 0 PREB DIVB PREA DIVA 1, ½,1/3,..,1/255 1, ½,1/3,..,1/255 CLKA MCK CLKB
PWM PWM PWMC: Channel and Interrupt Management • 对PWMC, 用户可以单独使能/禁止每一个通道 PWM_DIS (Disable Register) PWM_ENA (Enable Register) 3 0 3 0 CHID3 CHID2 CHID1 CHID0 CHID3 CHID2 CHID1 CHID0 PWM_SR (Status Register) 3 0 CHID3 CHID2 CHID1 CHID0 • The user can use the same control panel at interrupt level plus the dedicated mask register PWM_IDR (Interrupt Disable Register) PWM_IER (Interrupt Enable Register) 3 0 3 0 CHID3 CHID2 CHID1 CHID0 CHID3 CHID2 CHID1 CHID0 PWM_IMR (Interrupt Mask Register) PWM_ISR (Interrupt Status Register) 3 0 3 0 CHID3 CHID2 CHID1 CHID0 CHID3 CHID2 CHID1 CHID0
Set up the PWMC in your Application • 禁止PIO输出引脚,正确设置相关的复用引脚功能 PIO and PWM lines • 处于省电考虑, PWM 的时钟在默认的情况下是关闭的 Enable the PWM Clock • 设置PWM所用的时钟 Set up the Clock Generator Channel Enabling • 这些任务可在设置好通道后完成 Interrupt Enabling
PWM CHANNEL Set up a PWM Channel • 每个通道: • 通道模式寄存器: 选择通道运行模式 • 占空比寄存器: 16-bit 值用于选择信号的占空比 • 周期寄存器: 16-bit 值用于选择信号的周期 • 计数寄存器: 计数值 • 更新寄存器: 用于修改的特定寄存器, 可同时更新周期或占空比寄存器 PWM Channel 0,1,2 or 3 PWM Controller PeriodControl PWM pad Comparator Update Register Duty CycleControl CLKA ClockSelector CLKB MCK…. down to MCK/1024 Counter Interrupt
CHANNEL 步骤一: 时钟选择 PWM_CMR (Channel Mode Register) • 对通道, 通道模式寄存器允许用户从13个时钟信号中选择信号作为时钟源 3 0 CLKA CPRE CLKB Channel’sCounter ClockGenerator
CHANNEL What is the best clock source ? • PWM 占空比数量是第一要素: • 用户必须知道其需要的最小占空比精度. 占空比控制通过一个 16-bit寄存器 PWM_CDTY 来实现. PWM_CDTY (Channel Duty Cycle Register) N value 15 0 CDTY • 占空比数量也依赖于写入周期寄存器的值: • M 值是完成一个通道周期(或中间对齐模式的半周期)所需要的事件(脉冲)数量 PWM_CPRD (Channel Period Register) M value 15 0 CPRD PWM通道周期与M值周期相同. N 可以取自 0 到 M . M值越高, 能达到的N值也越高, 但数量就越少(周期变长).
PWM CHANNEL 不同PWM精度的例子 • 第一个选择方式, 占空比精度为周期的1/75 Clock Generator CLKA Clock Generator on(/64) = Channel PeriodRegister = 75 750 kHz 10 kHz CLKB 48 MHz • 同样的周期,这种选择方式的占空比精度可达周期的1/4800 Clock Generator CLKA Clock Generator on(1) = Channel PeriodRegister = 4800 48 MHz 10 kHz CLKB 48 MHz
CHANNEL 如何修改一个通道的周期或者是占空比 ? • 在PWM控制器中使能相应的PWM通道之前 (PWM_ENA Register):用户可以直接写入值到相应通道的 PWM_CDTYx 或PWM_CPRDx, 即可修改通道周期与占空比 • 一旦PWM通道被使能:就不能写入到前面所说的寄存器. 用户必须使用通道更新寄存器去更新前面所说的值. • 更新寄存器中的值将根据PWM_CMR 中CPD 的值被写入到PWM_CDTY 或 PWM_CPRD PWM_CMRx (Channel Mode Register) 10 3 0 CPD CPRE PWM_CDTYx 0 PWM_CUPDx PWM_CUPDx 1
CHANNEL 通道更新寄存器: PWM_CUPD • 为何采用: • 在 运行模式, 只能通过 PWM_CUPD来更新占空比与周期, • 周期或者占空比的更新将 同步 于当前计数周期的结束, • 如何使用: • 在写入到 PWM_CUPD之前, 用户必须确认最后一次的更新是否起效. 否则, 前一次的值将被本次修改覆盖. • 使用 PWM_CMR 寄存器中的位CPD 来选择周期或占空比的修改 • 写入数据到 PWM_CUPD 寄存器. 注意: 在同一PWM周期中修改同一通道的占空比与周期是不可实现的
PWM CHANNEL PWM_CUPD 写入方式 • 可采用查询或中断方式: • 标志位在周期末置位 (以通道1为例) PWM_ISR (Interrupt Status Register) • 读取PWM_ISR 自动清楚 CHIDx 标志 3 0 CHID3 CHID2 CHID1 CHID0 0 0 0 0 PWM_ISR (Interrupt Status Register) 3 0 CHID3 CHID2 CHID1 CHID0 0 0 1 0 • 在无覆盖PWM_CUPD 值的风险的情况下可以更新通道1的周期或者占空比.
CHANNEL 工作模式一: 左对齐 PWM_CMR (Channel Mode Register) 当PWM计数器的值到达周期的值时, 它将复位 9 8 CALG=0Lelt-Aligned Mode CPOL PWM_CPRD PWM_CDTY 0 CPOL= 0 CPOL= 1
CHANNEL 左对齐在多通道应用中的局限 • 左对齐工作方式在多通道应用中不能避免转换事件的重叠 左对齐模式下,一个事件依 赖于占空比,而另一个依赖 于周期。 由于周期相同,会有事件的 重叠 PWM_CPRD0 PWM_CDTY0 Channel 0Output 两个通道周期 相同 (PWM_CDTY0 - PWM_CDTY1) Channel 1Output PWM_CPRD1 PWM_CDTY1
CHANNEL 工作模式二: 中间对齐 PWM_CMR (Channel Mode Register) 9 8 CALG=0Lelt-Aligned Mode CPOL PWM_CPRD Count down Count up PWM_CDTY 0 CPOL= 0 CPOL= 1
CHANNEL 中间对齐: 无事件重叠的方法 • 中间对齐工作模式可避免在多通道应用中的转换事件重叠 PWM_CPRD0 PWM_CDTY0 Channel 0Output (PWM_CDTY0 - PWM_CDTY1) Channel 1Output PWM_CPRD1 PWM_CDTY1