本设计为原创DIY作品,2019.10.18日打好PCB样板,代码调试了近10天,出了V1.0版本,还有待改进的地方,比如功耗问题,V1.0版本功耗在58毫安左右,经改进V2.0功耗在2毫安左右(主要是舵机的待机功耗,在2.5毫安左右),2.0的板子还没打好,这里先贴出V1.0的板子设计和代码,设计上或者代码上有问题的还望大家指正。如需转载,请注明出处,QQ:1907913345,Author:Vence
Q1:此电路中主芯片的VCC和GND之间没有加耦合电容,在电压不稳定的情况下,容易烧坏主芯片,一般情况不会烧坏
Q2:此电路中的按键GND脚设置错误,需要的请自行修改板子
Q3:所使用的蓝牙模块为信驰达的主从一体4.0
Q4:V1.0的电路图中我把蓝牙模块的P05和P04接到BLUE和RED上了,本来希望来用来判断是否连接成功,发现这样设计的话,没法将P05拉低,就不能利用蓝牙进行停机唤醒。
Q5:AMS1117可以不使用,本来想用5V的电源来驱动马达的,但是发现马达转速太快,关不了灯,后来换成了舵机,就不需要AMS1117和HR9110的马达驱动芯片了
原理图:
PCB:
实物:
操作方式:
V1.0版本:蓝牙APP发送0x01,舵机转动到-45°,发送0x02,舵机转动到-90°,发送0x11,舵机转动到45°,发送0x12,舵机转动到90°,发送0x00,舵机转动到0°。
主函数代码:
//本设计利用信驰达进行蓝牙通信,通过串口1控制电动马达的转动,stm32的PB1控制蓝牙模块的使能,蓝牙模块的工作电压范围在1.8-3.3V,具有低功耗
//2019年10月22号21点44分,作者Vence
#include "stm32f10x.h"
#include "usart1.h"
#include "bluetooth.h"
#include "key.h"
#include "led.h"
#include "motor.h"
#include "runmodel.h"
u8 motor_mode = 0; //电机运动模式
u8 send_flag = 0;
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //中断控制器分组设置
Key_Init(); //初始化按键
EXTI_Configuration();
Usart1_Init(115200); //设置串口1的波特率为115200bit
LedInit(); //初始化led
Delay_Init(); //初始化延迟函数
BlueTooth_Init(); //初始化蓝牙模块
USART_Cmd(USART1, ENABLE); //除能串口
GPIO_ResetBits(GPIOB,EN);
Motor_Init(); //舵机初始化
Lo_Signal;
while(1)
{
if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_8) == Bit_RESET)
{
DelayMs(100);
if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_8) == Bit_RESET)
{
send_flag++;
if(send_flag == 2)
send_flag = 0;
if(GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_2) == Bit_RESET)
GPIO_SetBits(GPIOA,GPIO_Pin_2);
else
GPIO_ResetBits(GPIOA,GPIO_Pin_2);
if(send_flag == 1)
{
Motor_Mode(Reverse_45);
}
if(send_flag == 0)
{
Motor_Mode(Forward_45);
}
}
}
}
}