找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 6090|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

STM32小車(chē)四路pwm源程序,可尋跡,oled顯示,可pid調(diào)節(jié)

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
這個(gè)c8t6小車(chē)是我參加電賽的時(shí)候做的,目前具有紅外尋跡,oled實(shí)時(shí)顯示時(shí)間,藍(lán)牙通信,在手機(jī)端上顯示小車(chē)運(yùn)動(dòng)時(shí)間,還有加入了mpu6050模塊和pid算法,實(shí)現(xiàn)了小車(chē)在蹺蹺板上的平衡。小車(chē)的照片和原理圖都放在附件里了,大家可以看一看。

制作出來(lái)的實(shí)物圖如下:


電路原理圖如下:

/**
* @par Copyright (C): 2010-2019, Shenzhen Yahboom Tech
* @file         app_motor.c
* @author       liusen
* @version      V1.0
* @brief        小車(chē)運(yùn)動(dòng)控制函數(shù)
* @details      
* @par History  見(jiàn)如下說(shuō)明
*                 
* 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);}//反轉(zhuǎn)
#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);}//正轉(zhuǎn)
#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);}//反轉(zhuǎn)
#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);}//正轉(zhuǎn)
#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         小車(chē)前進(jìn)
* @param[in]     Speed  (0~7200) 速度范圍
* @param[out]    void
* @retval        void
* @par History   無(wú)
*/
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         小車(chē)后退
* @param[in]     Speed  (0~7200) 速度范圍
* @param[out]    void
* @retval        void
* @par History   無(wú)
*/
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         小車(chē)左轉(zhuǎn)
* @param[in]     Speed  (0~7200) 速度范圍
* @param[out]    void
* @retval        void
* @par History   無(wú)
*/
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         小車(chē)右轉(zhuǎn)
* @param[in]     Speed  (0~7200) 速度范圍
* @param[out]    void
* @retval        void
* @par History   無(wú)
*/
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         小車(chē)剎車(chē)
* @param[in]     void
* @param[out]    void
* @retval        void
* @par History   無(wú)
*/
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         小車(chē)左旋
* @param[in]     LeftSpeed:左電機(jī)速度  RightSpeed:右電機(jī)速度 取值范圍:(0~7200)
* @param[out]    void
* @retval        void
* @par History   無(wú)
*/
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         小車(chē)右旋
* @param[in]     LeftSpeed:左電機(jī)速度  RightSpeed:右電機(jī)速度 取值范圍:(0~7200)
* @param[out]    void
* @retval        void
* @par History   無(wú)
*/
void Car_SpinRight(int LeftSpeed, int RightSpeed)
{
LeftMotor_Go();
RightMotor_Back();
    Left1MotorPWM(LeftSpeed);   
Right1MotorPWM(RightSpeed);
LeftMotorPWM(LeftSpeed);   
RightMotorPWM(RightSpeed);  
}


全部程序51hei下載地址:
c8t6小車(chē)程序.7z (321.49 KB, 下載次數(shù): 267)
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏6 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:1 發(fā)表于 2019-7-19 18:06 | 只看該作者
本帖需要重新編輯補(bǔ)全電路原理圖,源碼,詳細(xì)說(shuō)明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
回復(fù)

使用道具 舉報(bào)

板凳
ID:242804 發(fā)表于 2020-12-28 10:18 | 只看該作者
我想問(wèn)一下樓主大神,就APP控制的這個(gè)部分,APP的藍(lán)牙這邊廠商來(lái)給的嗎?
回復(fù)

使用道具 舉報(bào)

地板
ID:1091382 發(fā)表于 2023-10-29 22:14 | 只看該作者
請(qǐng)問(wèn)這個(gè)引腳怎么接線的
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表