【手势识别小车】---------(2)蓝牙小车

本文记录了一次基于STM32的小车制作过程,遇到了电路设计的困难,如TB6612驱动模块导致的短路问题和杂乱的布线,导致板子损坏。通过修复和改进,实现了小车接收指令进行前进、后退、转向和停止的功能。主要代码涉及STM32、TB6612电机驱动、蓝牙通讯等模块。
摘要由CSDN通过智能技术生成

小车本体做的比较丑,程序方面没什么难度,但是电路的设计上…属实浪费了不少材料。用了坏的TB6612导致整个电路短路把板子烧坏了,还有板子背面走锡的时候太乱,各种跳线飞线(太丑不好意思放出来,还得多练),导致有一次连15V电源的那根线跟单片机供电口碰到了一起,瞬间爆炸又浪费了一块实验室的板子,还是要小心…请添加图片描述

请添加图片描述
使用材料:stm32f103c8t6,降压模块,电量显示模块,TB6612,HC-05
**功能:**接收到指令后可以前进,后退,转向,停止

主要代码放在这里

main.c

#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "oled.h"
#include "led.h"
#include "tb6612.h"
#include "bluetoo.h"
int main()
{  	
	u8 t=1;
	JTAG_Set(10);
	Stm32_Clock_Init(9);
	delay_init(72);
	uart_init(72,9600);
	TB_Init(899,0); //²»·ÖƵPWM=72000/(899+1)=80Khz
	control_init();
	LEFT_Speed=800; //Ô½´óËÙ¶ÈԽС
	RIGHT_Speed=800;
	
	while(1)
	{
	printf("1111\r\n");
	control();
	
	}
 
	}

tb6612.c

#include "tb6612.h"
//ʹÓÃtime2ʱÖÓ£¬ch1ͨµÀ£¬ch4ͨµÀ£¬PA0,PA3Êä³öPWM²¨,PA1PA2×óÂÖ£¬PA4PA5ÓÒÂÖ
void TB_Init(u16 arr,u16 psc)
{
	RCC->APB1ENR|=1<<0;//TIM2ʹÄÜ
	RCC->APB2ENR|=1<<2;
	TIM2->ARR=arr;
	TIM2->PSC=psc;
	GPIOA->CRL&=0xFF000000;
	GPIOA->CRL|=0x0033B33B;//¸´Óù¦ÄÜÊä³ö
	TIM2->CCMR1|=7<<4; //ch1pwm2
	TIM2->CCMR1|=1<<3;//ch1ԤװÔØʹÄÜ
	TIM2->CCER|=1<<0;
	TIM1->BDTR|=1<<15;
	TIM2->CCMR2|=7<<12;//ch4pwm2
	TIM2->CCMR2|=1<<11;//ԤװÔØʹÄÜ
	TIM2->CCER|=1<<12;
	TIM2->CR1=0x0080; //ARPE
	TIM2->CR1|=0x01;

	
}
void GO_Roll(){
	printf("go\r\n");
	AIN1=0;
	AIN2=1;
	BIN1=1;
	BIN2=0;
}
void BACK_Roll(){
	AIN1=1;
	AIN2=0;
	BIN1=0;
	BIN2=1;
}

void LEFT_Roll(){
  AIN1=0;
	AIN2=0;
	BIN1=1;
	BIN2=0;
	
}
void RIGHT_Roll(){
	AIN1=0;
	AIN2=1;
	BIN1=0;
	BIN2=0;
}
void STOP_Roll()
{
	AIN1=0;
	AIN2=0;
	BIN1=0;
	BIN2=0;
}

tb6612.h

#ifndef _TB6612_H_
#define _TB6612_H_
#include "sys.h"
#define AIN1 PAout(1)
#define AIN2 PAout(2)
#define BIN1 PAout(4)
#define BIN2 PAout(5)
#define LEFT_Speed TIM2->CCR1
#define RIGHT_Speed	TIM2->CCR4
void TB_Init(u16 arr,u16 psc);
void LEFT_Roll(void);
void GO_Roll();
void BACK_Roll();
void LEFT_Roll();
void RIGHT_Roll();
void STOP_Roll();
#endif

bluetoo.c

#include "bluetoo.h"
#include "delay.h"
#include "usart.h"
#include "tb6612.h"
u8 control_init()
{
	while(1)
	{
		if(USART_RX_STA&0x8000)
		{ 
			USART1->DR=USART_RX_BUF[0];
			USART_RX_STA=0;
			if((USART_RX_BUF[0])==49)
				return 1;
			else	if((USART_RX_BUF[0])==50)
				return 2;
			else if((USART_RX_BUF[0])==51)
				return 3;
			else if((USART_RX_BUF[0])==52)
				return 4;
			else
				return 5;
		}
		
	}
}
void control()
{
	u8 t=0;
	while(1)
	{
		t=control_init();
		switch(t)
			{
				case 1:GO_Roll();break;
				case 2:BACK_Roll();break;
				case 3:LEFT_Roll();break;
				case 4:RIGHT_Roll();break;
				case 5:STOP_Roll();
				default :break;
			}
	}
}

bluetoo.h

#ifndef _CONTROL_H_
#define _CONTROL_H_
#include "sys.h"
u8 control_init(void);
void control();
#endif


  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值