标题:
基于stm32的小车差速转弯源程序
[打印本页]
作者:
jeffrey.....
时间:
2018-8-19 06:54
标题:
基于stm32的小车差速转弯源程序
这个是我最近在做的一个比赛里用到的程序,分享给大家。
这个同样也是需要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)
2018-8-19 15:52 上传
点击文件名下载附件
ADC算法搜集数据
下载积分: 黑币 -5
作者:
jiabo
时间:
2019-4-23 22:24
谢谢分享
作者:
DukeKyrie
时间:
2020-3-27 17:28
谢谢楼主!请问有电路原理图吗?
作者:
pmp
时间:
2020-10-11 12:39
感谢分享,电赛正在使用。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1