XS128 PWM调试心得

更新时间:2023-03-17 00:39:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

XS128PWM

PWM脉冲宽度调制模块,对pwm编程,首先是初始化。初始化时先关闭所有通道,设置级联方式,预分频,时钟选择,接着是控制波形的输出即极性选择,对齐方式选择,波形周期,占空比设置,最后就是使能。在MC9S12XS128 中 PORTP与PWM复用,还要注意XS128只有7个通道,分别为PWM0 PWM1 PWM2 PWM3 PWM4 PWM5 PWM7,这点大家在编程时要注意,特别是在使用 PWM 级联时。级联后占空比可更精确的调制。

//功能说明:MC9S12XS128--PWM 例程

//使用说明:实现通道3(PTP3)输出频率为1KHz,占空比为50%的方波,用示波器观察

#include /* common defines and macros */ #include \//--------------初始化函数----------------// //-----时钟初始化程序--------//

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; //禁止PWM

PWMPRCLK=0x33; // 0011 0011 A=B=24M/8=3M 时钟预分频寄存器设置 PWMCLK_PCLK3=1; // PWM3-----SB 时钟源的选择 PWMSCLB=15; // SB=B/2/15 =100k 时钟设置 PWMPOL_PPOL3=1; // 极性设置

PWMCAE_CAE3=0; // 对齐方式设置,左对齐方式 PWMCTL=0x00; // 不级联

PWMPER3=100; // SB/100=1K 周期寄存器设置 PWMDTY3=50; // Duty cycle = 50% 占空比寄存器设置 PWME_PWME3=1; //使能PWM }

//-----------------主函数--------------------// void main(void) {

/* put your own code here */ PLL_Init(); PWM_Init(); EnableInterrupts;

for(;;) {

_FEED_COP(); /* feeds the dog */ } }

注:1. 16位的和8位的最大的区别不是周期长短或者是占空比大小什么的。事实上位数上的差别,影响影响最大的是调制精度。位数越大,能设定的通道周期越小,这样在设定的周期和占空比上,就能更精确。而不是之前理解的那样,能提供更大的输出周期.

2.时钟源设置时, SA/SA是A/B再次分频后的时钟,能提供一个更小的时钟频率, 01 67通道用A,SA,2345用B,SB时钟.

3.占空比寄存器的值是双缓冲的,当寄存器的值被改变后不会立即生效,直到下列操作之一发生:当前有效周期结束;写计数寄存器,通道被禁止。

4.共有8个独立的的输出通道,每一个通道都有一个精确的计数器,并且通过编程可控制其输出波形

5.XS128中80脚的没有PWM6,112脚的才有

6.当通道级联后,通道0 4 2 6 的寄存器会变成级联后寄存器的高8位,当处于级联模式时,时钟是受级联后的低8位对应通道的寄存器控制的。即由通道1 5 3 7的寄存器控制。同样,PWM波形的允许,极性,对齐方式也是由低8位对应通道的寄存器控制的。即只有 1 3 5 7 这几个角才会有输出信号。

6.S3010舵机的使用频率是50Hz-200Hz,对应周期是5ms-20ms,超出频率的话,舵机不会线性工作。1MS脉冲左极限,1.5MS脉冲摆正,2MS脉冲右极限。

本文来源:https://www.bwwdw.com/article/f0yt.html

Top