STM32小车四路pwm源程序,可寻迹,oled显示,可pid调节
作者:互联网
这个c8t6小车是我参加学校电赛的时候做的,目前具有红外寻迹,oled实时显示时间,蓝牙通信,在手机端上显示小车运动时间,还有加入了mpu6050模块和pid算法,实现了小车在跷跷板上的平衡。小车的照片和原理图都放在附件里了,大家可以看一看。
制作出来的实物图如下
电路图·
电机部分的程序,其他的在我·附件里
**
-
@par Copyright ©: 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();
加粗样式
Right1MotorPWM(RightSpeed);
LeftMotorPWM(LeftSpeed);
RightMotorPWM(RightSpeed);
}
标签:Pin,寻迹,pid,Port,STM32,Motor,GPIO,Speed,void 来源: https://blog.csdn.net/zhengzheng16885a/article/details/96589726