ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-07-20 14:41:23  阅读:494  来源: 互联网

标签:Pin 寻迹 pid Port STM32 Motor GPIO Speed void


这个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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有