如何用一个51单片机两个需不同占空比的pwm控制两个相互独立的电机运转?请给出详细的思路,最好有电路图?

如何用一个51单片机两个需不同占空比的pwm控制两个相互独立的电机运转?请给出详细的思路,最好有电路图?先谢谢各位大侠哈

用定时器产生一个时基时序,比如1ms、10ms或者100ms等,这个时基就作为你的PWM的最小时间单位,然后用计数器的方式(定时中断一次计数器加一),不同的计数值可以形成不同的脉宽,然后改变你的输出状态,就可以形成脉宽可调的PWM波形,一次中断如果多次判断不同的计数值时还可以控制多个PWM波形(比如计数器每加3次PWM的输出状态改变一次,就可以形成一个矩形波,再比如要形成周期为10个时基脉宽为3和周期为20脉宽为8的两个PWM波,就可在中断中判断 :
count++;
if(count%3)
PWM1=0;
if(count%10)
PWM1=1;
if(count%8)
PWM2=0;
if(count%20)
PWM2=1;
注意count计数到到最大时要赋值为初始值
有一点要注意:每次中断发生时不能再执行PWM的程序。追问

没看明白,求详解

追答

不好意思,程序有点问题,修改如下:
要形成周期为10个时基,脉宽为3,和周期为20,脉宽为8的两个PWM波:
中断程序:假设定时中断设定为10ms,即时基10ms
unsigned int count1=0,count2=0;
PWM1=1;
PWM2=1;
timer0_interrupt() interrupt 1
{
count1++;
count2++;
if(count1==3)
{
PWM1=0; //某个单片机I/O端口,输出低电平即波谷,波峰已经持续了30ms
}
if(count1==10)
{
PWM1=1;//计数器计数达到一个周期后,再次输出高电平即波峰
count1=0;//每个周期结束计数器都要清零
}
if(count2==8)
{
PWM2=0; //某个单片机I/O端口,输出低电平即波谷,波峰已经持续了80ms
}
if(count2==20)
{
PWM2=1;//计数器计数达到一个周期后,再次输出高电平即波峰
count2=0;//每个周期结束计数器都要清零
}
}
如何调节脉宽和周期你应该明白了吧,再加count3,count4..........可以输出更多路的PWM波,不过要注意一点中断程序要在一个时基内完成。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-04-30
一个用延时做,一个用中断做,互不干扰追问

能不能说具体点!有点蒙

第2个回答  2011-05-02
两路pwm
相似回答