智能小车stm32
- #include "stm32f10x.h"
- #include "bsp_tb6612.h"
- #include "bsp_motor.h"
- #include "bsp_usart.h"
- #include "car_ctrl.h"
- int main(void)
- {
- TB6612_FR_Init(); //TB6612模块1和模块2一起驱动
-
- MotorAllOFF(); //单片机上电默认先把4个电机关闭
-
- USART3_Config(); //初始化蓝牙模块的串口
-
- while(1)
- {
- RUN_Prg(); //小车蓝牙控制功能
- }
- }
复制代码- #include "bsp_tb6612.h"
- /*TB6612模块1,驱动前轮 F*/
- void TB6612_F_GPIO_Config(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
-
- RCC_APB2PeriphClockCmd(TB6612_F_GPIO_AIN1_CLK | TB6612_F_GPIO_AIN2_CLK | \
- TB6612_F_GPIO_BIN1_CLK | TB6612_F_GPIO_BIN2_CLK , ENABLE);
-
- GPIO_InitStructure.GPIO_Pin = TB6612_F_GPIO_AIN1_PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(TB6612_F_GPIO_AIN1_PORT, &GPIO_InitStructure);
-
- GPIO_InitStructure.GPIO_Pin = TB6612_F_GPIO_AIN2_PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(TB6612_F_GPIO_AIN2_PORT, &GPIO_InitStructure);
- GPIO_InitStructure.GPIO_Pin = TB6612_F_GPIO_BIN1_PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(TB6612_F_GPIO_BIN1_PORT, &GPIO_InitStructure);
- GPIO_InitStructure.GPIO_Pin = TB6612_F_GPIO_BIN2_PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(TB6612_F_GPIO_BIN2_PORT, &GPIO_InitStructure);
- }
- void TB6612_F_PWM_GPIO_Config(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
-
- RCC_APB2PeriphClockCmd(TB6612_F_GPIO_PWMA_CH1_CLK, ENABLE);
- GPIO_InitStructure.GPIO_Pin = TB6612_F_GPIO_PWMA_CH1_PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(TB6612_F_GPIO_PWMA_CH1_PORT,&GPIO_InitStructure);
-
- RCC_APB2PeriphClockCmd(TB6612_F_GPIO_PWMB_CH2_CLK, ENABLE);
- GPIO_InitStructure.GPIO_Pin = TB6612_F_GPIO_PWMB_CH2_PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(TB6612_F_GPIO_PWMB_CH2_PORT,&GPIO_InitStructure);
- }
- /*TB6612模块2,驱动后轮 R*/
- void TB6612_R_GPIO_Config(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
-
- RCC_APB2PeriphClockCmd(TB6612_R_GPIO_AIN1_CLK | TB6612_R_GPIO_AIN2_CLK | \
- TB6612_R_GPIO_BIN1_CLK | TB6612_R_GPIO_BIN2_CLK , ENABLE);
-
- GPIO_InitStructure.GPIO_Pin = TB6612_R_GPIO_AIN1_PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(TB6612_R_GPIO_AIN1_PORT, &GPIO_InitStructure);
-
- GPIO_InitStructure.GPIO_Pin = TB6612_R_GPIO_AIN2_PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(TB6612_R_GPIO_AIN2_PORT, &GPIO_InitStructure);
- GPIO_InitStructure.GPIO_Pin = TB6612_R_GPIO_BIN1_PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(TB6612_R_GPIO_BIN1_PORT, &GPIO_InitStructure);
- GPIO_InitStructure.GPIO_Pin = TB6612_R_GPIO_BIN2_PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(TB6612_R_GPIO_BIN2_PORT, &GPIO_InitStructure);
- }
- void TB6612_R_PWM_GPIO_Config(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
-
- RCC_APB2PeriphClockCmd(TB6612_R_GPIO_PWMA_CH3_CLK, ENABLE);
- GPIO_InitStructure.GPIO_Pin = TB6612_R_GPIO_PWMA_CH3_PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(TB6612_R_GPIO_PWMA_CH3_PORT,&GPIO_InitStructure);
- RCC_APB2PeriphClockCmd(TB6612_R_GPIO_PWMB_CH4_CLK, ENABLE);
- GPIO_InitStructure.GPIO_Pin = TB6612_R_GPIO_PWMB_CH4_PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(TB6612_R_GPIO_PWMB_CH4_PORT,&GPIO_InitStructure);
- }
- static void ADVANCE_TIM1_Mode_Config(void)
- {
- TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
- TIM_OCInitTypeDef TIM_OCInitStructure;
-
- RCC_APB2PeriphClockCmd(ADVANCE_TIM_CLK , ENABLE);
-
- TIM_TimeBaseInitStructure.TIM_Prescaler = (72-1);
- TIM_TimeBaseInitStructure.TIM_Period = (100-1);
- TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
- TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
- TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;
- TIM_TimeBaseInit(ADVANCE_TIM, &TIM_TimeBaseInitStructure);
-
- TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
- TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
- TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;
- TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
- TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;
- TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;
- TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Reset;
-
- TIM_OCInitStructure.TIM_Pulse = 0;
- TIM_OC1Init(ADVANCE_TIM, &TIM_OCInitStructure);
- TIM_OC1PreloadConfig(ADVANCE_TIM,TIM_OCPreload_Enable);
-
- TIM_OCInitStructure.TIM_Pulse = 0;
- TIM_OC2Init(ADVANCE_TIM, &TIM_OCInitStructure);
- TIM_OC2PreloadConfig(ADVANCE_TIM,TIM_OCPreload_Enable);
-
- TIM_OCInitStructure.TIM_Pulse = 0;
- TIM_OC3Init(ADVANCE_TIM, &TIM_OCInitStructure);
- TIM_OC3PreloadConfig(ADVANCE_TIM,TIM_OCPreload_Enable);
-
- TIM_OCInitStructure.TIM_Pulse = 0;
- TIM_OC4Init(ADVANCE_TIM, &TIM_OCInitStructure);
- TIM_OC4PreloadConfig(ADVANCE_TIM,TIM_OCPreload_Enable);
-
- TIM_Cmd(ADVANCE_TIM, ENABLE);
- }
- //void TB6612_F_Init(void) //控制前面2轮的电机驱动模块初始化
- //{
- // TB6612_F_GPIO_Config();
- // TB6612_F_PWM_GPIO_Config();
- // ADVANCE_TIM1_Mode_Config();
- //}
- //void TB6612_R_Init(void) //控制后面2轮的电机驱动模块初始化
- //{
- // TB6612_R_GPIO_Config();
- // TB6612_R_PWM_GPIO_Config();
- // ADVANCE_TIM1_Mode_Config();
- //}
- void TB6612_FR_Init(void) //控制前和后2轮的电机驱动模块初始化
- {
- TB6612_F_GPIO_Config();
- TB6612_F_PWM_GPIO_Config();
- TB6612_R_GPIO_Config();
- TB6612_R_PWM_GPIO_Config();
- ADVANCE_TIM1_Mode_Config();
- }
复制代码 原理图: 见顶部
仿真: 无
代码仅供参考:
蓝牙小车程序和资料.7z
(3.74 MB, 下载次数: 30)
|