|
1.舵機(jī)的pwm應(yīng)該是20ms周期,0.5~2.5ms高電平控制舵機(jī)正反轉(zhuǎn)
2.你這個(gè)程序pwm信號(hào)不對(duì),占空比不對(duì)
/**************************************************************************/
//PWM調(diào)速程序,P1口輸出pwm
/****************************************************************************/
#include <reg51.h>
typedef unsigned char uint8;
typedef unsigned int uint16;
sbit S2 = P3^0;
sbit S3 = P3^1;
uint8 t = 0;
uint8 PWM_T = 0; //占空比控制變
void delay_1ms(uint16 t)
{
uint16 x,y;
for(x=t;x>0;x--)
for(y=120;y>0;y--);
}
/****************************************************
主程序
****************************************************/
void main(void)
{
TMOD = 0x02; //定時(shí)器0,工作模式2,8位定時(shí)模式
TH0=210; //寫入預(yù)置初值(取值1-255,數(shù)越大PWM頻率越高)
TL0=210; //寫入預(yù)置值 (取值1-255,數(shù)越大PWM頻率越高)
TR0=1; //啟動(dòng)定時(shí)器
ET0=1; //允許定時(shí)器0中斷
EA=1; //允許總中斷
P1=0xff; //初始化P1,輸出端口
PWM_T=30;
while(1)
{
if(!S3)//S3==0
{
if(PWM_T<250)
{
PWM_T++;
}
delay_1ms(10);
}
if(!S2)
{
if(PWM_T>0)
{
PWM_T--;
}
delay_1ms(10);
}
}
}
/****************************************************
/定時(shí)器0中斷模擬PWM
****************************************************/
timer0() interrupt 1
{
t++; //每次定時(shí)器溢出加1
if(t==250) //PWM周期 100個(gè)單位
{
t=0; //使t=0,開始新的PWM周期
P1=0x00; //輸出端口
}
if(PWM_T==t) //按照當(dāng)前占空比切換輸出為高電平
{
P1=0xff; //
}
}
這里給你個(gè)可調(diào)占空比的程序作為參考 |
|