
三通道方波发生器电路
简介
基于STM32做的可以产生一个1Hz-8MHz的可调频的三通道方波发生器。
简介:基于STM32做的可以产生一个1Hz-8MHz的可调频的三通道方波发生器。开源协议
:GPL 3.0
(未经作者授权,禁止转载)描述
前言
是嘉立创给的模版,我直接填写的,所以下面写作之间有前后重复描述、逻辑错误不怪我。(免责申明)
视频链接:
懒得上传B站了,所以直接去下面附件瞅瞅就行。
项目简介
基于STM32做的可以产生一个1Hz-8MHz的可调频的三通道方波发生器。
(实际上是燕山大学2024年电赛积分赛秋季赛题的题目,做完就扔上来了,屎一样的硬件,屎一样的代码)
项目功能
本设计是基于STM32单片机设计的PWM发生器;设置有三路单独的PWM输出,屏幕,按键面板。
功能分别根据按键输出需要的频率,启动输出,就能够自动输出对应的PWM。
项目参数
项目整体硬件设计难度不大,但是在主控芯片选择上很纠结,选主频高的芯片,价格昂贵;选便宜的芯片,主频不高。
纠结之下最终选用了极其便宜的芯片,如果想要在高频部分获得较小的误差请自行氪金!
- 本设计采用STM32G030F6P6主控芯片,芯片小,便宜,所有引脚安排得当刚好够用;
- 本设计采用0.96寸OLED液晶显示,三行对应三路输出;
- 使用软件计算最优解,得到系统时钟不变的情况下的定时器分频系数、计数器最优解;
原理解析(硬件说明)
本项目由两块电路板和购买的0.96寸OLED组成。
0.96寸OLED购买链接可以直接去淘宝找(可以点击蓝字跳转)。
主控板
主控板由三部分组成:核心、外设、电源。
核心部分
核心部分的本质就是STM32G030F6P6的最小系统和引脚的规划。
先说引脚的规划,盘算了一下,外设的引脚有以下几个部分。
功能 | 引脚数 | 对应外设 | 作用 |
---|---|---|---|
芯片烧录接口 | 2 | SWDIO | 程序烧录 |
芯片复位引脚 | 1 | NRST | 程序复位 |
RF射频同轴连接器 | 3 | PWM | 三路PWM输出 |
0.96寸OLED | 2 | I2C | 屏幕显示 |
LED | 3 | GPIO | 指示该端口是否输出PWM |
键盘 | 4 | 74HC165通信 | 键盘输出 |
串口 | 2 | USART | 上位机通信 |
加上两个电源引脚,正好19个引脚。STM32G030F6P6共20个引脚。
所以留给外部高速晶振的引脚只有一个了,也就是说必须使用STM32的BYPASS功能才行,所以使用有源晶振!
然后再去STM32CubeMX上简单的尝试一下就可以找出一种合适的引脚配置方法。以下是对应的电路图。
- 晶振部分采用磁珠+电容的滤波方案,减小电源纹波对晶振精度的影响,后续测试发现实际的晶振频率精度在小数点后4位。
- 烧录口只有三路,去除了3V3的供电引脚。因为明确,烧录时候会使用USB供电,不存在电源问题。
- 添加四个M3螺丝孔,给铜柱,以支撑整体开发板。
- 添加两个1*2P排母,作为按键板和控制板连接的结构件。
外设部分
涉及到的外设已经在上面主控部分列明了,所以此处不再赘述。
原理图如下:
-
射频头直接和单片机引脚相连,没有做保护措施。(因为考核时候直接和示波器相连,所以应该噶不了,同时也减少退耦时候造成的信号衰减或延迟问题)
-
OLED使用1*4P排母,供电口使用0402的0Ω电阻作为选择电阻,旧版和新版的0.96寸OLED引脚顺序是不同的,这个地方需要使用者按购买的模块自行选择焊接。(直接焊锡短接就行,买0Ω电阻意义不大)
-
按键板相连共10个引脚,2路供电、4路按键、3路指示灯、1路芯片复位。(其实没这一路也行,但是不方便复位)
-
串口采用最经典的CH340N芯片,这个芯片也是USB转TTL最常见的芯片了,为了防止出意外,所以在USB电路的差分信号上添加了保护TVS管。
电源部分
电源采用两个TYPE-C接口作为供电输入,经过防电流反灌的二极管电路后,总开关控制通断。
总开关后接自恢复保险丝和电源滤波电容,以得到保护后的总输入电源。
由于外设全部使用3V3作为供电电源,因此总输入电源通过两个LDO,降至3V3。一路供给主控板上的模块,一块供给按键板的按键阵列。
其原理图如下:
-
USB2是16脚TYPE-C,可以在供电的同时和上位机通信;USB1是6脚TYPE-C,防止USB2焊不上去时候,没法给板子供电。两个USB连接器的CC引脚均加入5.1K下拉电阻,便于不同主机识别和配置。
-
D1、D3两个肖特基二极管构成防止电流反灌的电路。这样两路USB都插入,硬件自动选择电压较高的一路作为主电源输入。(肖特基二极管比普通二极管的管压降要低,开关速度要快)
-
F1是自恢复保险丝,正常使用是不会出问题的,为的是防止手工焊接的时候有笨蛋把后续电路焊短了。
-
LDO采用RT9013-33GB,芯片小,输出电流500mA左右,正好外设需要的电流也不大。
按键板
按键板的原理图如下所示:
-
首先是信号输入的2*5P排针和作为固定结构的1*2P排针,这个对应核心板即可。
-
键盘模块采用74HC165芯片级联构成,具体原理可以参考华秋商城的视频。按键采用10kΩ电阻上拉,并联10nF电容的方案,来做到硬件消抖。
-
LED和芯片复位就是基本的电路结构了,没什么好说了。(想要芯片复位直接短接信号输入的RESET和GND就可以做到)
软件代码
软件代码没什么可说的,各人有各人的编码方式,无可指摘。
本项目代码基于STM32CubeMX配置的HAL库代码改写而成。所有写的文件都放在Core文件夹中(建议直接在KEIL中查看比较直观)。
个人有改动的地方有(从底层到顶层):
文件名 | 作用 |
---|---|
oledfont.c | 0.96寸OLED屏幕字符驱动 |
oled.c | 0.96寸OLED屏幕显示驱动 |
74HC165.c | 键盘扫描驱动 |
pwm.c | PWM输出驱动 |
oled_opa.c | OLED菜单格式定义 |
button_opa.c | 按键操作函数定义 |
menu.c | 菜单状态机建立 |
main.c | 主函数 |
注意事项
16P的USB焊不上就别硬焊()
组装流程
焊好了你还不会组装吗??
看看实物图都懂了吧()
【嘲讽的嘴脸蚌埠住了】
实物图
图1:核心板正面图
图2:按键板正面图
图3:按键板背面图
图3:组装图
设计图

BOM


评论