201434待测试程序.doc_第1页
201434待测试程序.doc_第2页
201434待测试程序.doc_第3页
201434待测试程序.doc_第4页
201434待测试程序.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

#includecommon.h#includeOLED.h#define TSL1401_SI(x) LPLD_GPIO_Output_b(PTE, 10, x)#define TSL1401_CLK(x) LPLD_GPIO_Output_b(PTE, 12, x)void gpio_init(void);void pwm_init(void);void adc_init(void);void put_ccd_data_one(void);void put_ccd_data_two(void);void pit_init(void);void pit0_isr(void);void ccd_single_collection(uint8 *ccd_data);void delayns();void er_zhi_hua(void);uint8 CCD_Line();void dianji(void);void delay(uint32 t);uint32 angle_to_period();/舵机转角转换函数uint8 CCD_Line(u8 *a,u8 *b);uint8 CCD_Line0();ADC_InitTypeDef adc_init_struct;GPIO_InitTypeDef gpio_initstruct;FTM_InitTypeDef ftm_init_struct;PIT_InitTypeDef pit0_init_struct;uint8 value=0;/中断标志uint8 ccd_data128 = 0;/ccd单次采集数据储存数组uint8 ccd_data_one128 = 0; /ccd二值化后的数据uint8 ccd_data_index128=0;uint16 temp=0;/中间变量,查看道路趋势uint16 servo_left=5500;/左面舵机极限值,300Hz,中值为4450,left-5500,uint16 servo_right=3300;/右面舵机极限值uint8 presum=64; /上次的中心值uint8 erpresum=64; /上上次的uint8 errpresum=64; /上上上次的值uint8 lost=0;u8 a0=OLED_Display;u8 a,b;void main (void) /u8 i; /u8 j=30; uint8 k; OLED_Init();/OLED初始化 gpio_init(); /CCD硬件初始化 adc_init(); /ADC 初始化 pwm_init(); /脉冲初始化 LPLD_GPIO_Output_b(PTA,16,0); printf(errorrn); OLED_Clear(); OLED_ShowString(0,0,a0); OLED_Refresh_Gram(); pit_init(); /定时中断 delay(50000); while(1) /delay(1000); ccd_single_collection(ccd_data); for(k=0;k128;k+) ccd_data_indexk=ccd_datak; put_ccd_data_one(); dianji(); / printf(errorrn); /delay(50000); /value=0; /* put_ccd_data_one(); for(i=0;i=5500)pulse_width=5500; else if(pulse_width=3300)pulse_width=3300; return pulse_width;/*搜索直线1*/uint8 CCD_Line(u8 *a,u8 *b) uint8 i=0; uint8 j=0; uint8 k=0; uint8 sum=0; uint8 temp0=0; uint8 temp1=0; uint8 fr=0,fl=0; for(i=66;i=125)i=125; j=i; *a=i; temp0=j; fr=1; /printf(rn %d rn ,j); break; /else break; for(i=61;i3;i-) if(ccd_data_onei+2=0xef&ccd_data_onei+1=0xef&ccd_data_onei=0xef&ccd_data_onei-1=0x22&ccd_data_onei-2=0x22) if(i=3)i=3; k=i-2; *b=i; temp1=k; fl=1; /printf(rn %d rn ,k); break; /else break; if(fl=1&fr=1) fr=0; fl=0; sum=(j+k)/2; if(j-k=15) lost+;if(lost=2)sum=presum;OLED_ShowChar(100,50,F,16,1);return sum; else sum=(j+k)/2; /if(absolute(sum-(erpresum+errpresum)/2)20) errpresum=erpresum; erpresum=presum; presum=sum; /lost=0; OLED_ShowChar(100,60,T,16,1); /return sum; /printf(rn %d rn, sum); return sum; /*/ /return sum; else if(fr=1&fl=0) fl=0; fr=0; sum=(j+temp1)/2-10; /printf(%d,sum); return sum; else if(fr=0&fl=1) fl=0; fr=0; sum=(k+temp0)/2+10; /printf(%d,sum); return sum; else if(fr=0&fl=0) return 64; /初始化PIT0和PIT1通道void pit_init(void) /配置PIT0参数 pit0_init_struct.PIT_Pitx = PIT0; pit0_init_struct.PIT_PeriodMs =5; /定时周期2秒 pit0_init_struct.PIT_Isr = pit0_isr; /设置中断函数 LPLD_PIT_Init(pit0_init_struct); /使能PIT0和PIT1,所有中断是需要调用这个函数的,非常重要 LPLD_PIT_EnableIrq(pit0_init_struct);/电机控制void dianji(void) LPLD_FTM_PWM_ChangeDuty(FTM1,FTM_Ch0,2500); LPLD_FTM_PWM_ChangeDuty(FTM1,FTM_Ch1,0);/*作用: ccd单次采集,严格按照ccd时序编写,没有加入曝光时间,只是输出上次曝光得到的像素点*行参: ccd单次采集数据储存数组*返回值:无*/void ccd_single_collection(uint8 *ccd_data) uint8 i; TSL1401_SI(1); delayns(); TSL1401_CLK(1); delayns(); TSL1401_SI(0); /发送第1个CLK delayns(); TSL1401_CLK(0); ccd_data0 = LPLD_ADC_Get(ADC0, DAD1); for(i=1; i128; i+)/采集第2128个点 delayns(); delayns(); TSL1401_CLK(1); delayns(); delayns(); TSL1401_CLK(0); ccd_datai =LPLD_ADC_Get(ADC0, DAD1);/通过ccd_data数组存储采集的原始数据 TSL1401_CLK(0); /发送第129个clk delayns(); TSL1401_CLK(1); delayns(); TSL1401_CLK(0);/ccd代码执行短延时void delayns() asm(nop);/利用动态阀值,对采集到的数据进行二值化处理void er_zhi_hua(void) uint8 i; for(i=0;i0x5f) ccd_data_onei=0xef;/代表为白线 else if(ccd_data_indexi=0x5f) ccd_data_onei=0x22;/代表为黑线 void pit0_isr(void) /* if(value=0)/如果value没有置位为0,则继续执行主程序,要再次进入中断,要等下一次。 er_zhi_hua(); /数据二值化处理 LPLD_FTM_PWM_ChangeDuty(FTM0,FTM_Ch0,angle_to_period();/改变舵机转角 value=1; */ er_zhi_hua(); /数据二值化处理 LPLD_FTM_PWM_ChangeDuty(FTM0,FTM_Ch0,angle_to_period();/改变舵机转角/1s=103ms=106us=109ns/*参数500 000对应5s,20us-2,200us-20,2000us=2ms-200,2000 000us=2000ms=2s-200 0000void delay(uint32 t) uint32 i,j; for(i=0;it;i+) for(j=0;j250;j+);/gpio初始化void gpio_init(void) /si对应pta12 gpio_initstruct.GPIO_PTx=PTE; gpio_initstruct.GPIO_Pins=GPIO_Pin10; gpio_initstruct.GPIO_Dir=DIR_OUTPUT; gpio_initstruct.GPIO_Output=OUTPUT_H; LPLD_GPIO_Init(gpio_initstruct); /clk对应pta13 gpio_initstruct.GPIO_PTx=PTE; gpio_initstruct.GPIO_Pins=GPIO_Pin12; gpio_initstruct.GPIO_Dir=DIR_OUTPUT; gpio_initstruct.GPIO_Output=OUTPUT_H; LPLD_GPIO_Init(gpio_initstruct); /作为指示灯1 gpio_initstruct.GPIO_PTx=PTA; gpio_initstruct.GPIO_Pins=GPIO_Pin16; gpio_initstruct.GPIO_Dir=DIR_OUTPUT; gpio_initstruct.GPIO_Output=OUTPUT_H; LPLD_GPIO_Init(gpio_initstruct); /作为指示灯2 gpio_initstruct.GPIO_PTx=PTA; gpio_initstruct.GPIO_Pins=GPIO_Pin15; gpio_initstruct.GPIO_Dir=DIR_OUTPUT; gpio_initstruct.GPIO_Output=OUTPUT_H; LPLD_GPIO_Init(gpio_initstruct);/adc初始化void adc_init(void) /配置ADC采样参数 adc_init_struct.ADC_Adcx = ADC0; adc_init_struct.ADC_DiffMode = ADC_SE; /单端采集,对应的差分采样可以避免共模干扰 adc_init_struct.ADC_BitMode = SE_8BIT; /单端8位精度,不同的精度对应不同的数据变化范围 adc_init_struct.ADC_SampleTimeCfg = SAMTIME_SHORT; /短采样时间 adc_init_struct.ADC_HwAvgSel = HW_32AVG; /4次硬件平均,平均次数越多,最终采集输出的数据波动越小 adc_init_struct.ADC_CalEnable = TRUE; /使能初始化校验 /初始化ADC LPLD_ADC_Init(adc_init_struct); /为了保证复用功能不被占用,最好使能相应ADC通道 /RUSH开发板的电位器使用DAD1通道进行采集 /单端DAD1通道的引脚为(ADC0_DP1) LPLD_ADC_Chn_Enable(ADC0, DAD1); /pwm初始化void pwm_init(void) /电机控制 ftm_init_struct.FTM_Ftmx = FTM1;/使能FTM0通道,每个通道只能同时输出一种频率的pwm ftm_init_struct.FTM_Mode = FTM_MODE_PWM;/使能PWM模式 ftm_init_struct.FTM_PwmFreq = 10000;/PWM频率10000Hz=10KHz,频率越高,纹波越小 LPLD_FTM_Init(ftm_init_struct); LPLD_FTM_PWM_Enable(FTM1,FTM_Ch0,0,PTB0,AL

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论