Proteus仿真PMW舵机时不知为何舵机不动
时间:10-02
整理:3721RD
点击:
RT,资料上说PWM舵机是通过脉冲信号来控制的,一个周期是20ms,所以用12Mhz的晶振定时器应该比较准吧...每0.5ms控制舵机一个角度,所以我设置定时器65536-500=65035=fe0cH
那么...为何舵机就是不转呢?求老师能解答一下。
#include<reg52.h>
typedef unsigned char uchar;
typedef unsigned int uint;
sbit pwd=P2^0;
sbit s1=P3^1;
sbit s2=P3^2;
uchar count,jd=1;
void delay(uchar z)
{
uchar a;
for(z=z;z>0;z--)
for(a=114;a>0;a--);
}
void init()
{
TMOD=0x01;
TH0=0xfe;
TL0=0x0c;
ET0=1;
EA=1;
TR0=1;
}
void key()
{
if(!s1)
{
delay(5);
if(!s1)
{
count=0;
jd++;
if(jd>5)
jd=5;
while(!s1);
}
}
if(!s2)
{
delay(5);
if(!s2)
{
count=0;
jd--;
if(jd<1)
jd=1;
while(!s2);
}
}
}
void main()
{
init();
while(1)
{
key();
}
}
void time0() interrupt 1
{
TH0=0xfe;
TL0=0x0c;
if(count<jd)
pwd=1;
else
{
pwd=0;
count++;
count=count%40;
}
}
那么...为何舵机就是不转呢?求老师能解答一下。
#include<reg52.h>
typedef unsigned char uchar;
typedef unsigned int uint;
sbit pwd=P2^0;
sbit s1=P3^1;
sbit s2=P3^2;
uchar count,jd=1;
void delay(uchar z)
{
uchar a;
for(z=z;z>0;z--)
for(a=114;a>0;a--);
}
void init()
{
TMOD=0x01;
TH0=0xfe;
TL0=0x0c;
ET0=1;
EA=1;
TR0=1;
}
void key()
{
if(!s1)
{
delay(5);
if(!s1)
{
count=0;
jd++;
if(jd>5)
jd=5;
while(!s1);
}
}
if(!s2)
{
delay(5);
if(!s2)
{
count=0;
jd--;
if(jd<1)
jd=1;
while(!s2);
}
}
}
void main()
{
init();
while(1)
{
key();
}
}
void time0() interrupt 1
{
TH0=0xfe;
TL0=0x0c;
if(count<jd)
pwd=1;
else
{
pwd=0;
count++;
count=count%40;
}
}
应该是脉冲宽度调制吧?
是的
所以你应该换成pwm的函数