0%

环境搭建

  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

调试阶段进度

硬件

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

软件

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

结构

  • 红外模块板外形
  • ……

无线集抄器部分

需求分析

  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 的解决方法