一、前言
在上篇 FastBond3基础阶段的文档中完成了方案框图的绘制以及主要器件的介绍,在挑战部分中我将继续完善设计,打出PCB实物并且对效果进行演示。
本次项目设计了一款供电下载调试串口充电五合一的DAPLINK,用于对STM32、GD32等此类单片机的下载调试。
二、原理图及PCB介绍
供电电路介绍:
供电部分采用的是TI的TLV62569DBVR DC-DC电源芯片,增加一个保险丝与LED显示是否供电,通过R19与R20两个电阻控制DC-DC电源芯片的输出电压。
TLV62569DBVR :
TLV62569器件是一款同步降压DC-DC转换器,专门 针对高效和紧凑型解决方案进行了优化。该器件集成的 开关能够提供高达2A的输出电流。
•效率高达95%
•低RDS(ON),可在100mΩ和60mΩ之间切换
•输入电压范围:2.5V至5.5V
•可调输出电压:0.6V至VIN
•针对轻载效率的省电模式
•针对最低压降的100%占空比
• 35µA静态工作电流
• 1.5MHz典型开关频率
•电源正常输出
•过流保护
•内部软启动
•热关断保护
•采用小外形尺寸晶体管(SOT)封装
•与TLV62568引脚兼容
R19和R20分别为453k、100k,通过计算可得知Vout=0.6*(1+453/100)= 3.318V。
电源管理电路介绍:
TP5400
TP5400 为一款移动电源专用的单节锂离子电池充电器和恒定5V升压控制器,充电 部分集高精度电压和充电电流调节器、预充、充电状态指示和充电截止等功能于一体, 可以输出最大1A充电电流。而升压电路采用CMOS工艺制造的空载电流极低的VFM开 关型DC/DC升压转换器。其具有极低的空载功耗(小于10uA),且升压输出驱动电流能 力能达到1A。无需外部按键,可以即插即用。
其中的D3与D4作为充电状态指示灯
主控使用的是STM32F103CBT6
STM32F103CBT6 是 STMicroelectronics(意法半导体)推出的一款基于 ARM Cortex-M3 内核的微控制器(MCU),广泛应用于嵌入式系统开发中。它属于 STM32 系列的 F1 系列,适合诸如工业控制、便携式设备、机器人、消费电子等各种应用场合。STM32F103CBT6 是一款功能强大且灵活的微控制器,适合各种嵌入式应用。其支持丰富的外设接口和高性能的处理能力,使其成为开发者实现项目创新的理想选择。无论是在学习阶段还是项目开发中,STM32F103CBT6 都能提供足够的支持和便利。
- Arm 32 位 Cortex-M3
- 72 MHz 最大频率,1.25 DMIPS/MHz (Dhrystone 2.1) 性能,0 等待状态内存访问
- 单周期乘法和硬件除法
- 记忆
- 64 或 128 KB 闪存
- 20 KB 的 SRAM
- 时钟、复位和电源管理
- 2.0 至 3.6 V 应用电源和 I/O
- POR、PDR 和可编程电压检测器 (PVD)
- 4 至 16 MHz 晶体振荡器
- 内部 8 MHz 工厂调整 RC
- 内部 40 kHz RC
- 用于 CPU 时钟的 PLL
- 用于 RTC 的 32 kHz 振荡器,带校准功能
- 低功耗
- 睡眠、停止和待机模式
- 2 个 12 位、1 μs A/D 转换器(多达 16 个通道)
- 转换范围:0 至 3.6 V
- 双采样和保持能力
- 温度传感器
- DMA的
- 7通道DMA控制器
- 支持的外设:定时器、ADC、SPI、I2Cs 和 USART
- 多达 80 个快速 I/O 端口
- 26/37/51/80 I/O,全部可映射在 16 个外部中断向量上,并且几乎全部可承受 5 V 电压
- 调试模式:
- 串行线调试 (SWD) 和 JTAG 接口
- 七个计时器
- 3 个 16 位定时器,每个定时器具有多达 4 个 IC/OC/PWM 或脉冲计数器和正交(增量)编码器输入
- 16 位电机控制 PWM 定时器,具有死区时间生成和紧急停止功能
- 两个看门狗定时器(独立定时器和窗口定时器)
- SysTick 定时器 24 位下计数器
- 多达 9 个通信接口
- 最多两个 I2C 接口(SMBus/PMBus®)
- 多达 3 个 USART(ISO 7816 接口、LIN、IrDA 功能、调制解调器控制)
- 最多两个 SPI (18 Mbit/s)
- CAN接口(2.0B有源)
- USB 2.0 全速接口
PCB设计介绍及遇到的问题和解决方法
在整个设计中遇到的问题是TP5400电源管理ic发烫严重,锂电池不能正常充电,充电状态指示灯也不正常,经过排查之后发现是Typec接口与STM32F103CBT6出现虚焊,重新焊接后TP5400就工作正常了。
三、成品功能测试
板卡焊接之后装配完成的样子:
关键代码及说明:
DAPlink是一个开源的项目,我们需要从ARM官方的github仓库里git下源码,按照要求安装环境再进行编译。
安装步骤生成projectfiles步骤后,分别编译stm32f103xb_bl和stm32f103xb_stm32f103rb_if,编译没问题之后将程序下载进去,再重新拔插USB线,此时电脑将出现一个虚拟U盘,表示DAPlink的boot程序已经成功启动。
出现虚拟U盘之后再将stm32f103xb_stm32f103rb_if工程编译的hex文件直接拖入虚拟U盘,DAPlink就可以正常运行了。
下载调试串口功能展示图:
uint8_t Rx_dat = 0;
uint8_t Tx_str1[] = "hello world!\r\n";
uint8_t Tx_str2[] = "LED1 Open!\r\n";
uint8_t Tx_str3[] = "LED1 Closed!\r\n";
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(huart->Instance == USART1)
{
if(Rx_dat == 0xa1)
{
HAL_UART_Transmit(&huart1,Tx_str2,sizeof(Tx_str2),10000);
HAL_UART_Receive_IT(&huart1,&Rx_dat,1);
}
else if(Rx_dat == 0xa2)
{
HAL_UART_Transmit(&huart1,Tx_str3,sizeof(Tx_str3),10000);
HAL_UART_Receive_IT(&huart1,&Rx_dat,1);
}
}
}
/* USER CODE END 0 */
/**
* @brief The application entry point.
* @retval int
*/
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_USART1_UART_Init();
/* USER CODE BEGIN 2 */
HAL_UART_Transmit(&huart1,Tx_str1,sizeof(Tx_str1),10000);
HAL_UART_Receive_IT(&huart1,&Rx_dat,1);
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
HAL_Delay(1000);
}
/* USER CODE END 3 */
}
可以看到测试程序,首先初始化串口,上电后向上位机发送hello world!,并且打开串口中断,上位机正常接受,上位机发送A1到STM32H7,返回LED1 Open!,可知下载调试串口功能一切正常。
充电供电功能展示图:
可以看到无Typec接口供电时,锂电池从3.7V升压至5V给下载器和STM32H750供电,当使用Typec接口供电时,给锂电池充电,并且自动使用Typec供电。
四、活动总结
很感谢举办方举办的FastBond3活动,完成了这次DAPlink下载器的设计为了之后的项目做了充分的铺垫,之后打算小型化DAPlink下载器集成到自己设计的开发板上,过程中遇到了很多困难,但最终都解决了,并且收获很多,祝愿大赛越办越好。