我想使用单片机定时器输出3路pwm波,这三路pwm波的频率为100Hz;相位之差和为360。大神 帮帮忙
1个回答
展开全部
3路PWM波,频率100HZ,周期为10ms,这个应该很简单吧,用定时器进行定时0.1ms中断一次,100次为一循环,这样周期为10ms。相位差和为360,最简单的是,第1个方波比第2个差120,第2个比第3个差120,第3个比第1个差120。也就是说在第0ms第1个方波启动,第3.3333...ms第2个方波启动,6.66666ms第3个方波启动,而到10ms第1个方波第二个周期又开始启动。这只是最简单的,其实只要满足a b c三个方波启动时间刚好加起来等于10ms就可以。
回到定时器,程序你设定3个变量,a b c,其中a b c的初值分别用来表示第1 2 3方波的相位差,判断a b c的范围来确认三个方波的占空比。设置0.1ms中断,变量初值a=0 b=33 c=66每次中断a b c 分别++,当a=100 b=100 c =100,a=0 b=0 c=0。
主函数,设置3个IO口,PWM1 PWM2 PWM3,if(0<a<50);(PWM1==1);else;PWM1==0; if(0<b<50);(PWM2==1);else;PWM2==0; if(0<c<50);(PWM3==1);else;PWM3==0;其中a b c的取值范围就是占空比的值(1~99)。
注:1、因为a b c初值不同,所以相位差在初值就体现出来了。2、也可不用中断,判断定时器溢出位也可。3、想要更精确可以定时0.01ms,变量设定1000个。
以上也是我自己凭空想的,没实际实验,你可以试试!
回到定时器,程序你设定3个变量,a b c,其中a b c的初值分别用来表示第1 2 3方波的相位差,判断a b c的范围来确认三个方波的占空比。设置0.1ms中断,变量初值a=0 b=33 c=66每次中断a b c 分别++,当a=100 b=100 c =100,a=0 b=0 c=0。
主函数,设置3个IO口,PWM1 PWM2 PWM3,if(0<a<50);(PWM1==1);else;PWM1==0; if(0<b<50);(PWM2==1);else;PWM2==0; if(0<c<50);(PWM3==1);else;PWM3==0;其中a b c的取值范围就是占空比的值(1~99)。
注:1、因为a b c初值不同,所以相位差在初值就体现出来了。2、也可不用中断,判断定时器溢出位也可。3、想要更精确可以定时0.01ms,变量设定1000个。
以上也是我自己凭空想的,没实际实验,你可以试试!
来自:求助得到的回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询