分享一个STM32 自巡逻避障小车。 共勉
多功能智能小车
功能:循迹+避障+遥控
制作难点:
1.超声波,舵机,电机三者的协调。
2.实时快速反应,整个过程的程序要流畅,不能停留在某一处。
3.STM32超声波捕获也是一个亮点。
程序的亮点:
蓝牙HC-06模块使用STM32 DMA控制器,使小车在循迹+避障+遥控功能的切换中运行流畅,解决了蓝牙串口发送数据延迟问题。
超声波,舵机,电机三者的协调得比较好。
总结:刚开始软硬件搭配不挡,没有按照科学的方法一步一步排除遇到的问题。让很容易解决的问题拖了很久,浪费了很多时间。同时,由于没考虑到stm32这块主控芯片的电压安全问题,烧了几块芯片。这是我们得到的教训。总的来说,功能全部实现。
单片机源程序如下:
- /**
- ******************************************************************************
- * @file main.c
- * @author MCD Application Team
- * @version V3.5.0
- * @date 08-April-2011
- * @brief Main program body
- **/
- /* Includes ------------------------------------------------------------------*/
- #include "stm32f10x.h"
- #include "usart1.h"
- #include "SysTick.h"
- #include "motor_control.h"
- #include "UltrasonicWave.h"
- #include "TIM3.h"
- #include "pwm_output.h"
- /* Private typedef -----------------------------------------------------------*/
- /* Private define ------------------------------------------------------------*/
- /* Private macro -------------------------------------------------------------*/
- /* Private variables ---------------------------------------------------------*/
- vu32 Onward_flag=0;
- vu8 RxBuffer[2];
- vu32 PWM_flag=0;
- vu32 Left_flag=0;
- vu32 Right_flag=0;
- vu32 Backward_flag=0;
- vu32 Stop_flag=0;
- vu32 Xunji_flag=0;
- vu32 Auto_flag=0;
- vu8 count=0;
- /* Private function prototypes -----------------------------------------------*/
- void NVIC_Configuration(void);
- /* Private functions ---------------------------------------------------------*/
- /*******************************************************************************
- * 函数名 : main
- * 描述 : 主函数
- * 输入 : 无
- * 输出 : 无
- * 返回 : 无
- *******************************************************************************/
- int main(void)
- {
- /* NVIC configuration */
- NVIC_Configuration();
- /* Configure the Usart1 */
- USART1_Config();
- /* Configure the DMA1 */
- DMA_Configuration();
- /* Configure the GPIO */
- GPIO_Configuration();
- /* Configure the TIM2 */
- TIM2_Configuration();
- /* Configure the TIM3 */
- TIM4_Configuration();
- /* Configure the TIM4 */
- Control_GPIOE_Config(); /*配置传感器输入信号管脚*/
- // TIM4_Configuration();
- TIM3_GPIO_Config();
- /* Configure the systick */
- SysTick_Init();
- /* Configure the UltrasonicWave */
- UltrasonicWave_Configuration();
- Degree(85,1);
- // Delay_ms(1500);
- while (1)
- {
- // Auto_run();
- if(Onward_flag==1)
- {
- Forward_run(); //前进
- }
- else if(Backward_flag==1)
- {
- Backward_run(); //后退
- }
- else if(Left_flag==1)
- {
- Left_turn(); //左转
- }
- else if(Right_flag==1)
- {
- Right_turn(); // 右转
- }
- else if(Auto_flag==1)
- {
- Auto_run(); //自动避障行驶
- }
- else if(Xunji_flag==1)
- {
- Xunji_run(); //自动循迹行驶
- }
- else
- {
- Stop(); //暂停
- }
- }
- }
- /*******************************************************************************
- * 函数名 : NVIC_Configuration
- * 描述 : 初始化NVIC
- * 输入 : 无
- * 输出 : 无
- * 返回 : 无
- *******************************************************************************/
- void NVIC_Configuration(void)
- {
- NVIC_InitTypeDef NVIC_InitStructure;
- /* Configure the Priority Group to 2 bits */
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
- NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel5_IRQn ; // Enable the DMA_Channel5 Interrupt
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&NVIC_InitStructure);
- NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&NVIC_InitStructure);
- }
- /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
所有资料提供下载:
stm32-超声波避障.rar
|