用一个定时器能使单片机的两个输出口产生2个不同的pwm脉冲吗??懂得话给个程序。。占空比要可调的,,
写的我用的上肯定给分。。就是要单片机两个输出口输出占空比可调的pwm。。。最好带写注释。。。不要用8254.。。只用单片机的定时器。。543511734这是我qq。。有好...
写的我用的上肯定给分。。就是要单片机两个输出口输出占空比可调的pwm。。。最好带写注释。。。
不要用8254.。。只用单片机的定时器。。543511734这是我qq。。有好心人请帮帮忙..用c语言。。应该是可以的。。 展开
不要用8254.。。只用单片机的定时器。。543511734这是我qq。。有好心人请帮帮忙..用c语言。。应该是可以的。。 展开
7个回答
展开全部
提供一种思路,程序没时间写。
1、PWM需要周期,因此定时器必须得设置匹配值,达到周期计数时间后复位TC值;
2、两个PWM波形需要产生可调的PWM,那么就需要让定时器知道什么时刻该让这个IO口输出高低电平。可以让两个输出提供参数,比如数值是多少后出现高电平,高电平持续多长数值?
3、最后就是关键点了,即将定时器TC值(周期值)细化,比如我脉宽周期设定TC值是3000时候复位,那么我可以将这个定时器定时300时候出现一次中断,600时候中断一次,900时候出现一次中断,一次类推,这样就可以得到很多的时间片段,即标志位COUNT。
4、我希望IO口在周期内出现可调节脉宽那么可以实现了,比如COUNT==IO1的时候让其出现高电平,持续多长时间后出现低电平(中断里面完成);
简单的示意程序:
void TIMER_HANDLE(void)
{
//判断是否达到TC值,如果达到则复位(COUNT清零),否则执行匹配中断
//在原有基础上设置匹配值中断,匹配值 +=300;
COUNT++;
if((COUNT == IO1_H_TIME)) //现在正好是需要高电平的时刻,因此值置高
{
//持续时间开启(自减),是否为0?
//不是0,那么继续输出高电平
//是0,关闭输出,同时清除高电平时刻
}
}
估计精度不怎么好。
1、PWM需要周期,因此定时器必须得设置匹配值,达到周期计数时间后复位TC值;
2、两个PWM波形需要产生可调的PWM,那么就需要让定时器知道什么时刻该让这个IO口输出高低电平。可以让两个输出提供参数,比如数值是多少后出现高电平,高电平持续多长数值?
3、最后就是关键点了,即将定时器TC值(周期值)细化,比如我脉宽周期设定TC值是3000时候复位,那么我可以将这个定时器定时300时候出现一次中断,600时候中断一次,900时候出现一次中断,一次类推,这样就可以得到很多的时间片段,即标志位COUNT。
4、我希望IO口在周期内出现可调节脉宽那么可以实现了,比如COUNT==IO1的时候让其出现高电平,持续多长时间后出现低电平(中断里面完成);
简单的示意程序:
void TIMER_HANDLE(void)
{
//判断是否达到TC值,如果达到则复位(COUNT清零),否则执行匹配中断
//在原有基础上设置匹配值中断,匹配值 +=300;
COUNT++;
if((COUNT == IO1_H_TIME)) //现在正好是需要高电平的时刻,因此值置高
{
//持续时间开启(自减),是否为0?
//不是0,那么继续输出高电平
//是0,关闭输出,同时清除高电平时刻
}
}
估计精度不怎么好。
展开全部
是的51单片机是不可以的。
去学习一下别的单片机。绝对有你需要的结果的,甚至更好的都有。
去学习一下别的单片机。绝对有你需要的结果的,甚至更好的都有。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以用STC12C5204AD,增强型的51系列,带双路PWM输出,两个的占空比可以不一样
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
AVR单片机,一个定时器能产生2个或3个PWM。并且每个PWM的占空比都能可调。
看你能不能用上了。
看你能不能用上了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
一个定时器不能,51是不能,呵。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询