坑爹的STC PWM ,设置全灭时,居然还有毛刺。
// STC单片机PWM脉宽调制功能模块#include <STC12C5620AD.H>
// PWM初始化
// 将PCA初始化为PWM模式,初始占空比为0
// 参数:0,1,2,3,分别表示对PWM0、PWM1、PWM2、PWM3初始化
void PWM_Init(int i)
{
CMOD = 0x00; // 设置PCA定时器频率为内部时钟fosc/2
CL = 0x00;
CH = 0x00;
CCAPM0 = 0x42; // PWM0设置PCA工作方式为PWM方式(0100 0010)
CCAP0L = 0x00; // 设置PWM0初始值与CCAP0H相同
CCAP0H = 0x00; // PWM0初始为0
CCAPM1 = 0x42;
CCAP1L = 0x00;
CCAP1H = 0x00;
CCAPM2 = 0x42;
CCAP2L = 0x00;
CCAP2H = 0x00;
CCAPM3 = 0x42;
CCAP3L = 0x00;
CCAP3H = 0x00;
CR = 1; // 启动PCA定时器
}
// PWM占空比设置
// 参数1:0,1,2,3,分别表示对PWM0、PWM1、PWM2、PWM3设置占空比
// 参数2:0x00~0xFF(或0~255),0x00时全部为低电平,0xFF时全部为高电平
void PWM_Set(int i, unsigned char c)
{
CCAP0L = c;
CCAP0H = c;
CCAP1L = c;
CCAP1H = c;
CCAP2L = c;
CCAP2H = c;
CCAP3L = c;
CCAP3H = c;
}
void main()
{
unsigned char t;
t=0;
PWM_Init(t);
PWM_Set(t,255);//设置没全部低电平,LED暗亮,用示波器看有个周期的毛刺。
while(1)
{
// PWM_Set(t,128);
}
} 用在LED 调光,居然暗亮。最后才发现STC的问题,打给STC技术支持,居然说这个就是这样的,就挂断线,这态度。。。 不知为什么,只有把PWM禁掉,才完全输出高电平。 说明书里有提到
当EPCnL = 0及ECCAPnL=00H时,PWM固定输出高
当EPCnL = 1及ECCAPnL=FFH时,PWM固定输出低 {:mad:}{:shocked:} 用过STC的PWM,驱动舵机的,效果还行吧,用虚拟逻辑分析仪没发现毛刺 本帖最后由 wsy2012 于 2012-12-21 22:24 编辑
stc的pwm还是不错的,比他的eeprom强多了。
用我的山寨版逻辑分析仪没有发现毛刺。 估计我也碰到类似的问题,我没有示波器测量。pwm全低时,恒流源IC后面的LED微亮,郁闷死了,请教楼主的解决之道 xiaowu191 发表于 2012-12-20 23:47 static/image/common/back.gif
说明书里有提到
当EPCnL = 0及ECCAPnL=00H时,PWM固定输出高
确实这个在判断最大值与最小值要将PCA_PWMn这个寄存器设置一下,才可以将毛刺消除 stc的芯片也就是功能多一点
感觉它的品质根本比不过at的产品 12C4052AD的PWM
示波器实测没发现毛刺啊 12c5a60s2,经常用,没毛刺,估计楼主的没设置好 没用过STC的,不好评价 应该是设置问题。 mii 发表于 2012-12-31 23:06 static/image/common/back.gif
确实这个在判断最大值与最小值要将PCA_PWMn这个寄存器设置一下,才可以将毛刺消除 ...
不知道你有没有实际试过,我改过,不过没有效果,想当然是没有用的。 这个问题主要是没有设置PCA_PWM0=0;或者PCA_PWM0=3; 楼主,设置的问题 用过STC12C5A60S2的PWM当DA用,反正DA精度要求不高,马马虎虎可以用 同样也发现这个问题!
页:
[1]