电子设计吧奉献XS128各模块整理资料.docx
《电子设计吧奉献XS128各模块整理资料.docx》由会员分享,可在线阅读,更多相关《电子设计吧奉献XS128各模块整理资料.docx(53页珍藏版)》请在冰豆网上搜索。
电子设计吧奉献XS128各模块整理资料
来源:
电子设计吧
整理:
大学生电子设计联盟smile_keyang
http:
//www.nuedc.org/index.php欢迎访问!
!
!
手把手教你写S12XS128程序--PWM模块介绍
该教程以MC9S12XS128单片机为核心进行讲解,全面阐释该16位单片机资源。
本文为第一讲,开始介绍该MCU的PWM模块。
PWM调制波有8个输出通道,每一个输出通道都可以独立的进行输出。
每一个输出通道都有一个精确的计数器(计算脉冲的个数),一个周期控制寄存器和两个可供选择的时钟源。
每一个PWM输出通道都能调制出占空比从0—100%变化的波形。
PWM的主要特点有:
1、它有8个独立的输出通道,并且通过编程可控制其输出波形的周期。
2、每一个输出通道都有一个精确的计数器。
3、每一个通道的PWM输出使能都可以由编程来控制。
4、PWM输出波形的翻转控制可以通过编程来实现。
5、周期和脉宽可以被双缓冲。
当通道关闭或PWM计数器为0时,改变周期和脉宽才起作用。
6、8字节或16字节的通道协议。
7、有4个时钟源可供选择(A、SA、B、SB),他们提供了一个宽范围的时钟频率。
8、通过编程可以实现希望的时钟周期。
9、具有遇到紧急情况关闭程序的功能。
10、每一个通道都可以通过编程实现左对齐输出还是居中对齐输出。
1、PWM启动寄存器PWME
PWME寄存器每一位如图1所示:
复位默认值:
00000000B
图1PWME寄存器
每一个PWM的输出通道都有一个使能位PWMEx。
它相当于一个开关,用来启动和关闭相应通道的PWM波形输出。
当任意的PWMEx位置1,则相关的PWM输出通道就立刻可用。
用法:
PWME7=1---通道7可对外输出波形
PWME7=0---通道7不能对外输出波形
注意:
在通道使能后所输出的第一个波形可能是不规则的。
当输出通道工作在串联模式时(PWMCTL寄存器中的CONxx置1),那么)使能相应的16位PWM输出通道是由PWMEx的高位控制的,例如:
设置PWMCTL_CON01=+级联,形成一个16位PWM通道,由通道1的使能位控制PWM的输出。
2、PWM时钟选择寄存器PWMCLK
PWMCLK寄存器每一位如图3所示:
复位默认值:
00000000B
图2PWMCLK寄存器
S12的PWM共有四个时钟源,每一个PWM输出通道都有两个时钟可供选择(ClockA、ClockSA或ClockB、ClockSB))。
其中0、1、4、5通道可选用ClockA和ClockSA,2、3、6、7通道可选用ClockB、ClockSB通道。
该寄存器用来实现几个通道时钟源的选择。
用法:
PCLK0=1---通道0(PTP0)的时钟源设为ClockSA
PCLK2=0---通道2(PTP2)的时钟源设为ClockB
1、PWM预分频寄存器PWMPRCLK
PWMPRCLK寄存器每一位如图3所示:
复位默认值:
00000000B
图3PWMPRCLK寄存器
PWMPRCLK寄存器包括ClockA预分频和ClockB预分频的控制位。
ClockA、ClockB的值为总线时钟的1/2n(0≤n≤7),具体设置参照图4和图5
图4ClockA预分频设置
图5ClockB预分频设置
PCKB0~PCKB2是对ClockB进行预分频。
PCKA0~PCKA2是对ClockA进行预分频。
2、PWM分频寄存器PWMSCLA、PWMSCLB
PWMSCLA寄存器每一位如图6所示:
图6PWMSCLA寄存器
ClockSA是通过对PWMSCLA寄存器的设置来对ClockA进行分频而产生的。
其计算公式为:
ClockSA=ClockA/(2*PWMSCLA)
PWMSCLB寄存器与PWMSCLA寄存器相似,ClockSB就是通过对PWMSCLB寄存器的设置来对ClockB进行分频而产生的。
其计算公式为:
ClockSB=ClockB/(2*PWMSCLB)
1、PWM极性选择寄存器PWMPOL
PWMPOL寄存器每一位如图7所示:
该寄存器是0~7通道PWM输出起始极性控制位,用来设置PWM输出的起始电平。
用法:
PWMPOL_PPOL0=1---通道0在周期开始时输出为高电平,当计数器等于占空比寄存器的值时,输出为低电平。
对外输出波形先是高电平然后再变为低电平。
2、PWM波形对齐寄存器PWMCAE
PWMCAE寄存器每一位如图8所示:
图8PWMCAE寄存器
PWMCAE寄存器包含8个控制位来对每个PWM通道设置左对齐输出或中心对齐输出。
用法:
PWMCAE_CAE0=1---通道0中心对齐输出
PWMCAE_CAE7=0---通道7左对齐输出
注意:
只有输出通道被关闭后才能对其进行设置,即通道被激活后不能对其进行设置。
1、PWM控制寄存器PWMCTL
PWMCTL寄存器每一位如图9所示:
图9PWMCTL寄存器
该控制寄存器设定通道的级联和两种工作模式:
等待模式和冻结模式。
这两种模式如图10和图11所示。
图10等待模式
图11冻结模式
只有当相应的通道关闭后,才能改变这些控制字。
用法:
PWMCTL_CON67=1---通道6、7级联成一个16位的PWM通道。
此时只有7通道的控制字起作用,原通道7的使能位、PWM输出极性选择位、时钟选择控制位以及对齐方式选择位用来设置级联后的PWM输出特性
PWMCTL_CON67=0---通道6,7通道不级联
CON45、CON23、CON01的用法同CON67相似。
设置此控制字的意义在于扩大了PWM对外输出脉冲的频率范围。
PSWAI=1---MCU一旦处于等待状态,就会停止时钟的输入。
这样就不会因时钟在空操作而费电;当它置为0,则MCU就是处于等待状态,也允许时钟的输入。
PFRZ=1---MCU一旦处于冻结状态,就会停止计数器工作。
S12微控制器PWM模块是由独立运行的8位脉冲计数器PWMCNT、两个比较寄存器PWMPER和PWMDTY组成。
1、左对齐方式
在该方式下,脉冲计数器为循环递增计数,计数初值为0。
当PWM使能后,计数器PWMCNT从0开始对时钟信号递增计数,开始一个输出周期。
当计数值与占空比常数寄存器PWMDTY相等时,比较器1输出有效,将触发器置位,而PWMCNT继续计数;当计数值与周期常数寄存器PWMPER相等时,比较器2输出有效,将触发器复位,同时PWMCNT也复位,结束一个输出周期。
原理参照图14:
图14PWM左对齐方式
2、中心对齐方式
在该方式下,脉冲计数器为双向计数,计数初值为0。
当PWM使能后,计数器PWMCNT从0开始对时钟信号递增计数,开始输出一个周期。
当计数器与占空比常数寄存器PWMDTY相等时,比较器1输出有效,触发器翻转,而PWMCNT继续计数,当计数值与周期常数PWMPER相等时,比较器2输出有效,此时改变PWMCNT的计数方向,使其递解计数;当PWMCNT再次与PWMDTY相等时,比较器1再一次输出有效,使触发器再次翻转,而PWMCNT继续递减计数,等待PWMCNT减回至0,完成一个输出周期。
原理参照图15:
图15 中心对齐方式
3、周期计算方法
左对齐方式:
输出周期=通道周期×PWMPERx
中心对齐方式:
输出周期=通道周期×PWMPERx×2
4、脉宽计算方法
左对齐方式:
占空比=[(PWMPERx-PWMDTYx)/PWMPERx]×100%
中心对齐方式:
占空比=[PWMDTYx/PWMPERx]×100%
1、PWM通道计数寄存器PWMCNTx
PWMCNTx寄存器共有8个,每一个通道都有一个8位PWM加/减双向计数器,通道级联后可变成16位PWM加/减双向计数器。
下面以PWMCNT0为例对PWMCNTx寄存器进行介绍。
PWMCNT0寄存器如图12所示:
图12PWMCNT0寄存器
计数器以所选时钟源的频率运行。
计数器在任何时候都可以被读,而不影响计数,也不影响对PWM通道的操作。
任何值写入PWMCNT0寄存器都会导致计数器复位置0,且其计数方向会被设置为向上计数,并且会立刻从缓冲器载入任务和周期值,并会根据翻转极性的设置来改变输出。
当计数器达到计数值后,会自动清零。
只有当通道使能后,计数器才开始计数。
2、PWM通道周期寄存器PWMPERx
PWMPERx寄存器共有8个,每一个通道都有一个这样的周期寄存器。
这个寄存器的值就决定了相关PWM通道的周期。
每一个通道的周期寄存器都是双缓冲的,因此如果当通道使能后,改变他们的值,将不会发生任何作用,除非当下列情况之一发生:
*有效的周期结束。
*对计数器进行写操作(计数器复位)
*通道不可用(PWMEx=0)
这样就会使PWM输出波形要么是新波形要么是旧波形,并不会在两者之间进行交替变换。
如果通道不可用,那么对周期寄存器进行写操作,将会直接
导致周期寄存器同缓冲器一起闭锁。
图13所示的是PWMPER0寄存器:
图13PWMPER0寄存器
3、PWM通道占空比寄存器PWMDTYx
PWMDTYx寄存器也有8个,每一个通道都有一个这样的占空比常数寄存器。
这个寄存器的值就决定了相关PWM通道输出波形的占空比。
每一个通道的占空比寄存器都是双缓冲的,因此如果当通道被激活后,改变他们的值将不会发生任何作用,除非当下列情况之一发生:
*有效的周期结束。
*对计数器进行写操作(计数器复位)
*通道不可用(PWMEx=0)
这样就会使PWM输出波形要么是新波形要么是旧波形,并不会在两者之间进行交替变换。
如果通道没有被激活,那么对占空比常数寄存器进行写操作,将会直接导致周期寄存器同缓冲器一起闭锁。
当计数值与占空比常数PWMDTY相等时,则比较输出器有效,这时就会将触发器置位,然后PWMCNT继续计数,当计数值与周期常数PWMPER相等时,比较器输出有效,将触发器复位,同时也使PWMCNT复位,结束一个输出周期。
S12微控制器PWM模块是由独立运行的8位脉冲计数器PWMCNT、两个比较寄存器PWMPER和PWMDTY组成。
1、左对齐方式
在该方式下,脉冲计数器为循环递增计数,计数初值为0。
当PWM使能后,计数器PWMCNT从0开始对时钟信号递增计数,开始一个输出周期。
当计数值与占空比常数寄存器PWMDTY相等时,比较器1输出有效,将触发器置位,而PWMCNT继续计数;当计数值与周期常数寄存器PWMPER相等时,比较器2输出有效,将触发器复位,同时PWMCNT也复位,结束一个输出周期。
原理参照图14:
图14PWM左对齐方式
2、中心对齐方式
在该方式下,脉冲计数器为双向计数,计数初值为0。
当PWM使能后,计数器PWMCNT从0开始对时钟信号递增计数,开始输出一个周期。
当计数器与占空比常数寄存器PWMDTY相等时,比较器1输出有效,触发器翻转,而PWMCNT继续计数,当计数值与周期常数PWMPER相等时,比较器2输出有效,此时改变PWMCNT的计数方向,使其递解计数;当PWMCNT再次与PWMDTY相等时,比较器1再一次输出有效,使触发器再次翻转,而PWMCNT继续递减计数,等待PWMCNT减回至0,完成一个输出周期。
原理参照图15:
图15 中心对齐方式
3、周期计算方法
左对齐方式:
输出周期=通道周期×PWMPERx
中心对齐方式:
输出周期=通道周期×PWMPERx×2
4、脉宽计算方法
左对齐方式:
占空比=[(PWMPERx-PWMDTYx)/PWMPERx]×100%
中心对齐方式:
占空比=[PWMDTYx/PWMPERx]×100%
PWM初始化步骤总结
1、禁止PWMPWME=0
2、选择时钟PWMPRCLK,PWMSCLA,PWMSCLB,PWMCLK
3、选择极性PWMPOL
4、选择对齐方式PWMCAE
5、选择占空比和周期PWMDTYx,PWMPERx
6、使能PWMPWME=1
【例程1】
//------------------------------------------------------------------------------------------------------------------//
//功能说明:
MC9S12XS128--PWM例程
//使用说明:
实现通道3(PTP3)输出频率为1KHz,占空比为50%的方波,用示波器观察
//程序设计:
电子设计吧【】
//设计时间:
2010.01.21
//----------------------------------------------------------------------------------------------------------------//
#include/*commondefinesandmacros*/
#include"derivative.h"/*derivative-specificdefinitions*/
//--------------初始化函数----------------//
//-----时钟初始化程序--------//
voidPLL_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初始化程序------//
voidPWM_Init(void)
{
PWME_PWME3=0x00;//DisablePWM禁止
PWMPRCLK=0x33;//00110011A=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=HighTime极性设置
PWMCAE_CAE3=0;//Left-aligned对齐方式设置
PWMCTL=0x00;//noconcatenation控制寄存器设置
PWMPER3=100;//Frequency=SB/100=1K周期寄存器设置
PWMDTY3=50;//Dutycycle=50%占空比寄存器设置
PWME_PWME3=1;//EnablePWM使能
}
//-----------------主函数--------------------//
voidmain(void)
{
/*putyourowncodehere*/
PLL_Init();
PWM_Init();
EnableInterrupts;
for(;;){
_FEED_COP();/*feedsthedog*/
}/*loopforever*/
/*pleasemakesurethatyouneverleavemain*/
}
手把手教你写S12XS128程序--A/D转换模块介绍
1、A/D转换原理
A/D转换的过程是模拟信号依次通过取样、保持和量化、编码几个过程后转换为数字格式。
a)取样与保持
一般取样与保持过程是同时完成的,取样-保持电路的原理图如图16所示,由输入放大器A1、输出放大器A2、保持电容CH和电子开关S组成,要求AV1*AV2=1。
原理是:
当开关S闭合时,电路处于取样阶段,电容器充电,由于AV1*AV2=1,所以输出等于输入;当开关S断开时,由于A2输入阻抗较大而且开关理想,可认为CH没有放电回路,输出电压保持不变。
图16取样-保持电路
取样-保持以均匀间隔对模拟信号进行抽样,并且在每个抽样运算后在足够的时间内保持抽样值恒定,以保证输出值可以被A/D转换器精确转换。
b)量化与编码
量化的方法,一般有舍尾取整法和四舍五入法,过程是先取顶量化单位Δ,量化单位取值越小,量化误差的绝对值就越小,具体过程在这里就不做介绍了。
将量化后的结果用二进制码表示叫做编码。
2、A/D转换器的技术指标
a)分辨率
分辨率说明A/D转换器对输入信号的分辨能力,理论上,n位A/D转换器能区分的输入电压的最小值为满量程的
1/2n。
也就是说,在参考电压一定时,输出位数越多,量化单位就越小,分辨率就越高。
S12的ATD模块中,若输出设置为8位的话,那么转换器能区分的输入信号最小电压为19.53mV。
b)转换时间
A/D转换器按其工作原理可以分为并联比较型(转换速度快ns级)、逐次逼近型(转换速度适中us级)、双积分型(速度慢抗干扰能力强)。
不同类型的转化的A/D转换器转换时间不尽相同,S12的ATD模块中,8位数字量转换时间仅有6us,10位数字量转换时间仅有7us。
S12内置了2组10位/8位的A/D模块:
ATD0和ATD1,共有16个模拟量输入通道,属于逐次逼近型A/D转换器(这个转换过程与用天平称物的原理相似)。
1、功能结构图
图17A/D模块功能结构图
图17所示的是A/D模块的功能结构,这个功能模块被虚线划分成为图示所示的虚线所隔离的三个部分:
IP总线接口、转换模式控制/寄存器列表,自定义模拟量。
IP总线接口负责该模块与总线的连接,实现A/D模块和通用I/O的目的,还起到分频的作用;
转换模式控制寄存器列表中有控制该模块的所有的寄存器,执行左右对齐运行和连续扫描。
自定义模拟量负责实现模拟量到数字量的转换。
包括了执行一次简单转换所需的模拟量和数字量。
2、HCS12中A/D转化模块特点
8/10位精度;7us,10-位单次转换时间.;采样缓冲放大器;可编程采样时间;左/右对齐,有符号/无符号结果数据;外部触发控制;转换完成中断;模拟输入8通道复用;模拟/数字输入引脚复用;1到8转换序列长度;连续转换模式;多通道扫描方式。
ATD模块有模拟量前端、模拟量转换、控制部分及结果存储等四部分组成。
其中模拟前端包括多路转换开关、采样缓冲器、放大器等,结果存储部分主要有8个16位的存储器和反映工作状态的若干标志位。
1、ATD0控制寄存器2---ATD0CTL2
ATD0CTL2主要控制ATD0的启动、状态标志以及上电模式,对寄存器进行写操作时,将中断当前的转化过程。
寄存器ATD0CTL2如图18所示:
图18ATD0CTL2寄存器
ADPU:
A/D使能控制位,相当于一个开关,用来启动/禁止A/D转换
1=A/D模块上电
0=禁止A/D,以减少功耗
AFFC:
A/D快速转换完成标志位清零
1=快速标志位清零顺序,每次读取结果寄存器自动清零
0=正常标志位清零顺序,需要软件方式对状态标志位清零
AWAI:
A/D等待模式
1=等待模式下,ATD继续运行
0=等待模式下,ATD停止运行,以降低功耗
ETRIGP、ETRIGLE、ETRIGE:
ETRIGLE
ETRIGP
ETRIGE
描述
x
x
0
忽略外部触发
0
0
1
下降沿触发
0
1
1
上升沿触发
1
0
1
低电平触发
1
1
1
高电平触发
【注意】ETRIGE:
外部触发使能控制位,该功能借助引脚AN7,当AN7接收到外部触发时,启动A/D转换,否则不进行转换。
0--忽略外部触发;1--有外部触发时开始转换,此时AN7不能用于A/D转换。
ASCIE:
A/D转化序列转换结束中断使能控制位
1=允许ATD转换序列转换结束后发生中断
0=禁止ATD中断
ASCIF:
A/D转换序列转换结束中断标志,只用于读。
1=发生中断
0=为发生中断
2、ATD0控制寄存器3---ATD0CTL3
ATD0CTL3主要控制结果寄存器的映射,设置转换序列的长度,还可以暂时冻结ATD0模块,尤其确定ATD0在BDM状态下的行为。
寄存器ATD0CTL3如图19所示:
图19ATD0CTL3寄存器
S1C、S2C、S4C、S8C:
转换序列长度选择位控制位
【注意】ATD的每次启动要进行若干次扫描循环,每次扫描循环称为一个转换序列。
FIFO:
结果寄存器FIFO模式控制位,
1=结果寄存器映射到转换序列
0=结果寄存器没有映射到转换序列
FRZ0、FRZ1:
背景调试冻结控制位
FRZ
Response
00
Ignore IFREEZE(冻结模式下继续转换)
01
Reserved(冻结模式下保留)
10
Finish conversion then freeze(完成转换后冻结)
11
Freeze Immediately(冻结模式下立刻冻结)
3、ATD0控制寄存器4---ATD0CTL4
ATD0CTL4用于选择时钟,选择采样转换时间以及选择8位/10位转换方式。
寄存器ATD0CTL4如图20所示:
图20ATD0CTL4寄存器
SRES8:
A/D精度选择控制位
1=将采集到的模拟量以8位二进制数表示
0=将采集到的模拟量以10位二进制数表示
SMP0、SMP1:
采样时间选择控制位
SMP[1:
0]
采样时间
00
2 A/D时钟周期
01
4 A/D时钟周期
10
8 A/D时钟周期
11
16 A/D 时钟周期
PPS[0:
4]:
5位模数计数器预分频器
-分频系数从2到64
-A/D时钟计算公式:
ATDClock=BusClock/(PRS+1)×0.5
-A/D时钟频率应满足:
【注意】对于AD转换来说,它的转换周期包括采样时间和运算时间。
如果频率太高,则采样时间过短。
这对于输出阻抗比较大或信号频率比较高的信号来说,就会产生较大的采样误差,那么AD转换的精度就会受较大的影响。
4、ATD0控制寄存器4---ATD0CTL5
ATD0CTL5用于选择转换方式,选择转