pxpx601 发表于 2014-5-15 11:44:44

stc15f104e输出的PWM问题

我用stc15f104e输入航模接收机输出的PWM信号,转发PWM到舵机上,可是舵机不动,转发到电调上电调却可以驱动。舵机直接连接收机也可以驱动。这是怎么回事。我用逻辑分析仪看了频率,占空比,与接收机输出的是一样的。哪位高手知道这是怎么回事。

pxpx601 发表于 2014-5-15 11:50:46

#define SYSclk 12000000L
#define MODE1T                   //时间为为12T模式
#ifdef MODE1T
#define T1MS (65536-SYSclk/1000)
#else
#define T1MS (65536-SYSclk/12/1000)
#endif
sfr AUXR=0x8e;
sbit PWM=P3^3;                        //用于输出pwm信号
sbit P_IN=P3^2;           //用于判断是否有高电平输入
void main()
{        //       12MHZ 计数1=1us

        AUXR &= 0x7F;                //定时器时钟12T模式           定时器0       用12T模式          用于输出pwm
        TMOD &= 0xF0;                //设置定时器模式                16位定时器0自动重载
        AUXR &= 0xBF;                //定时器时钟12T模式                定时器1       用12T模式
        TMOD &= 0x0F;                //设置定时器模式      16位定时器1自动重载               用于输入pwm
        while(1)
        {          /*PWM输入*/
               if(P_IN==1)          //p3.2用来判断外部的低电平变高电平
                               {       
                                      if(g==2)           //关定时器       
                                       {        TR0=0;
                                       N=0x0000;
                                       N=TH0;
                                     N=(N<<8)+TL0;          //N就是一个周期的时间
                                       }
                                      g=1;
                                                  TH0=0x00; //对TH0 TL0 赋值
                            TL0=0x00;
                          TR0=1; //开始定时       
                               }
                               if((P_IN==0)&&(g==1))                //高电平变低电平
                                       {
                                          g=2;
                                       pwm_in=0x0000;
                                    pwm_in=TH0;
                            pwm_in=(pwm_in<<8)+TL0;
                                               
                                       //        PWM=0;       
                                       }
                                    pwm=pwm_in;
                               /*PWM输出        */
                                  if(s==0)                //输出高电平开始
                                  {s=1;
                                             TH1=0x00; //对TH0 TL0 赋值
                            TL1=0x00;
                                                TR1=1;       //计时开始
                                               PWM=1;           //输出高电平
                                  }
                                   if(s==1)           // 计算这个时间定时器在高电平输出时走了多久
                                  {    start=0x0000;         start=TH1;
                                                            start= (start<<8)+TL1;
                                                  if((pwm)<=start)           //当高电平持续时间达到要求的高电平输出时间 输出高电平结束进入低电平
                                                  {        TR1=0;
                                                     TH1=0x00; //对TH0 TL0 赋值
                               TL1=0x00;
                                                      TR1=1;       //重新开始计时
                                                         PWM=0;                //输出低电平
                                                          s=2;
                                                  }       
                                  }
                                  if(s==2)        //计算这个时间定时器在低电平输出时走了多久
                                  {      start=0x0000;    start=TH1;
                                                            start= (start<<8)+TL1;
                                             if((N-pwm) <=start)        //输出低电平时间到 结束一个周期       关闭计时器
                                           {TR1=0;s=0;}
                                  }



   }

pxpx601 发表于 2014-5-15 21:12:51

没有人遇到吗?
页: [1]
查看完整版本: stc15f104e输出的PWM问题