void adc_init() { ADC_InitTypeDef adc_init_struct={0}; //ccd1 adc_init_struct.ADC_Adcx = ADC1; adc_init_struct.ADC_DiffMode = ADC_SE; //单端采集 adc_init_struct.ADC_BitMode = SE_8BIT; adc_init_struct.ADC_SampleTimeCfg = SAMTIME_SHORT; //短采样时间 adc_init_struct.ADC_HwAvgSel = HW_4AVG; //4次硬件平均 //adc_init_struct.ADC_CalEnable = TRUE; //使能初始化校验 使能就不行了 LPLD_ADC_Init(adc_init_struct); LPLD_ADC_Chn_Enable(ADC1, AD15); //ccd2 adc_init_struct.ADC_Adcx = ADC1; adc_init_struct.ADC_DiffMode = ADC_SE; //单端采集 adc_init_struct.ADC_BitMode = SE_8BIT; adc_init_struct.ADC_SampleTimeCfg = SAMTIME_SHORT; //短采样时间 adc_init_struct.ADC_HwAvgSel = HW_4AVG; //4次硬件平均 //adc_init_struct.ADC_CalEnable = TRUE; //使能初始化校验 使能就不行了 LPLD_ADC_Init(adc_init_struct); LPLD_ADC_Chn_Enable(ADC1, AD17); //ccd3 // adc_init_struct.ADC_Adcx = ADC0; // adc_init_struct.ADC_DiffMode = ADC_SE; //单端采集 // adc_init_struct.ADC_BitMode = SE_8BIT; // adc_init_struct.ADC_SampleTimeCfg = SAMTIME_SHORT; //短采样时间 // adc_init_struct.ADC_HwAvgSel = HW_4AVG; //4次硬件平均 // //adc_init_struct.ADC_CalEnable = TRUE; //使能初始化校验 使能就不行了 // LPLD_ADC_Init(adc_init_struct); // LPLD_ADC_Chn_Enable(ADC0, AD13); adc_init_struct.ADC_Adcx = ADC0; adc_init_struct.ADC_DiffMode = ADC_SE; //单端采集 adc_init_struct.ADC_BitMode = SE_8BIT; adc_init_struct.ADC_SampleTimeCfg = SAMTIME_SHORT; //短采样时间 adc_init_struct.ADC_HwAvgSel = HW_4AVG; //4次硬件平均 //adc_init_struct.ADC_CalEnable = TRUE; //使能初始化校验 使能就不行了 LPLD_ADC_Init(adc_init_struct); LPLD_ADC_Chn_Enable(ADC0, AD23); adc_init_struct.ADC_Adcx = ADC0; adc_init_struct.ADC_DiffMode = ADC_SE; //单端采集 adc_init_struct.ADC_BitMode = SE_8BIT; adc_init_struct.ADC_SampleTimeCfg = SAMTIME_SHORT; //短采样时间 adc_init_struct.ADC_HwAvgSel = HW_4AVG; //4次硬件平均 //adc_init_struct.ADC_CalEnable = TRUE; //使能初始化校验 使能就不行了 LPLD_ADC_Init(adc_init_struct); LPLD_ADC_Chn_Enable(ADC0, AD18); }
void control_init(void) { init_gpio(); init_pwm(); LPLD_UART_Init(UART2, 115200); //裁判机 LPLD_UART_RIE_Enable(UART2, uart2_recv_isr); while (!GetCmdAction()); while(1) { right_set_v(V_SLOW); left_set_v(V_SLOW); scan_infrared(r1, r2, r3, r4); if(IS_AT_CORNER()) break; } motor_time_wait = 0; while (1) { if(motor_time_wait < 100000)//等待电机反应时间 不然直接下一步有影响 没有彻底停下来 { motor_time_wait ++; right_set_v(0); left_set_v(0); } else { motor_time_wait = 0; break; } } can_interrupt = 1; //计时器寄存器每减少50过1us LPLD_UART_Init(UART1, 19200); //读卡器 LPLD_UART_Init(UART3, 9600); //蓝牙 LPLD_UART_Init(UART4, 9600); LPLD_UART_Init(UART5, 19200); //读卡器 LPLD_UART_RIE_Enable(UART1, uart1_recv_isr); LPLD_UART_RIE_Enable(UART3, uart3_recv_isr); //LPLD_UART_RIE_Enable(UART4, uart4_recv_isr); LPLD_UART_RIE_Enable(UART5, uart5_recv_isr); LPLD_LPTMR_Init(MODE_PLACC, 0, LPTMR_ALT1, IRQ_DISABLE, NULL); //UP_LCD_Init(); //初始化LCD LPLD_ADC_Init(ADC0, MODE_16, CONV_SING); memset(control_callbacks, NULL, sizeof(control_callbacks)); memset(r1, 0, sizeof(r1)); memset(r2, 0, sizeof(r2)); memset(r3, 0, sizeof(r3)); memset(r4, 0, sizeof(r4)); LPLD_PIT_Init(PIT0, 5000, pit_isr0); //电机控制 LPLD_PIT_Init(PIT1, 100000, pit_isr1); //计时 TIME_PASSED = 0; }
//-------------------------------------------------------------------------------------------- void ADC_Init(void) { adc_init_struct0.ADC_Adcx = ADC0; adc_init_struct0.ADC_DiffMode = ADC_SE; adc_init_struct0.ADC_BitMode = SE_12BIT; //单端12位精度 adc_init_struct0.ADC_SampleTimeCfg = SAMTIME_SHORT; //短采样时间 adc_init_struct0.ADC_HwAvgSel = HW_16AVG; //硬件平均 LPLD_ADC_Init(adc_init_struct0); LPLD_ADC_Chn_Enable(ADC0, AD15); //陀螺仪 ADC0 A7 X轴 LPLD_ADC_Chn_Enable(ADC0, AD8); //模拟加速度计 ADC0 A8 ZOUT LPLD_ADC_Chn_Enable(ADC0, AD11); //陀螺仪 ADC0 A8 Y轴 adc_init_struct1.ADC_Adcx = ADC1; adc_init_struct1.ADC_DiffMode = ADC_SE; adc_init_struct1.ADC_BitMode = SE_8BIT; //单端8位精度 adc_init_struct1.ADC_SampleTimeCfg = SAMTIME_SHORT; //短采样时间 adc_init_struct1.ADC_HwAvgSel = HW_32AVG; LPLD_ADC_Init(adc_init_struct1); LPLD_ADC_Chn_Enable(ADC1, AD14);// 白线 左电感 B10 LPLD_ADC_Chn_Enable(ADC1, AD15);// 蓝线 右电感 B11 }
void init_ADC() { adc0_init_struct.ADC_Adcx = ADC0; //选择ADC0 adc0_init_struct.ADC_BitMode = SE_12BIT; //配置转换精度 adc0_init_struct.ADC_CalEnable = TRUE; //使能初始化自动校准 adc0_init_struct.ADC_HwTrgCfg = HW_TRGA; //配置为硬件触发转换 adc0_init_struct.ADC_DmaEnable = TRUE; //使能DMA adc0_init_struct.ADC_SampleTimeCfg = SAMTIME_LONG; //初始化ADC0 LPLD_ADC_Init(adc0_init_struct); //使能ADC0的AD8输入引脚复用功能 LPLD_ADC_Chn_Enable(ADC0, AD8); //使能ADC0的AD8输入通道、禁用转换完成中断 LPLD_ADC_EnableConversion(ADC0, AD8, 0, FALSE); //使能PTB0通道 adc0_init_struct.ADC_Adcx = ADC1; LPLD_ADC_Init(adc0_init_struct); //使能ADC0的AD8输入引脚复用功能 LPLD_ADC_Chn_Enable(ADC0, AD8); //使能ADC0的AD8输入通道、禁用转换完成中断 LPLD_ADC_EnableConversion(ADC1, AD8, 0, FALSE); //使能PTB0通道 }
/* * 初始化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_12BIT; //单端12位精度 adc_init_struct.ADC_SampleTimeCfg = SAMTIME_SHORT; //短采样时间 adc_init_struct.ADC_HwAvgSel = HW_4AVG; //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); }
void adc_init(myadc *adc, uint32 PIT_PeriodUs) { pdb_init(adc->PDB_TriggerInputSourceSel, adc->ADC_Adcx); adc_init_struct.ADC_Adcx = adc->ADC_Adcx; adc_init_struct.ADC_DiffMode = ADC_SE; //单端采集 adc_init_struct.ADC_BitMode = SE_12BIT; //单端12位精度 adc_init_struct.ADC_SampleTimeCfg = SAMTIME_SHORT; //短采样时间 adc_init_struct.ADC_HwAvgSel = HW_4AVG; //4次硬件平均 adc_init_struct.ADC_PgaGain = PGA_1GAIN; //1倍增益 adc_init_struct.ADC_MuxSel = MUX_ADXXA; //A输入通道 adc_init_struct.ADC_CalEnable = TRUE; //使能初始化校验 adc_init_struct.ADC_HwTrgCfg = HW_TRGA; //禁用硬件触发转换 adc_init_struct.ADC_DmaEnable = FALSE; //禁用DMA adc_init_struct.ADC_Isr = adc->isr; //设置ADC中断函数 LPLD_ADC_Init(adc_init_struct); //初始化ADC0 LPLD_ADC_Chn_Enable(adc->ADC_Adcx, adc->chn); //使能ADC0的DAD1输入引脚复用功能 LPLD_ADC_EnableConversion(adc->ADC_Adcx, adc->chn, 0, TRUE); //使能ADC0的DAD1输入通道及其转换完成中断 LPLD_ADC_EnableIrq(adc_init_struct); //使能ADC0中断 pit_init(adc->PIT_Pitx, PIT_PeriodUs); }