本帖最后由 烈焰123 于 2016-4-12 18:36 编辑
这是我编的一个能产生4路不同PWM波的程序,谁能给看看,为什么产生不了正确的波形呢。
注:180度舵机用PWM控制,通过控制jd的大小控制角度,
360度舵机也用PWM控制,不过控制方法不同,通过给定一个jd值,使其进行正反转,同时通过控制给的jd值得时间来控制圈数,时间一到,给一个停止的jd值,达到控制360度舵机的目的。但是,通过
仿真,无法产生想要的四路pwm波,谁能给看看怎么回事,C程序如下:
#include<reg52.h>
unsigned char count;
sbit pwm1=P1^0; //jiao
sbit pwm2=P1^1; //jing
sbit pwm3=P1^2; //gao
sbit pwm4=P1^3; //zhua
unsigned char jd1,jd2,jd3,jd4,m1,m2,m3,m4,t1,t2;
unsigned char a,b,c,d;
//延时程序
void delay(unsigned int x)
{
unsigned char i,j;
for(i=x;i>0;i--)
for(j=125;j>0;j--);
//延时0.1ms,
}
void timer0_Init()
{
TMOD=0x01;
IE=0x82;
TH0=0xff;//65436/256; 定时0.1ms
TL0=0xA4;//65436%256
TR0=1;
}
void Timer0_Int() interrupt 1//中断程序
{
TH0=0xff;
TL0=0xA4;
//m1=count;
//m2=count;
if(m1<jd1)
pwm1=1;
else
pwm1=0;
if(m2<jd2)
pwm2=1;
else
pwm2=0;
if(m3<jd3)
pwm1=1;
else
pwm1=0;
if(m4<jd4)
pwm1=1;
else
pwm1=0;
count++;
count%=200; //20m秒需要数200次
m1=count;
m2=count;
m3=count;
m4=count;
/********************************************************/
/*根据io口及pwm需要情况可加m3,m4,m5…… */
/******************************************************/
}
void pwm360_jd1()
{
if(a>0)
{
jd1=20;
a--;
}
else
{jd1=15;
}
}
void pwm360_jd2()
{
if(b>0)
{
jd2=20;
b--;
}
else
{jd2=15;}
}
void pwm180_jd3()
{
if(jd3<30&&jd3>0)
{
jd3+=1;
}
if(jd3>30)
{jd3=30;}
while(c>0)
{c--;}
}
void pwm180_jd4()
{
if(jd4<30&&jd4>0)
{
jd4+=1;
}
if(jd4>30)
{jd4=30;}
while(d>0)
{d--;}
}
void main()
{
jd3=1;
jd4=1;
pwm1=1;
pwm2=1;
pwm3=1;
pwm4=1;
a=25;
b=15;
c=200;
d=150;
count=0;
Timer0_Init();
while(1)
{
pwm360_jd1();
pwm360_jd2();
pwm180_jd3();
pwm180_jd4();
}
}
一周热门 更多>