单片机学习小组
直播中

何珊

7年用户 183经验值
私信 关注

STM32多功能智能小车制作(循迹+壁障+遥控)源码

分享一个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  



更多回帖

发帖
×
20
完善资料,
赚取积分