这一年,自己只做了这一个比赛,总结就一句话,自己 获益匪浅。

QQ:3177227373
V X:F9986858
全国大学生智能汽车竞赛是以智能汽车为研究对象的创意性科技竞赛,是面向全国大学生的一种具有探索性工程实践活动,是教育部倡导的大学生科技竞赛之一。

恩智浦杯智能车演示视频

恩智浦杯智能车节能组

这个比赛一年举办一次,由于我们学校的原因,在我所在校区只有两个组别,节能组和信标组,我们协会指导老师是个有长远眼光的人,他让我们参加的比赛和组别都是直接锻炼能力的,他不喜欢那种靠祖传的,也不是希望我们拿一大堆奖回去铺垫他的仕途,而是希望我们能学到真的知识(不过我们也都很争气),做比赛都很拼。他,真的是个好老师,龙老师。

而我们在一起做车的几个也是在这一年期间互相帮助,互相鼓励,一起努力前进。我是做节能组的,在13届我是小学弟,当时那届没做出来,第14届我来做,在这一年很感谢段大哥(会长)和哲哥,他们是我学长,不仅仅教会我写代码做PCB,还有教我做人的道理。真的很感谢。

使我获得第十四届西部赛区节能组二等奖,另一组是信标组三等奖,他叫尹博,这个组别他是开荒的,什么可以借鉴的资料都没有,全凭群里交流和用自己的想法来做车。

以下照片就是我们当时的留念,有幸在学校颁奖典礼得以展示。
在这里插入图片描述

下面是我自己的车

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

下面是制作电路板部分AD原理图:

运放:

在这里插入图片描述

驱动:在这里插入图片描述

稳压电源:

在这里插入图片描述

void Speed_Control(void)//速度控制量计算
{
	static float PreError[20]={0};
	float  SpeedError;
	uint8 i;
	SpeedError=Set_Speed-CarSpeed;
	//求出最近20个偏差的总和作为积分项
	SpeedControlIntegral=0;
	for(i=0;i<19;i++)
	{
		PreError[i]=PreError[i+1];
		SpeedControlIntegral+=PreError[i];
	}
	PreError[19]=SpeedError;
	SpeedControlIntegral+=PreError[19];
	//速度更新
	SpeedControlOutOld=SpeedControlOutNew;
	SpeedControlOutNew = PID_SPEED.P*SpeedError + PID_SPEED.I*SpeedControlIntegral;//PI控制
}
void Angle_Control()                          //角度控制函数
{
	PID_ANGLE.pout=PID_ANGLE.P*Car_Angle;       //最优角度*角度PID_P
	PID_ANGLE.dout=PID_ANGLE.D*Angle_Speed;     //角速度*角度PID_d
	if(ABS(Angle_Speed)>30&&ABS(Angle_Speed)<80)//control.h定义的算法
	{
		PID_ANGLE.dout*=(1+(ABS(Angle_Speed)-30.0)/30.0);
	}
	PID_ANGLE.OUT= PID_ANGLE.pout+ PID_ANGLE.dout;
}
void roadturncal(void)  //道路转弯
{
	adc1_result = adc_once(ADC0_SE13,ADC_16bit); //右
	adc2_result = adc_once(ADC0_SE8,ADC_16bit);  //中
	adc3_result = adc_once(ADC0_SE9,ADC_16bit);  //左
	dis_adc1_result=adc1_result;
	dis_adc2_result=adc2_result;
	dis_adc3_result=adc3_result;
	//上限幅
	if(adc1_result>adc1_result_max)		adc1_result=adc1_result_max;
	if(adc2_result>adc2_result_max)		adc2_result=adc2_result_max;
	if(adc3_result>adc3_result_max)		adc3_result=adc3_result_max;
	//下限幅
	if(adc1_result<adc1_result_min)		adc1_result=adc1_result_min;
	if(adc2_result<adc2_result_min)		adc2_result=adc2_result_min;
	if(adc3_result<adc3_result_min)		adc3_result=adc3_result_min;
	//归一化
	adc1_result=100*(adc1_result - adc1_result_min)/(adc1_result_max-adc1_result_min);
	adc2_result=100*(adc2_result - adc2_result_min)/(adc2_result_max-adc2_result_min);
	adc3_result=100*(adc3_result - adc3_result_min)/(adc3_result_max-adc3_result_min);
	disgy_adc1_result = adc1_result;
	disgy_adc2_result = adc2_result;
	disgy_adc3_result = adc3_result;
}