M16输出PWM有行刺,求指教!
使用的是M16,8MHZ内部RC,与PWM部分相关的代码如下:#define PWMDDRDDRD
#define PWMPORPORTD
#define PWM1 7
#define PWM2 5
#define PWM3 4
#define PWM1_data OCR2
#define PWM2_data OCR1A
#define PWM3_data OCR1B
#define PWM_MAX 100
volatile unsigned char APWM;
volatile unsigned char BPWM;
volatile unsigned char CPWM;
void pwm_init(void)
{
APWM=0;BPWM=0;CPWM=0;
PWMDDR|=1<<PWM1|1<<PWM2|1<<PWM3;
/*初始化PWM*/
TCCR2|=1<<COM21|1<<WGM21|1<<WGM20|1<<CS22;// 匹配时清零(COM2A1:COM2A0)快速PWM模式(WGM22:21:20) PWM CLK/64
OCR2=0;
TCNT2=0;
TCCR1A|=_BV(COM1A1)|_BV(COM1B1)|_BV(WGM10);//比较匹配时清零(COM1A1:COM1A0 COM1B1:COM1B0)
TCCR1B|=_BV(CS11)|_BV(CS10)|_BV(WGM12); //8位快速PWM(WGM10:11:12) PWM CK/64
OCR1A=0;
OCR1B=0;
/*初始化PWM*/
}
void PWM_OUT(unsigned char P1,unsigned char P2,unsigned char P3)
{
const unsigned char PD=
{
0,5,6,7,8,9, 10, 11, 12, 13, 14, //1
15, 16, 17, 18, 19, 20, 21, 22, 23, 24, //2
25, 26, 27, 28, 29, 30, 31, 32, 33, 34, //3
35, 36, 37, 38, 39, 40, 41, 42, 43, 44, //4
45, 46, 47, 48, 49, 50, 51, 52, 53, 54, //5
55, 56, 57, 58, 59, 60, 61, 62, 63, 64, //6
66, 68, 70, 72, 74, 76, 78, 80, 82, 84, //7
88, 92, 96,100,104,108,112,116,120,124, //8
130,136,142,148,154,160,166,172,178,184, //9
191,198,205,212,219,226,233,240,247,255 //10
};
PWM1_data=PD;
PWM2_data=PD;
PWM3_data=PD;
}
void int main(void)
{
pwm_init();
while(1)
{
……
……
PWM_OUT(APWM,BPWM,CPWM);
}
}
当 PWM_OUT(0,0,0);时,PWM相关引脚还是有毛刺出现。
{:lol:} 请问你是用什么仪器来测试的?
请看我以前遇到的情况:http://www.amobbs.com/thread-5482177-1-1.html {:smile:}mark BBC 发表于 2012-9-5 23:27 static/image/common/back.gif
请问你是用什么仪器来测试的?
请看我以前遇到的情况:http://www.amobbs.com/thread-5482177-1-1 ...
您好!看了一下您的帖子,最后大概是认为是仪器的问题是吧?我用的是青岛汉泰的虚拟示波器DSO-5200A 200MHz 带宽,50G等效采样。能否作个总结?万分感谢! 好像是占空比没有设置好哦! xtxtt 发表于 2012-9-6 08:30 static/image/common/back.gif
好像是占空比没有设置好哦!
求指正! 占空比设成0,还是有1的占空比输出的,这个是正常的。 ahuang227 发表于 2012-9-6 10:08 static/image/common/back.gif
占空比设成0,还是有1的占空比输出的,这个是正常的。
为什么会这样? 虽然你设置成0 ,但是比较器比较两个值是要时间的,1个clock已经是很短的时间了。怎么也去不掉。
要是真的纠结,那就只能关断PWM输出才行。 ahuang227 发表于 2012-9-6 10:12 static/image/common/back.gif
虽然你设置成0 ,但是比较器比较两个值是要时间的,1个clock已经是很短的时间了。怎么也去不掉。
要是真的 ...
我用过STC12C5608的PWM输出,PWM=0的时候,啥都没有哦。 qqtfh 发表于 2012-9-6 08:13 static/image/common/back.gif
您好!看了一下您的帖子,最后大概是认为是仪器的问题是吧?我用的是青岛汉泰的虚拟示波器DSO-5200A 200M ...
{:lol:} 目前只发现USB口的逻辑分析仪会出现这种现象,其他仪器应该不会有~~也都不应该有...呵呵 BBC 发表于 2012-9-6 13:45 static/image/common/back.gif
目前只发现USB口的逻辑分析仪会出现这种现象,其他仪器应该不会有~~也都不应该有...呵呵 ...
应该不是仪器的问题,我用STC12C5608的PWM做过输出,不存在这样的问题。 本帖最后由 qqtfh 于 2012-9-6 19:49 编辑
问题已解决。给OCR2赋值之前判断值大小;如果等于0,就设置TCCR2&=~(1<<COM21|1<<COM20);OCR2当普通IO输出0;非0时,就重新设置TCCR2。感谢CCTV!感谢中央电视台!{:victory:}
页:
[1]