小车本体做的比较丑,程序方面没什么难度,但是电路的设计上…属实浪费了不少材料。用了坏的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