摘要: 本应用笔记展示了如何在MAXQ2000微控制器上使用定时器类型2来生成脉宽调制(PWM)波形。它还讨论了在使用定时器类型2产生PWM时应考虑的问题。
脉宽调制(PWM)是一种利用信号占空比来传递信号含义的技术。具体来说,时钟信号处于逻辑高电平和逻辑低电平的时间长短告诉信号的接收者做一些事情。PWM常用于控制风扇转速、直流电机和伺服电机。风扇转速控制,脉冲高时间越长,风扇运行速度越快。使用PWM和一些外部电路,甚至可以通过对已知时间常数的RC电路充电特定长度的时间来实现简单的数字转换器(DAC)。添加一个比较器电路可以创建一个简单的数字转换器(ADC)。你甚至可以给电池充电,这需要不同的外部电路和更高级的改变。本应用笔记解释了如何使用MAXQ2000微控制器上的2型定时器来生成和控制PWM。
MAXQ2000是一款低功耗、高性能的RISC LCD微控制器,具有多种外设和功能,包括三个16位定时器。这些2型定时器提供了许多功能:8/16位定时器/计数器,自动加载,外部脉冲计数,捕获和比较。2型定时器还为MAXQ2000提供PWM功能。有关MAXQ2000和2型定时器的更多信息,请参阅MAXQ2000用户指南(PDF)和MAXQ2000用户指南补充(PDF)。
MAXQ2000的定时器类型2利用自动加载与比较来产生PWM信号。每次定时器溢出或有比较值匹配时,它切换输出引脚T2P和T2PB的逻辑状态。图1显示了一个基本的PWM波形,其中基期(1/ f(B))对应于定时器的溢出。计时器和重新加载寄存器应该设置为每1/ f(B)秒溢出和重新加载的值。使用公式1来确定这个值:
其中T2R(16)是定时器类型2的初始值,也是重载值。系统时钟可以是实际的系统时钟,即16MHz,或可选的32kHz时钟。如果基频f(B)明显小于系统频率,则可以使用T2DIV将输入时钟划分到更合理的水平。
PWM波形的高电平t(H)对应于定时器比较寄存器的匹配。应该将比较寄存器设置为每次重新加载后匹配t(H)的值。用方程2。记住t(H)必须小于基期是很重要的。还要注意,比较输出切换发生在匹配后的下一个计时器刻度上,这解释了下面等式中的-1。如果高时间和基期相同,输出波形只会在溢出时切换一次,导致半速波,这将导致问题。
在某些应用中,t(H)可以用百分比或占空比(DC)来描述。在这种情况下,使用下面的公式3,其中50%的DC(一半高,一半低)表示为0.50。
图1所示 PWM波形。
一些PWM应用需要改变波形的基频或修改高时间。在进行这些更改之前,使用TR2停止计时器是很重要的。否则,PWM波形可能会反转,因为定时器将输出切换到额外的时间。停止和重新启动定时器保证一致的波形。
如上所述,一些硬件对停止和重新启动PWM波形所导致的PWM故障很敏感。如果需要无故障PWM,则在更新定时器寄存器时必须更加小心。一种方案使用溢出和比较标志作为更新信号。当设置比较标志/中断标志时,更新重新加载寄存器。设置溢出标志后,更新比较寄存器。该方案允许以可预测的方式进行更改。注意,该方案在边界附近可能出现问题。特别是,如果计时器输入是一个未分割的系统时钟,尝试将比较寄存器更新为比重新加载多一个计数可能会导致意外行为。
由于输出的切换行为,重要的是要考虑引脚的初始状态。输出的初始状态由T2POL控制;如果设置为0,它将反转输出信号。的双8位定时器示例中可以看到这种行为附录在下面。
MAXQ2000和定时器类型2支持许多专业应用所需的选项。通过使用主输出引脚作为门控输入,可以在次级输出引脚上对PWM信号进行门控。这有效地停止定时器滴答,并将停止PWM信号。其他特殊模式包括单发和门控单发。
定时器类型2还支持三种8位模式的PWM信号生成。当不需要更高精度的16位计时器时,这些模式允许计时器用于多个任务。双8位模式允许定时器产生两个独特的PWM信号,而其他8位模式只支持二次引脚T2PB上的PWM输出。要将计时器配置为8位模式,请使用公式1和公式2来重载和比较值,只是用256代替65536。
系统时钟频率影响输出波形的精度。例如,一个16MHz的时钟比一个14.7456 mhz的时钟被8整除均匀得多。许多快速计时器比两个大的慢计时器更精确。由于这个原因,16位计时器比8位计时器更准确。
附录A包含在MAXQ2000的定时器0上以16位和双8位模式设置PWM的代码示例。
;16位PWM示例代码;MAXQ2000有3个2型定时器/计数器,每个有2个输出引脚;系统时钟为16Mhz;我们将使用定时器0$include (maxQ2000.inc);一些基本的初始化。将Accumulator Controls设置为正常。移动APC, #0;无累加模行为移动AP, #0;移动T2CFG0, #00000000b;配置定时器;T2CI = 0 -使用系统时钟;TDIV = 000 -使用除以1;T2MD = 0 - 16位;CCF = 00 -比较/重新加载模式;C/T2 = 0 -定时器模式移动T2CNA0, #01100000b;设置定时器控制;ET2 = 0 -无中断;T2OE0 = 1 -利用初级输出引脚;T2POL0 = 1 -初始输出高;TR2L = 0 -不关心在16位模式;TR2 = 0 -暂不运行;CPRL2 = 0 -不关心比较模式;SS2 = 0 - No Single shot;G2EN = 0 -无时钟门控移动T2V0, #63936;设置初始计时器计数生成;10Khz基频PWM波移T2R0, #63936;将Reload设置为相同的值;移动T2C0, #64735;50%的关税;移动T2C0, #64095;10% duty move T2C0, #65135;75% duty move acc, T2CNA0或#00001000b;启动定时器移动T2CNA0, acc jump $end;双8位PWM示例代码;计时器将输出反波形;MAXQ2000有3个2型定时器/计数器,每个有2个输出引脚;系统时钟为16Mhz;我们将使用定时器0$include (maxQ2000.inc);;一些基本的初始化。将Accumulator Controls设置为正常。移动APC, #0;无累加模行为移动AP, #0;移动T2CFG0, #00111000b;配置定时器;T2CI = 0 -使用系统时钟;TDIV = 011 -使用除以8;T2MD = 1 - 8位;CCF = 00 -比较/重新加载模式;C/T2 = 0 -定时器模式移动T2CNA0, #01000000b;设置定时器控制;ET2 = 0 -无中断;T2OE0 = 1 -利用初级输出引脚;T2POL0 = 0 -初始输出低;TR2L = 0 -不要跑得更低;TR2 = 0 -先不要跑上;CPRL2 = 0 -不关心比较模式;SS2 = 0 - No Single shot;G2EN = 0 -无时钟门控移动T2CNB0, #01100000b;设置定时器控制b;ETl2 = 0 -无中断;T2OE1 = 1 -利用初级输出引脚;T2POL1 = 1 -初始输出高;保留;3:0 -中断标志移动T2V0, #56;设置初始计时器计数以产生移动T2H0, #56;10Khz基频PWM波移T2R0, #56;设置重载为相同的值移动T2RH0, #56移动T2C0, #95;设置高时间为20us移动T2CH0, #95移动acc, T2CNA0或#00011000b;启动定时器移动T2CNA0, acc跳转$end
社群二维码
关注“华强商城“微信公众号
Copyright 2010-2023 hqbuy.com,Inc.All right reserved. 服务热线:400-830-6691 粤ICP备05106676号 经营许可证:粤B2-20210308