esp-toothbrush 硬件原理图介绍

前言

  1. 个人邮箱:zhangyixu02@gmail.com
  2. 项目视频链接

硬件介绍

电池管理

(1)我们项目采用 TP4056 电源芯片给锂电池充电。因为我们采用的是 3.7V 锂电池,通过插上 USB 接口 5V 供电。通过查看TP4056芯片手册的典型应用可知,该芯片是满足要求的。

在这里插入图片描述

(2)通过典型应用,我们基本可以知道该芯片原理图大体如何进行设计。但是,我们会根据自己的情况来进行调整。例如在典型应用中,他们是使用两个发光二极管用于显示充电状态。

在这里插入图片描述

(3)而我们电动牙刷有一个 LCD 显示屏,同时电池的电量会反应在电压上,当电池满电时电压为 4.2V ,当电压为 2.7V3.0V 左右时,电量基本是快没有了,此时再使用电池,将会对电池产生损坏。因此,我们可以使用 ADC 功能来读取电压值来推断出此时的电量百分百,同时通过 CHRG 引脚辅助获知电池充电状态和有无,之后在 LCD 显示屏上进行显示。

在这里插入图片描述

(4)关于 PROG 引脚的 R P R O G R_{PROG} RPROG 电阻阻值选取,各位可以根据自己选定的电池充电最大电流来进行选取。我们这里选取的是 2.2K 电阻,充电电流大约为 500mA

在这里插入图片描述

(5)可以通过 TEMP 引脚获知当前电池温度,我们不需要该功能,因此进行删除。最终的电路如下

在这里插入图片描述

LDO稳压

(1)我们选取的 LDO 稳压芯片为 HE9073A33M5R 。我们通过阅读HE9073芯片手册可知该芯片的输入电压范围为 2-7V 能够稳压到 3.3V ,而且该芯片的功耗很低,符合我们项目需求。

在这里插入图片描述

(2)我们看官方提供的 Typical Application Circuit,如下图,因此我们即可设计出自己的 LDO 稳压电路。

在这里插入图片描述

在这里插入图片描述

USB转串口

(1)如下为一个标准的USB转串口 原理图。这里是直接参考的曾经的 ESP32 相关开发板的。

在这里插入图片描述

LCD显示屏

(1)因为我们的 LCD 是外接的 SPI 显示屏,因此需要根据外接显示屏的引脚进行设计,因此原理图如下:

在这里插入图片描述

电机控制

(1)电机控制,我们采取的驱动芯片是 TC118S。该芯片主攻应用就是电动牙刷,而且是国产芯片,技术文档均为中文,相对友好。
(2)我们采用的电池为 3.7V 锂电池,而 3.7V 锂电池满电状态下为 4.2V。 根据 TC118S 技术文档可知,3V 以上建议使用 1uF 电容,4.5V 使用 4.7uF 电容。综合考虑,我们 VDD 最终使用4.7uF 电容进行滤波。

在这里插入图片描述

(3)因此,最终我们电机控制的原理图如下:

在这里插入图片描述

无源蜂鸣器

(1)蜂鸣器分无源蜂鸣器有源蜂鸣器两种。有源蜂鸣器的控制简单,但是声音单调且尖锐。没有人希望自己刷牙的时候,牙刷声音嘎嘎难听,因此我们选用无源蜂鸣器能够通过 PWM 控制,来产生想要的音频效果。
(2)无源蜂鸣器使用一个 NPN 型三极管来控制蜂鸣器。该三极管使用 R13 作为下拉电阻使得基极默认低电平,R14 作为限流电阻防止基极电流迅速增大导致三极管损坏。BEEP 引脚输出高电平,三极管导通。
(3)我们通过控制 BEEP 输出 PWM 能够让该蜂鸣器产生特定的音符,最终产生悦耳的声音。

在这里插入图片描述

按键

(1)根据 《ESP8684 系列芯片规格书》 2.4 Strapping 管脚章节 介绍可知,当 GPIO9=0,GPIO8=1时,芯片会进入下载启动模式。

在这里插入图片描述

(2)根据后面的ESP8684-MINI-1外围电路设计介绍部分我们知道, GPIO8 会通过 10k 限流电阻上拉至高电平。因此,我们决定使用 GPIO9 作为按键引脚。这样按键在芯片启动时候可以用来选择启动模式,在芯片启动完成后又可以当做普通按键使用,一举两得。

在这里插入图片描述

(3)我们的按键并联一个 104 的电容用于按键消抖,这样软件程序编写会更加简单。因此电路如下:

在这里插入图片描述

自动下载电路

(1)ESP32的自动下载电路介绍起来相对复杂,感兴趣的可以看看这篇博客:论ESP32自动下载电路

在这里插入图片描述

ESP8684-MINI-1电路

ESP8684-MINI-1与ESP32C2关系

(1)我们该项目是采用的 ESP32C2 系列的芯片,使用的是 ESP8684-MINI-1 模组。
(2)对于乐鑫的模组和芯片关系不太了解的,可以看看这篇博客:芯片、模组、开发板的区别与联系-结合ESP32浅谈
(3)关于乐鑫的芯片选型,可以查阅:乐鑫芯片

在这里插入图片描述

ESP8684-MINI-1外围电路设计介绍

(1)该项目是基于 ESP8684-MINI-1 模组进行的项目设计。因此,我们需要知道 ESP8684-MINI-1 模组的必备资源和可用资源进行了解。
(2)首先我们来看看乐鑫官方提供的 ESP8684-MINI-1 模组技术规格书6 外围设计原理图章节。

在这里插入图片描述

(3)我们可以看到,进行模组外围电路设计,就需要先去理解该原理图。首先,我们看到该原理图中有 UART 接口、复位引脚、 BOOT 选择接口、 JTAG 接口,还有 C1、C2、C3、R1 组成的延迟电路。
<1>因为要确保 ESP8684 芯片上电时的供电正常,EN 管脚处需要增加 RC 延迟电路。RC 通常建议为 R = 10 kΩC = 1 µF 。因此延迟电路设计如下:

在这里插入图片描述

<2>该项目作为一个电动牙刷项目,对体积存在一定的要求。因此,我们决定把 JTAG 接口删除,用于普通 IO 口使用。
<3>该项目选择保留 UART 接口。

在这里插入图片描述

<4>复位引脚、 BOOT 选择接口在前面的自动下载电路中进行了介绍,因此不再赘述。不过需要注意, IO8 会通过一个 10K 限流电阻上拉至高电平。因此最终的 ESP8684-MINI-1 设计如下:

在这里插入图片描述

参考

  1. TP4056芯片手册
  2. HE9073芯片手册
  3. TC118S 技术文档
  4. 《ESP8684 系列芯片规格书》
  5. C站:论ESP32自动下载电路
  6. C站:芯片、模组、开发板的区别与联系-结合ESP32浅谈
生成物体位置图的代码主要涉及到目标检测和实例分割的相关操作,以下是一个示例代码,你可以参考它进行修改和调整: ``` import cv2 import numpy as np import random import colorsys # 加载模型和数据集 model = MaskRCNN(mode="inference", config=config, model_dir=MODEL_DIR) model.load_weights(COCO_MODEL_PATH, by_name=True) class_names = ['BG', 'person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus', 'train', 'truck', 'boat', 'traffic light', 'fire hydrant', 'stop sign', 'parking meter', 'bench', 'bird', 'cat', 'dog', 'horse', 'sheep', 'cow', 'elephant', 'bear', 'zebra', 'giraffe', 'backpack', 'umbrella', 'handbag', 'tie', 'suitcase', 'frisbee', 'skis', 'snowboard', 'sports ball', 'kite', 'baseball bat', 'baseball glove', 'skateboard', 'surfboard', 'tennis racket', 'bottle', 'wine glass', 'cup', 'fork', 'knife', 'spoon', 'bowl', 'banana', 'apple', 'sandwich', 'orange', 'broccoli', 'carrot', 'hot dog', 'pizza', 'donut', 'cake', 'chair', 'couch', 'potted plant', 'bed', 'dining table', 'toilet', 'tv', 'laptop', 'mouse', 'remote', 'keyboard', 'cell phone', 'microwave', 'oven', 'toaster', 'sink', 'refrigerator', 'book', 'clock', 'vase', 'scissors', 'teddy bear', 'hair drier', 'toothbrush'] # 加载图像并进行目标检测和实例分割 image = cv2.imread(IMAGE_PATH) results = model.detect([image], verbose=0) r = results[0] # 根据目标的边界框和掩码生成物体位置图 height, width = image.shape[:2] mask = np.zeros((height, width, 3), dtype=np.uint8) colors = random_colors(len(r['rois'])) for i, roi in enumerate(r['rois']): class_id = r['class_ids'][i] mask = cv2.fillPoly(mask, roi.reshape(1, -1, 2), colors[i]) mask = cv2.putText(mask, class_names[class_id], (roi[1], roi[0] + 20), cv2.FONT_HERSHEY_SIMPLEX, 0.5, colors[i], 2) # 显示原始图像和物体位置图 cv2.imshow('Original Image', image) cv2.imshow('Object Location Image', mask) cv2.waitKey(0) cv2.destroyAllWindows() ``` 其中,`random_colors` 函数用于生成不同颜色的掩码,`cv2.fillPoly` 函数用于将掩码填充到图像中,`cv2.putText` 函数用于在目标区域绘制类别名称。你可以按照自己的需求进行修改和调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风正豪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值