tag 标签: cortexm3

相关博文
  • 热度 18
    2013-10-29 13:05
    2089 次阅读|
    0 个评论
    当TDC-GP22遇到ARM CortexM3 模数转换器(ADC)、数模转换器(DAC)听的多了,时间数字转换器(TDC——Timer Digital Converter)是什么原理的器件?为什么是ARM CortexM3,而不是M0、M4? 还有,超声波水表这种创新产品形式是否到了大规模商用阶段呢?本文将介绍TDC-GP22在智能超声波水表中起到何种关键作用,ARM CortexM3 MCU如何在超低功耗突破方面再助一臂之力? 超声波水表概述 当智能电表在电力系统中如火如荼地发展时,水表也在朝智能化、全电子化的方向快速发展。这一方面因为全球水资源的短缺迫使政府重视节水和水量控制,另一方面也源于现代工业技术的成熟发展使得智能水表的实现成为可能。能满足阶梯计价的智能式水表将会成为建设节水型社会一大利器! 水表技术的创新发展是实现用水智能测量的重要武器。超声波水表是采用超声波时差原理,采用工业级电子元器件制造而成的全电子水表。这种超声波测量是利用一对超声波换能器相向交替(或同时)收发超声波,通过检测超声波在介质中的顺流和逆流传播时间差来间接测量流体的流速,再通过流速来计算流量。 图1 超声波时差法测量原理示意图 《电子技术设计》网站版权所有,谢绝转载 与传统机械式水表相比较,超声波水表精度高、可靠性好、量程比宽、寿命长、无活动部件、任意角度安装、更换非常灵活等重要优势: 精度高:测量的分辨率高; 可靠性好:超声波回波测量稳定可靠; 量程比宽:始动流量非常小( 2 L/h),微小变化可以获知; 寿命长:尽管测量速度很快,但可以拥有非常长的使用寿命; 无活动部件:不影响流体特性,测量性能更加优越; 更换非常灵活:更换非常简单,无需断管网。 有研究数据显示,在欧洲以及世界一些地区:大口径工业水表和小口径民用水表,都已经开始朝超声波方向发展。欧洲一些著名的表计公司在欧洲的项目开发工作中已经开始或者已经量产,超声波水表潜力巨大(市场潜力:10Mio./年)。 在中国,超声波测量方式已经在热量表和流量计当中得到普遍的应用和验证。由于超声波方式的优势,以及测量超声波电路的不断发展和完善,智能水表也将向这种方式发展。国家住建部标准定额司相关单位委托行业领军企业牵头组织起草的“超声波水表”国家标准已经基本完成。 超声波水表关键技术 关键部件——TDC-GP22 德国Acam公司的测量芯片在超声波测量上已得到普遍认可和采用。回到文章开头提到的时间数字转换器TDC-GP22,它是Acam公司利用纯数字化CMOS 技术生产的时间数字转换器,能将时间间隔的测量量化到22ps 的精度,可以说天生就肩负了推动智能超声波技术变革的使命。 图2 TDC-GP22——智能超声波水表应用的高集成度测量芯片 《电子技术设计》网站版权所有,谢绝转载 其实,Acam公司的第一颗TDC芯片TDC-GP1早在1996年就已经投入市场,并在超声波流量计中得到了广泛的应用。该公司在2005年推出了高性价比的TDC-GP2芯片,在超声波热量表市场中建立了良好的基础。2011年初其专门针对超声波热量电路设计的TDC-GP21芯片问世。有了前面这些阶段的技术验证和市场积累,2011年底,Acam专门为水表特定的功能更强大的芯片TDC-GP22正式进入市场。 原理及性能 图3 TDC-GP22内部结构原理图 图3为TDC-GP22的内部结构原理图,时间数字转换器TDC即为芯片TDC-GP22的技术核心,它利用信号通过逻辑门的绝对时间延迟来精确量化时间间隔。并且这个高精度的时间测量单元TDC,其分辨率达到22ps,这就为时差法流量计的应用提供了基本的测量保障,从而实现高精度、大量程比的设计。 TDC-GP22的重要特性还包括: 温度测量精度(2mk rms); TOF飞行时差的温漂(0.3ps/k); 提供针对超声波水表所需要的完整的模拟前端:内部集成斩波稳定的内部低噪声比较器(比较器触发offset范围在±35 mV)和低串扰模拟开关,这就解决了客户模拟部分设计的问题,提高了系统测量质量。 TDC-GP22的脉冲发生器在小管径的流量测量中可直接驱动超声波换能器,无需另外增加驱动芯片,简化了设计并降低了成本;高精度的时间测量,简洁的外部电路、集成的内部信号处理算法,超低的整体功耗测量特性使得其非常适合于超声波水表的应用。 《电子技术设计》网站版权所有,谢绝转载 三个重要功能 因TDC-GP22是在TDC-GP21的基础上发展而来,所以TDC-GP22的功能、管脚、寄存器与TDC-GP21可以100%兼容(可1:1进行替换)。TDC-GP22除了具备TDC-GP21的所有特性外,还增加了三个重要的功能。之所以说TDC-GP22是超声波水表电路的革命,正是与这三个新增的重要功能紧密相关。 智能第一个回波检测功能。TDC-GP22使得时间窗口设置不再受时差变化影响,从而实现精确的脉冲间隔测量,以及回流、空管识别和报警。 第一波脉冲宽度测量功能(目前市面上仅TDC-GP22可以实现)。GP22的脉冲宽度测量可以帮助在水表应用中,检测段内是否有气泡影响,以及检测管段内的长期覆盖物,给出报警信号。 简化的多脉冲结果计算功能。TDC-GP22芯片将会自动处理计算3个脉冲结果,并给出平均值。通过这种方式,简化了整个测量的流程,测量的结果完全由TDC-GP22自动完成,MCU仅需直接读结果,节省单片机资源,并满足水表测量速度要求。 EFM32TG840Fxx助力超声波水表突破功耗瓶颈 通过上面的讲述,我们对于TDC-GP22适用于超声波水表的性能优势已经有了比较深入的认识,但是对于在电子智能水表应用中至关重要的功耗问题还没有提及。水表应用的标准要求水表的电池至少6年不能更换,这对整个系统的功耗提出了苛刻的要求,也一直制约着超声波水表的发展。 下图4为世强开发的低功耗超声波滴水表方案的系统框图,主要由3个部分组成:换能器、TDC-GP22以及以EFM32TG840Fxx为核心的控制电路部分。世强的方案具有如下特点和优势:1、量程比:1:125;2、平均功耗: 30 uA;3、始动流量: 2 L/h;4、单节3.6V锂电池可工作6+1年;5、接口输出:红外,M-BUS。 图4 世强推出的低功耗超声波水表方案实物图和系统框图 《电子技术设计》网站版权所有,谢绝转载 其实,TDC-GP22已经具备了非常低的功耗特性(静态电流:0.1uA@85℃;休眠电流:1uA(32K持续工作下)),不过当TDC-GP22遇到基于ARM CortexM3的超低功耗EFM32TG840Fxx系列MCU,在功耗表现上就表现得更加完美了,这正是世强推出图4超声波水表方案最初的器件选择考量因素。 由于系统中控制器通常是耗电大户,所以要降低整个系统的功耗,超低功耗的MCU是必需的。EFM32系列MCU是Silicon Labs公司推出的超低功耗ARM,该系列产品只有现有8位、16位、32位MCU的四分之一功耗,并且具有丰富的外设接口。EFM32TG840是属于EFM32系列MCU中的 Tiny Gecko系列产品。 图5 Silicon Labs 公司EFM32TGxx系列MCU的特点汇总 EFM32系列MCU在活动模式下执行来自Flash的实际代码时耗电量为150μA,在深度睡眠模式下为900nA,在shutoff模式下为20nA。芯片的休眠模式唤醒时间低于2μs,供电电压范围可达1.8~3.8V。 《电子技术设计》网站版权所有,谢绝转载 外设方面EFM32除了提供基本的AD模块、DA模块、模拟比较器、UART/SPI/IIC接口、外部总线接口等,还提供了特色的低功耗的外设,包括低功耗的UART和定时器。EFM32的独特的“peripheral reflex system(周边反射系统)”(PRS)可与标准的32 位ARM 总线并行,PRS 可使EFM32外设自主运行和交流,无需CPU干预,可延长CPU睡眠时间并节省大量能源。此外EFM32系列产品还集成了LCD控制器、RTC、LESENCE接口、AES模块等。 基于Cortex-M3内核的EFM32系列MCU产品,内核强大的运算能力减少MCU工作状态时间,150μA/MHz的超低运行功耗,配合EMF32独特的低功耗外设,超声波水表的电池8年不用更换将成为可能。同时EFM32系列MCU的高集成度,进一步降低客户的系统成本。 小结 TDC-GP22超声芯片的高集成度使得外围电路的设计更加简单,低功耗高性能的MCU极大延长了电池续航时间。加上世强可提供超声波水表的一站式解决方案(包括完整可行的软件、原理图、PCB示例、技术支持),无疑为水表企业更快地抢占创新先机做好了铺垫开发和上市。 《电子技术设计》网站版权所有,谢绝转载
  • 热度 20
    2012-11-21 16:35
    9444 次阅读|
    2 个评论
    转载:原文出处:http://openmcu.net/post/8.html 翻译自FreeRTOS官网文档,原文网址:http://www.freertos.org/RTOS-Cortex-M3-M4.html          数以千计的FreeRTOS应用运行在ARM Cortex-M内核上。令人惊奇的是,RTOS与Cortex-M内核组合使用,使得技术支持请求变得如此的少。大多数的问题点是由不正确的优先级设置引起的。这个问题也是在意料之中的,因为尽管Cortex-M内核的中断模式是非常强大的,但对于那些使用传统中断优先级架构的工程师来说,Cortex-M内核中断机制也有点笨拙(或者是说使用比较繁琐),并且违反直觉(这个主要是因为Cortex-M优先级数越大代表的优先级反而越小)。本章打算描述Cortex-M的中断优先级机制,并描述怎样结合RTOS内核使用。        说明:虽然Cortex-M3内核的优先级方案看上去比较复杂,但每一个官方发布的FreeRTOS 接口包(在FreeRTOSV7.2.0\FreeRTOS\Source\portable文件夹中,一般为port.c)内都会有正确配置的演示例程,可以以此为参考。   有效优先级   Cortex-M 硬件详述          首先需要清楚有效优先级的总数,这取决于微控制器制造商怎么使用Cortex内核。所以,并不是所有的Cortex-M内核微处理器都具有相同的中断优先级级别。        Cortex-M构架自身最多允许256级可编程优先级(优先级配置寄存器最多8位,所以优先级范围从0x00~0xFF),但是绝大多数微控制器制造商只是使用其中的一部分优先级。比如,TI Stellaris Cortex-M3和Cortex-M4微控制器使用优先级配置寄存器的3个位,能提供8级优先级。再比如,NXP LPC17xx Cortex-M3微控制器使用优先级配置寄存器的5个位,能提供32级优先级。        如果你的工程包含CMSIS库头文件(这里是指Cortex M3的CMSIS库头文件,也就是core_cm3.h,可以在ARM官网下载),则头文件中的宏__NVIC_PRIO_BITS定义使用多少优先级寄存器的位(默认是4位)。   应用到RTOS                RTOS中断嵌套方案将有效的中断优先级分成两组:一组可以通过RTOS临界区屏蔽,另一组不受RTOS影响,永远都是使能的。configMAX_SYSCALL_INTERRUPT_PRIORITY在FreeRTOSConfig.h中配置,定义两组中断优先级的边界。逻辑优先级高于此值的中断不受RTOS影响。最优值取决于微控制器使用的优先级配置寄存器的位数。   与数值相反的优先级值和逻辑优先级设置   Cortex-M 硬件详述   有必要先解释一下优先级值和逻辑优先级:在Cortex-M内核中,假如有8级优先级,我们说优先级值是0~7,但数值最大的优先级7却代表着最低的逻辑优先级。很多使用传统传统中断优先级架构的工程师会觉得这样比较绕,违反直觉。以下内容提到的优先级要仔细区分是优先级数值还是逻辑优先级。 接下来需要清楚的是,在Cortex-M内核中,一个中断的优先级数值越低,逻辑优先级却越高。比如,中断优先级为2的中断可以抢占中断优先级为5的中断,但反过来就不行。换句话说,中断优先级2比中断优先级5的优先级更高。 这是Cortex-M内核最容易让人犯错之处,因为大多数的非Cortex-M内核微控制器的中断优先级表述是与之相反的。   应用到 RTOS            以“FromISR”结尾的FreeRTOS函数是具有中断调用保护的(执行这些函数会进入临界区),但是就算是这些函数,也不可以被逻辑优先级高于configMAX_SYSCALL_INTERRUPT_PRIORITY的中断服务函数调用。(宏configMAX_SYSCALL_INTERRUPT_PRIORITY定义在头文件FreeRTOSConfig.h中)。因此,任何使用RTOS API函数的中断服务例程的中断优先级数值 大于等于 configMAX_SYSCALL_INTERRUPT_PRIORITY宏的值。这样就能保证中断的逻辑优先级等于或低于configMAX_SYSCALL_INTERRUPT_PRIORITY。        Cortex中断默认情况下有一个数值为0的优先级。大多数情况下0代表最高级优先级。因此, 绝对不可以在优先级为 0 的中断服务例程中调用 RTOS API 函数 。   Cortex-M 内部优先级概述   Cortex-M 硬件详述                Cortex-M内核的中断优先级寄存器是以最高位(MSB)对齐的。比如,如果使用了3位来表达优先级,则这3个位位于中断优先级寄存器的bit5、bit6、bit7位。剩余的bit0~bit4可以设置成任何值,但为了兼容,最好将他们设置成1.        Cortex-M优先级寄存器最多有8位,如果一个微控制器只使用了其中的3位,那么这3位是以最高位对齐的,见下图:          某微控制器只使用了优先级寄存器中的3位,下图展示了优先级数值5(二进制101B)是怎样在优先级寄存器中存储的。如果优先级寄存器中未使用的位置1,下图也展示了为什么数值5(二进制0000 0101B)可以看成数值191(二进制1011 1111)的。        某微控制器只使用了优先级寄存器中的4位,下图展示了优先级数值5(二进制101B)是怎样在优先级寄存器中存储的。如果优先级寄存器中未使用的位置1,下图也展示了为什么数值5(二进制0000 0101B)可以看成数值95(二进制0101 1111)的。   (原出处,本图有误,查找英文出处修订改过)   应用到 RTOS           上文中已经描述,那些在中断服务例程中调用RTOS API函数的中断逻辑优先级必须低于或等于configMAX_SYSCALL_INTERRUPT_PRIORITY(低逻辑优先级意味着高优先级数值)。        CMSIS以及不同的微控制器供应商提供了可以设置某个中断优先级的库函数。一些库函数的参数使用最低位对齐,另一些库函数的参数可能使用最高位对齐,所以,使用时应该查阅库函数的应用手册进行正确设置。        可以在FreeRTOSConfig.h中设置宏configMAX_SYSCALL_INTERRUPT_PRIORITY和configKERNEL_INTERRUPT_PRIORITY的值。(关于这两个宏可以参考参数设置一章,网址:http://openmcu.net/post/kernel-config.html)。这两个宏需要根据Cortex-M内核自身的情况进行设置,要以最高有效位对齐。比如某微控制器使用中断优先级寄存器中的3位,设置configKERNEL_INTERRUPT_PRIORITY的值为5,则代码为:        #define  configKERNEL_INTERRUPT_PRIORITY     (5(8-3)) 对于每一个官方FreeRTOS演示例程,这也是在FreeRTOSConfig.h中要设置宏configKERNEL_INTERRUPT_PRIORITY为最低优先级时,为什么要将它设置为255(1111 1111B)的原因。使用这种方式指定这个值的原因是:FreeRTOS内核是直接在Cortex-M内核硬件上运行的(没有使用第三方接口库函数),要比大多数库函数先运行。现在也有开发第一个Cortex-M库函数计划。   临界区   Cortex-M 硬件详述          RTOS内核使用Cortex-M内核的BASEPRI寄存器来实现临界区(注:BASEPRI为优先级屏蔽寄存器,优先级数值大于或等于该寄存器的中断都会被屏蔽,优先级数值越大,逻辑优先级越低,但是为零时不屏蔽任何中断)。这允许RTOS内核可以只屏蔽一部分中断,因此可以提供一个灵活的中断嵌套模式。 那些需要在中断调用时保护的API函数,FreeRTOS使用寄存器BASEPRI实现中断保护临界区。当进入临界区时,将寄存器BASEPRI的值设置成configMAX_SYSCALL_INTERRUPT_PRIORITY,当退出临界区时,将寄存器BASEPRI的值设置成0。很多Bug反馈都提到,当退出临界区时不应该将寄存器设置成0,应该恢复它之前的状态(之前的状态不一定是0)。但是Cortex-M NVIC决不会允许一个低优先级中断,去打断当前正在执行的高优先级中断,不管BASEPRI寄存器中是什么值。与进入临界区前先保存BASEPRI的值,退出临界区再恢复的方法相比,退出临界区时将BASEPRI寄存器设置成0的方法可以获得更快的执行速度。   应用到RTOS kernel          RTOS内核通过写configMAX_SYSCALL_INTERRUPT_PRIORITY的值到BASEPRI寄存器的方法创建临界区。中断优先级0(具有最高的逻辑优先级)不能被BASEPRI寄存器屏蔽, 因此,configMAX_SYSCALL_INTERRUPT_PRIORITY绝不可以设置成0。
  • 热度 24
    2012-3-8 23:03
    2892 次阅读|
    1 个评论
    嵌入式软件开发中的一个基本需求就是能通过终端来输出调试信息,一般可通过2种方式实现:一种是使用串口线连接板上的UART和PC上的COM口,通过 PC上的超级终端来查看调试信息;另一种则是采用半主机机制,但有可能不被所用的工具链支持。基于Cortex-M3核的软件调试突破了这样的限制,Cortex-M3内核提供了一个ITM(Instrumentation Trace Macrocell)接口,通过SWV(Serial Wire Viewer)可调试由SWO引脚接收到的ITM数据。ITM实现了32个通用的数据通道,基于这样的实现,CMSIS规定用通道0作为终端来输出调试信息,通道31用于操作系统的输出调试(特权模式访问)。在core_cm3.h中定义了ITM_SendChar()函数,因此可通过调用该函数来重写 fputc,或者自己实现printf函数,以在应用程序中通过printf打印调试信息,并可通过ITM Viewer查看这些调试信息。有了这样的实现,嵌入式软件开发者就可以在不配置串口和使用终端调试软件的情况下输出调试信息,在一定程度上减少了工作量。 实现方法见附件
相关资源