0%

学习视频

SDRAM介绍

  • 同步动态随机存取内存(synchronous dynamic random-access memory,简称SDRAM)是有一个同步接口动态随机存取内存DRAM)。通常DRAM是有一个异步接口的,这样它可以随时响应控制输入的变化。而SDRAM有一个同步接口,在响应控制输入前会等待一个时钟信号,这样就能和计算机的系统总线同步。时钟被用来驱动一个有限状态机,对进入的指令进行管线(Pipeline)操作。这使得SDRAM与没有同步接口的异步DRAM(asynchronous DRAM)相比,可以有一个更复杂的操作模式。

  • SDRAM从发展到现在已经经历了五代,分别是:第一代SDR SDRAM,第二代DDR SDRAM,第三代DDR2 SDRAM,第四代DDR3 SDRAM,第五代,DDR4 SDRAM。

SDRAM操作时序

  • 在对 SDRAM进行读写操作之前需要先对芯片进行初始化;SDRAM读写是一个较为复杂的控制流 程,其中包括行激活、列读写、预充电、刷新等一系列操作。

初始化

  • 初始化流程如下
    211219-fpga之sdram-1.jpg
    SDRAM上电后要有200us的输入稳定期,在这个时间内不可以对SDRAM的接口做任何操作; 200us结束以后给所有L-Bank预充电,然后是连续8次刷新操作;最后设置模式寄存器。初始化 最关键的阶段就在于模式寄存器(MR,Mode Register)的设置,简称MRS(MR Set)。

  • 模式寄存器如下
    211219-fpga之sdram-2.jpg
    如上图所示,用于配置模式寄存器的参数由地址线提供,地址线不同的位分别用于表示不 同的参数。SDRAM通过配置模式寄存器来确定芯片的工作方式,包括突发长度(Burst Length)、 潜伏期(CAS Latency)以及操作模式等。
    需要注意的是,在模式寄存器设置指令发出之后,需要等待一段时间才能够向SDRAM发送 新的指令,这个时间我们称之为模式寄存器设置周期tRSC(Register Set Cycle)。

行激活

  • 行激活时序图
    211219-fpga之sdram-3.jpg
    初始化完成后,无论是读操作还是写操作,都要先激活(Active)SDRAM中的一行,使之 处于活动状态(又称行有效)。在此之前还要进行SDRAM芯片的片选和L-Bank的定址,不过它 们与行激活可以同时进行。
    在片选CS#(#表示低电平有效)、L-Bank定址的同时,RAS(Row Address Strobe,行地址选通脉冲)也处于有效状态。此时An地址线则发送具体的行地址。如图中是A0-A11,共有12个地址线,由于是二进制表示法,所以共有4096个行(2^12=4096),A0-A11的不同数值就确定了具体的行地址。由于行激活的同时也是相应L-Bank有效,所以行激活也可称为L-Bank有效。

列读写

  • 列选通与读操作时序图
    211219-fpga之sdram-4.jpg
    由于在SDRAM中,地址线是行列共用的,因此列寻址时地址线仍然是A0-A11。在寻址时,利用RAS(Row Address Strobe,行地址选通脉冲)与CAS(Column Address Strobe,列地址选通脉冲)来区分行寻址与列寻址。
  • 在发送列读写命令时必须要与行激活命令有一个时间间隔,这个间隔被定义为tRCD, 即RAS to CAS Delay(RAS至CAS延迟)。这是因为在行激活命令发出之后,芯片存储阵列电子 元件响应需要一定的时间。tRCD是SDRAM的一个重要时序参数,广义的tRCD以时钟周期(tCK, Clock Time)数为单位,比如tRCD=3,就代表RAS至CAS延迟为三个时钟周期,如图 33.1.8所 示。具体到确切的时间,则要根据时钟频率而定。

数据输出(读)

  • 在选定列地址后,就已经确定了具体的存储单元,剩下的事情就是数据通过数据I/O通道(DQ)输出到内存总线上了。但是在CAS发出之后,仍要经过一定的时间才能有数据输出,从CAS与读取命令发出到第一笔数据输出的这段时间,被定义为CL(CAS Latency,CAS潜伏期)。CL时间越短,读数据时SDRAM响应就越快。由于CL只在读取时出现,所以CL又被称为读取潜伏期(RL,Read Latency)。CL的单位与tRCD一样,为时钟周期数,具体耗时由时钟频率决定。

数据输出(写)

  • 数据写入时序图
    211219-fpga之sdram-5.jpg
    数据写入的操作也是在tRCD之后进行,但此时没有了CL(记住,CL只出现在读取操作中), 行寻址与列寻址的时序图和上文一样,只是在列寻址时,WE#为有效状态。
    数据与写指令同时发送。不过,数据并不是即时地写入存储单元,数据的 真正写入需要一定的周期。为了保证数据的可靠写入,都会留出足够的写入/校正时间(tWR, Write Recovery Time),这个操作也被称作写回(Write Back)。tWR至少占用一个时钟周期 或再多一点(时钟频率越高,tWR占用周期越多)。

此外

  • 除上述操作之外,还有突发长度、预充电、刷新、数据掩码常用操作,具体可以查阅《开拓者FPGA开发指南》SDRAM读写测试实验。

实验仿真

211219-fpga之sdram-6.jpg
211219-fpga之sdram-7.jpg
211219-fpga之sdram-8.jpg
211219-fpga之sdram-9.jpg

学习资料

需求

  • 在博世实习,同事想要远程调试,打印log到终端功能(代替出差去现场调试),于是我就决定用LTE Cat.1模块,配合阿里云物联网平台,使用MQTT传输日志文件。

阿里云物联网平台使用

  1. 打开阿里云物联网平台,使用公共实例,创建产品,数据格式选择(透传/自定义),以便将上行的自定义格式的数据转换为Alink JSON格式,连网方式这里选择蜂窝(2G/3G/4G/5G),所属品类选择自定义品类,其它配置默认即可。配置完在产品详情界面图如下:211217-ltecat1-1.jpg

  2. 创建设备,创建设备成功后,将自动弹出添加完成对话框。您可以查看、复制设备证书信息。设备证书由设备的ProductKey、DeviceName和DeviceSecret组成,是设备与物联网平台进行通信的重要身份认证,建议您妥善保管。配置完在设备详情界面图如下:211217-ltecat1-2.jpg

  3. 接下来就是在产品详情界面中的功能定义,可以查看物模型概述,设置MQTT需要上传的变量。我设置了一些调试时用到的变量,如下图:211217-ltecat1-3.jpg

  4. 在产品详情界面中的数据解析可以设置物模型数据解析,通过物模型数据解析我们可以将自定义帧结构的数据解析成Alink JSON格式,注意:产品的数据格式选择为透传/自定义(这个坑我一天,最后找阿里云客服解决)。写完数据解析后,选择模拟类型为设备上报数据,执行与提交。

  5. 接下来就是mcu使用LTE Cat.1模块给阿里云平台发数据了!在设备详情的物模型数据中可以看见,通过物模型数据上报的topic发送来的调试变量。我们也可以通过设备详情中的日志服务看见,阿里云上的数据收发记录和解析记录。

  6. 阿里云平台上还有很多其他功能,比如说把平台收到的数据再MQTT发给自己服务器做个数据处理与显示等,本次我没有用到,可以查看阿里云物联网平台-产品文档了解更多功能。

LTE Cat.1模块介绍

  1. Luat Air724UG LTE Cat.1 模块,淘宝链接:Air724UG DTU透传4G模块Cat.1全网通TTL转LTE FS704UM阿里云MQTT

  2. 模块是串口输入,走4G网发送数据。模块可以一键配置阿里云MQTT服务,然后就能实现透传的功能。MCU也可以使用AT指令控制模块,可以有更丰富的操作。

  3. 连接阿里云流程可以看模块资料《Air724UG_软件设计手册V1.5》,连阿里云首先HTTP获取MQTT密码,然后连接MQTT,阿里云物联网会比较安全。

安装运行clash

  1. clash发布网站下载对应的版本,我下载的是clash-linux-amd64-v1.7.1.gz

  2. 将压缩包里的文件解压至**/opt/clash**,改名为clash,下载订阅链接文件到同个目录

    1
    sudo wget -O config.yaml [订阅链接]
  3. Country.mmdb为全球IP库,可以实现各个国家的IP信息解析和地理定位,没有这个文件clash是无法运行的

    1
    sudo wget -O Country.mmdb https://www.sub-speeder.com/client-download/Country.mmdb
  4. 把clash权限改为可执行应用

    1
    chmod +x clash
  5. 执行clash,

    1
    ./clash -d .

修改系统代理

  1. 我使用的是ubuntu18.4,在设置里面修改。打开系统设置,点击网络代理右边的 ⚙ 按钮,选择手动,填写 HTTP 和 HTTPS 代理为 127.0.0.1:7890,填写 Socks 主机为 127.0.0.1:7891,即可启用系统代理

配置clash

  1. 在运行了clash后可以打开clash配置页面进行配置,基本上就和windows中的clash图形化差不多了

设置为开机启动

  1. 创建service文件

    1
    touch /etc/systemd/system/clash.service
  2. 编辑service文件,填入以下内容(注意修改clash文件夹路径)

    [Unit]
    Description=clash daemon

    [Service]
    Type=simple
    User=root
    ExecStart=/opt/clash/clash -d /opt/clash/
    Restart=on-failure

    [Install]
    WantedBy=multi-user.target

  3. 重新加载systemctl daemon,systemctl daemon-reload

  4. 启动Clash,systemctl start clash.service

  5. 设置Clash开机自启动,systemctl enable clash.service

  6. systemctl的其他命令参考linux中systemctl详细理解及常用命令

配置定时更新订阅

  1. 可以设置个定时执行的任务,去下载新的配置文件,并重启clash服务

电机位置反馈

霍尔传感器

  • 马达轴上连有磁体,传感器为三个间隔60°的开关霍尔,霍尔会按照【001 - 101 - 100 - 110 - 010 - 011】六个状态变换,根据三相霍尔信号可以检测出电机转子位置所处的扇区,然后控制MOS或IGBT实现六步换向控制。
  • 三路霍尔信号图
    210924-电机控制部分-1.JPG
  • 120°霍尔换相真值表
    210924-电机控制部分-2.JPG

无霍尔传感器

  • 传感器很有用,但会增加成本,增加复杂性(由于需要附加绕组),并降低了可靠性(部分原因是传感器连接更容易受到灰尘和潮湿环境的污染),无传感器控制方式解决了这些不足。
  • 无传感器利用电机反电动势确定转子角度,下图为三相反电动势波形和霍尔波形比较图
    210924-电机控制部分-3.JPG
    可见,传统BLDC电机中单个霍尔传感器变化输出,与无传感器电机中单个线圈的反电动势零交叉点之间有一个30度的相位差。因此,在检测到零交叉点之后,我们会在无传感器电机电路的固件中内置一个30度相位延迟,然后再激活激励序列中的下一个动作。

检测反电动势方法

  1. 最简单的方法就是用比较器将反电动势与一半的直流总线电压比较
    210924-电机控制部分-4.JPG
    在此图中,线圈A正向激励,线圈C反向激励,而线圈B则开路。当实现此相位的激励序列时,反电动势就会上升和下降。这一简单比较器方法主要缺点就是三个绕组可能没有相同的特征,造成实际零交叉点的正负相移。电机仍可能在运转,但可能消耗过多电流。
  2. 上面问题解决方法就是通过使用与电机绕组并接的三个电阻网络来产生一个虚拟中性点,反电动势然后就会与虚拟中性点进行比较。
    210924-电机控制部分-5.JPG
  3. 第三种方法是采用模数转换器 (ADC)。为BLDC电机控制提供的许多MCU包括适合作此用途的高速ADC。采用这种方法后,反电动势就会衰减,以便可以直接馈送给MCU。信号被ADC采样后就会同与零点对应的数字值比较。当这两个值匹配时,线圈激励序列就会变址到下一步。这种技术具有一定优势,如允许使用数字滤波器来清除反电动势信号中的高频切换成份。
    210924-电机控制部分-6.JPG

无感缺点

无传感器BLDC电机控制有一大不足,就是当电机静止时,不会产生反电动势,这样MCU就无法知道定子和转子位置信息。  
解决方法就是通过以预定序列激励线圈来启动处于开环配置的电机。当电机看似运转效率不高时,就会开始循环该序列。最终,速度将足以产生足够的反电动势,供控制系统切换到正常闭环运行状态(有效状态)。  
由于反电机势与旋转速度成正比,因此在需要较低速度的应用中,无传感器BLDC电机可能不是一个好的选择。此时带有霍尔效应传感器的BLDC电机可能是更好的选择。  

示波器测霍尔角

210924-电机控制部分-7.JPG

FOC

【自制FOC驱动器】深入浅出讲解FOC算法与SVPWM技术

MCU外围电路设计

复位电路二极管

复位电路为什么要加二极管,断电后瞬间放掉电容的电荷,复位,使断电瞬间RC充分放电。

逆变

单相逆变

  1. 需要4个NMOS或者IGBT控制
  2. 正弦脉宽调制SPWM,在输出加电感电容滤波,电感电容值需要足够大(6mH 20uF)
  3. 在mos桥驱动中,用PNP三极管挂在MOS的GS上,作用是用三极管形成放电回路,否则GS电容的电过二极管往驱动芯片内部下管释放
    210917-驱动部分设计-1.JPG
  4. 在PCB布线时要注意让MOS开关部分的高频回流面积最小;功率地需要单点接地,高频开关环流路径不要铺地,以减小地干扰
    210917-驱动部分设计-2.JPG
  5. 反馈到单片机的信号需要隔离(电流电压互感器),低通或带通滤波
  6. 先直流升压再逆变的效率比先逆变再工频变压器升压的效率高很多

三相逆变

  1. 需要6个NMOS或者IGBT控制
  2. 负载有星形负载和三角形负载
    210917-驱动部分设计-3.JPG
  3. 三相桥式逆变器可控器件导通顺序
    210917-驱动部分设计-4.JPG

驱动系统

高铁

  1. 接触网上传输高压交流电(25kV),通过变压器降压和四象限整流器转换成直流电,在经过逆变器降至六点转换成可调压调频的交流电,输入三相异步、同步牵引电动机,通过传动系统带动车轮运行
  2. 牵引变电所输入220kV三相交流电,通过三相变压器,低侧输出25kV三相交流电,一相往前方接触网,一相往后方接触网,另一项接铁轨
  3. 高铁趋势:整流 -> 图腾柱PFC(无桥PFC);IPM(IGBT) -> SIC mostet(6个IGBT封装在一起);三相异步电动机 -> 永磁同步电动机(省电30%)
  4. MOS管、IGBT、BJT的区别

PFC功率因数校正

什么是PFC

PFC的英文全称为”Power Factor Correction” ,意思是“功率因数校正”,功率因数指的是有效功率与总耗电量(视在功率)之间的关系,也就是有效功率除以总耗电量(视在功率)的比值。基本上功率因数可以衡量电力被有效利用的程度,当功率因数值越大,代表其电力利用率越高。功率因数是用来衡量用电设备用电效率的参数,低功率因数代表低电力效能。为了提高用电设备功率因数的技术就称为功率因数校正。(大于70瓦就必须使用功率因数校正PFC)

被动式PFC

被动式PFC一般分“电感补偿式”和“填谷电路式(Valley Fill Circuit)”
“电感补偿式”是使交流输入的基波电流与电压之间相位差减小来提高功率因数,“电感补偿式”包括静音式和非静音式。“电感补偿式”的功率因数只能达到0.7~0.8,它一般在高压滤波电容附近。
“填谷电路式”属于一种新型无源功率因数校正电路,其特点是利用整流桥后面的填谷电路来大幅度增加整流管的导通角,通过填平谷点,使输入电流从尖峰脉冲变为接近于正弦波的波形,将功率因数提高到0.9左右,显著降低总谐波失真。与传统的电感式无源功率因数校正电路相比,其优点是电路简单,功率因数补偿效果显著,并且在输入电路中不需要使用体积大重量沉的大电感器。

主动式PFC

主动式PFC则由电感电容及电子元器件组成,体积小、通过专用IC去调整电流的波形,对电流电压间的相位差进行补偿。主动式PFC可以达到较高的功率因数──通常可达98%以上,但成本也相对较高。此外,主动式PFC还可用作辅助电源,因此在使用主动式PFC电路中,往往不需要待机变压器,而且主动式PFC输出直流电压的纹波很小,这种电源不必采用很大容量的滤波电容。

Boost PFC变换器

210917-驱动部分设计-5.JPG

PFC参考

  1. 一文搞懂PFC(功率因数校正)
  2. 电赛必备之PFC电路,2006年B题功率因数监测与补偿系统

电源部分

AC/DC

210913-电源部分设计-1.JPG

  1. 共模干扰和差模干扰
  2. 共模电感上流过共模电流时磁环中的磁通相互叠加,从而具有相当大的电感量,对共模电流起到抑制作用
  3. X电容滤除差模干扰,利用其在高频时低阻抗的特性,短路掉差模干扰
  4. 压敏电阻是一种限压型保护器件,利用压敏电阻的非线性特性,当过电压出现在压敏电阻的两极间,压敏电阻可以将电压钳位到一个相对固定的电压值,从而实现对后级电路的保护
  5. 聚丙烯膜电容(CBB电容 MKP电容)做直流母线电容效果更好

Buck

210913-电源部分设计-2.JPG

  1. AC-DC芯片采用MP174,SOURCE引脚是VCC和FB引脚的参考地
  2. VCC供电电压是哪里来的?根据DataSheet,当Vout<7V的时候,芯片空载功率较小,内部供电足够,当Vout>7V时,需要添加外部辅助电源
    210913-电源部分设计-6.JPG
  3. 电源大师6——BUCK 降压电路降低EMI与EMC设计,开关电源PCB layout宝典
  4. 小信号地连一起(FB分压电阻,comp,ss)然后再与PGND单点相连,或者通过过孔连到背面
  5. 电感两个引脚间距京可能大,非一体成型电感底部不铺铜,让敏感电路(FB)和回路远离电感

LDO

210913-电源部分设计-3.JPG

  1. LDO输入串阻,限流作用
  2. LDO输出加TVS保护

采样部分

电压采样

210913-电源部分设计-4.JPG

  1. 整流桥前和后的采样区别:整流桥前电压更稳定,一般采样用来测各种功率参数;整流桥后面的电压不稳定,会受到马达反冲等影响,整流桥后电压采样应用于过压和欠压保护

电流采样与过压保护

210913-电源部分设计-5.JPG

  1. 差分放大,迟滞比较器,电平反转,三极管自锁
  2. 在差分运放中电容并电阻微分作用,电容串电阻积分作用
  3. 对于电子电路:电阻的两端并联一个电容,为了减小对高频信号的阻抗,相当于微分,这样信号上升速度加快,用于提高响应速度;电容一端接电阻,一端接地,则相反,滤去高频,相当于积分,用于滤波。最典型的应用就是放大电路中的高低音频控制。
    对于电力电路:不管RC串联还是并联,电容的作用都是一样的,电容的作用就是防止电压突变,吸收尖峰状态的过电压,串联的电阻起阻尼作用,电阻消耗过电压的能量,从而抑制电路的振荡。并联的电阻吸收电容的电能,防止电容的放电电流过大,避免对与之并联的器件(如晶闸管)造成损坏。最典型的应用就是防止操作过电压。

程序框架和环境

  • esp32的程序是通过esp-idf框架开发
  • esp32做Server,电脑做Client,手机热点AP
  • esp32使用外置天线更加稳定,但速率没有明显提升

TCP-Server

  • 编译优化-O2,速率可从最高500KB/s提升到800KB/s
  • TCP传输错误会重传,有问题的时候速率会下降到100KB/s以下
  • 应用在640*320分辨率的25帧JPEG图传不稳定

UDP-Server

  • 速度可以达到1MB/s~2MB/s

  • UDP是个不稳定的传输,会有传输错误

  • 不适合应用在JPEG图传

说明

210831-esp32传输测试-1.jpg

  • 由于本人技术原因,无法达到官方测试的速率,大家使用需要亲自测试后才能做结论,可以参考iperf例程后再进行测试

  • 参考:ESP-IDF编程指南

遇到问题

今天用STM32CubeMX生成了代码,使用printf函数后单片机程序运行异常,查出是STM32CubeMX生成的代码没有printf的重定向,百度查了两个方法后两个都行不通,最后参考正点原子例程解决。

参考

  • 错误参考:一知半解学CubeMX——UART:Printf实现

  • 正确参考:正点原子例程SYSTEM文件夹下的usart.c

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    //加入以下代码,支持printf函数,而不需要选择use MicroLIB
    #if 1
    #pragma import(__use_no_semihosting)
    //标准库需要的支持函数
    struct __FILE
    {
    int handle;
    };

    FILE __stdout;
    //定义_sys_exit()以避免使用半主机模式
    void _sys_exit(int x)
    {
    x = x;
    }
    //重定义fputc函数
    int fputc(int ch, FILE *f)
    {
    while((USART1->SR&0X40)==0);//循环发送,直到发送完毕
    USART1->DR = (u8) ch;
    return ch;
    }
    #endif

注意事项

  1. 要注意重定向的函数名是int __io_putchar(int ch)还是int fputc(int ch, FILE *f)
1
2
3
4
5
6
#ifdef __GNUC__
/* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf set to 'Yes') calls __io_putchar() */
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */
  1. CubeMX生成的代码没有勾选Use MicroLib,可能需要勾选,可以看Keil中的USE MicroLib说明,MicroLib不支持操作系统函数。

  2. Unix系统里,每行结尾只有“<换行>”,即”\n”;

    Windows系统里面,每行结尾是“<回车><换行>”,即“\r\n”;

    Mac系统里,每行结尾是“<回车>”,即”\r”;

    参考:\r,\n,\r\n的区别:回车与换行

书籍介绍

作者: [美] Eric Bogatin
出版社: 电子工业出版社
原作名: Signal and Power Integrity:Simplified, Third Edition
译者: 李玉山 / 刘洋 / 初秀琴 / 路建民

第一版前言

“一切都应该尽可能简单,而不只是简单一点。” ——阿尔伯特·爱因斯坦

信号完整性问题的10个基本原则

  1. 提高高速产品设计的关键是:充分利用分析工具实现准确的性能预估,使用测量手段验证设计过程,降低风险并提高所采用设计工具的可信度。

  2. 将问题的实质与表面现象剥离开的唯一可行途径是:采用经验法则,解析近似,数值仿真工具或测量工具获得数据,这是工程实践的本质要素。

  3. 任何一段互联,无论线长和形状,也无论信号的上升边如何,都是一个由信号路径和返回路径构成的传输线。一个信号在沿着互联前进的每一步,都会感受到一个瞬时阻抗。如果阻抗恒定为常数,比如具有均匀横截面传输线的情况,那么其信号质量将会获得奇迹般的改善。

  4. 把“接地”这个术语忘掉,由于它所造成的问题比用它解决问题还要多。每一路都有返回路径。抓住“返回路径”,像对待信号路径一样去寻找并处理返回路径,这样有助于培养解决问题的直觉能力。

  5. 当电压变化时,电容器上就有电流流动。对于快速变化的前沿,即使印制电路板边沿和悬空导线之间的空气间隙形成的边缘线电容,都有可能拥有较低的阻抗。

  6. 电感与阻扰电流周围的磁力线匝数有本质的联系。只要电流与磁力线的匝数发生改变,在导线的两端就会产生电压。这一电压是导致反射噪声,串扰,开关噪声,地弹,轨道塌陷及电磁干扰的根源之一。

  7. 当流经地回路电感上的电流发生变化时,在接地回路导线上产生的电压称为是地弹。它是造成开关噪声和电磁干扰的内在机理。

  8. 以同频率的方法作为参照,信号带宽是指的有效正弦波分量的最高频率值。互联模型的带宽是指在这个最高的正弦频率上,模型仍然准确的预估互联的实际性能。在使用模型进行分析时,一定不要让信号的带宽超过模型的带宽。

  9. 除了少数情况之外,信号完整性公式中给出的是定义或者近似。在特别需要准确的场合就不使用近似。

  10. 有损传输线引起的问题是上升边退化。由于集肤深度和介质损耗,损耗随着频率的升高而增加。如果损耗随着频率的升高而保持不变,上升边就不会发生变化,这时的有损线只是增添了一些不便而已。

100条使信号完整性问题最小化的通用设计规则

100条估计信号完整性效应的经验法则

实验环境

实现功能

  • 实时频率测量
  • 测量范围1Hz-50Mhz
  • 测量误差0.0005%@20MHz
  • uart串口打印

不足思考

  • 可以使用PLL提高sys_clk,使测量范围增到100MHz
  • 程序逻辑复杂,还需简化
  • 自适应闸门时间,在高频的时候提高实时测量的频率,低频的时候又可以准确测量,可使测量范围下限更小

Github发布