单片机教程网

电脑版
提示:原网页已由神马搜索转码, 内容由www.51hei.com提供.
查看:4877|回复:3

STM32小车四路pwm源程序,可寻迹,oled显示,可pid调节

[复制链接]
ID:586895发表于 2019-7-19 15:11|显示全部楼层
这个c8t6小车是我参加电赛的时候做的,目前具有红外寻迹,oled实时显示时间,蓝牙通信,在手机端上显示小车运动时间,还有加入了mpu6050模块和pid算法,实现了小车在跷跷板上的平衡。小车的照片和原理图都放在附件里了,大家可以看一看。

制作出来的实物图如下:
2.jpg
1.png


电路原理图如下:

/**
* @par Copyright (C): 2010-2019, Shenzhen Yahboom Tech
* @file       app_motor.c
* @author     liusen
* @version     V1.0
* @brief       小车运动控制函数
* @details    
* @par History  见如下说明
*            
* version: liusen_20170717
*/
#include "app_motor.h"
#include "sys.h"
#include "bsp_motor.h"
#define  LeftMotor_Go()   {GPIO_SetBits(Motor_Port, Left_MotoA_Pin); GPIO_ResetBits(Motor_Port, Left_MotoB_Pin);GPIO_SetBits(Motor_Port1, Left_MotoA1_Pin); GPIO_ResetBits(Motor_Port1, Left_MotoB1_Pin);}//反转
#define  LeftMotor_Back()  {GPIO_ResetBits(Motor_Port, Left_MotoA_Pin); GPIO_SetBits(Motor_Port, Left_MotoB_Pin);GPIO_ResetBits(Motor_Port1, Left_MotoA1_Pin); GPIO_SetBits(Motor_Port1, Left_MotoB1_Pin);}//正转
#define  LeftMotor_Stop()  {GPIO_ResetBits(Motor_Port, Left_MotoA_Pin); GPIO_ResetBits(Motor_Port, Left_MotoB_Pin);GPIO_ResetBits(Motor_Port1, Left_MotoA1_Pin); GPIO_ResetBits(Motor_Port1, Left_MotoB1_Pin);}//停止
#define  RightMotor_Go()  {GPIO_SetBits(Motor_Port, Right_MotoA_Pin); GPIO_ResetBits(Motor_Port, Right_MotoB_Pin);GPIO_SetBits(Motor_Port, Right_MotoA1_Pin); GPIO_ResetBits(Motor_Port, Right_MotoB1_Pin);}//反转
#define  RightMotor_Back()  {GPIO_ResetBits(Motor_Port, Right_MotoA_Pin); GPIO_SetBits(Motor_Port, Right_MotoB_Pin);GPIO_ResetBits(Motor_Port, Right_MotoA1_Pin); GPIO_SetBits(Motor_Port, Right_MotoB1_Pin);}//正转
#define  RightMotor_Stop()  {GPIO_ResetBits(Motor_Port, Right_MotoA_Pin); GPIO_ResetBits(Motor_Port, Right_MotoB_Pin);GPIO_ResetBits(Motor_Port, Right_MotoA1_Pin); GPIO_ResetBits(Motor_Port, Right_MotoB1_Pin);}//停止
#define  LeftMotorPWM(Speed) TIM_SetCompare2(TIM4, Speed);  //左前
#define  RightMotorPWM(Speed) TIM_SetCompare1(TIM4, Speed); //右前
#define  Left1MotorPWM(Speed)   TIM_SetCompare3(TIM4, Speed);   //左后
#define  Right1MotorPWM(Speed) TIM_SetCompare4(TIM4, Speed);   //右后

/**
* Function     Car_Run
* @author       liusen
* @date       2017.07.17  
* @brief       小车前进
* @param[in]     Speed  (0~7200) 速度范围
* @param[out]   void
* @retval       void
* @par History   无
*/
void Car_Run(int Speed)
{
LeftMotor_Go();
RightMotor_Go();
LeftMotorPWM(Speed);  
RightMotorPWM(Speed);
Left1MotorPWM(Speed);
Right1MotorPWM(Speed);
}
/**
* Function     Car_Back
* @author       liusen
* @date       2017.07.17  
* @brief       小车后退
* @param[in]     Speed  (0~7200) 速度范围
* @param[out]   void
* @retval       void
* @par History   无
*/
void Car_Back(int Speed)
{
LeftMotor_Back();
RightMotor_Back();
LeftMotorPWM(Speed);  
RightMotorPWM(Speed);
Left1MotorPWM(Speed);
Right1MotorPWM(Speed);
}
/**
* Function     Car_Left
* @author       liusen
* @date       2017.07.17  
* @brief       小车左转
* @param[in]     Speed  (0~7200) 速度范围
* @param[out]   void
* @retval       void
* @par History   无
*/
void Car_Left(int Speed)
{
LeftMotor_Stop();
RightMotor_Go();
LeftMotorPWM(0);  
RightMotorPWM(Speed);
Left1MotorPWM(0);
Right1MotorPWM(Speed);
  
}
/**
* Function     Car_Right
* @author       liusen
* @date       2017.07.17  
* @brief       小车右转
* @param[in]     Speed  (0~7200) 速度范围
* @param[out]   void
* @retval       void
* @par History   无
*/
void Car_Right(int Speed)
{
LeftMotor_Go();
RightMotor_Stop();
LeftMotorPWM(Speed);  
RightMotorPWM(0);
Left1MotorPWM(Speed);
Right1MotorPWM(0);
}
/**
* Function     Car_Stop
* @author       liusen
* @date       2017.07.17  
* @brief       小车刹车
* @param[in]     void
* @param[out]   void
* @retval       void
* @par History   无
*/
void Car_Stop(void)
{
LeftMotor_Stop();
RightMotor_Stop();
LeftMotorPWM(0);  
RightMotorPWM(0);
   Left1MotorPWM(0);
Right1MotorPWM(0);
}
void Car_Back_Left(int Speed)
{
LeftMotor_Stop();
RightMotor_Back();

LeftMotorPWM(0);  
RightMotorPWM(Speed);
Left1MotorPWM(0);
Right1MotorPWM(Speed);
}
void Car_Back_Right(int Speed)
{
LeftMotor_Back();
RightMotor_Stop();
LeftMotorPWM(Speed);  
RightMotorPWM(0);
Left1MotorPWM(Speed);
Right1MotorPWM(0);
}
/**
* Function     Car_SpinLeft
* @author       liusen
* @date       2017.07.17  
* @brief       小车左旋
* @param[in]     LeftSpeed:左电机速度  RightSpeed:右电机速度 取值范围:(0~7200)
* @param[out]   void
* @retval       void
* @par History   无
*/
void Car_SpinLeft(int LeftSpeed, int RightSpeed)
{
LeftMotor_Back();
RightMotor_Go();
LeftMotorPWM(LeftSpeed);  
RightMotorPWM(RightSpeed);
Left1MotorPWM(LeftSpeed);  
Right1MotorPWM(RightSpeed);
}
/**
* Function     Car_SpinRight
* @author       liusen
* @date       2017.07.17  
* @brief       小车右旋
* @param[in]     LeftSpeed:左电机速度  RightSpeed:右电机速度 取值范围:(0~7200)
* @param[out]   void
* @retval       void
* @par History   无
*/
void Car_SpinRight(int LeftSpeed, int RightSpeed)
{
LeftMotor_Go();
RightMotor_Back();
   Left1MotorPWM(LeftSpeed);  
Right1MotorPWM(RightSpeed);
LeftMotorPWM(LeftSpeed);  
RightMotorPWM(RightSpeed);  
}


全部程序51hei下载地址:
c8t6小车程序.7z(321.49 KB, 下载次数: 260)
ID:1发表于 2019-7-19 18:06|显示全部楼层
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
ID:242804发表于 2020-12-28 10:18|显示全部楼层
我想问一下楼主大神,就APP控制的这个部分,APP的蓝牙这边厂商来给的吗?
ID:1091382发表于 2023-10-29 22:14|显示全部楼层
请问这个引脚怎么接线的

手机版|小黑屋|51黑电子论坛|51黑电子论坛6群QQ管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网