飞思卡尔智能车程序.docx
- 文档编号:2931740
- 上传时间:2022-11-16
- 格式:DOCX
- 页数:17
- 大小:18.47KB
飞思卡尔智能车程序.docx
《飞思卡尔智能车程序.docx》由会员分享,可在线阅读,更多相关《飞思卡尔智能车程序.docx(17页珍藏版)》请在冰豆网上搜索。
飞思卡尔智能车程序
Main.c
#include
#include
#pragmaLINK_INFODERIVATIVE"mc9s12db128b"
#include"define.h"
#include"init.h"
//variableusedinvideoprocess
volatileunsignedcharimage_data[ROW_MAX][LINE_MAX];//dataarrayofpicture
unsignedcharblack_x[ROW_MAX];//0ne-dimensionalarray
unsignedcharrow;//x-positionofthearray
unsignedcharline;//y-positionofthearray
unsignedintrow_count;//rowcounter
unsignedcharline_sample;//usedtocounterinAD
unsignedcharrow_image;
unsignedcharline_temp;//temperaryvariableusedindatatransfer
unsignedcharsample_data[LINE_MAX];//usedtosaveone-dimensionarraygotin
interruption
//variablesbelowareusedinspeedmeasure
Unsignedcharpulse[5];//usedtosavedatainPAprocess
Unsignedcharcounter;//temporarycounterinSpeeddetect
Unsignedcharcur_speed;//currentspeed
shortstand;
shortdata;
unsignedcharcurve;//valveusedtodecidestraightorturn
shortBounds(shortdata);
shortFuzzyLogic(shortstand);
/*----------------------------------------------------------------------------*\
receive_sci
\*----------------------------------------------------------------------------*/
unsignedcharreceive_sci(void)//receivedatathroughsci
{unsignedcharsci_data;
while(SCI0SR1_RDRF!
=1);
sci_data=SCI0DRL;
returnsci_data;
}
/*----------------------------------------------------------------------------*\
transmit_sci
\*----------------------------------------------------------------------------*/
voidtransmit_sci(unsignedchartransmit_data)//senddatathroughsci
{
while(SCI0SR1_TC!
=1);
while(SCI0SR1_TDRE!
=1);
SCI0DRL=transmit_data;
}
/*****************************************************************************
***/
/*----------------------------------------------------------------------------*\
abs_sub
\*----------------------------------------------------------------------------*/
unsignedcharabs_sub(unsignedcharnum1,unsignedcharnum2)
{unsignedchardifference;
if(num1>=num2){
difference=num1-num2;
}else{
difference=num2-num1;
}
returndifference;
}
voidpwm_set(unsignedintdutycycle)
{
PWMDTY1=dutycycle&0x00FF;
PWMDTY0=dutycycle>>8;
}
voidget_black_wire(void)//usedtoextractblackwire
{unsignedchari;
for(row=0;row for(line=LINE_MIN;line if(image_data[row][line]>image_data[row][line+3]+VALVE){ for(i=3;i<10;i++){ if(image_data[row][line+i]+VALVE black_x[row]=line+i/2+2; i=10; } } line=LINE_MAX; }else{ //black_x[row]=(black_x[row]/45)*78; } } } } /*----------------------------------------------------------------------------*\ speed_control \*----------------------------------------------------------------------------*/ voidspeed_control(void) { unsignedintsum,average; sum=0; for(row=0;row sum=sum+black_x[row]; } average=sum/FIRST_FIVE; curve=0; for(row=0;row { curve=curve+abs_sub(black_x[row],average); if(curve>CURVE_MAX){ curve_flag=0; speed=low_speed;} else{ curve_flag=1; speed=hign_speed; } } } /*----------------------------------------------------------------------------*\ steer_control \*----------------------------------------------------------------------------*/ voidsteer_control(void) {unsignedintdutycycle; unsignedcharvideo_center; unsignedintcoefficient; intE,U;//current staticinte=0; video_center=(LINE_MIN+LINE_MAX)/2; stand=abs_sub(black_x[1]+black_x[9],2*black_x[5]); E=video_center-black_x[8]; coefficient=30+1*FuzzyLogic(stand); U=coefficient*E; dutycycle=Bounds(center+U); pwm_set(dutycycle); } //makesureitiswithinbounds shortBounds(shortdata){ if(data>right_limit){ data=right_limit; } if(data data=left_limit; } returndata; } Voidspeed_get(void) { Unsignedchartemp; Counter++; Temp=PACN1; cur_speed=temp-pulse[counter-1]; pulse[counter-1]=temp; if(counter==5) { counter=0; } } Voidset_speed(unsignedchardesired_speed) { If(desired_speed { PWMDTY2=low_speed; } Else { PWMDTY2=high_speed; } } /***************************************************************************** *\ Main \***************************************************************************** */ voidmain(void){ //mainfunctiion init_PORT(); //portinitialization init_PLL(); //settingofthePLL init_ECT(); init_PWM(); //PWMINITIALIZATION init_SPEED(); init_SCI(); for(;;){ if(field_signal==0){//even->odd while(field_signal==0); row_count=0; row_image=0; EnableInterrupts; while(row_count get_black_wire(); speed_control(); steer_control(); } DisableInterrupts; } else{//odd->even while(field_signal==1); row_count=0; row_image=0; EnableInterrupts; while(row_count
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 卡尔 智能 车程