枭龙战机

ADUC7026实现舵机控制

0
阅读(2042)

在舵机控制时,需要不同的PWM信号,当PWM信号发生改变,实现舵机的转动。下面给出相应的程序。

#include 
#include 
#include

/*提供4路舵机信号,舵机1、2固定不动,调节P_Value1和P_Value2值调整固定位置,
舵机3可以定时改变位置,更改P_Value3的大小改变位置不同,P_Value4备份用,非用
勿改!*/


void ProPPM(int time1,int time2,int time3,int time4);
void IRQ_Handler() __irq;



int PPM1 = 0,PPM2 = 0,PPM3 = 0,PPM4 = 0,PeriodCount = 0;
int input1 = 0,input2 = 0,input3 = 0,input4 = 0;     	 
int P_Value1 =37,P_Value2 =37,P_Value3 =25,P_Value4 =25; //修改初始固定位置改这里,25对应左极限位置,50对应右极限位置,其间夹90°角,不准越界!!!
int AD_pot = 0,cnt=0; 





int main() {




    T1CON  = 0xC0;
        T1LD   = 0x688;               // configure timer1's load number
        IRQEN |= 0x08;
                        		       						
       // GP4DAT = 0x04000000;                      // p4.2 output 0
        GP3DAT = 0x0F000000;                 // configure p3.0 3.1 3.2 3.3 as output 0

		
	
        


        while (1) 
        {
           
                      	 if((GP0DAT&0x02)==0x02)
		          {
		 	cnt++;
		    GP4DAT|= 0x04000000;                      // 黄灯亮开始计时	
		if(cnt>=1600000)//修改时间改这里,2800000对应时间约5秒
		{
        	         	 P_Value3 = 50;	//改变到右极限位置
		 GP4DAT |= 0x02000000;                    //绿灯亮舵机改变位置

		 cnt=1600000;  //修改时间改这里2800000,和上面同时改,数字要一致
						}				 }			
              	
        
        }
        return 0;
}


void ProPPM(int time1,int time2,int time3,int time4)
{
    if(PPM1==time1)
    { 
                GP3DAT=GP3DAT&0x0F0E0000;
        }
    if(PPM2==time2)
    { 
                GP3DAT=GP3DAT&0x0F0D0000;
        }
        if(PPM3==time3)
    { 
                GP3DAT=GP3DAT&0x0F0B0000;
        }
    if(PPM4==time4)
    { 
                GP3DAT=GP3DAT&0x0F070000;
          
        }	
   

        if(PeriodCount > 500)
        {
                GP3DAT = 0x0F0F0000; 		
                PPM1 = 0,PPM2 = 0,PPM3 = 0,PPM4 = 0,PeriodCount = 0;
               
        	
        }
}


void IRQ_Handler() __irq {
        if ((IRQSTA & GP_TIMER_BIT) !=0)
        {
                PPM1++;PPM2++;PPM3++;PPM4++;PeriodCount++;
                ProPPM(P_Value1,P_Value2,P_Value3,P_Value4);
                T1CLRI = 0;	
        }
         
  
        return;
}