一个定时器产生3路pwm

时间:2022-05-25 23:28:42
现一单片机,有一个8bit定时器,其余普通IO口,先需利用定时器实现输出3路pwm,且占空比可变(从小变到大,再从大变到小),周期大概15ms

6 个解决方案

#1


定时器定时时间设置60us

uchar T1,T2,T3;//定义三个变量,分别保存你需要的PWM高电平宽度
uchar T=0;
定时中断函数中:
{
T++;
if(T==0)
{
P10=1;//三个输出都设高
P11=1;
P12=1;
}
if(T==T1)P10=0;//P10高电平结束
if(T==T2)P10=0;//P11高电平结束
if(T==T3)P10=0;//P12高电平结束
}

#2


T不需要另外处理,当其溢出之后就回0,又从0开始,60us*256=15.36ms

#3


在主循环中改变T1,T2,T3就可以得到不同的占空比

#4


非常感谢,按照这思路我先编下代码 遇到问题再请教

#5


现在3路IO口都输出变占空比pwm
都是从低占空比到高占空比之后再变为低占空比这样子渐变,总的时长大概10s左右
1路开始渐变(2,3)保持不变,1路开始渐变6s后 2路开始渐变,2路渐变6s后3路开始渐变
,3路开始输出占空比6s后1路开始渐变。整个一个循环

#6


为什么溢出后就归零呢?

#1


定时器定时时间设置60us

uchar T1,T2,T3;//定义三个变量,分别保存你需要的PWM高电平宽度
uchar T=0;
定时中断函数中:
{
T++;
if(T==0)
{
P10=1;//三个输出都设高
P11=1;
P12=1;
}
if(T==T1)P10=0;//P10高电平结束
if(T==T2)P10=0;//P11高电平结束
if(T==T3)P10=0;//P12高电平结束
}

#2


T不需要另外处理,当其溢出之后就回0,又从0开始,60us*256=15.36ms

#3


在主循环中改变T1,T2,T3就可以得到不同的占空比

#4


非常感谢,按照这思路我先编下代码 遇到问题再请教

#5


现在3路IO口都输出变占空比pwm
都是从低占空比到高占空比之后再变为低占空比这样子渐变,总的时长大概10s左右
1路开始渐变(2,3)保持不变,1路开始渐变6s后 2路开始渐变,2路渐变6s后3路开始渐变
,3路开始输出占空比6s后1路开始渐变。整个一个循环

#6


为什么溢出后就归零呢?