0%

参考

各种电容特性

多层陶瓷电容

多层陶瓷电容(MLCC)不仅尺寸小,而且将低ESR、低ESL和宽工作温度范围特性融于一体,可以说是旁路电容的首选。不过,这类电容也并非完美无缺。根据电介质材料不同,电容值会随着温度、直流偏置和交流信号电压动态变化。另外,电介质材料的压电特性可将振动或机械冲击转换为交流噪声电压。大多数情况下,此类噪声往往以微伏计,但在极端情况下,机械力可以产生毫伏级噪声。

电压控制振荡器(VCO)、锁相环(PLL)、RF功率放大器(PA)和其它模拟电路都对供电轨上的噪声非常敏感。在VCO和PLL中,此类噪声表现为相位噪声;在RF PA中,表现为幅度调制;而在超声、CT扫描以及处理低电平模拟信号的其它应用中,则表现为显示伪像。尽管陶瓷电容存在上述缺陷,但由于尺寸小且成本低,因此几乎在每种电子器件中都会用到。不过,当调节器用在对噪声敏感的应用中时,设计人员必须仔细评估这些副作用。

固态钽电解电容

与陶瓷电容相比,固态钽电容对温度、偏置和振动效应的敏感度相对较低。新兴一种固态钽电容采用导电聚合物电解质,而非常见的二氧化锰电解质,其浪涌电流能力有所提高,而且无需电流限制电阻。此项技术的另一好处是ESR更低。固态钽电容的电容值可以相对于温度和偏置电压保持稳定,因此选择标准仅包括容差、工作温度范围内的降压情况以及最大ESR。

导电聚合物钽电容具有低ESR特性,成本高于陶瓷电容而且体积也略大,但对于不能忍受压电效应噪声的应用而言可能是唯一选择。不过,钽电容的漏电流要远远大于等值陶瓷电容,因此不适合一些低电流应用。

固态聚合物电解质技术的缺点是此类钽电容对无铅焊接过程中的高温更为敏感,因此制造商通常会规定电容在焊接时不得超过三个焊接周期。组装过程中若忽视此项要求,则可能导致长期稳定性问题。

铝电解电容

传统的铝电解电容往往体积较大、ESR和ESL较高、漏电流相对较高且使用寿命有限(以数千小时计)。而OS-CON电容则采用有机半导体电解质和铝箔阴极,以实现较低的ESR。这类电容虽然与固态聚合物钽电容相关,但实际上要比钽电容早10年或更久。由于不存在液态电解质逐渐变干的问题,OS-CON型电容的使用寿命要比传统的铝电解电容长。大多数电容的工作温度上限为105°C,但现在OS-CON型电容可以在最高125°C的温度范围内工作。

虽然OS-CON型电容的性能要优于传统的铝电解电容,但是与陶瓷电容或固态聚合物钽电容相比,往往体积更大且ESR更高。与固态聚合物钽电容一样,这类电容不受压电效应影响,因此适合低噪声应用。

固态电容

固态电容器的全名为固态铝质电解电容器,是目前电容器产品中最高阶的产品,固态电容的介电材料则为功能性导电高分子,能大幅提升产品的稳定度与安全性,它与液态铝质电解电容最大差别,在于所使用的介电材料,过去铝质电解电容所使用的介电材料是电解液,而固态电容则是导电性高分子材料,也因此导致成本相对较高。固态电容特点固态电容具备环保、低阻抗、高低温稳定、耐高纹波及高信赖度等优越特性,是目前电解电容产品中最高阶的产品。由于固态电容特性远优于液态铝电容,固态电容耐温达摄氏260度,且导电性、频率特性及寿命均佳,适用于低电压、高电流的应用。

LDO负载电容

影响LDO稳定工作的外在因素是负载电容容值CL和ESR,以及LDO的输出电流,他们的关系是:

  1. 容值小的CL,ESR往往较大,容值大的CL,ESR往往较小。无论哪种电容,都要保证ESR在合理的范围内,规格书往往会提供这个范围。

  2. 当LDO输出电流是额定电流的20%~50%时,容易发生不稳定状况。

  3. 低温时,CL的ESR会升高,并且容值也会发生变化。选型时要注意!

  4. 在ESR很低,LDO输出电流很小(≤1mA)时,容易发生不稳定状况。

  5. 同一温度下,LDO输出电流越小,保证LDO稳定性的ESR值越高。

  6. 同一输出电流下,温度越高,保证LDO稳定性的ESR越大。

  7. 在低输出电流时,LDO输出波形变成三角波,说明ESR过低;在中等输出电流时,如果LDO波形是正弦波,说明ESR过高。

电容技术 等效串联电阻 等效串联电感 电压稳定性 温度稳定性 振动敏感度 电容值/单位体积
铝电解电容 最高 最高 最低
固态钽电容 中等 中等 最佳
聚合物固态铝电容 最佳
多层陶瓷电容 最低 最低 中等

前言

不会吧,不会吧,我又参加飞卡了?

基础四轮组规则

  • 车模:B车模,车模宽度不超过25厘米,高度不超过20厘米,长度没有限制,如果安装摄像头传感器,摄像头镜片中心的高度距离地面不超过10厘米

  • MCU:指定使用 Infineon系列单片机,允许使用各类电磁、红外光电、摄像头、激光、超声传感器

  • 赛道元素:进出库、三岔路口(进出口120°,路口间直线距离<3m)、环岛(R<0.5m)、坡道(坡度<=20°)、十字路口(需直行)、弯道(曲率半径<0.5m)

电机驱动

IR2184老方案,B车电机比较猛,可能有11.7A,试一下加RDC释放电路来提高刹车性能

210517-飞卡-1.jpg

210517-飞卡-2.jpg

  • [x] 电机驱动加上ina240测电机电流(21.6.11前)

210517-飞卡-7.jpg

210517-飞卡-8.jpg

(21.6.11)程序员通过电机反转来刹车,未加驱动死区时间,导致锂电池保护板保护。

电磁运放

采用逐飞方案,opa4377,单端放大,检波,二极管使用了压降小的肖特基二极管

210517-飞卡-3.jpg

210517-飞卡-4.jpg

tc377主控

考虑到DC-DC负载响应速率不如LDO,继续使用LM1084-ADJ给舵机供6.3v电
210517-飞卡-5.jpg
210517-飞卡-6.jpg

参考

源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#include<iostream>
using namespace std;

template<class T>
class Stack
{
public:
Stack():_pData(new T[1]), _capacity(1), _size(0)
{
cout << "creat stack successful" << endl;
}
~Stack()
{
delete [] _pData;
cout << "delete stack successful" << endl;
}
void Push(const T& t)
{
CheckCapacity();
_pData[_size++] = t;
cout << "push " << t << " successful" << endl;
}
T& Pop()
{
T& t = _pData[_size-1];
_size--;
// cout << "pop return " << t << endl;
return t;
}
size_t Size()const
{
return _size;
}
size_t Capacity()const
{
return _capacity;
}

private:
void CheckCapacity()
{
size_t size = Size();
size_t capacity = Capacity();
size_t newcapacity = 2 * capacity;
if (size >= capacity)
{
_capacity = newcapacity;
T* tmp = new T[newcapacity];
for (size_t i = 0; i<size; i++)
{
tmp[i] = _pData[i];
}
delete[] _pData;
_pData = tmp;
cout << "capacity add to " << newcapacity << endl;
}
}

private:
T* _pData;
size_t _capacity;
size_t _size;
};

int main(void)
{
Stack<char> s;
char strInput[100]="test\0";
int i = 0;
cout << "input:";
if(!cin.getline(strInput,100))
cout << "error, input too long" << endl;
while(strInput[i] != '\0')
{
s.Push(strInput[i]);
i++;
}
i = 0;
cout << "output:";
while(strInput[i] != '\0')
{
cout << s.Pop();
i++;
}
cout << endl;
system("pause");
return 0;
}

运行结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
creat stack successful
input:i love tzy
push i successful
capacity add to 2
push successful
capacity add to 4
push l successful
push o successful
capacity add to 8
push v successful
push e successful
push successful
push t successful
capacity add to 16
push z successful
push y successful
output:yzt evol i

  1. Sublime里运行程序不能输入数据,只能输出数据(卡在cin)
  2. 参考:动态顺序栈的简单实现 中,数组扩容未改变_capacity

环境搭建

  1. 安装Visual Studio Code(下面简称vscode)
  2. 安装python3.7.8(添加环境变量)、Git工具、CMake
  3. vscode安装ESP-IDF Explorer插件,一键安装idf工具(国内速度慢)
  4. 通过这个插件安装esp-idf可能会失败,我当初用手机流量+梯子装的很快

使用idf

Windows开发建议在vscode中使用esp-idf explorer插件

vscode还支持macOS和Linxu,未试过在其他操作系统使用该插件

直接使用esp-idf

  1. %USERPROFILE%\esp\esp-idf目录下examples文件夹内有例程

  2. 每次用idf工具,需要执行%USERPROFILE%\esp\esp-idf目录下的export添加环境变量,我是Windows,需要执行export.ps1,使用export.bat无效,ps1是Windows Power Shell脚本,需要电脑开启运行脚本权限,在管理员模式下Shell输入set-executionpolicy remotesigned开启权限,然后就可以运行export.ps1

  3. 在工程文件夹内使用idf.py menuconfig来配置工程

  4. 使用idf.py build来编译程序(首次编译或更改SDK后的速度慢)

  5. idf.py -p PORT flash monitor来下载程序

使用esp-idf explorer插件

  • 这个工具非常好用,有GUI配SDK,在vscode用插件指令可以编译下载等
  • 参考:ESP-IDF VS Code 插件快速操作指南
  • vscode cmd >ESP-IDF:Show Examples Projects基于例程新建工程

  • 编译,下载,调试,设置sdk等功能点点左下角图标就可以

我的esp项目

需求

通过esp32把红外热像Demo板的温度信号用TCP发到电脑上

ESP和Demo板Uart通信

  • 参考esp例程:uart_events

ESP和电脑TCP通信

  • 参考esp例程:tcp_client

遇到的问题

  1. uart通信波特率设成921600时,接收会hw fifo overflow,esp没有DMA例程,通过降波特率解决
  2. socket通信电脑端接收的时候不断更改recv(new_fd, buff, BUFSIZ, 0)buff指针会程序中断,未查出原因,通过把每次接收到的数据包写入文件解决

室内 双光 配电柜卡片机

需求分析

  1. 80*62 分辨率 预留160*120的空间和接口
  2. 200W 1920*1080 可见光分辨率
  3. 白光 LED 拍照照明
  4. DC6-8.4V外部供电
  5. 低功耗
  6. 6-8pin航插,DC5V,uart 和SWD接口
  7. 无线图传电台:开阔地300米

技术方案

  1. 红外:80*62 的 3.3v spi接口上拉 160*120 fpc的 8Mbps UART ,DC5.0V降压

  2. 可见光:OV2640 200W 24pin 考虑fpga作为DVP-spi接口 fpga时钟

  3. 白光LED: DC3.4V 100-500mA

  4. 无线模块:24L01 2.4-2.52GHZ 250Kbps 500mW 27DB发射功率

  5. 电源:DC6V-8.4V 输入,加单向TVS和PTC保护 1uA低功耗LDO 接MCU ,带有EN使能脚的BUCK输出3.3V/5V

  6. 光敏 光电二极管加lmv321 放大 ADC

  7. 输出接口:SMA 无线 8pin 航插 RST,Vin ,rx/tx , SWD (ESD保护)

  8. MCU:带RTC 32.768

调试阶段进度

硬件

  • [x] 绘制原理图
  • [x] 绘制PCB(调试板)
  • [x] 制板焊接(调试板)
  • [x] 绘制产品的PCB

软件

  • [x] 调试80*60红外模块
  • [x] 调试160*120红外模块
  • [x] 调试FPGA-OV2640部分
  • [x] 调试FPGA-MCU部分
  • [x] 调试24L01模块
  • [x] 调试电源管理部分
  • [ ] 调试其他功能

结构

  • [x] 红外模块板外形
  • [ ] ……

无线集抄器部分

需求分析

  1. 可以支持500个从站
  2. 服务器端配置网络和从站设备
  3. 网口或者CAT1上传服务器
  4. 户外型 安装部署方便
  5. DC12V 持续供电

晶体三极管(BJT)

《模拟电子技术基础》(第五版)P24

场效应管(FET)

结型场效应管(JFET)

《模拟电子技术基础》(第五版)P33

绝缘栅型场效应管(IGFET)

  1. 绝缘栅型场效应管的栅极与源极、漏极之间都采用SiO2绝缘层隔离,栅极为金属铝,又称MOS管
  2. IGFET的G-S间内阻比JFET大得多,可达1010Ω以上
  3. MOS分N沟道和P沟道两类,每一类分增强型耗尽型两种,UGS=0时,Id=0为增强型,Id≠0为耗尽型
  4. NMOS的UGS 越大,反型层越厚,导电沟道电阻越小
  5. 与JFET一样,MOS管有三个工作区:可变电阻区、恒流区、夹断区,当UDS增大到UGS(th)(即UDS=UGS-UGS(th))时,沟道在漏极一侧出现加断点,进入恒流区,UDS增大的部分几乎全部用于克服预夹断区对漏极电流的阻力
  6. UDS>UGS-UGS(th)时,对应每一个UGS就有一个确定的Id,可将Id视为电压UGS控制的电流源

FET符号及特性

210506-bjt和fet-1.jpg210506-bjt和fet-2.jpg

注册流程

  1. 易名官网注册网站账号,实名认证(审核了半天)
  2. 选择好域名加入购物车,支付就可以,我的域名价格为35元一年

相关配置

  1. 注册完域名后进入后台-域名管理-我的域名

  2. DNS使用的是易名DNS(免费版),网上听说易名DNS很烂,以后我再换一个DNS,易名DNS服务器是海外的,国内的DNS服务器需要备案,我的空间和服务器在本地,备案比较麻烦,就没备案

  3. 易名云解析中解析记录的一些配置如下

    • 主机记录就是域名前缀,常见用法有:

      www:解析后的域名为 www.ihcode.cn

      @:直接解析主域名ihcode.cn

      :泛解析,匹配其他所有域名 .ihcode.cn

    • 要指向空间商提供的 IP 地址,选择「类型 A」,要指向一个域名,选择「类型 CNAME」

    • 各类型的记录值一般是这样的:

      A记录:填写您服务器 IP,如果您不知道,请咨询您的空间商

      CNAME记录:填写空间商给您提供的域名

    • TTL(Time To Live),缓存的生存时间。指地方dns缓存您域名记录信息的时间,缓存失效后会再次到获取记录值。

      600(10分钟):建议正常情况下使用600。

      60(1分钟):如果您经常修改IP,修改记录一分钟即可生效。长期使用60,解析速度会略受影响。

      3600(1小时):如果您IP极少变动(一年几次),建议选择3600,解析速度快。

  4. 易名云解析中URL转发的一些配置如下

    • 域名,可以是 *.ihcode.cn 或者 www.ihcode.cn

    • 类型:显性或隐性

      设置显性URL转发后,当用户访问域名会自动转向访问指定值,址栏显示指定值

      设置隐性URL转发后,当用户访问域名会自动转向访问指定值,址栏仍旧显示之前域名

    • 转发值:就是要跳转的域名链接http://,可以带端口号

问题与解决

  1. 解析记录的记录值只能是IP地址或者是指向的该IP的DDNS域名,不能加端口号

    使用url转发可以带端口号,但是隐性类型转发后无法获取网页logo和名称,UI不正确等问题,使用显性类型转发可以

  2. 修改完解析记录后需要至少10分钟才能正常使用

    清空DNS缓存即可,Windows管理员CMD输入ipconfig /flushdns

  3. Hexo 4000端口微信访问的时候会报非标准端口警告

    考虑以后使用树莓派开一个web服务器,使用80端口映射到公网IP

OV2640硬件

原理图

参考:OV2640硬件开发手册

设计:Hao

210503-ov2640-1.jpg

PCB

layout:小张

OV2640软件

软件需求

  • jpeg读取,24l01发送
  • 光线暗打开闪光(未完成),通过读取曝光时间来判断光线强弱,决定是否打开闪光灯

程序开发

  • 参考:正点原子ov2640实验视频、OV2640数据手册、OV2640软件开发手册

  • 接口:SCCB(类I2C)、DCMI(8bit并口)

  • 传感器、传感器窗口、图像尺寸、图像窗口之间的关系如下图:210503-ov2640-3.jpg
  • 程序开发按照正点原子给的库很容易进行,但部分功能库里没有需要查阅软件开发手册和数据手册,对寄存器进行读写。

总结

  • DOVDD是IO的电平,给了3.3V,因为和它通讯的单片机使用的电压也是3.3V,如果这里用2.8V可以也是可以,会产生电流倒灌,增加了产品不稳定的因素

  • ov2640模组在上电的时候比较烫手,温度有55℃上下,不使用的时候将PWDN拉高,停止给电

  • 为了节约成本,24Mhz时钟可以由单片机输出,代替有源晶振

  • 如果单片机没有DCMI接口,软件模拟速度跟不上,需要使用带FIFO的摄像头(ov7550),才可以由软件模拟读取并口数据,模拟的还没有尝试过,可以参考原子哥M3例程,F103使用0V7550

  • 由于大多数低成本国产单片机不带DCMI接口,可以由高云FPGA驱动ov2640,通过SPI发送给单片机,这是本人五一节后要做的事情

AT32(SPI)

  • 暂时没有用DMA搬运,SPI3用于读取MI0801模组数据,SPI2用于驱LCD

SPI配置参数

  • SPI配置需要注意的参数:极性CPOL和相位CPHA,详解SPI中的极性CPOL和相位CPHA

  • 如何判断CPOL:SCLK的空闲时候的电压,是0还是1,决定了CPOL是0还是1

  • 如何判断CPHA:数据采样时刻对应着的SCLK的电平,是第一个边沿还是第二个边沿,对应着CPHA为0还是1

    210430-at32-1.jpg

驱动LCD问题

  • LCD用到了SPI和另外几个IO,写入命令过程中,要将DC拉低,0X2A、0X2B、0X2C是命令,但是DC拉低没有对上,通过程序加delay解决,当SPI速率上升后,可以不用delay就能使用LCD
1
2
3
4
5
6
7
8
9
10
void LCD_WR_REG(uint8_t dat)
{
// Delay_us(5);
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TE) == RESET);
LCD_DC_Clr();//写命令
LCD_Writ_Bus(dat);
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TE) == RESET);
// Delay_us(5);
LCD_DC_Set();//写数据
}
  • AT32在读写SPI前要等待上一次读写操作完成,否则会出现发送数据缺少,接收卡死

SPI NSS上拉问题

  • at32单片机无法配置输出上拉或者下拉,SPI一开始调试的时候需要接着逻辑分析仪才可以,不接spi就接收不到数据,通过外加2k上拉电阻解决

AT32(SRAM)

配置使用224KB SRAM

  • 要打开224KB SRAM《AT32F403A & AT32F407入门使用指南》给了四种方法

    1.2.3 AT32F403A_407零等待/非零等待Flash和内置SRAM大小选择配置大小选择配置说明

    • 使用 ICP/ISP 方式
    • 使用脱机烧录器方式
    • 客户也可以使用在 Bootloader program(IAP)内修改 SRAM 的大小,并调用它
    • 启动文件中修改 AT32F403A_407 SRAM 为 224KB
  • 我用的是第三种方法,直接下一遍SRAM例程就开启了224KB SRAM

KEIL编译优化

  • Keil编译优化等级从0提升到3,使图像帧率从2.5fps提升到了3.5fps

不同编译优化等级区别

  • Level0:近乎不优化,用于调试代码。出现代码行不能设置断点可如此设置试试

  • Level1:部分优化。移除未调用的内联函数和静态函数,关闭debug窗口优化,此状态也能用于调试

  • Level2:默认优化等级。如果处于debug状态,部分代码行将不能被调试,具体做了什么优化好像没说

  • Level3:可能更牛的优化等级。会增加编译时间,可能会快,可能生成的文件大小会小,可能会暴毙

  • 相关文档:KEIL编译器【C语言编译选项优化等级说明】

实物

实物展示图

210430-at32-2.jpg

四种图像显示模式

210430-at32-3.jpg

红外显示示范

210430-at32-4.jpg

如何用Hexo搭建博客?

视频教程

文档教程

遇到的问题

md插入图片网页上不显示

参考:hexo引用本地图片无法显示hexo使用markdown图片无法显示问题

  1. 安装 hexo-asset-image插件
  2. 修改插件 _config.yml内容
  3. 图片放在 /source/_posts/xxx文件夹内,xxx与xxx.md同名
  4. 使用![xxx](xxx/xxx.png)直接插入图片(注意不能有差别,多个”/“都不行)

Markdown上下标

参考:在markdown中如何加入上标、下标?

  • SiO2写法为:SiO<sub>2</sub>
  • 210Ω写法为:2<sup>10</sup>Ω

Hexo Github部署

  1. 安装hexo-deployer-git插件 ‘cnpm install —save hexo-deployer-git’
  2. git添加SSHKey
  3. blog文件夹中_config.yml配置hexo-deployer-git插件
    type: git
    repo: git@github.com:hao0527/hao0527.github.io.git
    branch: main
  4. hexo g 编译
    hexo d 发布到Github
  5. 每次发布会GithubPages的Custom domain都会被删除,在本地source文件夹中添加CNAME文件,内容写自定义域名就行

Hexo 增加搜索功能

参考:Hexo博客添加搜索功能

参考:npm WARN config global —global, —local are deprecated. Use —location 的解决方法