飞思卡尔PWM模块
2011-10-11 10:53
232 查看
产生PWM波形的方法主要有两种,软件输出比较和PWM硬件模块,利用飞思卡尔的内部资源可以很随意的去控制输出波形,通过一些寄存器的设置可以达到对波形的控制,主要用到的寄存器有通道的使能、极性的设置,对齐方式,周期和脉宽的初始化,对时钟源的分频,主要不好理解的是有关时钟的分频,先通过设置预分频寄存器PWMPRCLK设置预分频比,再通过PWMSCLA/PWMSCLB设置分频比,这两部分分别有相关的计算公式,可以参考datasheet。特别注意左对齐、中间对齐和极性对占空比的影响。
PWM 的主要特点有:
1、它有 8 个独立的输出通道,并且通过编程可控制其输出波形的周期。
2、每一个输出通道都有一个精确的计数器。
3、每一个通道的 PWM 输出使能都可以由编程来控制。
4、PWM输出波形的翻转控制可以通过编程来实现。
5、周期和脉宽可以被双缓冲。当通道关闭或 PWM计数器为 0时,改变周期和脉宽才起作用。
6、8 字节或 16 字节的通道协议。
7、有 4 个时钟源可供选择(A、SA、B、SB),他们提供了一个宽范围的时 钟频率。
8、通过编程可以实现希望的时钟周期。
9、具有遇到紧急情况关闭程序的功能。
10、每一个通道都可以通过编程实现左对齐输出还是居中对齐输出。
PWM 初始化步骤总结
1、禁止PWM PWME = 0
2、选择时钟 PWMPRCLK,PWMSCLA,PWMSCLB,PWMCLK
3、选择极性 PWMPOL
4、选择对齐方式 PWMCAE
5、选择占空比和周期 PWMDTYx, PWMPERx
6、使能PWM PWME = 1
功能说明:MC9S12XS128--PWM例程
//使用说明:实现通道3(PTP3)输出频率为1KHz,占空比为50%的方波,用示波器观察
//程序设计:电子设计吧
//设计时间:2010.01.21
//----------------------------------------------------------------------------------------------------------------//
#include <hidef.h>
#include "derivative.h"
//--------------初始化函数----------------//
//-----时钟初始化程序--------//
void PLL_Init(void) //PLLCLK=2*OSCCLK*(SYNR+1)/(REFDV+1)
{ //锁相环时钟=2*16*(2+1)/(1+1)=48MHz
REFDV=1; //总线时钟=48/2=24MHz
SYNR=2;
while(!(CRGFLG&0x08));
CLKSEL=0x80; //选定锁相环时钟
}
//-----PWM初始化程序------//
void PWM_Init(void)
{
PWME_PWME3=0x00; // Disable PWM 禁止
PWMPRCLK=0x33; // 0011 0011 A=B=24M/8=3M 时钟预分频寄存器设置
PWMSCLA=150; // SA=A/2/150=10k 时钟设置
PWMSCLB=15; // SB=B/2/15 =100k 时钟设置
PWMCLK_PCLK3=1; // PWM3-----SB 时钟源的选择
PWMPOL_PPOL3=1; // Duty=High Time 极性设置
PWMCAE_CAE3=0; // Left-aligned 对齐方式设置
PWMCTL=0x00; // no concatenation 控制寄存器设置
PWMPER3=100; // Frequency=SB/100=1K 周期寄存器设置
PWMDTY3=50; // Duty cycle = 50% 占空比寄存器设置
PWME_PWME3=1; // Enable PWM 使能
}
//-----------------主函数--------------------//
void main(void)
{
PLL_Init();
PWM_Init();
EnableInterrupts;
for(;;) {
_FEED_COP();
}
}
始终初始化去掉同样可以产生出波形
PWM 的主要特点有:
1、它有 8 个独立的输出通道,并且通过编程可控制其输出波形的周期。
2、每一个输出通道都有一个精确的计数器。
3、每一个通道的 PWM 输出使能都可以由编程来控制。
4、PWM输出波形的翻转控制可以通过编程来实现。
5、周期和脉宽可以被双缓冲。当通道关闭或 PWM计数器为 0时,改变周期和脉宽才起作用。
6、8 字节或 16 字节的通道协议。
7、有 4 个时钟源可供选择(A、SA、B、SB),他们提供了一个宽范围的时 钟频率。
8、通过编程可以实现希望的时钟周期。
9、具有遇到紧急情况关闭程序的功能。
10、每一个通道都可以通过编程实现左对齐输出还是居中对齐输出。
PWM 初始化步骤总结
1、禁止PWM PWME = 0
2、选择时钟 PWMPRCLK,PWMSCLA,PWMSCLB,PWMCLK
3、选择极性 PWMPOL
4、选择对齐方式 PWMCAE
5、选择占空比和周期 PWMDTYx, PWMPERx
6、使能PWM PWME = 1
功能说明:MC9S12XS128--PWM例程
//使用说明:实现通道3(PTP3)输出频率为1KHz,占空比为50%的方波,用示波器观察
//程序设计:电子设计吧
//设计时间:2010.01.21
//----------------------------------------------------------------------------------------------------------------//
#include <hidef.h>
#include "derivative.h"
//--------------初始化函数----------------//
//-----时钟初始化程序--------//
void PLL_Init(void) //PLLCLK=2*OSCCLK*(SYNR+1)/(REFDV+1)
{ //锁相环时钟=2*16*(2+1)/(1+1)=48MHz
REFDV=1; //总线时钟=48/2=24MHz
SYNR=2;
while(!(CRGFLG&0x08));
CLKSEL=0x80; //选定锁相环时钟
}
//-----PWM初始化程序------//
void PWM_Init(void)
{
PWME_PWME3=0x00; // Disable PWM 禁止
PWMPRCLK=0x33; // 0011 0011 A=B=24M/8=3M 时钟预分频寄存器设置
PWMSCLA=150; // SA=A/2/150=10k 时钟设置
PWMSCLB=15; // SB=B/2/15 =100k 时钟设置
PWMCLK_PCLK3=1; // PWM3-----SB 时钟源的选择
PWMPOL_PPOL3=1; // Duty=High Time 极性设置
PWMCAE_CAE3=0; // Left-aligned 对齐方式设置
PWMCTL=0x00; // no concatenation 控制寄存器设置
PWMPER3=100; // Frequency=SB/100=1K 周期寄存器设置
PWMDTY3=50; // Duty cycle = 50% 占空比寄存器设置
PWME_PWME3=1; // Enable PWM 使能
}
//-----------------主函数--------------------//
void main(void)
{
PLL_Init();
PWM_Init();
EnableInterrupts;
for(;;) {
_FEED_COP();
}
}
始终初始化去掉同样可以产生出波形
相关文章推荐
- 飞思卡尔单片机PWM模块分析(2)
- 飞思卡尔XS128系列(二) PWM模块
- 飞思卡尔单片机PWM模块分析(3)
- 飞思卡尔XS128系列(二) PWM模块
- 飞思卡尔单片机PWM模块分析(1)
- PIC单片机输出比较(PWM)模块介绍
- STC12C5A60S2的PCA模块输出PWM波
- 飞思卡尔Kinetis芯片中NVIC模块的中断寄存器的介绍及其应用举例
- 树梅派应用13:使用 RPI.GPIO 模块的脉宽调制(PWM)功能
- 飞思卡尔单片机PLL时钟总线模块
- 嵌入式davinci电路元素基础和PWM模块
- AB1601 PWM模块
- STM32CubeMX 3 解锁PWM模块
- 手把手教你写S12XS128程序(1)--PWM模块介绍
- 分析 ddp pwm 模块
- 飞思卡尔_第三章_存储器映像控制模块
- ST17H26的PWM模块
- STC12C4052 PWM脉宽调制功能模块
- STM32学习笔记6(TIM通用模块生成PWM)
- STC15系列单片机-PWM模块