单片机

本解决方案使您能够用所有RX家族单片机实现对SPI连接TFT LCD模块的控制。用更少的硬件资源实现更复杂的HMI。

Motoki Ushigome(Sr Staff Product Marketing Specialist

以往提到家电,其操作面板通常是由段式LCD、LED和物理按键组成,但近年来,有越来越多注重设计性的高端机型采用了TFT LCD和电容式触控按键。

为了满足家电和工业设备对TFT LCD显示的需求,瑞萨一直在开发基于图形LCD控制器和2D绘图引擎的RX家族单片机,并长年提供无需外设LCD显示用IC的单芯片解决方案。为了在广泛应用中更轻松采用TFT LCD模块,我们本次发布了适用于所有RX家族单片机的基于SPI的GUI解决方案。

1.png

下面将介绍基于SPI的GUI解决方案的优点。

仅需4个端子即可实现TFT LCD显示

要通过SPI实现显示控制,只需使用时钟输出、数据输出/输入和芯片片选4个端子。TFT LCD模块在插针数量较少的封装中也能得到控制,因此在元件封装面积有限的应用中也可顺利应用。

2.jpg

合作伙伴GUI库,可免费使用到批量生产

从开发到批量生产,所有RX家族单片机用户均可免费使用Segger公司的GUI库“emWin for RX”。emWin已针对嵌入式应用进行了优化,即使是LCD显示用CPU和内存资源较少的RX100系列,也能轻松运行。

提供可快速体验QVGA LCD显示的示例程序

我们准备的示例程序使用了RX家族单片机评测板(RX140、RX671)和商用QVGA LCD模块。您可以同时体验微波炉LCD显示和基于电容式触控传感器的应用操作。

此外,我们还提供了一个PoC,让您可以体验本解决方案在实际场景中的应用。与上面的示例程序类似,可以在QVGA LCD模块上显示微波炉操作界面。电容式触控按钮和滑块由透明电极构成,在LED背光的照射下,可从黑色外壳浮现出白色。另外由于外壳正面完全扁平,给人一种时髦的HMI设计感。结合在Web上发布的电路板原理图、透明电极和外壳设计信息,客户可以在开发产品时进行参考。如您打算使用本PoC,请与您瑞萨销售/代理商联系。

3.jpg

基于SPI的GUI解决方案的PoC(非卖品)

利用RX家族的基于SPI的GUI解决方案,您可以用更少的硬件资源实现高级HMI创新,因此强烈建议您在下一代产品开发中使用。

来源:瑞萨电子

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 13

瑞萨RX家族中的RX-T系列主要应用于空调设备外机和工业逆变器,同时还具有适合于AC-DC转换器等电源控制的功能,并在UPS、功率转换器、EV充电器等电源控制场景中得到了广泛应用。

本期介绍的图腾柱交错式PFC是一种可实现AC-DC转换器必要功能的电路,可在各类电子设备将交流电源转换为直流电源,与基于普通二极管整流桥的整流电路+斩波电路PFC电路相比,图腾柱交错式PFC是一种效率更高的电路方式(通常,可降低40%左右的二极管整流桥整流电路损耗)。

虽然可以通过专用产品进行控制,但RX家族RX-T系列中的PWM定时器和模拟电路等,如下文中被称为“可控制图腾柱交错式PFC的RX-T系列内置功能”,可通过单个MCU进行控制。本功能非常适用于实现逆变器控制的功能,以及实现AC-DC转换器控制的功能。与专用IC相比,基于MCU的电源控制具有许多优点,包括通过软件控制的精准保护、控制的灵活性,还具有通过SCI等设备与其他IC协作等,使其具有较高的系统控制融合性的特点。

需要说明的是,本文介绍的用于控制图腾柱交错式PFC的MCU属于RX家族RX-T系列RX66T组产品,但也可以通过搭载以下功能(RX家族通用功能)的RX26T等产品来实现。

可控制图腾柱交错式PFC的RX-T系列内置功能

1、PWM输出计时器(MTU3,GPT)

2、12位A/D转换器(S12AD)

3、端口输出使能(用于PWM输出紧急停止)(POE3)

4、比较器(用于过流检测)(CMPC)

5、12位D/A转换器(用于比较器标准电压)(R12DA)

这些功能实现了如下图腾柱交错式PFC控制。

图腾柱交错式PFC配置

PWM输出定时器通过互补PWM对开关元件的Q1/Q2、Q3/Q4和Q5/Q6进行控制,12位A/D转换器用于反馈控制的电流/电压检测。作为故障控制的过电流控制配置为使用。

1.png

如下所示,电源效率最高可达95%以上,功率因数可达99%以上,性能与专用产品相当。此外,虽然功率半导体使用常用IGBT+二极管构成Q1至Q6,但如果使用高速开关SiC等元件,有希望进一步提高效率。

有NTC热敏电阻:

2.png

无NTC热敏电阻:

3.png

此外,如下响应测试结果表明(通过直流断路器实现负载0%⇒100%、50%⇒100%的测试),对负载变化进行反馈控制,使电压保持恒定,可作为AC-DC转换器正常工作。

4.png

作为逆变器控制应用,本期我为大家介绍了MCU电源控制(图腾柱交错式PFC)的可行性。除了AC-DC的PFC IC等专用产品外,我们还系列推出了具有较高系统控制融合性的MCU产品,增加了客户的可选项,做到物尽其用。我们将继续推出符合客户需求的优质产品,为客户的创新做出贡献。敬请期待瑞萨RX家族的进一步发展。

更多资料

有关RX-T系列的更多产品介绍,请复制以下链接到浏览器中打开查看:

https://www.renesas.cn/cn/zh/products/microcontrollers-microprocessors/rx-32-bit-performance-efficiency-mcus/getting-started/applications/motor-control

有关本期介绍的图腾柱交错式PFC的更多信息,请复制以下链接到浏览器中打开查看Digital Power Conversion(Totem Pole Interleaved PFC)应用指南(R01AN6877):

https://www.renesas.cn/cn/zh/document/apn/rx-family-digital-power-conversion-totem-pole-interleaved-pfc-rev110

有关图腾柱PFC的常用系统配置,请复制以下链接到浏览器中打开查看相关成功产品组合网页:

https://www.renesas.cn/cn/zh/application/power-and-energy

来源:瑞萨电子

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 14

利用二极管的单向导电性可以设计出好玩、实用的电路。

分享本文,分析限幅电路和钳位电路,是如何用二极管来实现的。

限幅电路

如下图所示,当在正半周期,并且VIN大于等于0.7V,二极管正向导通。此时,

VOUT会被钳位在0.7V上。

而当VIN小于0.7V时二极管是截止状态,在负半周期时相当于电流反向,二极管也是截至状态,此时VOUT=VIN,VOUT波形跟随VIN变化。

1.png

限辐电路示意图

根据上面限辐电路的原理,可以设计如下双向限辐电路。

2.png3.png

双向限辐电路示意图

然而有时候0.7V电压不能满足要求,那么,怎么产生不同大小的限幅电压?

在电路中加入偏置电压VBIAS,只有当VIN大于等于VBIAS时二极管才能导通。此时VOUT被钳位,其值是0.7V+VBIAS,如下图所示。

4.png

偏压限幅电路示意图

钳位电路

下面是二极管结合电容实现的钳位电路。分析中不考虑二极管的导通压降,假设RC时间常数足够大,从而使输出波形不会失真。

钳位电路原理

当输入Vin在负半周期为负时,电流如下图中红色箭头所示。二极管导通,电容逐渐充电至V,在此过程中Vout=0。

当输入Vin在正半周为正时,电流如蓝色箭头所示。二极管截止,Vout等于电容上电压加上正半周电压V,此时Vout=2V。

5.png6.png

钳位电路原理

偏压钳位电路

跟限幅电路类似的,为了获得所需要的钳位值,要在电路中加入偏置电压,如下图所示。

7.png

偏压钳位电路

当所加的偏压与二极管导通方向一致,钳位值会提高V1,Vout=2V+V1。

双向二极管钳位电路应用举例

在某些电路中会利用两个二极管的钳位作用进行保护,如下图所示,假设0.7V为D1和D2的导通电压。

  • Vin大于等于Vmax,D1导通,Vout会被钳位在Vmax

  • Vin小于等于Vmin时,Vout被钳位在Vmin


8.png

二极管钳位保护电路

来源:电子技术开发者

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 16

一、背景

最近在跟一些开发者交流过程中,或者开发者群里反馈,感觉先楫单片机开发方式不同于以往的单片机开发方式,或者开发方式没接触过导致无从下手,或者是觉得自己的APP需要严重依赖hpm_sdk等等。

在这些反馈当中,觉得有必要出个杂谈文章,谈一谈hpm_sdk的开发方式的优缺点,以及相比以往的单片机传统开发方式的不同点。以此可以带给开发者一些启发,更能方便开发者更快借助hpm_sdk进行开发自己的应用。

本文也会借助一些开发者分享过的开发经验,感谢hpmicro开发者贡献的文章。

二、开发差异

(一)IDE

先楫的目前通用MCU采用的内核架构都是riscv,这一点就不同于国内大同小异的各种arm的cortex-M系列的单片机,甚至可以B2B兼容STM32的单片机也一样,不能够支持ARM自己的平台-Keil MDK。

对于严重依赖keil开发的工程师来说,特别目前国内的很多开发工程师来说,这确实是不够友好的一个点。毕竟keil经过多年的发展,其傻瓜式的界面操作,网上丰富的踩坑记录,都足够让一个没接触过单片机开发的都能轻松入门。

但是Keil这个本身不是免费的商用IDE,尽管国内很多cortex-M单片机的芯片厂家提供的类似STM32的Firmware_Library包,里面的工程都支持了keil,但是也没说明对keil这个IDE进行了版权购买,这带来的版权问题责任就分给了芯片开发者,虽然国内很多可以通过破解方式进行商用,但是毕竟在商用的过程中时时刻刻得注意着版权问题。

先楫开发虽然不支持keil,但是在提供的IDE上,使用segger(大名鼎鼎Jlink调试器的厂家)自己开发的IDE,也就是SEGGER Embedded Studio for RISC-V,这个同样不是免费的商用IDE,但是先楫在版权上十分重视,购买了其芯片开发的商用版权,目前可以不限定于SEGGER Embedded Studio的版本,而且可以让开发者直接商用开发,避免版权问题。这个IDE同样跟keil操作类似,通过可视化操作进行配置即可,配合其Jlink更是能够让调试更加友好。

IDE的编译链支持上,支持了segger自身的编译链,也支持了gcc编译链,同样也支持andes编译链。

SEGGER Embedded Studio 下载网页:https://www.segger.com/downloads/embedded-studio/

SEGGER Embedded Studio 先楫license注册网页:https://license.segger.com/hpmicro.cgi

开发者文章: (SEGGER Embedded Studio for RISC-V,for HPMicro Devices 解决首次使用激活问题,提示无License ) https://blog.csdn.net/zhengwenbang/article/details/129740589

另外SEGGER Embedded Studio 也有对应user manual手册,以便开发者查缺补漏。网页: https://www.segger.com/products/development-tools/embedded-studio/editions/risc-v/

1.png

(二)构建系统

    对于国内的arm的cortex-m的单片机厂家来说,并没有所谓的什么构建系统开发环境。但是对于有些开发者如果开发过乐鑫的产品,比如esp32,使用的esp-idf就是使用的cmake构建系统(早期的esp-idf还是makefile版本),还有树莓派的rp2040的pico-sdk。这种构建系统入门有点门槛,需要有一定的cmake基础(比如cmakelist语法)以及相关环境搭建经验,但这也感觉是未来嵌入式发展的趋势,通过cmakelists.txt管理配置生成各大跨平台的工程(比如先楫开发中,生成SEGGER Embedded Studio 以及后续先楫支持的IDE)、生成的makefile文件可以给各大平台编译器解析,

对于芯片原厂和开发者来说,这种构建系统可以让多种芯片系列,组件包等等只需要支持一套SDK,而不需要提供多种library芯片包,可以扩展构建多种IDE,比如命令或者可视化界面生成EGGER Embedded Studio工程;支持cmake构建的vscode,clion等等跨平台开发。

三、开发优势

项目工程依靠cmakelists.txt文件进行管理,这种管理方式类似在keil进行相关路径加入或者加入自定义编译宏定义等,比如:

1、设置一些自定义编译宏定义开关

2、根据不同编译类型配置不同的编译选项和链接选项

3、添加头文件路径、编译宏等常规操作

4、添加源码编译

5、添加extern组件等操作

以上是不是觉得这种开发方式,IDE比如keil在界面操作也有,但是对于cmake来说,单纯一个cmakelist文件就可以操作完成,熟悉入门后也能大大提高开发效率。

本文以hpm_sdk1.2进行说明,简单举例一些常用的命令说明,一个cmakelist文件管理的方便好处。

更多的命令接口可以参考sdk中的sample的cmakelist,以及cmake文件夹里面的封装的命令函数。不在本文阐述范围内。 

2.png

该版本已经支持在sdk以外创建自己的Board, 但在sdk以外开发自己的应用一直都是可以的。

(一)创建自己的AP应用文件夹

新建一个自己一个APP文件夹,里面放置一个Board-这里我使用的是hpm6750_rc,这里从hpm_sdk里面的board的hpm6750evkmini中提取,并把hpm6750evkmini.yaml改为hpm6750_rc.yaml,如下:

3.png


从hpm_sdk复制一个sample,比如hello_world。然后在自己创建的应用文件夹新建个build,进入到该build文件夹,这时候使用命令:

cmake -G Ninja -DBOARD=rc_hpm_evk -DBOARD_SEARCH_PATH=your custom/rcsn_project/board/  -DCMAKE_BUILD_TYPE=flash_xip ..

这时候打开build文件夹里面的segger_embedded_studio,打开ses这个IDE,可以看到boards已经变成自己项目上的Board,以及自己的application已经被添加上来。

4.png

(二)定义宏开关,预处理定义

在keil上,预处理定义在option上可以手动输入定义

5.png

同样在segger_embedded_studio中也有类似的定义。

6.png


但是hpm_sdk中,并不需要开发者自己手动去添加,在makelists使用命令: sdk_compile_definitions, 如此就可以进行定义预处理符号。

7.png


(三)头文件路径加入

比如在keil里面就有对应的控件操作

8.png


那么在segger_embedded_studio也有类似操作界面


9.png

在hpm_sdk的构建当中,同样也不需要用户自己去界面操作,直接可以在cmakelists通过sdk_inc 命令设置,比如自己的工程定义以下工程目录,每个目录里面有个inc,这个就是需要包含的头文件路径。

10.png



11.png

(四)加入源文件

像keil一样,segger_embedded_studio也有自己的源文件目录结构,比如需要添加上述所说的drivers里面的文件,可以通过使用sdk_app_src命令进行设置。比如:

12.png


(五)编译相关

比如设置优化等级、GCC编译参数、指令集选择等等。都可以通过sdk_compile_options命令设置

设置O3优化可以使用:

sdk_compile_options("-O3")

设置gcc特定警告

sdk_compile_options("-Wall")

设置ABI和ISA

sdk_compile_options("-mabi=ilp32d")sdk_compile_options("-march=rv32gc")

四、开发劣势

(一)入门门槛相对高

目前来说,cmake构建方式在MCU开发上并不常见,也存在一定的入门门槛;

但对于项目的构建优化和管理是效率显著的,比如引入一个第三方中间件,只需要在此中间件内部通过CMakelists管理好自身文件链接,项目通过条件包含,能够最大减少中间件带来的耦合度。

13.png


需要有一定的cmake基础,也带来一定的学习成本。

(二)工程管理相对约束

在传统的MCU开发中,很多开发者都喜欢把MCU厂家自身的驱动和组件源码都加入到自己的工程目录下,这样方便自己管理,甚至可以自己改动官方库代码(这点是极其不推荐的行为)。

但hpm_sdk更多倾向于开发者的APP应用与SDK分开,这种开发好比是上位机的QT开发,在QT开发中,通过pro/pri文件管理导入QT的官方库使用,如果不想使用那就不开启对应的库,又好比python开发,通过Import方式自行选择。

这种开发方式需要把hpm_sdk路径放在对应的文件夹中,并把路径添加到环境变量,这好比是软件的安装,先楫的所有芯片系列都依赖与这个hpm_sdk,用户只需关心自己的应用开发路径,在拷贝的过程中也只需要拷贝自身应用,但前提对方也得"安装"了hpm_sdk。

这种约束方法对于有些开发者来说确实不够友好,当然未来先楫也不排除支持把hpm_sdk所需要的文件能让开发者自行导入到自己工程目录的需求,比如类似stm32cubemx生成初始化外设工具,但hpm_sdk的cmake构建方式仍是主要开发方式。

来源:先楫半导体HPMicro

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 275

1695720798862707.jpg

CFAR是非常普遍的信号过滤手段,用于提取超过动态阈值的点目标信息。AURIX™ TC3xx单片机的雷达信号处理单元SPU集成了该硬件功能,并且提供两种典型的CFAR算法。(英飞凌技术专家 钱伟喆

背景介绍

当雷达回波信号功率幅值超过某个阈值时,能被检测到,该阈值不可能是固定的,必须根据周围环境、目标分布反射强弱,杂波噪声干扰等动态变化,而CFAR(constant false alarm rate)就是用于计算动态阈值的典型手段。CFAR直接影响检测概率(probability of detection)【1】,同样的收发机信噪比,较大的CFAR能获得较大的检测概率。

算法实现

由于CFAR使用非常普遍,AURIX™ TC3xx单片机的雷达信号处理单元SPU集成了该硬件功能,并且提供两种典型的CFAR算法,分别是CA-CFAR (cell-averaging CFAR)和GOS-CFAR (generalized order statistic CFAR)。图1是典型CA-CFAR算法结构,摘自Matlab参考文献【1】。SPU还集成了两种算法的子分类,提供更多的检测方法。两种算法各有优缺点,GOS-CFAR在多目标场景性能较优,且其适应性强,参数的微小调整对杂波噪声的滤除影响较小【2】,【3】。

2.png

图1. 典型的CA-CFAR(摘自【1】)

为防止带相位信息的各天线信号互相干涉,通常使用不带相位的NCI(non-coherent integer)功率数据进行CFAR处理,这样能准确表征回波信号在各天线上的功率加总。得到的CFAR结果以位(bit)为基本单元,每个位对应NCI矩阵中的一个数据,该数据可能是32位或16位存储格式。NCI矩阵的维度是距离点数乘以多普勒点数。CFAR结果中置一的位,代表该对应NCI的数据被检测出;置零的位(图2中CFAR bit mask未置一的位),代表该对应NCI的数据未被检测出。

CFAR检测出的结果代表该数据点的功率幅值超过动态阈值,极大可能是来自某目标的反射点。该数据点在每个天线上的信息需要保留,用于下一步的到达角运算。而没超过动态阈值的数据点可能是噪声杂波等,可被删除。CFAR结果可以配合SPU内的Bin rejection单元用于过滤距离-多普勒FFT结果,删除不需要的数据点。图2形象地展示了如何用CFAR 结果过滤距离-多普勒FFT数据。

3.png

图2. CFAR结果对距离-多普勒FFT过滤示意图

SPU内的Bin rejection单元可以方便的实现滤波功能。Bin rejection单元可以设定多种灵活的判断条件,比如跟设定的阈值比较,或者设定需要保留的数据向量维度,或者配合CFAR单元设定需要保留的bit mask等等。不满足条件的数据单元可以被清零或删除。

将CFAR结果依次配置到Bin rejection的掩码寄存器中,该寄存器是32位,有64组,总共对应2048(=32x64)个数据。但距离-多普勒FFT数据维度往往较大,而且还要考虑天线维度,所以需要多次配置掩码寄存器,才能过滤全部三维数据。

使用SPU一维CFAR实现二维CFAR

SPU中CFAR硬件实现是一维的,可以沿距离维度,或者多普勒维度,而实际工程应用中往往需要二维CFAR。理论上的二维CFAR实现,是通过被测点与周围一圈点合成计算出的阈值进行比较,计算量较大,尤其使用GOS-CFAR时,因为需要进行排序的运算量是O(n^2),而一维是O(n)。文献【2】中提出一种分别由距离和多普勒维度CFAR合成的二维CFAR,这种方法有效降低了工程计算量,保持实时性的同时,也能兼顾在噪声环境下的性能。下面将详细介绍如何使用SPU的一维CFAR实现二维CFAR并进行检测。

4.png

图3. 二维CFAR、点目标检测和到达角计算流程,以及仿真结果

图3的第一行流程,提供了二维CFAR、点目标检测和到达角计算流程,其中淡蓝色显示的步骤使用SPU实现,而绿色则代表CPU实现的步骤。图3的第二行给出了每个步骤的仿真结果,能直观表现二维CFAR的计算方法。图中前两步是典型的毫米波雷达信号预处理步骤,只是在第一步同时计算了距离维的NCI及GOS-CFAR,等第二步获得多普勒维的CFAR后,就能合成二维结果。

需要注意的是,由于CFAR的存储方式是以一个位元(bit)代表一个数据点,而第二步完成的多普勒结果是距离结果的转置,所以第三步中要实现的位与(bit AND)操作并不简单,需要对两个互为转置的CFAR结果进行位寻址。Tricore™ CPU提供了位操作指令EXTR.U,能够方便地将某个32位字中的某个位元提取出来进行处理【4】。在某些频繁调用,或时间裕量较短的场景,建议使用汇编代码,减少耗时较长的存储器访问次数,使能CPU 指令缓存,并配合编译器的时间优化选项,来降低代码执行时间。举个例子,使用CPU计算512*128维度的二维CFAR,并进行检测提取出128个点目标,同时将提取出的目标数据搬运到连续内存,方便实施第四步骤的角度傅里叶运算,整个图3中第三步骤耗时大约是1ms ,CPU运行主频是300MHz。

总结

CFAR是非常普遍的信号过滤手段,用于提取超过动态阈值的点目标信息。AURIX ™ TC3xx单片机的雷达信号处理单元SPU集成了该硬件功能,并且提供两种典型的CFAR算法。配合SPU中的bin rejection硬件功能,CFAR结果用于过滤距离-多普勒FFT,将可能来自目标的反射点提取出来,进行下一步到达角计算。另外,AURIX™ TC3xx CPU能在较短时间内,将两次SPU的一维CFAR结果,进行位与操作,实现二维CFAR过滤功能,提取目标。

参考文献

【1】 RADAR SYSTEMS ANALYSIS AND DESIGN USING MATLAB’, Bassem R. Mahafza.

【2】Fast Two-Dimensional CFAR Procedure’, Matthias Kronauge, Hermann Rohling, IEEE Trans. on Aerospace and electronic systems Vol. 49, No. 3 July 2013.

【3】Ordered Statistic CFAR Technique – an Overview’, Hermann Rohling, Hamburg University of Technology.

【4】TC1.6_DSP_Optimization_Guide_part1_v1.2’, Infineon Technologies AG.

来源: 英飞凌汽车电子生态圈

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 114

一、功能介绍

CW32W031 读取 RSSI 功能是指在芯片接收到数据时,读取当前数据包的信号强度值的功能。RSSI 的计算分为两步,即计算 SNR 与计算 RSSI。在收到 RX_IRQ 信号之后,通过读取寄存器中的信号能量 (sig_pow_avg)以及噪声能量(noi_pow_avg)来计算 SNR,并根据当前带宽值 BW 等参数,计算最终信 号强度值 RSSI。

二、软件设计参考

2.1 编程示例 

1. 芯片初始化; 

2. 配置相关参数; 

3. 芯片进入接收模式; 

4. 芯片接收数据,并计算 SNR、RSSI 值。

2.2 软件设计验证 

参照 CW32W031 例程库中接收模式的代码。 

2.2.1 SDK 示例 

参考代码:

1.png

示例代码配置了连续接收模式,并在接收到数据后,将接收到的数据内容及 SNR、RSSI 值打印出来。

2.png

3.png

PAN3028 中 断 处 理 函 数 中, 当 芯 片 接 收 到 数 据, 产 生 REG_IRQ_RX_DONE(RX_IRQ) 中 断 时, 通 过 PAN3028_get_snr 和 PAN3028_get_rssi 接口函数计算并读取当前数据包的信号强度值。

2.2.2 验证结果 串口助手显示结果为:

4.png

三、注意事项 

3.1 关于 RSSI 

RSSI 功能读取信号强度值需要在接收到数据包的时候读取,且在清除 rxdone 中断之前。如果清除中断,这 个值就会失效。

RSSI 的测量范围是 -40 到 -130,不同参数(SF、BW)模式下,测量范围略有不同。 

3.2 关于 LNA 模块支持切换 LNA 增益,支持高增益和低增益两种模式。目前 SDK 默认使用高增益模式。 

当切换至 LNA 低增益时, 

1. LNA 低增益模式会比 LNA 高增益模式灵敏度差 3dB; 

2. 非 DCDC 模式下,RX 电流会降低 1.2mA; 

3. 在有干扰的环境中,LNA 低增益会比 LNA 高增益传输距离更远更稳定。

有关芯片购买事宜,请咨询武汉芯源半导体的销售和官方代理商。更多MCU详细信息,请访问武汉芯源半导体官方网站:https://www.whxy.com

来源:武汉芯源半导体

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 58

焊接工业现场的干扰性太强,所以对MCU的抗干扰有很高要求。武汉芯源半导体的MCU全部ESD可靠性达到国际标准最高等级,HBM ESD通过8KV测试,具备超强抗干扰能力。

来源:武汉芯源半导体

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 16

机器人的应用越来越广泛了,大家熟知的稚晖君直接创业搞机器人,可想而至,接下来的十年,机器人绝对是热门的行业。

目前市面上很多机器人都是基于一套叫做ROS的系统开发的,今天就给大家分享一个跑在MCU上,基于FreeRTOS的轻量级(micro)ROS。

随着市场需求不断的扩大,这种基于MCU的ROS将会越来越普及,对于从事机器人相关工作的读者有必要了解一下。

关于ROS

ROS:Robot Operating System,,即机器人操作系统。

和普通OS(RTOS、TSOS)不一样的是,ROS主要是针对机器人,是基于操作系统之上,提供一系列程序库和工具以帮助软件开发者创建机器人应用软件。它提供了硬件抽象、设备驱动、库函数、可视化、消息传递和软件包管理等诸多功能。ROS遵守BSD开源许可协议。

ROS设计者将ROS表述为“ROS = Plumbing + Tools + Capabilities + Ecosystem”,即ROS是通讯机制、工具软件包、机器人高层技能以及机器人生态系统的集合体。

micro-ROS

本文说的micro-ROS,是基于ROS2进行优化的一套轻量级ROS系统,它提供了完全部署的ROS 2生态系统的大多数吸引人的工具和功能,并具有入式和低资源设备的卓越能力,可以运行在MCU硬件平台。

传统上,即使机器人包含许多ROS,ROS仍停留在微控制器边界。它们通常通过串行协议与旧版ROS中的ROS-serial之类的工具集成在一起。

在微控制器中拥有所有ROS2的功能和相同的API会不是很好吗?这正是micro-ROS提供的-机器人系统嵌入式部分内部的ROS开发生态系统。micro-ROS允许开发人员在硬件级别附近运行ROS 2节点。这使所有硬件外设都可用于该应用程序,从而使其能够直接与SPI或I²C等低级总线进行交互,以与传感器和执行器接口。

微型ROS是一组分层的库,它们可以直接重用ROS 2的库,也可以使其适应资源受限设备的功能和需求。具体来说,如果我们转向ROS 2体系结构,则由微型ROS维护的层是ROS客户端库(RCL)和ROS中间件接口(RMW)。同样,RCLCPP是RCL之上的C ++抽象层,即使大多数与RCL直接接口,它也可以被微型ROS应用程序组件使用。该层在RCLC中提供了相对于ROS 2的附加功能,RCLC是用C99编写的库,其中专门设计和开发了与RCLCPP提供的功能类似的功能,例如便利功能或执行程序,以适合微控制器。 

1.png

通常,ROS是基于 Linux系统之上的运行的一套系统,而本文这套微型ROS基于FreeROS运行。

这使micro-ROS在硬件和软件级别上都能与大多数嵌入式平台兼容。
但是,最终构成micro-ROS体系结构的是RMW实现,该实现基于称为Micro XRCE-DDS的中间件库。Micro XRCE-DDS是由对象管理组(OMG)定义和维护的DDS-XRCE(用于极端资源受限环境的DDS)协议的C / C ++实现。

2.png

顾名思义,DDS-XRCE是一种有线协议,允许引入以数据为中心的发布者-订阅者DDS模型进入嵌入式世界。DDS-XRCE依赖于客户端-服务器体系结构,其中客户端是用C99编写的轻量级实体,可在低资源设备中运行,而代理(C ++ 11应用程序)则充当客户端与DDS世界之间的桥梁。DDS-XRCE协议负责在这两个实体之间传递请求和消息。相应地,该代理能够通过标准DDS有线协议与DDS全局数据空间进行通信。在DDS世界中,代理通过与其他DDS参与者进行通信来代表客户。该通信由客户端代理,能够通过所有标准DDS实体与DDS进行交互的模拟DDS应用程序进行协调。代理将客户端的状态保存在其内存中,这样,即使代理断开连接,代理也可以存活。代理与客户端之间的通信遵循请求-响应模式,即双向并基于操作和响应。

为什么选择FreeRTOS?

由于它们的轻巧性,XRCE-DDS客户端库和microROS都易于在实时操作系统之上运行,这使它们能够满足其典型目标应用程序所提出的对时间要求严格的要求,其中涉及的任务包括要求时限或确定性响应。

具体来说,FreeRTOS已成为micro-ROS项目支持的首批RTOS之一,因此已集成到其软件堆栈中。这允许重用FreeRTOS社区和合作伙伴提供的所有工具和实现。由于微型ROS软件堆栈是模块化的,因此期望并期望交换软件实体。

FreeRTOS是开发micro ROS和Micro XRCE-DDS应用程序的理想选择。首先,它为许多不同的体系结构和开发工具提供了一个独立的解决方案,它以非常清晰和透明的方式编写,并且拥有非常庞大的用户群,从而确保了大量FreeRTOS用户将能够将其应用程序与微型ROS应用程序集成。而且,它是众所周知的高度可靠的RTOS。至关重要的是,FreeRTOS具有最小的ROM,RAM和处理开销。通常,RTOS内核二进制映像的大小在6K到12K字节之间。由于要与RTOS进行资源竞争,因此,当要最小化MCU上的微型ROS应用程序的内存占用量时,这些内存是理想的选择。

在下文中,我们将讨论FreeRTOS提供的几种功能,以及微型ROS如何利用它们来获利,以优化其堆栈中组成的不同库的所需功能。

任务和计划程序

FreeRTOS提供了一组最少的任务实体,这些实体与调度程序的使用一起,为在应用程序中实现确定性提供了必要的工具。微型ROS客户端库(RCL,RCLC和RCLCPP)访问RTOS的资源,以控制调度和电源管理机制,从而为开发人员提供了优化应用程序的可能性。

FreeRTOS提供的任务有两种:标准任务和空闲任务。前者由用户创建,可以视为RTOS上的应用程序。至关重要的是,将微型ROS应用程序集成到RTOS中作为具有给定优先级的此类任务之一。空闲任务另一方面,优先级较低的任务只有在没有其他任务在运行时才进入运行模式。由于microROS主要针对低功耗和IoT设备,因此这些空闲任务和相关的空闲挂钩非常适合在MCU中启用深度睡眠状态。由于将无状态XRCE-DDS客户端实现为micro-ROS中间件,因此这些深度睡眠状态可能是内存易失的,也就是说,由于面向连接的中间件有线协议,可以使用没有RAM持久性的深度睡眠模式。

使用FreeRTOS调度程序,micro-ROS能够管理其主要任务以及负责传输层的任务的优先级。通常,负责网络堆栈或串行接口的任务必须优先于micro-ROS应用程序。

内存管理

FreeRTOS提供的最令人期望的功能(对于微型ROS开发人员和用户而言非常有趣)是堆栈管理和静态堆栈创建能力。在处理micro-ROS的任务创建时,通常,堆栈分配是关键的设计决策。FreeRTOS允许进行细粒度的堆栈大小管理,这又使程序员可以知道在程序执行期间正在使用多少堆栈内存,或例如确定堆栈内存分配是否存在于静态或动态内存中,从而确定帮助正确使用MCU的内存,这是嵌入式系统中的宝贵资源。至关重要的是,可以为微ROS提供繁重的堆栈使用方任务,并为其分配静态分配的堆栈,从而防止将来出现堆和其他任务初始化问题。

在这方面,值得一提的是,这些内存管理工具为基准化微型ROS和XRCE-DDS的内存占用量提供了理想的框架。具体而言,已进行了彻底的堆栈消耗分析,以评估XRCE-DDS客户端内存消耗。堆栈是程序员在运行应用程序之前未知的内存块。为了对其进行度量,可以使用FreeRTOS uxTaskGetStackHighWaterMark()函数,该函数返回在执行过程中XRCE-DDS任务堆栈达到最大值时未使用的堆栈量。通过将此值减去总堆栈,可以得到XRCE-DDS应用程序使用的堆栈峰值。用这种方法获得的结果汇总在此处发布的报告中。

我们还注意到,由于FreeRTOS中使用了可插拔的动态内存管理方法,因此micro-ROS能够完成所需的用于管理内存的接口。通过这种方式,已经使用heap_4作为参考实现了诸如calloc()或realloc()之类的函数。这些功能在馈入micro-ROS内存管理API之前已被包装,以便分析动态内存消耗。

与静态内存情况类似,FreeRTOS的可交换动态内存管理方法使在嵌入式系统中执行动态内存配置文件分析特别容易。的确,尽管在其他RTOS中,动态(取消)分配功能隐藏在RTOS或标准库的深处,但在FreeRTOS中,它们暴露给用户并易于定制,因此简化了处理和控制动态内存使用的过程。

传输

与客户端支持库访问FreeRTOS的特定原语和功能(例如调度机制)的方式相同,中间件实现Micro XRCE-DDS要求访问RTOS的传输和时间资源以使其正常运行。关于IP传输,在FreeRTOS的特定情况下,Micro XRCE-DDS使用在此RTOS上实现lwIP的附件。lwIP(轻型IP)是为嵌入式系统设计的,广泛使用的开源TCP / IP堆栈,旨在减少资源使用,同时仍提供完整的TCP堆栈。这使得lwIP的使用特别适用于以micro-ROS为目标的嵌入式系统和资源受限的环境。

除了TCP / IP堆栈,lwIP还有其他几个重要部分,例如网络接口,操作系统仿真层,缓冲区和内存管理部分。操作系统仿真层和网络接口允许将网络堆栈移植到操作系统中,因为它提供了lwIP代码和操作系统内核之间的通用接口。

FreeRTOS与lwIP 的集成是从头开始设计的,具有标准且熟悉的接口(伯克利套接字),并且具有线程安全性,旨在使其尽可能易于使用。而且,它可以将缓冲区管理保留在可移植层中。

请注意,XRCE-DDS客户端还支持FreeRTOS + TCP网络堆栈。FreeRTOS + TCP是用于TCP / IP堆栈协议支持的官方FreeRTOS扩展库。

还努力使FreeRTOS + TCP与micro-ROS兼容。这包括对TCP和UDP连接的支持,它们依靠FreeRTOS + TCP API来实现micro XRCE-DDS Client API所要求的抽象层,以便能够使用这些协议与代理进行通信。

此外,还存在使用FreeRTOS的时间测量功能的可能性,从而使XRCE-DDS库能够执行基于时间的任务,从而使用户看不到实现。

Posix扩展

允许将FreeRTOS无缝和盈利地集成到micro-ROS中的另一个显着原因是POSIX扩展的可用性。便携式操作系统接口(POSIX)是IEEE计算机协会为维护操作系统之间的兼容性而指定的一系列标准。FreeRTOS Labs提供的FreeRTOS + POSIX层实现了POSIX API的子集。

确实,尽管micro-ROS中间件具有较低的POSIX依赖关系(只是clock_gettime()函数),但整个micro-ROS堆栈具有与功能和类型定义相关的更高依赖关系。另外,由于微型ROS项目的基本原理之一是移植或重用Linux(主要是POSIX兼容操作系统)中本机编码的ROS 2的代码,因此使用了某种程度上可与Linux兼容的RTOS。POSIX显然是有益的,因为代码的移植工作量很小。

为此,使用了sleep()和usleep()之类的函数。micro-ROS的POSIX类型定义依赖项依赖于FreeRTOS内核中未定义的某些结构,例如struct timeval或struct timespec。还需要诸如type.h,signal.h或unistd.h之类的文件来定义一些标准的类型定义和结构。

对于errno.h,尽管在FreeRTOS + POSIX层中未实现,但出于编译目的,micro-ROS必须包括一些不可用的定义。

通过使用FreeRTOS + FAT库,应在micro-ROS堆栈中重构这些定义,以使FreeRTOS + POSIX具有完全的兼容性。这样,可以完全支持依赖文件系统支持的高级micro-ROS功能,例如日志记录机制。

更多相关教程

如何在FreeRTOS上使用Olimex STM32-E407评估板创建和运行第一个微型ROS应用程序:

3.png

4.jpg

该教材地址:https://micro-ros.github.io/docs/tutorials/core/first_application_rtos/freertos/

更多内容,请参看:https://micro-ros.github.io/

4.png

来源:嵌入式专栏(作者 | strongerHuang)

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 429

这是一个初学者不会去了解的问题,但会使老司机掉坑的问题。这也是最近在技术交流群看到的一个问题,所以,就出来简单分享一下。

概述

这个问题看起来比较简单,我相信很多人都能说出答案。但是,很多人都只是停留在表面,没有在项目中经历过,也没有更深入的去了解。

1.jpg

很早之前年的单片机可能没有输出速度这个配置选项,但是这后面的单片机基本都有配置速度的选项,下面结合STM32来简单介绍一下。

GPIO输出速度

不管标准外设库,还是STM32CubeMX配置GPIO输出引脚,都会有速度GPIO_InitStruct.Speed这个选项。

类似如下:

GPIO_InitStruct.Pin = GPIO_PIN_5;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

根据不同MCU型号,速度选项,有些有3个,有些有4个。一般定义在xxx_gpio.h文件中。

#define GPIO_Speed_2MHz  GPIO_Speed_Level_1   /*!< I/O output speed: Low 2 MHz  */
#define GPIO_Speed_10MHz GPIO_Speed_Level_2   /*!< I/O output speed: Medium 10 MHz */
#define GPIO_Speed_50MHz GPIO_Speed_Level_3   /*!< I/O output speed: High 50 MHz */
#define  GPIO_SPEED_FREQ_LOW        (0x00000000u)  /*!< Low speed       */
#define  GPIO_SPEED_FREQ_MEDIUM     (0x00000001u)  /*!< Medium speed    */
#define  GPIO_SPEED_FREQ_HIGH       (0x00000002u)  /*!< High speed      */
#define  GPIO_SPEED_FREQ_VERY_HIGH  (0x00000003u)  /*!< Very high speed */

对于普通输出GPIO,使用STM32CubeMX配置,默认配置低:

2.png

当然,如果配置成其他模式,有可能是中,或高。

比如:配置UART、CAN引脚,速度会是高。

提问:你想过为什么会是低、高吗?

测量GPIO输出波形

不知道大家用示波器测量过GPIO输出波形没有,特别是在高速(单位M)的时候。

我以前经常测量MCO引脚输出时钟,测量过的人应该都知道,如果输出速度高于配置速度,会明显看到波形不正常。

波形会出现不完整,幅度低等失真现象。

相信不用我说,有一定常识的人都能理解。

差异原因

速度的配置,就是决定IO口驱动电路的响应速度。

我们需要结合实际情况配置速度,不同速度会有不同的影响。

高低速差异:配置高速:输出频率高,噪音大,功耗高,电磁干扰强; 

配置低速:输出频率低,噪音小,功耗低,电磁干扰弱;提高系统EMI(电磁干扰)性能;

看到差异,相信很多人就能理解了。

实际情况中,比如:低功耗的产品,你会考虑功耗。

环境不好的场合,通信不稳定,你会考虑电磁干扰等。

举例:如果你使用9600波特率UART通信,建议速度配置为低。

所以,如果你想使产品更加完美,速度配置也是关键的一项。

来源:strongerHuang

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 39

一、功能介绍 

CW32W031 的射频部分支持 CAD 中断。从 Deepsleep 进入 STB3,开启 CAD 功能并进入 RX 模式后, CW32W031 会检测信道中是否会有 ChirpIOT ™信号 , 如果存在将 CAD-IRQ 置高,MCU 内核可以通过一定的时间来检测 CAD-IRQ 信号是否拉高来判断信道中是否存在 ChirpIOT ™信号。

用户可通过 GPIO11 端口检测 CAD-IRQ 信号,信号检测流程如下:

1.png

图:信道活跃检测(CAD)

注:CW32W031 的 RF 部分有多种中断源,MCU 超时设置是在等待中断的产生,然后判断中断是否为 CAD 中断,从而执行不同的命令。

二、软件设计参考 

2.1 软件设计流程 

1. 芯片初始化; 

2. 配置 CAD 初始化; 

3. 芯片进入接收模式; 

4. 观察 CAD-IRQ 信号。 

2.2 软件设计验证 

2.2.1 验证步骤 

1. 发送模组周期性发送数据包; 

2. 接收模组配置为接收模式; 

3. 使用逻辑分析仪抓取接收端 CAD-IRQ 信号。

2.2.2 SDK 示例

参考代码

ret = rf_init(); 
if(ret != OK) 
{ 
    dis_err(" RF Init Fail"); while(1); 
} 
rf_set_default_para(); 
rf_set_cad(); 
rf_enter_continous_rx(); 
while (1)// 等待逻辑分析仪检测 CAD-IRQ 信号 
{ 
    rf_irq_process(); 
}‍

示例代码配置了 CAD 初始化,配置 GPIO11 作为 CAD 检测 IO 口,随后进入接收模式。

发送模组周期性发送数据包(数据包 preamble+payload 的持续时间约 20.5ms),用逻辑分析仪抓取接收

模组 GPIO11 波形,观察检测结果。

2.2.3 验证结果

逻辑分析仪抓取结果如下图所示:

2.png

图:逻辑分析仪抓取结果(CAD)

根据结果显示,当发送模组发送数据包时,接收模组发生了 CAD-IRQ,CAD 检测引脚 GPIO11 被拉高约 20.5ms,维持一个完整 ChirpIOT ™数据包的时间长度。

三、注意事项

3.1 关于 CAD 影响芯片的接收灵敏度

CAD 功能初始化时,修改了芯片的接收阈值,设置不同的接收阈值,会影响芯片的接收灵敏度,并可能存在CAD 误触发的情况。

uint32_t PAN3028_cad_en(void) 
{ 
    PAN3028_set_gpio_output(MODULE_GPIO_CAD_IRQ); 
    If(PAN3028_write_spec_page_reg(PAGE1_SEL,0x0f,0x10)!=OK) 
    { 
        return FAIL; 
    } 
    return OK; 
}

接收阈值的设置,需修改 PAN3028_cad_en() 函数中的寄存器配置,默认值为 0x10,修改接收阈值对接收灵

敏度及误触发概率的影响如下(实验数据在屏蔽放环境下测试):

3.png

用户在使用 CAD 功能时,需根据应用场景选择修改 PAN3028_cad_en() 函数中的寄存器值(PAGE1_SEL,0x0f, 默认值为 0x10),在使用完 CAD 功能后,建议调用 rf_set_cad_off() 函数,rf_set_cad_off() 函数可以关闭 CAD 功能并将接收阈值恢复。

3.2 关于 SDK 及演示系统板

SDK 中提供了 CAD 功能所需的函数接口,CAD-IRQ 被触发时,检测引脚 GPIO11 会被拉高。演示系统板将GPIO11 连接到了 PB07, 具体信息可前往官网查看 CW32W031 的开发板原理图。

3.3 关于 CAD 使用方法

CW32W031 的射频部分可以对 preamble 和 payload 进行 CAD 检测。

3.3.1 对 preamble 检查方式

当完整的 preamble+payload 信号到来时,用户可以在接收端通过 GPIO 口读取到 CAD-IRQ 信号,CAD 检测引脚 GPIO11被拉高,拉高时间为 preamble+payload的持续时间。此时,接收端可以产生正确的 rxdone结果。

4.png

图:逻辑分析仪抓取结果(完整 CAD)

当不完整的 preamble+payload 信号到来时(发射端先进行数据发送,随后接收端在 preamble 时间段内打开了 CAD 检测),此时,用户可以在接收端通过 GPIO 口读取到 CAD-IRQ 信号,CAD 检测引脚 GPIO11 的变化有两种情况:

1.preamble(部分)内含有较完整信息,GPIO11 会被拉高 preamble(部分)+payload 的持续时间。此时,接收端可以产生正确的 rxdone 结果。

5.png

图:逻辑分析仪抓取结果(较完整 preamble)

2.preamble(部分)内未含有完整信息,GPIO11 会呈现不规则高 - 低 - 高 - 低变换的现象。此时,接收端不会产生正确的接收结果。

6.png

图:逻辑分析仪抓取结果(不完整 preamble)

3.3.2 对 payload 检查方式

当只有 payload 信号到来时(发射端先进行数据发射,随后接收端在 payload 时间段内打开了 CAD 检测),此时,由于 RX-CAD 检测不到 preamble,CAD-IRQ 会呈现不规则高 - 低 - 高 - 低变换的现象。此时,接收端不会产生正确的接收结果。

7.png

图:逻辑分析仪抓取结果(只含 payload)

3.3.3 软件应用参考

当设置的 CAD 误触发概率较少,或存在少量误触发率但不影响软件应用时,可以通过检测 CAD-IRQ,GPIO11 上升沿来判断 CAD 触发,可以认为只要收到上升沿就是收到了 payload 信号(建议使用这种方法的接收阈值设为 0x15~0x20)。

当设置的 CAD 误触发概率较高时,需要结合 CAD 检测时间用软件方法来判断 payload 信号,CAD 检测的时间以单个 chirp 持续时间作为单位计算。单个 chirp 持续时间为 2SF/BW(SF 为扩频因子,BW 为带宽,BW单位为 Hz,时间单位为秒)。使用时,建议将检测时间窗口设置为 3 个 chirp 持续时间为佳。用户可以分别在 3 个 chirp 对应的位置检测 CAD 信号,如果同时检测到 CAD 信号(GPIO11 高电平),则可以认为有信号存在。同时,软件设计需要参考 3.3.1 对 preamble 检查方式和 3.3.2 对 payload 检查方式,进行灵活调整。

在打开 CAD 接收后,如果当前空中存在信号,那么芯片需要至少 2 个 chirp 持续时间的检测,GPIO11 才能首次对外输出高电平。一个典型的应用方法为:

1.计算 one_chirp_time = 2SF/BW;

2.配置需要检测的信道,rf_set_cad(),enter_rx;

3.检测 check_cad_inactive(),判断是否检测到 CAD 信号(下面的例程检测了三次,适用于误触发较多的情况)。

uint32_t check_cad_inactive(void) 
{ 
    delay10us(one_chirp_time*2/10); 
    if(GPIO_ReadPin(CW_GPIOB, GPIO_PIN_7) != 1) 
    { 
        return LEVEL_INACTIVE;// 没有 cad } delay10us(one_chirp_time/10); 
        if(GPIO_ReadPin(CW_GPIOB, GPIO_PIN_7) != 1) { return LEVEL_INACTIVE; 
    } 
    delay10us(one_chirp_time/10); 
    if(GPIO_ReadPin(CW_GPIOB, GPIO_PIN_7) != 1) 
    { 
        return LEVEL_INACTIVE; 
    }
    return LEVEL_ACTIVE;// 有 cad 
}

如果误触发较少,或存在少量误触发但不影响软件应用时,可以将检测次数减少为一次(例程如下),或者通过 GPIO11 上升沿作为判断依据。

uint32_t check_cad_inactive(void) 
{ 
    delay10us(one_chirp_time*2/10); 
    If(GPIO_ReadPin(CW_GPIOB, GPIO_PIN_7) != 1) 
    { 
        return LEVEL_INACTIVE;// 没有 cad 
    } 
    return LEVEL_ACTIVE;// 有 cad
}

来源:武汉芯源半导体

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 24

页面

订阅 RSS - 单片机