《MC9S12XS单片机原理及嵌入式系统开发》MC9S12XS单片机原理及嵌入式系统开发合肥工业大学张阳,吴晔,滕勤Email:yzhang0615@163.com,wuye@ialab.hfut.edu.cn,tengqin7348@126.comTEL:13966717615,13505612773《MC9S12XS单片机原理及嵌入式系统开发》第7章MC9S12XS系列脉宽调制模块及其应用实例PWM模块概述PWM模块结构组成和特点PWM模块寄存器及设置PWM模块应用实例智能车系统中PWM模块的应用《MC9S12XS单片机原理及嵌入式系统开发》7.1PWM模块概述脉冲宽度调制(PWM)是产生精确脉冲序列输出和实现D/A转换的有效方法,微控制器的脉宽调制模块被广泛应用于工业控制和新型消费机电产品中(如智能空调、节能冰箱、电动自行车等)。PWM信号通过软件编程调节波形的占空比、周期和相位,能够用于直流电动机调速、伺服电动机控制、D/A转换器等应用。例如,电视机遥控部分普遍采用14位或16位的PWM产生调谐电压;在无人自动驾驶汽车系统中,常用伺服电动机来控制方向盘,伺服电动机的旋转角度与给定的PWM信号占空比一致,每个占空比数值都对应一个旋转角度;在灯光亮度调节、直流电动机速度控制等方面,采用PWM信号能够很容易实现。MC9S12XS系列产生PWM信号的方法主要有两种:利用输出比较功能和MCU内置的PWM模块实现。利用输出比较功能可以通过软件编程设定输出任意脉冲信号,但会占用CPU资源,而且不易产生精确的脉冲序列;而MCU内部集成的PWM模块专门用于输出PWM信号,使用时极少占用CPU资源。《MC9S12XS单片机原理及嵌入式系统开发》7.2PWM模块结构组成和特点MC9S12XS128内置的PWM模块框图如图7.1所示。《MC9S12XS单片机原理及嵌入式系统开发》7.2PWM模块概述由图7.1可知,MC9S12XS128的PWM模块具有8路8位独立PWM通道,通过相应设置也可以变为4个16位PWM通道,每个PWM通道由独立运行的8位通道计数器PWMCNT、两个比较寄存器为通道周期寄存器PWMPER和占空比寄存器PWMDTY等组成。通过对各寄存器的参数设置,确定PWM波形的输出周期和占空比,另外还可以通过通道极性寄存器PWMPOL和居中对齐使能寄存器PWMCAE设置PWM输出脉冲波形的极性和对齐方式。《MC9S12XS单片机原理及嵌入式系统开发》7.2PWM模块概述PWM模块具有以下基本特征:具有可编程周期和占空比的8个独立PWM通道;每个PWM通道具有独立的计数器;每个通道可编程允许/禁止PWM功能;每个通道可软件选择PWM脉冲极性;具有双缓冲的周期和占空比寄存器,当到达有效周期终点(PWM计数器到达0)或通道禁止时,修改值生效;每个通道可编程中心对齐或左对齐输出;8个8位通道或4个16位通道PWM分辨率;4个时钟源(A、B、SA和SB)提供宽频带频率;可编程的时钟选择逻辑;紧急关闭功能。《MC9S12XS单片机原理及嵌入式系统开发》7.3PWM模块寄存器及设置MC9S12XS128的PWM模块的相关寄存器详见表7-1,其中PWM测试寄存器(PWMTST)、PWM预分频计数寄存器(PWMPRSC)、PWM比例因子A计数寄存器(PWMSCNTA)和PWM比例因子B计数寄存器(PWMSCNTB)仅用于出厂测试,所以后文不对其进行说明。《MC9S12XS单片机原理及嵌入式系统开发》7.3PWM模块寄存器及设置《MC9S12XS单片机原理及嵌入式系统开发》7.3PWM模块寄存器及设置7.3.1PWM使能寄存器(PWME)PWM使能寄存器(PWMEnableRegister,PWME)中的每个控制位对应相应的PWM通道,可以通过设置相应的控制位启动或者停止PWM信号输出。当任意一个PWMEx位被置位(PWMEx=1)时,相应的PWM信号产生输出。但是,由于PWMEx需要与时钟源同步,直到PWM模块时钟的下一个周期到来,才能输出正确的PWM波形。当处于级联模式时,8个8位PWM通道通过两两级联构成4个16位的PWM通道,此时PWME1、PWME3、PWME5和PWME7对应控制4个16位PWM通道,而其他控制位无效,如图7.2所示。《MC9S12XS单片机原理及嵌入式系统开发》7.3PWM模块寄存器及设置7.3.1PWM使能寄存器(PWME)读:任何时刻;写:任何时刻。PWME7:PWM通道7使能位。0表示禁止PWM通道7输出;1表示允许PWM通道7输出。PWME6:PWM通道6使能位。0表示禁止PWM通道6输出;1表示允许PWM通道6输出,如果CON67=1,该位无效,且PWM通道6输出无效。PWME5:PWM通道5使能位。0表示禁止PWM通道5输出;1表示允许PWM通道5输出。PWME4:PWM通道4使能位。0表示禁止PWM通道4输出;1表示允许PWM通道4输出,如果CON45=1,该位无效,且PWM通道4输出无效。《MC9S12XS单片机原理及嵌入式系统开发》7.3PWM模块寄存器及设置7.3.1PWM使能寄存器(PWME)PWME3:PWM通道3使能位。0表示禁止PWM通道3输出;1表示允许PWM通道3输出。PWME2:PWM通道2使能位。0表示禁止PWM通道2输出;1表示允许PWM通道2输出,如果CON23=1,该位无效,且PWM通道2输出无效。PWME1:PWM通道1使能位。0表示禁止PWM通道1输出;1表示允许PWM通道1输出。PWME0:PWM通道0使能位。0表示禁止PWM通道0输出;1表示允许PWM通道0输出;如果CON01=1,该位无效,且PWM通道0输出无效。《MC9S12XS单片机原理及嵌入式系统开发》7.3PWM模块寄存器及设置7.3.2PWM极性寄存器(PWMPOL)每个PWM通道波形开始时的信号极性由PWM极性寄存器(PWMPolarityRegister,PWMPOL)中的极性选择位(PPOLx)决定,如果PPOLx位为1,周期脉冲开始时PWM通道输出高电平信号,当通道计数器PWMCNTx数值等于占空比寄存器PWMDTYx数值时翻转为低电平信号;相反,如果PPOLx位为0,周期脉冲开始时PWM通道输出低电平信号,当PWMCNTx数值等于PWMDTYx数值时翻转为高电平信号,PWMPOL寄存器如图7.3所示。《MC9S12XS单片机原理及嵌入式系统开发》7.3PWM模块寄存器及设置7.3.2PWM极性寄存器(PWMPOL)读:任何时刻;写:任何时刻。注意:PWMPOL寄存器中的PPOLx位可以在任何时刻进行写入操作。如果正在产生PWM信号时要求改变信号极性,则PWM输出脉冲在信号极性转换过程中可能被截短或延长。PPOLx:PWM通道x输出波形极性位。0表示PWM通道x在周期脉冲开始时输出低电平,当到达占空比计数值时翻转为高电平;1表示PWM通道x在周期脉冲开始时输出高电平,当到达占空比计数值时翻转为低电平。《MC9S12XS单片机原理及嵌入式系统开发》7.3PWM模块寄存器及设置7.3.3PWM时钟选择寄存器(PWMCLK)每一个PWM通道可以选择两个时钟之一作为该通道的时钟源。PWM时钟选择寄存器(PWMClockSelectRegister,PWMCLK)如图7.4所示。读:任何时刻;写:任何时刻。注意:PWMCLK寄存器中的PCLKx位可以在任何时刻写入。如果正在产生PWM信号时要求改变信号极性,则PWM输出脉冲在信号极性转换过程中可能被截短或延长。PCLK7、PCLK6、PCLK3、PCLK2:PWM通道7、6、3、2时钟选择位。0表示ClockB作为相应通道时钟源;1表示ClockSB作为相应通道时钟源。PCLK5、PCLK4、PCLK1、PCLK0:PWM通道5、4、1、0时钟选择位。0表示ClockA作为相应通道时钟源;1表示ClockSA作为相应通道时钟源。《MC9S12XS单片机原理及嵌入式系统开发》7.3PWM模块寄存器及设置7.3.3PWM时钟选择寄存器(PWMCLK)PWM时钟选择框图如图7.5所示,从图中可知,PWM模块一共有4个时钟源,分别为ClockA、ClockB、ClockSA和ClockSB,其中ClockA和ClockB由总线时钟直接分频得到,分频因子由PWM预分频时钟选择寄存器(PWMPRCLK)中的Bit2~Bit0或Bit6~Bit4确定(如图7.6所示),PWMPRCLK寄存器的介绍详见7.3.4节。ClockSA由ClockA通过PWM比例因子A寄存器(PWMSCLA)再次分频得到,ClockSB由ClockB通过PWM比例因子B寄存器(PWMSCLB)再次分频得到,PWMSCLA寄存器和PWMSCLB寄存器的介绍详见7.3.7节和7.3.8节。《MC9S12XS单片机原理及嵌入式系统开发》7.3PWM模块寄存器及设置7.3.3PWM时钟选择寄存器(PWMCLK)《MC9S12XS单片机原理及嵌入式系统开发》7.3PWM模块寄存器及设置7.3.4PWM预分频时钟选择寄存器(PWMPRCLK)读:任何时刻;写:任何时刻。注意:PWMPRCLK寄存器中的位可以在任何时刻写入。如果正在产生PWM信号时要求改变极信号性,则PWM输出脉冲在信号极性转换过程中可能被截短或延长。PCKB2~PCKB0:ClockB预分频因子选择位。这3位决定了ClockB的分频因子,ClockB可以作为通道2、3、6或7的两个时钟源之一,如表7-2所示。《MC9S12XS单片机原理及嵌入式系统开发》7.3PWM模块寄存器及设置7.3.4PWM预分频时钟选择寄存器(PWMPRCLK)《MC9S12XS单片机原理及嵌入式系统开发》7.3PWM模块寄存器及设置7.3.4PWM预分频时钟选择寄存器(PWMPRCLK)PCKA2~PCKA0:ClockA预分频因子选择位。这3位决定了ClockA的分频因子,ClockA是可以作为通道0、1、4或5的两个时钟源之一,如表7-3所示。《MC9S12XS单片机原理及嵌入式系统开发》7.3PWM模块寄存器及设置7.3.5PWM居中对齐使能寄存器(PWMCAE)PWM居中对齐使能寄存器(PWMCenterAlignEnableRegister,PWMCAE)包含8个控制位,如图7.7所示。用于控制相应PWM通道输出波形为中心对齐输出或左对齐输出。如果CAEx=1,相应的PWM通道输出波形为中心对齐;如果CAEX=0,相应的PWM通道输出波形为左对齐。《MC9S12XS单片机原理及嵌入式系统开发》7.3PWM模块寄存器及设置7.3.5PWM居中对齐使能寄存器(PWMCAE)注意:仅当相应的通道被禁止输出时,才可以设置该寄存器。CAEx:通道x居中对齐输出方式位。0表示通道x输出波形为左对齐方式。1表示通道x输出波形为居中对齐方式。《MC9S12XS单片机原理及嵌入式系统开发》7.3PWM模块寄存器及设置7.3.5PWM居中对齐使能寄存器(PWMCAE)PWM左对齐输出波形如图7.8所示。当使用左对齐方式输出时,8位通道计数器PWMCNTx只做加法计数;当PWMCNTx计数器加法计数到通道占空比寄存器PWMDTYx中设置的数值时,PWM通道输出波形发生变化;当PWMCNTx计数器加法计数到通道周期寄存器PWMPERx中设置的数值时,PWMCNTx清零,输出波形电平发生变化,然后读取PWMDTYx寄存器和PWMPERx寄存器中的数值作为下一次PWMCNTx加法计数参考使用。PWM通道计数器PWMCNTx介绍详见7.3.9节,PWM通道周期寄存器PWMPERx介绍详见7.3.10节,PWM通道占空比寄存器PWMDTYx介绍详见7.3.11节。《MC9S12XS单片机原理及嵌入式系统开发》7.3PWM模块寄存器及设置7.3.5PWM居中对齐使能寄存器(PWMCAE)PWM居中对齐输出波形如图7.9所示。当使用居中对齐格式输出