这个是我最近在做的一个比赛里用到的程序,分享给大家。
这个同样也是需要ADC算法的,主函数如下:
- int main(void)
- {
- int adcx1,adcx2,cha;
- int m,last_m;
- delay_init(); //延时函数初始化
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级为2
- uart_init(115200); /串口初始化为115200
- Adc1_Init(); //ADC初始化
- Adc2_Init();
- TIM2_PWM_Init(999,200); /不分频,PWM频率=72000000/900=80Khz
- TIM3_PWM_Init(999,200);
- TIM4_PWM_Init(999,200);
- TIM_SetCompare1(TIM4,0);
- TIM_SetCompare2(TIM4,0);
- TIM_SetCompare3(TIM4,0);
- TIM_SetCompare4(TIM4,0);
-
- TIM_SetCompare1(TIM3,0);
- TIM_SetCompare2(TIM3,0);
- TIM_SetCompare3(TIM2,0);
- TIM_SetCompare4(TIM2,0);
-
-
- // adcx1=Get_Adc1_Average(ADC_Channel_0,20);
- // adcx2=Get_Adc2_Average(ADC_Channel_1,20);
- //
- // m=adcx1-adcx2;
- // cha=(float)m*2.0;
- // SPEED(600-cha,600+cha);
- // SPEED(300,300);
-
-
- while(1)
- {
-
- adcx1=Get_Adc1_Average(ADC_Channel_0,20);
- adcx2=Get_Adc2_Average(ADC_Channel_1,20);
- if(adcx1<300||adcx2<(-300))
- {
- if(last_m>0)
- m=+1000;
- else
- m=-1000;
- }
- else
- {
- m=adcx1-adcx2;
- }
-
- if(m>1000)
- m=1000;
- if(m<-1000)
- m=-1000;
-
-
- cha=(float)m*3.7;
- if(abs(m)<30)
- {
- SPEED(950-cha,950+cha);
- }
- else
- {
- SPEED(900-cha,900+cha);
- }
-
-
- printf("%d\n",m);
- // delay_ms(10);
- last_m=m;
- }
-
- }
- void SPEED(int L,int R)
- {
- if(L>999)
- {
-
- L=999;
-
- }
- if(L<-999)
- {
-
- L=-999;
-
- }
- if(R>999)
- {
- R=999;
- }
- if(R<-999)
- {
- R=-999;
- }
- if(L>0)
- {
- TIM_SetCompare2(TIM3,0);
- TIM_SetCompare4(TIM2,0);
- TIM_SetCompare1(TIM3,L);
- TIM_SetCompare3(TIM2,L);
- }
- else
- {
- TIM_SetCompare1(TIM3,0);
- TIM_SetCompare2(TIM3,-L);
- TIM_SetCompare3(TIM2,0);
- TIM_SetCompare4(TIM2,-L);
-
- }
-
-
- if(R>0)
- {
- TIM_SetCompare1(TIM4,R);
- TIM_SetCompare2(TIM4,0);
- TIM_SetCompare3(TIM4,R);
- TIM_SetCompare4(TIM4,0);
- }
- else
- {
- TIM_SetCompare1(TIM4,0);
- TIM_SetCompare2(TIM4,-R);
- TIM_SetCompare3(TIM4,0);
- TIM_SetCompare4(TIM4,-R);
-
- }
- }
复制代码
全部资料51hei下载地址:
differ-speed.rar
(338.19 KB, 下载次数: 82)
|