stc12c5a60s2的硬件8位PWM 好像不能输出0%的占空比
如题, 已经把相关控制PWM的寄存器配置成0了 ,然而输出好像有1%的方波的感觉,不能完全低电平,除非把PWM使能也关了,请问这个正常吗void pwm_init(){
CCON = 0; //Initial PCA control register
//PCA timer stop running
//Clear CF flag
//Clear all module interrupt flag
CL = 0; //Reset PCA base timer
CH = 0;
CMOD = 0x08;
//CMOD=0x02;//sys_clock/2
//Disable PCA timer overflow interrupt
CCAP1H = CCAP1L =127; //PWM0 port output 50% duty cycle square wave
CCAP0H = CCAP0L =127; //PWM0 port output 50% duty cycle square wave
CCAPM1 = 0x42; //PCA module-0 work in 8-bit PWM mode and no PCA interrupt
CCAPM0 = 0x42; //PCA module-0 work in 8-bit PWM mode and no PCA interrupt
CR = 1; //PCA timer start run
PCA_PWM1=0x00; //0x03¿ÉÒԹرÕPWM
PCA_PWM0=0x00; //0x03¿ÉÒԹرÕPWM
}
下面是配置占空比%比
CCAP0H=CCAP0L=PWM_VALUE;
给255理论上应该是低电平了,但是每个周期有一个很短的高电平脉冲 没仔细看规格书哦,有详细说明。
比如PCA0,CCAP0H是给的低电平时间,为0~255(0xff)个PCA时钟周期。
CCAP0H=0,则为连续输出高电平。CCAP0H=255(0xff),则输出为255个低电平时钟,还有1个高电平时钟。
要输出连续的低电平,要设置“第9位”,即PCA_PWM0=3;这样就可以输出连续的低电平了。 小李非刀 发表于 2017-7-3 22:40
没仔细看规格书哦,有详细说明。
比如PCA0,CCAP0H是给的低电平时间,为0~255(0xff)个PCA时钟周期。
谢谢您的回复, 我之前一直把PCA_PWM 当作是使能位了, 很奇怪 我赋值0x03 确实占空比输出为0
有一点很纳闷 既然pwm是8位的 且CL寄存器也是8位的,为何这里要凑成9位的寄存器作比较 ackyee 发表于 2017-7-3 23:46
谢谢您的回复, 我之前一直把PCA_PWM 当作是使能位了, 很奇怪 我赋值0x03 确实占空比输出为0
有一点很纳 ...
8位的,就是将一个周期分256个细分,如果从0开始,则为0~255,输出低电平的占空比就是0/256~255/256(高电平占空比是256/256~1/256)。
8位PWM其周期有256细分,但是你要能输出0%~100%,也就是0/256~256/256,则有257个细分,所以需要9位。可以将第9位想象成可以设置直接输出连续低电平的功能位。 也曾问过同样的问题。 小李非刀 发表于 2017-7-4 22:16
8位的,就是将一个周期分256个细分,如果从0开始,则为0~255,输出低电平的占空比就是0/256~255/256(高 ...
谢谢您的回答,今天已经把问题解决了,这个地方手册确实没有好好看 之前也不知道可以这样设置到0%。
页:
[1]