刘志勇
欢迎和简介在“录像”的“LiuZhiyong-Welcome.mp4”里面,可以通过电子邮件里面的地址联系。
录像    LiuZhiyong-Welcome.mp4
照片一    LiuZhiyong-Photo-1.jpg
照片二    LiuZhiyong-Photo-2.jpg
照片三    LiuZhiyong-Photo-3.jpg
水印标记    liuzhiyong.me
电子邮件    liuzhiyong@msmbps.com



目录

IRS2092S 第二版 第一版 调试 示波器
USB 方框图 组装 测试 速度
SDIO 方框图 容量减半
RAK439 PCB 运行 完成
5506 PCB 配置 代码 显微镜
nRF52832 连线 通信 密码
msmbps 功能 代码 截图
12864 连接 显示
OV7670 连接 拍照 数据 效果
ESP8266 PCB 连接 上网
SRD03VDC PCB 焊接 连接
PT4455 原理图 PCB
480R 原理图 PCB
TOP221Y 180V 220V 240V
EE25 开发板 变压器 负载 运行
TDA2030A 原理图 封装 PCB 照片
BTA41600B 照片 示波器
DB3 照片 示波器
Multisim 运放 震荡 互补对称
MATLAB 方程组 傅立叶变换 公式
FreeRTOS 配置 多线程 通信
FreeRTOS UART 开发 效果
STM32 开发板 功能
STM8 开发板 功能
I2C 连接 通信 示波器
CD4069 原理图 焊接 胶枪
ST24512 连接 读写
LM75A 连接 读取
SIM900A 照片 COM 初始化
DAC 滤波 100% 50% 25%
SPI 示波器 设置

IRS2092S

用这个芯片实现D类放大器,第二版完成:

第二版俯视:

第一版完成:

第一版俯视:

第一版更换电感,进行调试:

第一版焊接使用的BOM:

第二版焊接使用的BOM:

低通滤波器之前:

低通滤波器之后,第一版存在问题:

(存在高频信号,低通滤波不彻底,所以更换高级电感,制作第二版)

USB

目的是实现有“隐藏分区”的USB读卡器,方框图就两根数据线:

电路设计文件列表:

四层板PCB打样组装:

(设计失误,添加飞线上拉电阻)

PCB另外一面:

USB连接到Windows 7:

先计算100MB数据的校验和:

Windows 7读取数据:

计算校验和,核对数据完全正确:

深度系统读取数据:

计算校验和,核对数据完全正确:

小米安卓读取数据:

计算校验和,核对数据完全正确:

传输速度为 6.0 Mbps 到 6.5 Mbps。

SDIO

目的是实现有“隐藏分区”的USB读卡器,方框图MicroSD卡连接到MCU:

“隐藏分区”的大小为MicroSD卡实际大小的一半:

RAK439

设计一个设备的时候,需要高速WIFI模块,选择RAK439。最后完成的PCB的图纸:

(主要元件:U1是RAK439,U2是STM32F207ZGT6,P5是ST-LINK的SWD调试端口,P1连接OV7670摄像头,P2连接433MHz电波发送模块,P3连接433MHz电波接收模块,P4连接12864屏幕,右下角是开关电源)

把主要元件焊接上去:

RAK439模块在这里:

RAK439的官方库是没有源代码的,编程有点麻烦。运行起来是这样的:

(扫描WIFI网络,加入WIFI网络,获得IP地址——其中“0xc0a80108”就是“192.168.1.8”)

然后它和Web服务器通信:

(发送请求给Web服务器,接收Web服务器的回应)

使用大功率电阻,测试电源:

安装到盒子里面:

最后完成:

5506

5506是一种光敏电阻,用它实现一个设备:远程开灯,远程确认灯已经打开(这样可以防贼)。全部搞定,然后安装到网上买的盒子里面……

最后版本的PCB:

(主要元件是:开关电源的芯片,EE13的变压器,ESP8266的WIFI,3V的继电器)

最后版本的PCB的另一面,其中“R6”,就是有弯曲线条的元件,是5506光敏电阻:

第一版的PCB:

第一版的PCB的另一面:

(第一版的PCB有根线出错,用刀片废掉后,飞线代替。变压器T1的插座很紧,插上去就能用,测试的时候没有必要焊接。)

经过调试之后,第一版的PCB安装到网上买的盒子里面:

手机登录这块板子的WIFI热点,可以配置WIFI参数。ESP8266的WIFI热点分配IP比较奇怪,是“192.168.4.*”:

设置好了后,就会看门狗重启:

STM8的代码很普通,只有一个地方要特殊处理:因为程序涉及网络操作,要求卡死数秒(时间比较长),然后看门狗重启,用定时器实现:

这是显微镜检查焊接:

(文字“R1”附近有两对引脚短路,是PCB设计时候连的线)

nRF52832

搞到nRF52832的模块,支持编程,连接到J-Link:

(四根线,没有“复位”线)

nRF52832的一个GPIO引脚连接LED:

编程前准备工作:

(恢复、擦除、写入SoftDevice)

手机蓝牙扫描到设备:

手机蓝牙控制LED:

(“LED Enabled”)

设备LED点亮:

手机蓝牙连接UART服务,发送数据,并且接收数据:

(发送数据为“liuzhiyong.me”,接收数据为“Reverse: 【发送数据倒序】”)

查看手机蓝牙的记录:

(从发送到接收用了17毫秒)

手机蓝牙和设备配对密码:

“BONDED”绑定好了:

“BONDED”之后,手机蓝牙发送和接收数据:

(发送数据为“123”,接收数据为“Reverse: 321”)

查看手机蓝牙记录:

(从发送到接收用了17毫秒)

如果没有密码,那么不能访问服务:

(尝试发送123“0x313233”,不能发送,没有响应,并且断开连接)

msmbps

msmbps可以测量本地到多个云服务的速度,用来选择机房非常方便。它是一个Web App,网址是 https://www.msmbps.com/

代码是开源的 https://github.com/msmbps/msmbpshttps://github.com/msmbps/about 有签名)

最终效果的截图:

12864

12864是一种屏幕,我的这块屏幕的控制器是ST7920。先搞原理图,连接它的引脚:

然后移植代码,测试显示效果:

OV7670

OV7670是一种摄像头,先搞原理图,连接它的引脚:

摆放好摄像头,拍照:

在IAR里面获得图像数据(HEX文件):

hex2bin工具把HEX文件转换为BIN文件:

RAW Pixels工具加载BIN文件,查看效果:

(用的MCU是STM32F207ZGT6,内存有限,一次只能读取这些图像数据)

修改程序,变成两次读取,然后合并数据:

然后查看效果:

ESP8266

ESP8266用来让机器上WIFI,打算让STM8S207CB读取温度数据,再上传给Web服务器。搞定PCB,再把器件都焊接上去:

(右下角是LM75A温度传感器)

然后把ESP8266连接上去:

P2是ST-LINK端口(RST/GND/SWIM/VCC),把程序写入STM8。然后它就连上手机WIFI:

SRD03VDC

SRD03VDC是3V的继电器,用它控制220V电器。MCU就用前面的板子,读取温度,驱动继电器和蜂鸣器(前面的板子有两个GPIO连到4X2插座)。单面板PCB搞定:

(继电器面积比较大,在它PCB背面放置元件,节约PCB面积)

把元件都焊接上去:

然后把它连接到前面的MCU板子:

PT4455

PT4455是电磁波发射芯片,用它制作433MHz的电磁波发射模块,先搞原理图:

设计PCB:

最后完成:

(经过测试,能够满足短距离通信的要求)

480R

480R是电磁波接收芯片,用它制作433MHz的电磁波接收模块,先搞原理图:

设计PCB:

最后完成:

(经过测试,能够满足短距离通信的要求)

TOP221Y

TOP221Y是Power Integrations的开关电源芯片。用它制作AC/DC,先上180V交流电:

(输出是4.93V直流)

再上220V交流电:

(输出是4.97V直流)

然后上240V交流电:

(输出是4.98V直流——输入电压从180V变为240V,输出电压的变化只有0.05V,非常稳定)

EE25

EE25是一种变压器磁芯,用它搞AC/DC开关电源。首先制作开发板(关键元件都是插座形式,方便更换):

(稳压管的引脚太细,不能使用插座连接,所以电线焊接。同样很容易更换。)

然后制作EE25变压器:

再准备大负载5欧姆:

通电运行:

(AC输入220V,DC输出4.76V)

TDA2030A

ST TDA2030A是主要用于音频的运算放大器。打算用它制作一个简单的音响。先搞原理图:

主要就是让运放在负反馈工作,放大输入信号。接着搞PCB,几个元件Altium没有封装,要自己做封装。TDA2030A有DATASHEET,查阅后做封装:

(这个元件是向后靠的,也就是管脚不垂直)

电位器连DATASHEET都没有,用游标卡尺测量后做封装:

大电容测量后做封装:

终于设计PCB了,希望做成单面板(家里有制作单面板的设备),面积尽可能小。最后PCB设计成这样:

(贴片的元件在一面,插接的元件在另一面,这样非常节约PCB面积)

最后完成的照片:

再看看插接的元件:

(很明显,最大的失误就是没有考虑TDA2030A的散热片,所以有个电容必须“躺下”)

电脑通过这个设备播放音乐,音质非常好,远超我的预期。他奶奶的,音响公司肯定利润高呀。

BTA41600B

BTA41600B是ST公司的双向可控硅(TRIAC):

用它做导通角,用示波器测量负载:

(每个半周的后半截在负载上)

再用示波器测量双向可控硅:

(每个半周的前半截在可控硅上)

DB3

DB3是一种双向触发二极管(DIAC):

用示波器测量:

(击穿电压大约30V——电压剧烈垂直下降)

示波器测量串联的元件:

(电压剧烈垂直上升)

Multisim

“Multisim”是非常好用的电路模拟工具,先搞个“单电源运放”的模拟:

(放大倍数是5)

再搞个复杂点的模拟:

互补对称:

(交越失真)

使用二极管的压降弥补交越失真:

MATLAB

计算以下电路的“R3”电流:

(模拟软件已经给出结果)

使用“MATLAB”计算方程组:

(结果和模拟软件一致)

使用“MATLAB”可以直观看到傅立叶变换的效果:

(三个正弦,已经比较像方波了)

推导反馈的公式:

得到公式的结果:

可以有具体数值:

FreeRTOS

一个简单的RTOS实验,先配置4个线程、1个队列:

一个线程250毫秒闪烁LED:

另一个线程500毫秒闪烁LED:

还有一个线程1000毫秒闪烁LED:

按钮中断的函数发送123给队列:

线程从队列拿到123,就改变LED状态:

FreeRTOS UART

一个简单的RTOS收发实验,准备硬件(STM32F103C8T6板子、ST-Link、USB串口):

STM32CubeMX配置FreeRTOS:

STM32CubeMX打开UART中断:

手工创建收发的Semaphore:

手工初始化收发Semaphore:

接收完成的回调,执行SemaphoreGive:

接收线程的变量:

接收线程的死循环(中断型接收、SemaphoreTake等待接收好了、QueueSend把接收到的显示出来、if-else处理接收数据):

发送线程(QueueReceive拿到发送的数据、中断型发送、SemaphoreTake等待发送好了):

发送完成的回调,执行SemaphoreGive:

运行效果(输入数字,得到加123的结果):

STM32

“STM3220G-EVAL”是ST公司的评估板,搞了个程序操作 FSMC LCD GPIO SD FATFS ETH LWIP HTTP,程序启动:

(LCD显示IP和LED初始状态)

然后用浏览器访问“STM3220G-EVAL”的IP,在网页中输入新的LED数值(二进制):

“STM3220G-EVAL”收到数据:

(控制了屏幕下方的LED,屏幕显示新的数据,并且记录到SD卡“LOG: OK”)

这时候取出SD卡在电脑上查看记录:

(最新的记录在文件的最后)

如果没有SD卡的时候,“STM3220G-EVAL”收到数据:

(SD卡在评估板的左上方,屏幕显示“LOG: NO”)

STM8

ST使劲给某公司的核心技术人员送开发板,希望选用他们的芯片嘛。最后根本用不了这么多,于是我搞到几块STM8S105S4-PKT。相关资料:
STM8S105S4-PKT原理图
STM8S105S4-PKT用户手册

开发板的照片:

(白色的线,还有面包板上的元件都是我加上去的)

面包板上添加了一个按钮,上拉电阻,滤波电容——连接到PA4。其他都没有改动。即使没有额外添加这些元件,代码照样运行,也就少了点功能。这块板子的晶振没有焊接,是可以扯下来更换的。我用的是8Mhz。

STM8操作 CLK GPIO ADC TIM2 UART I2C。几乎都是直接读写寄存器实现功能(I2C例外,因为它的寄存器比较复杂,所以用官方库搞定)。编译器用的Cosmic(4.2.4),开发用ST Visual Develop(4.1.2)。

通过RS232连接到开发板的参数:

然后接通开发板的电源,终端上显示:

(切换到HSE,一定时间内按回车键可以进菜单,TIM2每5秒调用ISR一次,读取ADC的结果是48%)

这个时候LED在闪烁,按下按钮就停止闪烁(可能是点亮的,也可能没有点亮,再按一次继续闪烁)。调整电位器可以让它闪烁频率改变(快到看不清,慢到非常低的频率)。终端的显示:

(调整电位器,6次按下按钮LED停止闪烁)

按下面包板上的按钮,GPIO中断会改时钟:

(LED闪烁频率变了,蜂鸣器音乐的音调变了,改时钟源的话TIM2频率变了。如果用的是内部时钟,扯下晶振后LED仍然闪烁。如果用的是外部时钟,扯下晶振LED停止闪烁)

搞了个作弊模式,按RESET再终端回车键,菜单里面选择1——这样不管LED怎么闪烁,结果永远是点亮:

I2C

将开发板上PE1(就是SCL)和PE2(就是SDA)连接到另一块开发板。电脑通过RS232发数据给I2C主模式的开发板,它再发数据给I2C从模式的开发板:

(数据内容是点亮左边的LED)

点亮中间的LED:

点亮左边和中间的LED:

示波器:

(起始条件,0x50,W,应答位,0x5,应答位,停止条件)

CD4069

一个UART信号,nRF芯片可以读取,USB-TTL不能读取。初步判断是电平的电压问题,用CMOS的CD4069解决:

(RX通过两个CMOS的非门连接到USB-TTL的接收引脚USB_RX,其他输入引脚确保有固定电平)

暴力焊接:

胶枪固定到USB-TTL:

另一面:

(老的接收引脚剪掉,然后“自发自收”测试)

ST24512

ST公司的24512芯片是512千位(64千字节,0x10000字节)的EEPROM。这芯片只有8个脚,虽然家里就能制作单面板,还是决定直接焊接:

(VCC连接到STM8S105S4-PKT开发板的5V,VSS连接到开发板的GND,SCL/SDA连接到开发板上芯片的SCL/SDA,其他四脚浮空)

然后读写数据:

(在地址0写入10字节的“0123456789”,从地址0读取10字节,在地址5写入3字节的“ABC”,最后从地址0读取10字节)

EEPROM断电再通电,数据不会丢失:

(断电后通电,读取地址0的10字节)

LM75A

NXP公司的LM75A是温度传感器,分辨率为 0.125 °C,精度为 ±2 °C(一般情况下,也就是 −25 °C 到 +100 °C)。暴力焊接:

(A0 A1 A2 连接到VCC,所以I2C地址是0b1001111)

读取温度数据(两个字节):

空调制冷后,再次读取温度数据:

(温度下降了 3 °C)

SIM900A

SIM900A是SIMCOM公司搞的一个GPRS模块,让机器连接到手机网络。它的开发板:

然后RS232连接电脑,先测试一下AT命令:

(其中“223.5.5.5”和“223.6.6.6”是阿里巴巴的DNS服务器,算是国内很好使的;最后的命令是查询域名“www.qq.com”的IP,确认已经在线)

把初始化搬到STM8上:

(“sim900a_AT”第一个参数是AT命令,第二个参数是期待的响应)

最终STM8通过SIM900A和Web服务器通信,自己通过手机访问网页来远程控制。

DAC

用PWM做DAC,电路要添加滤波:

(二阶RC低通滤波器,输入是PD3,也就是TIM2_CC2,输出是“DAC”标签的线)

占空比100%……

(开发板用78XX稳压到5V,实际上有误差;而STM8的输出又要略低于芯片VDD)

占空比50%……

占空比25%……

SPI

示波器:

设置……
主设备:STM8用8Mhz的HSE
时钟频率:fMASTER/16(8Mhz/16=500KHz,示波器测量5个周期的频率是100KHz,也就是1个周期500KHz)
时钟极性:空闲状态时,SCK保持低电平
时钟相位:数据采样从第二个时钟边沿开始,就是下降沿
帧格式:先发送MSB
(数据长度是1个字节,数据内容是0b00000101=5)

Copyright © Liu Zhiyong