第八届飞思卡尔线性ccd组平衡车获奖程序.docx

上传人:b****3 文档编号:4339014 上传时间:2023-05-07 格式:DOCX 页数:27 大小:21.06KB
下载 相关 举报
第八届飞思卡尔线性ccd组平衡车获奖程序.docx_第1页
第1页 / 共27页
第八届飞思卡尔线性ccd组平衡车获奖程序.docx_第2页
第2页 / 共27页
第八届飞思卡尔线性ccd组平衡车获奖程序.docx_第3页
第3页 / 共27页
第八届飞思卡尔线性ccd组平衡车获奖程序.docx_第4页
第4页 / 共27页
第八届飞思卡尔线性ccd组平衡车获奖程序.docx_第5页
第5页 / 共27页
第八届飞思卡尔线性ccd组平衡车获奖程序.docx_第6页
第6页 / 共27页
第八届飞思卡尔线性ccd组平衡车获奖程序.docx_第7页
第7页 / 共27页
第八届飞思卡尔线性ccd组平衡车获奖程序.docx_第8页
第8页 / 共27页
第八届飞思卡尔线性ccd组平衡车获奖程序.docx_第9页
第9页 / 共27页
第八届飞思卡尔线性ccd组平衡车获奖程序.docx_第10页
第10页 / 共27页
第八届飞思卡尔线性ccd组平衡车获奖程序.docx_第11页
第11页 / 共27页
第八届飞思卡尔线性ccd组平衡车获奖程序.docx_第12页
第12页 / 共27页
第八届飞思卡尔线性ccd组平衡车获奖程序.docx_第13页
第13页 / 共27页
第八届飞思卡尔线性ccd组平衡车获奖程序.docx_第14页
第14页 / 共27页
第八届飞思卡尔线性ccd组平衡车获奖程序.docx_第15页
第15页 / 共27页
第八届飞思卡尔线性ccd组平衡车获奖程序.docx_第16页
第16页 / 共27页
第八届飞思卡尔线性ccd组平衡车获奖程序.docx_第17页
第17页 / 共27页
第八届飞思卡尔线性ccd组平衡车获奖程序.docx_第18页
第18页 / 共27页
第八届飞思卡尔线性ccd组平衡车获奖程序.docx_第19页
第19页 / 共27页
第八届飞思卡尔线性ccd组平衡车获奖程序.docx_第20页
第20页 / 共27页
亲,该文档总共27页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

第八届飞思卡尔线性ccd组平衡车获奖程序.docx

《第八届飞思卡尔线性ccd组平衡车获奖程序.docx》由会员分享,可在线阅读,更多相关《第八届飞思卡尔线性ccd组平衡车获奖程序.docx(27页珍藏版)》请在冰点文库上搜索。

第八届飞思卡尔线性ccd组平衡车获奖程序.docx

第八届飞思卡尔线性ccd组平衡车获奖程序

#include/*commondefinesandmacros*/

#include"derivative.h"/*derivative-specificdefinitions*/

#include

#include

///////////ccd引脚///////////////////////////////

#defineTSL1401_CLK_DDRDDRK_DDRK5//

#defineTSL1401_CLKPORTK_PK5//

#defineTSL1401_SI_DDRDDRK_DDRK4//

#defineTSL1401_SIPORTK_PK4//

/////////////////////////////////////////////////

#defineMOTOR_LEFT_SPEED_POSITIVE(g_fLeftMotorOut>0)

#defineMOTOR_RIGHT_SPEED_POSITIVE(g_fRightMotorOut>0)

#defineSPEED_CONTROL_OUT_MAX10000

#defineSPEED_CONTROL_OUT_MIN-10000

#defineCONTROL_PERIOD5

#defineOPTICAL_ENCODE_CONSTANT157//编码器线数

#defineSPEED_CONTROL_COUNT20

#defineSPEED_CONTROL_PERIOD(SPEED_CONTROL_COUNT*CONTROL_PERIOD)//ms

#defineCAR_SPEED_CONSTANT1000.0/(SPEED_CONTROL_COUNT*CONTROL_PERIOD)/(float)OPTICAL_ENCODE_CONSTANT

#defineDIRECTION_CONTROL_COUNT2

#defineDIRECTION_CONTROL_PERIOD(DIRECTION_CONTROL_COUNT*CONTROL_PERIOD)

#defineTHRESHOLD8

#defineMIDDLE0x49

#defineANGLE_CONTROL_P22.6

#defineANGLE_CONTROL_D0.89

#defineSPEED_CONTROL_P55

#defineSPEED_CONTROL_I4.5

#defineDIR_CONTROL_P7.4

#defineDIR_CONTROL_D0.13

/*ad采集有关的变量*/

floatAD_Gyro_Sum,AD_Gyro,AD_Angle_Sum,AD_Angle;

/*角度控制有关的变量*/

floatj,g_fAngleControlOut,angle_offset=945,gyro_offset=1533;

/*速度控制有关的变量*/

floatg_fCarSpeed,g_fSpeedControlIntegral,g_fSpeedControlOutOld,

g_fSpeedControlOutNew,g_fSpeedControlOut;

/*电机输出相关变量*/

floatg_fLeftMotorOut,g_fRightMotorOut;

/*测速有关的变量*/

intg_nLeftMotorPulse,g_nRightMotorPulse,g_nLeftMotorPulseSigma,g_nRightMotorPulseSigma;

/*方向控制有关的变量*/

floatline,direction,direction_control,g_fDirectionControlOutOld,DIR_GYRO_SUM,

g_fDirectionControlOutNew,g_fDirectionControlOut,DIR_GYRO,DIR_GYRO_Sum,DIRECTION_OFFSET=1378;

/*各类计数器*/

unsignedinti,g_n1MSEventCount,g_nSpeedControlPeriod,g_nDirectionControlCount,

g_nDirectionControlPeriod,g_nSpeedControlCount;

//-------------------------ccd用到的变量---------------------------//

unsignedcharTimerCnt20ms;//

unsignedcharintegration_piont;//

/*128个像素点的平均AD值*///

unsignedcharPixelAverageValue;//

/*128个像素点的平均电压值的10倍*///

unsignedcharPixelAverageVoltage;//

/*设定目标平均电压值,实际电压的10倍*///

intTargetPixelAverageVoltage=30;//

/*设定目标平均电压值与实际值的偏差,实际电压的10倍*///

intPixelAverageVoltageError=0;//

/*设定目标平均电压值允许的偏差,实际电压的10倍*///

intTargetPixelAverageVoltageAllowError=2;//

/*曝光时间*///

unsignedcharIntegrationTime=10;//

unsignedcharTimerFlag20ms=0;//

unsignedcharSciBuf[200]=0;//发送数据//

//////////////////////////////////////////////////////////////////////

//---------------------------cdd用到的函数------------------------//

voidImageCapture(void);//提取像素点//

voidCalculateIntegrationTime(void);//计算曝光时间//

unsignedcharPixelAverage(unsignedcharlen);//计算像素点平均值

voidStartIntegration(void);//开始曝光//

voidCpu_Delay200ns(void);//延时//

voidSamplingDelay(void);//

voidCpu_Delay1us(void);//

//////////////////////////////////////////////////////////////////////

unsignedintg_nAngleControlFlag=1,//角度控制开关

g_nMotorControlFlag=1,//电机开关

g_nSpeedControlFlag=1,//速度控制开关,为0时不进行速度控制.

g_nDirectionControlFlag=1;//方向控制开关

floatCAR_SPEED_SET=0;

voiddelay(unsignedintz);

voidtimer0_init(void);//定时器中断

voidpll_init(void);

voidad_init(void);

voidsci_init(void);

voidio_init(void);

voidCCD_IO_Init(void);

voidpwm_init(void);

voidPutChar(unsignedcharChr);

voidSCI_SendData(unsignedchar*data);

voidSendHex(unsignedchardata);

voidGetMotorPulse(void);

voidSpeedControl(void);

voidSpeedControlOutput(void);

voidAngleControl(void);

voidMotorOutput(void);

voidMotorSpeedOut(void);

voidSetMotorVoltage(floatfLeftVoltage,floatfRightVoltage);

voidDirectionVoltageSigma(void);

voidDirectionControl(void);

voidDirectionControlOutput(void);

unsignedcharsend_data_cnt;

voidmain(void){

pwm_init();

pll_init();

sci_init();

ad_init();

io_init();

CCD_IO_Init();

timer0_init();

delay(3000);

while(PORTK_PK2!

=0);

while(PORTK_PK2==0){

for(i=0;i<10;i++){

ATD0CTL5=0x30;

while(ATD0STAT0_SCF!

=1);

AD_Angle_Sum=AD_Angle_Sum+ATD0DR0;

AD_Gyro_Sum=AD_Gyro_Sum+ATD0DR1;

DIR_GYRO_Sum=DIR_GYRO_Sum+ATD0DR3;

}

AD_Angle=(float)(AD_Angle_Sum/10);

AD_Gyro=(float)(AD_Gyro_Sum/10);

DIR_GYRO=(float)(DIR_GYRO_Sum/10);

AD_Angle_Sum=0;

AD_Gyro_Sum=0;

DIR_GYRO_Sum=0;

angle_offset=AD_Angle;

gyro_offset=AD_Gyro;

DIRECTION_OFFSET=DIR_GYRO+35;

while(PORTK_PK2==0);

}

EnableInterrupts;

SciBuf[0]=0;//长度高字节,此设置为0

SciBuf[1]=12+4;//16

SciBuf[2]=0;//通道4的高字节数据

SciBuf[3]=0;//通道4的低字节数据

SciBuf[4]=0;//保留字节,设置为0

SciBuf[5]=0;//保留字节,设置为0

delay(2000);

for(;;){

/*if(TimerFlag20ms==1){

TimerFlag20ms=0;

if(++send_data_cnt>=5){

send_data_cnt=0;

SCI_SendData(&SciBuf[0]);

}

}*/

for(;;){

while(CAR_SPEED_SET<=30){

CAR_SPEED_SET+=1;

delay(200);

}

}

}

}

///////初始化锁相环,定时中断,AD采集,PWM,串口通信,io////////////////////////////////////////

voiddelay(unsignedintz){//

unsignedintx,y;//

for(x=0;x

for(y=0;y<2000;y++);//

}//

//

voidpll_init(void){//

SYNR=0x53;//

REFDV=0x07;//

while(CRGFLG_LOCK!

=1);//时钟频率已稳定,锁相环频率锁定//

CLKSEL_PLLSEL=1;//使能锁相环时钟//

}//

voidtimer0_init(void){//

PITCFLMT_PITE=0;//

PITCE_PCE0=1;//使能pit0//

PITMTLD0=200-1;//5us//

PITLD0=200-1;//1ms//

PITINTE_PINTE0=1;//使能通道0中断//

PITCFLMT_PITE=1;//使能PIT模块,1ms产生一次中断//

}//

voidad_init(void){//

ATD0CTL0=0x04;//采样完3后回绕道0//

ATD0CTL1=0x4f;//7:

0-外部触发,65:

10-12位精度,4:

0不放电,3210:

ch//

ATD0CTL2=0x40;//7:

06:

1快速清除5:

0停止模式使能43:

00下降沿触发2:

0禁止外部触发10:

00中断禁止

ATD0CTL3=0xa0;//7:

1右对齐无符号6543:

0100每次转换4个序列210:

000NoFIFO,Freeze模式下继续转

ATD0CTL4=0x04;//765:

000采样时间为4个AD时钟周期43210:

00400ATDClock=[BusClock*0.5]/[PRS+1]

ATD0CTL5=0x30;//6:

0特殊通道禁止,5:

1连续转换,4:

1多通道轮流采样//

ATD0DIEN=0x0000;//禁止数字输入//

}//

//

voidpwm_init(void){//

PWMCTL=0xf0;//级联成4个16位pwm//

PWMPOL=0xff;//初始输出高电平//

PWMPRCLK=0x11;//时钟源A,B为总线周期4分频,为10MHZ//

PWMSCLA=5;//

PWMSCLB=5;//时钟SA,SB为A,B的1/250,即1MHZ//

PWMCLK=0x00;//选择时钟源SA,SB作为时钟//

PWMPER01=1500;//

PWMPER23=1500;//

PWMPER45=1500;//

PWMPER67=1500;//

PWMDTY01=0;//

PWMDTY23=0;//

PWMDTY45=0;//

PWMDTY67=0;//

PWME=0xff;//

}//

voidsci_init(){//

SCI0CR1=0x00;//

SCI0SR2=0x80;/*Switchtothealternativeregisterset*///

SCI0ASR1=0x83;/*Clearalternativestatusflags*///

SCI0ACR1=0x00;//

SCI0ACR2=0x00;//

SCI0SR2=0x00;/*Switchtothenormalregisterset*///

(void)SCI0SR1;/*Resetinterruptrequestflags*///

SCI0CR2=0x00;/*Disableerrorinterrupts*///

SCI0BD=0x16;/*Setprescalerbits*///

SCI0CR2|=(SCI0CR2_TE_MASK|SCI0CR2_RE_MASK);//

}//

voidPutChar(unsignedcharChr){//

while(SCI0SR1_TDRE==0){}/*Isthetransmitterempty?

*///

SCI0DRL=Chr;//

}//

voidSCI_SendData(unsignedchar*data){//

intlen;//

unsignedcharlrc=0;//

PutChar('*');//发送帧头,一个字节//

len=(int)(data[0]<<8)|(int)(data[1]);//

data+=2;//调整指针//

PutChar('L');//发送帧类型,共两个字节//

PutChar('D');//

while(len--){//发送数据的ASCII码,含保留字节和CCD数据//

SendHex(*data);//

lrc+=*data++;//

}//

lrc=0-lrc;//计算CRC,可以为任意值//

SendHex(lrc);//发送CRC校验ASCII//

PutChar('#');//发送帧尾,一个字节//

}//

voidSendHex(unsignedchardata){//

unsignedchartemp;//

temp=data>>4;//

if(temp>=10){//

PutChar(temp-10+'A');//

}//

else{//

PutChar(temp+'0');//

}//

temp=data&0x0F;//

if(temp>=10){//

PutChar(temp-10+'A');//

}//

else{//

PutChar(temp+'0');//

}//

}//

voidio_init(void){//

DDRK=0x03;//011//

PORTK_PK0=0;//

PORTK_PK1=0;//

DDRB=0x00;//

DDRA=0x00;//

}//

voidCCD_IO_Init(void){//

TSL1401_CLK_DDR=1;//

TSL1401_SI_DDR=1;//

TSL1401_CLK=0;//

TSL1401_SI=0;//

}//

//////////////////////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////ccd函数//////////////////////////////////////////////

voidImageCapture(void){//

unsignedchari;//

unsignedinttemp_int;//

TSL1401_SI=1;/*SI=1*///

SamplingDelay();//

TSL1401_CLK=1;/*CLK=1*///

SamplingDelay();//

TSL1401_SI=0;/*SI=0*///

SamplingDelay();//

//Delay20usforsamplethefirstpixel//

for(i=0;i<20;i++){//

Cpu_Delay1us();//

}//

//SamplingPixel1//

ATD0CTL5=0x30;//

while(ATD0STAT0_SCF==0);//

temp_int=ATD0DR2;//

SciBuf[6]=(byte)(temp_int>>4);//

TSL1401_CLK=0;/*CLK=0*///

for(i=7;i<134;i++){//

SamplingDelay();

SamplingDelay();

SamplingDelay();

SamplingDelay();

SamplingDelay();

SamplingDelay();

SamplingDelay();

SamplingDelay();

SamplingDelay();

SamplingDelay();

SamplingDelay();

SamplingDelay();//////

TSL1401_CLK=1;/*CLK=1*///

SamplingDelay();

SamplingDelay();

SamplingDelay();

SamplingDelay();

SamplingDelay();

SamplingDelay();

SamplingDelay();

SamplingDelay();

SamplingDelay();

SamplingDelay();

SamplingDelay();

SamplingDelay();////////

ATD0CTL5=0x30;//

while(ATD0STAT0_SCF==0);//

temp_int=ATD0DR2;//

SciBuf[i]=(byte)(temp_int>>4);//

TSL1401_CLK=0;/*CLK=0*///

}//

SamplingDelay();

SamplingDelay();

SamplingDelay();

SamplingDelay();

SamplingDelay();

SamplingDelay();

SamplingDelay();

SamplingDelay();

SamplingDelay();

SamplingDelay();

SamplingDelay();

SamplingDelay();//////

TSL1401_CLK=1;/*CLK=1*///

SamplingDelay();

SamplingDelay();

SamplingDelay();

SamplingDelay();

SamplingDelay();

SamplingDelay();

SamplingDelay();

SamplingDelay();

SamplingDelay();

SamplingDelay();

SamplingDelay();

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 广告传媒

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2