文章目录
- 一、前言
- 二、仿真图
- 1.要求
- 2.思路
- 3.画图
- 3.1 电源部分
- 3.2 超声波测距部分
- 3.3 电机驱动部分
- 3.4 按键部分
- 3.5 蓝牙部分
- 3.6 显示屏部分
- 3.7 整体
- 4.仿真
- 5.软件
- 三、总结
一、前言
proteus本身并不支持蓝牙仿真,这里我采用虚拟串口的方式来模拟蓝牙控制。
这里给出链接,有需要的小伙伴可以自行下载。
VSPD虚拟串口软件安装及使用
二、仿真图
1.要求
整部小车采用12V电源供电,由白色开关控制整体供电和断电,电机驱动采用TB6612FNG模块,另外还有控制方式有按键模式和蓝牙模式,蓝牙模块采用HC-05模块,超声波测距采用HC-SR04模块,进行自动避障,还需一个显示屏来显示当前模式和状态以及测距的距离。
2.思路
电源方面可以直接采用DCDC电源芯片或者LDO进行降压。
电机驱动是TB6612FNG模块,直接根据引脚定义进行连线即可。
至于驱动电机正转反转对着真值表写程序即可。
按键模式放置几个按键简单,但是在Proteus仿真中按键要注意接上拉电阻。
蓝牙模式由于仿真里面没有蓝牙,所以这边用虚拟串口代替,然后通过PC端的串口调试助手进行串口指令控制。
超声波测距模块HC-SR04在仿真里面是有,但是好像没办法模拟障碍物,所以只能显示个测距的距离。
至于显示屏当然是选用引脚较少的OLED显示屏。
3.画图
3.1 电源部分
这里电源输入是12V,然后通过SW1开关打到正极,(这里如果SW1打到负极GND,仿真时就会报错,算是模拟开关按下把。)
12V先经过TL783这个LDO进行降压到5V,再通过AMS1117-3.3再次降压到3.3V。
(这里其实直接用AMS1117-3.3一个就可以了,因为AMS1117-3.3输入电压可以达到18V,那时候画了就懒得改了。)
最后,有个红灯来代表电源指示灯,只要仿真开启,3.3V供电正常,这个灯就会常亮,算是代表供电正常。
3.2 超声波测距部分
3.3 电机驱动部分
3.4 按键部分
3.5 蓝牙部分
3.6 显示屏部分
3.7 整体
4.仿真
开始仿真,初始模式为按键模式,小车状态为停止状态。超声波测距模块设置为5.0,显示屏上面显示为50mm,上电串口发送指令Uart Test OK表示串口通讯正常。
按键模式,按下除模式切换和停止以外的按键,这里以右转为例,按下右转按键,小车开始模拟右转运动,左右电机开始按照右转状态进行转动。
按下模式切换按键,切换到蓝牙模式,用串口调试助手来模拟蓝牙发送小车前进串口指令进行控制小车运动。
5.软件
主函数
/* Includes ------------------------------------------------------------------*/
#include "Drv_UserSystem.h"
/**
* @brief main function.
* @param none
* @retval none
*/
int main(void)
{
UserSystemInit();//用户配置初始化
while (1)
{
if (stSysTime.flg._10ms + TEN_MILLISECOND < Time_millis()) //10ms
{
stSysTime.flg._10ms = Time_millis();
Key_Scan();//按键扫描
}
if (stSysTime.flg._50ms + FIFTY_MILLISECOND < Time_millis()) //50ms
{
stSysTime.flg._50ms = Time_millis();
}
if (stSysTime.flg._100ms + BEST_MILLISECOND < Time_millis()) //100ms
{
stSysTime.flg._100ms = Time_millis();
Receive_data_Handel();//数据接收判断
IWDG_ReloadCounter();//清开门狗
}
if (stSysTime.flg._1s + THOUSAND_MILLISECOND < Time_millis()) //1s
{
stSysTime.flg._1s = Time_millis();
Led_Flicker();//灯光闪烁
Measurement_function();//测距函数
OLED_Handel();//OLED显示
}
}
}
三、总结
今天主要讲了基于STM32的蓝牙小车的Proteus仿真(虚拟串口模拟)。感兴趣的可以去试试。
感谢你的观看!