您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 基于stm32的多功能小车
0基于stm32的多功能小车摘要STM32系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARMCortex-M3内核。本次多功能小车采用stm32f103为主控芯片,用多个模块组合的形式组合来实现功能,本次设计的主要目的是学如何使用stm32,例如IO输入输出模式,时钟的配置,定时器的使用,串口,adc,spi,等等,小车实现了循迹功能,蓝牙,红外遥控,以及无线摇杆控制。关键词:stm32,蓝牙,无线摇杆,循迹,,1目录一设计任务与要求……………………………………………………..1二单元电路设计………………………………………………………...21循迹模块………………………………………………32驱动模块………………………………………………33稳压模块………………………………………………44蓝牙模块………………………………………………45红外接收模块…………………………………………56摇杆摇控器原理图……………………………………6三测试结果………………………………………………………………8四各模块程序…………………………………………………………....8五收获与心得…………………………………………………………..342一设计任务与要求1寻迹功能(可以稳定的寻单黑线运行,不冲出赛道)2红外遥控功能(用一个红外遥控器可以控制小车,并且支持遥控器连续按下来控制小车左右转,前进,后退)3蓝牙遥控功能(通过一个蓝牙模块充当从机,手机蓝牙充当主机,)4基于NRF2401的遥控控制功能3二单元电路设计1循迹模块光电循线由红外对管组成,通过检测接收到的反射光强判断黑白线从而,达到循迹的功能.本次采用的4路循迹.2驱动模块电机驱动采用L298N,一片L298N可以驱动两个电机,内部包含4通道逻辑驱动电路,L298N的逻辑驱动L298N的逻辑功能:4循迹模块电路图CSA1OUT12OUT23OUT313OUT414INPUT310ENB11INPUT412INPUT27INPUT15ENA6GND8VSS9Vs4CSB15L298*L2988vVCCGNDNET1NET2NET3NET412D121N400712D131N400712D141N400712D151N400712D81N400712D91N400712D101N400712D111N40078vGNDNET2NET3NET4NET112左电机Header212右电机Header212电机驱动信号1,2Header212电机驱动3,4Header2NET1NET2NET3NET4GND3稳压模块该模块可以提供+5v,+7.8的电压.12电源接口Header212D11N4007470ufC1104C2IN12OUT3GND稳压器470ufC3104C48vVCC1KR1D2LED0S1微动开关VCCGND123456P100Header3X2AGND4蓝牙模块55红外接收65摇杆遥控器原理78三测试结果1实现了红外遥控的选择模式功能:1键:红外遥控功能,前进,后退,左转,右转功能良好,并且支持遥控连续按2键:循迹模式,能够循迹简单的赛道,速度可调,但弯度太大时,循迹效果不好,速度需要多次调试。3键:蓝牙模式,能通过手机控制小车的动作,控制距离比蓝牙远,并且无死角,蓝牙控制稳定。4无线遥控模式,通过自制的遥控,控制小车,左摇杆控制小车方向,右摇杆控制小车速度,方向控制效果比较好,但是由于电机限制,控制速度的效果不是非常明显,但基本上实现的速度的控制。四各模块的程序1红外遥控if(text_falg==1){LED0=!LED0;key=Remote_Scan();switch(key){case0://str=ERROR;{break;}9case162:EN1=0;EN2=0;break;//powercase168:EN1=1;//ºóÍËEN2=1;PB7=0;PB8=0;TIM2-CCR3=800;TIM2-CCR4=800;delay_ms(50);EN1=0;EN2=0;break;case98:EN1=1;//Ç°½øEN2=1;PB7=1;PB8=1;TIM2-CCR3=100;TIM2-CCR4=100;delay_ms(50);EN1=0;EN2=0;break;case194:EN1=1;//zouEN2=0;PB7=1;PB8=1;TIM2-CCR3=100;delay_ms(50);EN1=0;break;//str=UP;case34:EN1=0;//youEN2=1;PB7=1;PB8=1;TIM2-CCR4=100;delay_ms(50);EN2=0;break;}2红外接收10#includeremote.h#includedelay.h#includeusart.h//红外遥控初始化//设置IO以及定时器4的输入捕获voidRemote_Init(void){GPIO_InitTypeDefGPIO_InitStructure;NVIC_InitTypeDefNVIC_InitStructure;TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;TIM_ICInitTypeDefTIM_ICInitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//使能PORTB时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5,ENABLE);//TIM5时钟使能GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;//PA1输入GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;//上拉输入GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);GPIO_SetBits(GPIOA,GPIO_Pin_1);//初始化GPIOA1TIM_TimeBaseStructure.TIM_Period=10000;//设定计数器自动重装值最大10ms溢出TIM_TimeBaseStructure.TIM_Prescaler=(72-1);//预分频器,1M的计数频率,1us加1.TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;//设置时钟分割:TDTS=Tck_timTIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;//TIM向上计数模式TIM_TimeBaseInit(TIM5,&TIM_TimeBaseStructure);//根据指定的参数初始化TIMxTIM_ICInitStructure.TIM_Channel=TIM_Channel_2;//选择输入端IC2映射到TI5上TIM_ICInitStructure.TIM_ICPolarity=TIM_ICPolarity_Rising;//上升沿捕获TIM_ICInitStructure.TIM_ICSelection=TIM_ICSelection_DirectTI;TIM_ICInitStructure.TIM_ICPrescaler=TIM_ICPSC_DIV1;//配置输入分频,不分频TIM_ICInitStructure.TIM_ICFilter=0x03;//IC4F=0011配置输入滤波器8个定时器时钟周期滤波TIM_ICInit(TIM5,&TIM_ICInitStructure);//初始化定时器输入捕获通道11TIM_Cmd(TIM5,ENABLE);//使能定时器5NVIC_InitStructure.NVIC_IRQChannel=TIM5_IRQn;//TIM5中断NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;//先占优先级0级NVIC_InitStructure.NVIC_IRQChannelSubPriority=3;//从优先级3级NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;//IRQ通道被使能NVIC_Init(&NVIC_InitStructure);//根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器TIM_ITConfig(TIM5,TIM_IT_Update|TIM_IT_CC2,ENABLE);//允许更新中断,允许CC2IE捕获中断RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOA,ENABLE);//使能PB,PE端口时钟//GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;//LED0--PB.5端口配置GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//IO口速度为50MHzGPIO_Init(GPIOB,&GPIO_InitStructure);//根据设定参数初始化GPIOB.5GPIO_SetBits(GPIOB,GPIO_Pin_0);//PB.5输出高GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;//LED1--PE.5端口配置,推挽输出GPIO_Init(GPIOB,&GPIO_InitStructure);//推挽输出,IO口速度为50MHzGPIO_SetBits(GPIOB,GPIO_Pin_5);//PE.5输出高GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;//LED1--PE.5端口配置,推挽输出GPIO_Init(GPIOB,&GPIO_InitStructure);//推挽输出,IO口速度为50MHzGPIO_SetBits(GPIOB,GPIO_Pin_6);//PE.5输出高GPIO_InitStructure.GPIO_Pin=GPIO_Pin_7;//LED1--PE.5端口配置,推挽输出GPIO_Init(GPIOB,&GPIO_InitStructure);//推挽输出,IO口速度为50MHzGPIO_SetBits(GPIOB,GPIO_Pin_7);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;//LED1--PE.5端口配置,推挽输出12GPIO_Init(GPIOB,&GPIO_InitStructure);//推挽输出,IO口速度为50MHzGPIO_SetBits(GPIOB,GPIO_Pin_8);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;//PA0GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;//PA0设置成输入,默认下拉GPIO_Init(GPIOB,&GPIO_InitStructure);//初始化GPIOA.0GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;//PA0GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;//PA0设置成输入,默认下拉GPIO_Init(GPIOB,&GPIO_InitStructure);//初始化GPIOA.0GPIO_InitStructure.GPIO
本文标题:基于stm32的多功能小车
链接地址:https://www.777doc.com/doc-4721063 .html