资源简介
第十一届恩智浦智能汽车竞赛电磁直立组华南赛区一等奖代码,速度2.4m/s,方向控制采用了模糊控制。
代码片段和文件信息
/************************************
说明:
总中断控制函数
包括串口通讯中断函数
***********************************/
#include “common.h“
#include “GlobalDefine.h“
#include “AngleControl.h“
#include “SpeedControl.h“
#include “DirectionControl.h“
#include “Initalize.h“
#include “SCI_show.h“
#include “Motor.h“
#include “LCD5110.h“
float g_Angle_ControL_P=185;//180;//60; //直立控制的PID值 //150
float g_Angle_ControL_D=0;//1.66;//3.62;//3.25;//3.85; //1.20
float g_Speed_Control_P=60;//51;//51;//164;//180; //速度速度控制的PID值 //450
float g_Speed_Control_I=0.5;//0.5;//0.78;//0.9;//0.9; //20.0
float g_Direction_ControL_P=20;//23;//13;//15;//60; //方向控制的PID值 //0200/1000
float g_Direction_ControL_D=0.9;//1.4;//1.3;//1.3;//1.5; //0.50/1.80
float Speed=0.0;
int8 num2=0num5=0num20=0;
int8 SpeedPeriod=0;
int8 DirectionPeriod=0;
int8 Time;
int8 s1=2s2=3s3=7s4=8;
void main (void)
{
int8 Page=0;
init_all();
LCD5110_Init();
while(1)
{
if(PTD8_I == 0)
{
//去抖
delay1();
if(PTD8_I==0)
{
Page++;
LCD_Clear();
}
//直到按键松开再运行
while(PTD8_I==0);
}
switch(Page)
{
case 0:KEY_OFFSET_Adjust();break;
case 1:KEY_Paremeter_Adjust();break;
case 2:KEY_Advance_Adjust();break;
default :Page = 0;
}
}
}
/********启动速度梯度设定*********/
void Speed_Change(void)
{
Time++;
if((Car_Speed_Set-Speed)>0.5)
Car_Speed_Set = Speed;
if(Time>=2)
{
if(Car_Speed_Set Car_Speed_Set += 0.1;
Time = 0;
}
}
/************** 中断主函数 **************/
void pit_isr(void) //PIT中断函数1ms中断函数
{
num5++; //时间片段标志;共5个时间片段;
SpeedPeriod++;
SpeedControl_smooth_div();
DirectionPeriod++;
DirectionControl_smooth_div();//方向控制平滑输出
if(num5==1)
{
Get_ADresult(); //AD并20次平均
}
else if(num5==2)
{
AngleControl(); //计算角度控制PID值;
}
else if(num5==3)
{
Pid_Assemble_Output(); //整合量输出电机;
send_data(); //上位机发送数据
}
else if(num5==4)
{
num20++; //20次计数;
Speed_Calculate(); //5ms计算一次车速;
if(num20>=20)
{
SpeedControl(); //速度控制PID计算;
Speed_Change(); //2ms更改一次速度;
num20 = 0;
SpeedPeriod=0;
}
}
else if(num5>=5)
{
num5 = 0;
num2++;
Get_DirADresult(); //获取方向数据(陀螺仪、电感电压)
if(num2 >= 2)
{
//DirectionControl();
Fuzzy_DirectionControl(); //方向模糊算法控制
num2 = 0;
DirectionPeriod = 0;
}
}
}
/************** 参数整改函数 **************/
void PIDreset(void) //格式务必为:Tx=xxxx
{
int8 i=0ReArr[6]GetArr[6];
if(LPLD_UART_GetChar(UART5)== ‘T‘)
{
for(i=0;i<=5;i++)
{
ReArr[i] = LPLD_UART_GetChar(UART5);
GetArr[i]=ReArr[i]
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 5470 2016-03-26 10:02 ok\app\k60_card.h
文件 5404 2016-05-13 21:04 ok\app\ok.c
文件 3254 2016-05-11 15:41 ok\app\user\AngleControl.c
文件 210 2016-03-25 19:23 ok\app\user\AngleControl.h
文件 8617 2016-05-16 18:56 ok\app\user\DirectionControl.c
文件 302 2016-03-31 21:16 ok\app\user\DirectionControl.h
文件 2012 2016-05-13 20:35 ok\app\user\GlobalDefine.h
文件 7198 2016-04-13 12:55 ok\app\user\Initalize.c
文件 461 2016-04-12 14:58 ok\app\user\Initalize.h
文件 15177 2016-05-16 19:47 ok\app\user\LCD5110.c
文件 884 2016-05-13 20:35 ok\app\user\LCD5110.h
文件 138 2016-01-16 09:42 ok\app\user\Motor.h
文件 3122 2016-05-13 21:04 ok\app\user\Motor_out.c
文件 2750 2016-05-06 13:59 ok\app\user\Sci_show.c
文件 216 2016-01-15 19:20 ok\app\user\SCI_show.h
文件 6642 2016-05-11 15:41 ok\app\user\SpeedControl.c
文件 250 2016-01-20 22:29 ok\app\user\SpeedControl.h
文件 25896 2016-04-17 10:16 ok\iar\FLASH\Exe\ok_K60DZ10.bin
文件 318792 2016-04-17 10:16 ok\iar\FLASH\Exe\ok_K60DZ10.out
文件 26823 2016-04-15 20:42 ok\iar\FLASH\Exe\ok_K60DZ10.sim
文件 17574 2016-03-26 10:06 ok\iar\FLASH\List\alloc.lst
文件 12616 2016-03-26 10:06 ok\iar\FLASH\List\alloc.s
文件 43438 2016-04-15 15:54 ok\iar\FLASH\List\AngleControl.lst
文件 27288 2016-04-15 15:54 ok\iar\FLASH\List\AngleControl.s
文件 6881 2016-03-26 10:06 ok\iar\FLASH\List\assert.lst
文件 5575 2016-03-26 10:06 ok\iar\FLASH\List\assert.s
文件 97753 2016-04-17 10:16 ok\iar\FLASH\List\DirectionControl.lst
文件 54746 2016-04-17 10:16 ok\iar\FLASH\List\DirectionControl.s
文件 101760 2016-03-26 10:06 ok\iar\FLASH\List\HW_ADC.lst
文件 70558 2016-03-26 10:06 ok\iar\FLASH\List\HW_ADC.s
............此处省略272个文件信息
评论
共有 条评论