MCU

MCU是Microcontroller Unit(微控制器单元)的缩写,它是一种集成了中央处理器(CPU)、存储器(ROM、RAM)、输入/输出端口(I/O)、定时器(Timer)、串行通信接口(UART、SPI、I2C等)和其他外围设备控制器的单个芯片。MCU通常用于嵌入式系统中,用于控制各种电子设备和系统。

由于其集成度高、体积小、功耗低以及成本相对较低等特点,MCU被广泛应用于各种嵌入式系统中,例如智能家居设备、医疗设备、汽车电子系统、工业自动化等。MCU的选择通常基于应用的需求,如处理性能、功耗、外设接口等因素。

机器中使用的电机大小不一,有的比手指还小,有的比卡车还大。 无论是在仪表上定位指示器,还是驱动机车,对于需要能够相当快地切换高电压和电流的控制电路来说,这些电感负载会对其造成严重破坏。

检测电机状态时同样如此。 例如,由于随着驱动器波形切换极性和负载而形成的电动势反冲,串联式电流传感器会承受巨大的尖峰和浪涌。 此外,这些电机感应数据必须实时可靠,才能实现更精确的应用,如医用输液泵和给药系统。

本文将介绍一些可用于将电机(及重电感负载)与驱动器和感应电路隔离的技术。

时间间隙

最简单的隔离技术实际上是半隔离解决方案。 它基于这样一个事实:当继电器或接触器处于打开位置时,会形成一个与电流回路串联的气隙,具有接近无穷大的电阻。 这是一种很好的隔离形式。

但是,当继电器或接触器切换到“接通”位置时,将不会发生电流隔离。 如果控制板与驱动电源一样参考相同的接地,那么任何噪声影响也会参考相同的接地。 这不仅使接地浪涌干扰控制电路,还会抵消在传感器级使用的任何共模噪声滤波技术效果。

传感解决方案可以使用滤波、衰减、增益和箝位技术来保持非电隔离,但仍受到保护。 例如,由于随着驱动器波形切换极性和负载而形成的电动势反冲,串联式电流传感器可承受巨大的尖峰和浪涌。

在双向感应中,隔离是必须的。 这意味着,电机、传感器和驱动器全部能够以相互参考的方式有效浮动。 实际上,系统将在某一点(如地面)使用并参考一个主要接地。 但是,为了进行实际分析,它们均被隔离。

隔离选项

有几种很好的技术和方法可帮助我们保护驱动器和感应电路。 在设计阶段使用的一种简单方法就是,确保您的设计中存在滞后(图 1)。 该时间窗可防止在使用绝对阈值时发生状态振荡。

图 1:在电机控制回路设计中采用滞后是一种简单而有效的方法,可帮助消除在达到感应阈值时产生的某些打开和关闭震颤。

一种经验证有效的常见技术是光伏隔离,也称为光电隔离。 集成的单芯片器件提供了良好的性能水平,可进行级联以使用低电平逻辑信号来控制非常高的功率水平。

此外,各种有用的输出级(包括数字输出、开集、达林顿复合晶体管、开漏、栅极驱动器以及双向可控硅和 SCR)都集成到了这些隔离器件中。

与变阻器、浪涌抑制器和瞬态抑制器结合使用时,光电隔离是一种很好的技术,使各零件保持高达 50,000 V 的隔离,例如 TT Electronics OPI150使用轴管结构来处理非常高的电压水平(图 2)。 请注意,在某种情况下,电压会变得足够高并在单片器件上的引脚间产生电弧,特别是在具有细间距的小型封装中。

图 2:为了保持 50,000 V 的隔离,这些光电耦合隔离器需要大约 3 英寸的间隔。 单片式表面贴装封装将在非常高的电压水平进行电弧放电。

另外,单个封装中采用多个隔离器成为单独控制三相电机的有效解决方案。 请注意,所有 LED 驱动器应与隔离式电源轨位于同一侧。 例如,不要使用四通道器件中的三个驱动器来驱动三相电机的线圈,且不要使用第四个驱动器作为转速计接回控制器。 请对转速计使用单独的光电隔离器。

固态继电器也利用光电隔离,并将各种出色特性(如 AC 输出)与过零和电阻控制的版本相集成。

此外,20 mA 至 160 A 的电流范围可直接由逻辑驱动。 例如,Crydom HDC200D160 固态继电接触器。 适合 4 至 32 V 输入,采用 SPST 配置,高达 160 A 的输出电流水平可使用内部 2.5 KV 光电隔离器在“开”、“关”或基于 PWM 的配置中进行切换。 请注意,在全电流条件下即使导通电阻低至 4 mΩ,此零件也需要耗散 100 瓦。

深入了解

光伏隔离除了用于隔离驱动和控制之外,还可用于隔离监控电机速度、加速度、电流、相位角等数据并将之传回的传感器系统。 此时会变得有点困难,因为还会传递模拟信号,而不仅仅是数字开/关控制。

一种可有效使用的技术是压频转换。 一经标准化和线性化,传感器的值便会馈送到压控振荡器,从而促使光电隔离器回到控制器板。 控制器通过累加门控计数来恢复该值。

类似地,也可以使用脉冲宽度调制,而脉冲宽度对应于标准化范围内的值。 PWM 的优势是每个样本都可以表示一个读数。 采用 VCO 方法,门控累加器的响应时间会变得更慢,但却具有使脉冲噪声平均化的优势,因为一个损坏的读数将仅存在一两个错误。

线性光电隔离器不像数字光电隔离器那样常见,但它们确实存在。 例如,Vishay IL300-F-X007 线性光电隔离器。 此零件使用两个检波二极管,一个位于输出级,另一个可在驱动级的反馈环路中使用。 这允许使用运算放大器以线性方式偏置光电隔离器的发射器部分(图 3)。 随着输入信号的增加,保持隔离时的输出电流也会不断增加。

图 3:使用两个紧密配合的由同一光电发射器照亮的光电检测器时,一个可用于线性驱动器反馈回路, 另一个可在保持电气隔离的同时报告相同状态。

证据表明,增强型势垒也是为传感器系统提供高电压隔离的理想选择。Texas Instruments 的 AMC1305x 高精度、增强型隔离式三角积分调制器是集成式传感器系统的良好典范,其设计可提供相当高分辨率模拟电平的单片式隔离(图 4)。 它使用电容式双隔离势垒将输入级与输出级分离,并达到 7,000 V 峰值和 10000 V 的浪涌额定电压,符合多种 VDE、UL 和 CSA 标准。

图 4:在此单芯片隔离式传感器接口和驱动器中使用了一种电容式双势垒隔离技术。 数字滤波器可以 78000 样本/秒的速率提取 16 位分辨率,同时受到高达 7,000 V 的隔离保护。请注意,浮动式电源使感应部分具有浮动负载。

通过在电机相传导路径中使用分流电阻器,它可以获取馈送给三角积分调制器的低电平信号。 该调制器的输出将被馈送回控制微处理器,该处理器可使用数字滤波算法以 78000 样本/秒的速率提取 16 位分辨率。

总结

电机的使用数量是如此众多,每一个设计都有自己的故事,但共同的需求是保护微控制器和传感器接口远离电机负载和状况快速变化的危险。 正如本文所述,有多种优秀的隔离技术可帮助您解决所面临的问题。

文章来源:物联网在线

围观 359

一、区别 

两则的分流造成的主要原因是数字信号处理的简便性,考虑一个数字信号处理的实例,比如有限冲击响应滤波器(FIR)。用数学语言来说,FIR滤波器是做一系列的点积。取一个输入量和一个序数向量,在系数和输入样本的滑动窗口间作乘法,然后将所有的乘积加起来,形成一个输出样本。 
 
类似的运算在数字信号处理过程中大量的重复发生,使得为此设计的器件必须提供专门的支持,促进了DSP器件与通用处理器(GPP)的分流:

1、对密集乘法的支持 

2、存储器结构

此外,DSP处理器几乎都不具备数据的高速缓存。这是因为DSP的典型数据是数据流。也就是说,DSP处理器对每个数据样本做计算后,就丢弃,几乎不再重复使用。

3、零开销循环 
 
DSP算法的一个共同的特点,即大多数处理时间都花在执行较小的循环上,也就容易理解,为什么大多数的DSP都有专门的硬件,用于零开销循环。所谓的零开销循环是指处理器在执行循环时,不用花时间去检查循环计数器的值,条件转移到循环大额顶部,将循环计数器减1。

与此相反,GPP的循环使用软件来实现。某些高性能的GPP使用转移预报硬件,几乎达到与硬件支持零开销循环同样地效果。

二、联系 
 
按照传统方式,嵌入式应用中的数字信号处理器(dsp)相对于主微控制器起到从属的作用。在这些应用中,MCU用作系统控制器,而大量的数据处理留给DSP。例如,在音频或视频处理器应用中有可能需要人机界面管理,或则是整个系统的控制。 
 
为完成这些任务,有几种系统设计方案选择。 
 
第一种方案是将DSP和MCU芯片组合在印制电路板上。这种方案成本高并且占用面积大,但是可适当地调整每个芯片的尺寸以最大限度的满足系统需要。   
 
第二种方案是将DSP功能合并到一个MCU中。这种方案只适合于直接的信号处理应用。MCU的时钟频率和计算体系结构根本上不太适合大量的数字处理。有些MCU试图通过增加一个乘法和累加器(MAC)(dsp一个特点)来补偿上述不足。但是这种方案任然缺乏高级应用所需要的基本的“由上至下”的体系结构设计。 
 
第三种方案是一种将dsp和MCU组合在单个封装内的多芯片模块(mcm)。这种方案的局限性是,设计工程师必须按“50/50”的时间比例分配给控制和DSP功能;例如,一旦DSP超出时间,MCU不能完成计算任务。像第一种方案选择一样,当DSP和MCU内核独立存在的时候,需要两套开发工具。 
 
已经出现第四种方案它是将MCU的功能合并到一个DSP中。这类方案的一个例子是美国模拟器件公司(Anolog Device Inc.,简称ADI)的Blackfin 处理器系列。这些新型处理器具有统一的经过优化的体系结构,不仅适于数据计算,而且也适于有关的控制任务。通过平衡执行控制任务与复杂计算的要求,这种方案可以根据系统实时处理的需要,完成100%的控制或者100%的计算任务。完成所有这一切任务不需要在DSP模式和MCU模式之间的模式转换。 

DSP和MCU  

首先让我们回顾一下DSP和MCU的典型功能。DSP主要是在一单个时钟周期内尽可能完成多个MAC(乘法和累加)操作。为了这一点,指令的操作代码通常是可变的超长的指令字(VLIW)。DSP也适于工作在紧密、高效的环路中。另外,为了达到性能指标通常需要编写优化的汇编代码。由于DSP的算法程序一般装在小容量、短等待时间的内置存储器中,所以代码密度通常不是大问题。像DSP主要用于完成计算一样,MCU主要用于完成控制功能。同样地,典型的MCU应用包括许多条件操作,在程序流程中频繁地跳转。通常使用C或者C++语言编写程序。代码密度极为重要,并且根据编译代码的长度来评估算法。存储器系统是基于高速缓存从而允许该系统设计工程师用较长等待时间从较大的存储器中调用较大程序。利用基于高速缓存系统,程序员不需要考虑如何以及何时将指令输入到内核去执行。

统一的DSP和MCU兼备两者的优点。它的指令集由16 bit,32 bit和64 bit操作码组成,但是由于最常用的指令采用16 bit编码,所以编译代码密度大小与那些流行的MCU相同。另外,它包括一个存储器保护功能以及指令高速缓存和数据高速缓存,作为整个存储器管理单元(MMU)的一部分。此外,容易提供一套完整的C/C++开发工具,提供可选汇编语言或者全部汇编语言适合算法优化的编程。  
  
RTOS 

系统控制的一个重要方面是任务管理。实时操作系统(RTOS)逐渐地用于控制复杂系统中多种正在进行的和同时发生的任务。通过提供对任务调度与管理的支持,RTOS简化了编程模式,这通常是由MCU控制的,由于普通的DSP不具备支持RTOS需要的所有功能以便有效地控制。 

然而,统一的DSP和MCU促进了RTOS几个重要功能的发展。第一个是限制访问功能以保护或者保留存储单元。第二个是配备单独的堆栈和帧指针以减少操作系统(OS)请求以及中断和异常处理所需的等待时间。第三个是具备单独的用户操作模式和管理员操作模式。过去,DSP按照等效于管理员操作模式工作,从而允许在任何时间完全访问所有的系统资源。然而MCU提供类似的在用户操作模式,它允许在OS的顶层运行应用软件。现在,在一个统一的体系结构下提供两种操作模式,因为增强的DSP系统能够限制用户应用软件仅通过OS访问系统资源。 

MCU的一个优点是包含使用灵活和种类齐全的外围设备。作为通用的嵌入式控制器,它们通常具备可编程输入输出(I/O)标志、定时器、串行接口和日益增加越来越复杂的标准接口。MCU外围设备的主要作用是嵌入式控制,而不是大量计算。例如,一个实时时钟信号可以唤醒一只温度传感器用以采集环境温度并且将一个延迟的信息通过I/O引脚反馈到MCU。然后,一个定时器的脉冲宽度调制(PWM)输出相应地能够增加或者减小风扇电机的转速。像MCU一样,统一的DSP和MCU具备一套系统控制外围设备(例如,实时时钟、多功能定时器、监视定时器、双向标志位引脚)。然而,它还包括一些高速接口(例如,PCI、异步或者同步存储器控制器、USB、并行视频接口)以便通过这些接口,与许多DMA通道配合快速搬移数据,从而有助于有效利用高速DSP内核的信号处理能力。 

功耗控制一直是嵌入式控制器的一项功能。但是,当系统要求DSP具有优良的性能时,对其电源的选择就不太理想。如果将独立的MCU和DSP芯片应用于电源敏感的场合,通常必须为每个芯片提供一个单独的开关稳压器,因为这两个器件的内核电压经常不一致。这会导致降低电源变换效率和增加设计器件的引脚数目,最终增加布线的复杂程度和解决方案的成本。此外,当MCU和DSP的内核集成到一个芯片上时,电源解决方案本质上不是最佳的,因为它必须满足2个完全独立并具有不同负载特性处理器的需求。将这种情况与统一的DSP和MCU相比较,它包含一个集成动态电源管理(DPM)控制器。由于它是只有一个处理器的体系结构,所以该控制器能够完全适合给定应用的需求。它提供几种固有的电源模式以支持多种系统性能等级。另外,对于未使用的时钟和L2存储器可选择性地禁止。该PLL的频率可在一个宽范围(通常1倍~31倍)进行调节,以满足在DSP和MCU内部多层次的处理需求。最后能够调节电压(外部或者通过一个集成的开关控制器)以提供指数式的节省功耗。由于系统成本、开发容易、器件采购和升级能力的原因,设计工程师正趋向采用一种单芯片解决方案用于嵌入式信号处理解决方案。这种单芯片解决方案必须能够同样好地完成DSP和MCU的功能,所以有必要提出一种统一的处理器体系结构。面对MCU的挑战,比较简单的解决方案是将MCU的功能合并到一个高性能的DSP内核,而不是与此相反。当今一个统一的DSP和MCU平台也已经投放市场,它将在MCU和DSP目前应用领域提供许多应用。 

围观 376

我们在从事MCU应用开发过程中,难免会碰到MCU芯片异常的问题,其中有些异常比较严重。比如异常复位,表现为复位脚有电平跳变或者干脆处于复位电平;在做代码调试跟踪时,发现代码根本就进不到用户main()程序;或者时不时就感觉芯片死掉了,功能完全不可控等。

出现类似严重异常情况的原因我大致总结了以下几方面:

1、电源问题。比方电源质量差,纹波过大,尤其开关电源供电时;或者供电芯片质量差,输出不稳定;或者系统供电能力不足而引起电源波动等。

2、时钟问题。一般表现在时钟配置错误或者时钟工作不稳定,比方配置超出芯片主频工作范围,外部时钟脆弱不堪等。

3、BOOT配置脚问题。经常遇到有人因为BOOT脚的焊接或接触不良导致各类奇怪问题。这种情况多表现在芯片功能时好时坏,工作不稳定。所谓“坏”的时候就是芯片表现得类似死机一般。

4、启动文件问题。经常因为选错了启动文件,导致程序无**常运行,或者说调试时好好的,脱机运行就出鬼。这点在做不同系列芯片间移植时最容易碰到。

5、中断请求位清除问题。由于中断请求位没有及时清除导致中断没完没了的重复进入中断,感觉系统死机一般。

6、堆或栈的越界溢出。这个也会导致芯片无**常工作。

7、VCAP脚问题。有些MCU芯片有VCAP脚,这类脚往往需要接上适当的电容,如果无视了它的话,也可能导致整个芯片的功能异常。

来源:网络

围观 524

从互联网、到移动互联网、再到物联网

从互联网、到移动互联网、再到物联网,连接的形态正在发生着翻天覆地的变化。

互联网时代,主要是电脑与网络间的连接;

移动互联网时代,则使得手机与电脑和网络连接在一起。

而物联网时代,将会让各种各样形态的智能产品,从手机、手表、手环等个人相关的产品,到汽车、音箱、空调等家用产品,再到智慧农业、智慧工业等相关的产品,都将进行相互连接。

物联网的发展瓶颈

据研究数据显示,到2020年,物联网连接的设备将达750亿台。这些产品间的互联,是实时而且是长久的,有些需要几年甚至几十年。

要实现这种互联,超低功耗 是物联网的关键要素之一。如何实现设备间的超低耗连接?是从无线连接技术、到芯片、传感器、微处器理等上游技术方案的优化,还是另辟蹊径,以全新的方式突破瓶颈?

NB-IOT 迎来物联网新突破 ?

近期在韩国召开的3GPP 标准会议顺利结束,NB-IoT对应的3GPP协议相关内容获得了RAN全会批准。

低功耗广域物联网传输速率能做到几百Kbps,覆盖要比现在的覆盖好100倍,可以连接到地下车库,可以在一个扇区内支持50万的连接。

而低功耗能实现一个电池就能支持一个物联网模块长达10年。

目前市场对NB-IoT期待还是比较大的,华为、爱立信、中兴等科技企业,全球电信运营商都已经着手布局NB-IoT技术,最快2017年迎来物联网新元年。

短距离无线技术纷纷升级

蓝牙技术、Zigbee、Wi-Fi,这三种目前主流短距离无线连接技术,蓝牙以点对点的超低低功耗见长,Zigbee以低功耗和MESH自组网见长,而Wi-Fi则以大数据高带传输见长。

而这三种方式以免实时收费的优势,在物联网中的发展定也占据一席之地。

为强化在物联网的应用,Wi-Fi联盟推出低功耗Wi-Fi技术,Zigbee联盟宣布Zigbee3.0获批。

在发布蓝牙4.2之后,前段时间蓝牙联盟也发布了2016年的技术蓝图。

对于蓝牙2016年的技术蓝图,蓝牙技术将实现更长通信距离、更快传输速度及Mesh联网功能。同时,宣传其开发工具Bluetooth Developer Studio上线以及发布全新蓝牙网关架构发布。

“今年,蓝牙技术的演进将进一步为包括智能家居、工业自动化、基于位置的服务和智能基础设施等高速增长行业注入更多动能。”蓝牙技术联盟开发者计划总监何根飞指出。

蓝牙: 提升距离、速度及MESH联网

在通信距离上,Bluetooth Smart的射程范围最多将可扩大4倍,改变智能家居和基础设施领域的应用,为整个室内空间或户外中的不同使用情境提供传输距离更长、连接品质更稳健的无线连接。传输速度在不增加功耗的情况下也将提升至当前的100%,可为关键性应用如医疗设备实现更快速地数据传输,以提高反应速度并降低时间延迟。而Mesh联网功能则能让蓝牙网络的覆盖范围得以遍及整栋建筑或整户住宅,使得范围内的蓝牙设备彼此互联,开启智能家居和工业自动化的更多应用可能。

同时,为了推动蓝牙设备与其他连接技术设备的连接,蓝牙技术联盟宣布推出传输发现服务(Transport Discovery Service;TDS),提供利于设备发现并连接的通用框架。未来,无论设备采用哪种无线技术,透过TDS,设备间能够实现彼此发现并连接。何根飞指出:“TDS让设备仅需最少的电量即可运行,将为物联网(IoT)解决了一项重要的难题。

此外,宣布开放蓝牙网关架构并推出入门工具套件,助力开发者快速为蓝牙产品创建互联网网关。具有蓝牙功能的传感器能透过蓝牙技术连接网关设备,向云端传递数据并进行数据交换。该架构让所有人都能对固定式的、具有蓝牙功能的传感器进行远程监测和控制,藉此扩展了物联网的潜在应用领域。

多功能无线产品也应运而生

在多种无线连接技术真正融合之前,仍存在着多种连接方式多方并存,竞争互补。此背景下,多功能无线产品也应运而生,众多厂商纷纷在 BLE、zigbee、470、WIFI等模块进行研发和优化。

物联网多元化发展芯片厂商将何去何从

随着物联网应用的多样化和应用需求的多元化,企业开始从专注于技术的提升转向如何更好地满足客户的需求。在推动物联网的连接应用上,MCU的发展又将如何转变?针对物联网领域的应用,低功耗、小引角、无线等是否会成为未来MCU的主流?实际应用中,MCU+传感器+合作伙伴软件的系统化方向又是否可行?

物联网爆点即将到来,你,准备好了吗?

文章来源:周立功单片机

围观 401

永磁同步马达(PMSM)通常用于高效能、低功耗的马达驱动。高效能马达控制的特征为可在整个速度范围内平稳旋转,零速度时有完全的扭矩(Torque)控制,且能达到快速加速和减速。为了达到上述要求,PMSM采用向量控制技术,该技术通常还被称为磁场定向控制(FOC)技术。向量控制算法的基本思路是将一个定子电流分解为磁场生成的分量和扭矩生成的分量,分解后,这两个分量能单独进行控制;而马达控制器(亦即向量控制控制器)的结构几乎与一个他励直流马达(DC Motor)相同,这样便简化了PMSM的控制程序。

扭矩生成定理

PMSM的电磁扭矩分别由定子及转子两个磁场交互作用生成。定子磁场由磁通量或定子电流表示,转子磁场由恒定的永久磁铁(弱磁情况除外)的磁通量表示。若将这两个磁场比喻为两个条形磁铁,则可以想象当磁铁互相垂直时,吸引/排斥磁铁的力是最大的。这意味着,设计人员应该要依此定理控制定子电流,也就是要创建垂直于转子磁场的定子向量。转子旋转时,也就必须更新定子电流,使定子磁通向量与转子磁铁保持90度垂直。

当定子和转子磁场垂直时,内嵌式PMSM的电磁扭矩方程式为:扭矩=33ppλPMIqs(pp为磁极对的数目,λPM为永久磁铁的磁通,Iqs则为交轴的电流幅值。)当磁场垂直时,电磁扭矩与q轴电流的幅值成正比。微控制器(MCU)须调节定子相电流强度,同时调节相位/角度,但这不像直流马达控制那样容易达成。

简化电流控制 创造最佳FOC效能

直流马达控制很简单,因为其所有受控的量都是稳定状态的直流电(DC)值,而且电流相位/角度受机械换向器的控制;但在PMSM领域中,要如何才能实现磁场定向控制技术?

DC值/角度控制

首先,须知道转子的位置,其常常与A相有关。我们可使用绝对位置传感器(如解析器)或相对位置传感器(如编码器),并处理所谓的「对齐」。对齐过程中,将转子与A相轴线对齐,如此一来A相轴线与直轴(励磁分量所在轴)就对齐。在这种状态中,转子位置设为0;亦即,构建静态电压向量,令所需的电压在d轴,位置设为0,这导致定子磁场吸引转子,并将直轴与A相轴线对齐。三相量可通过Clarke变换转换成等效的二相量。接着,再透过Park变换将两相静止参照系中的量转换成两相旋转坐标系中的直流量,这期间要用到转子位置。

转子的电气位置是转子的机械位置再乘以极对数pp。经过一系列控制之后,设计人员应当在马达端子上生成三相交流电压,因此所需/生成电压的直流值应当通过反Park/Clarke变换进行转换。

幅值控制

所有变量现在都是直流值,可以轻松控制,但是要如何控制它们的幅值呢?对于幅值控制,建议使用级联结构的PI控制器,且可以像直流马达那样控制许多状态量,如相电流(扭矩环)、转速和位置。

FOC步骤

首先,须测量马达的相电流,并使用Clarke变换将它们转换为两相系统,及计算转子位置角;接着,再使用Park变换将定子电流转换为d、q坐标系统上;此时,定子电流扭矩(isq)分量和磁通量(isd)生成分量由控制器单独控制;最后,透过逆向Park变换,输出定子电压空间向量从d、q坐标系转换回两相静止坐标系,并使用空间向量调制,生成三相输出电压。

无传感器控制

设计人员需要转子的位置信息,才能高效地控制永磁同步马达,然而在一些应用中于传动轴上安装转子位置传感器,会降低整个系统的耐用性和可靠性。因此,设计人员的目标不是使用这个机械传感器直接测量位置,而是利用一些间接的技术估算转子位置。

低速时,须高频率注入或开环启动(效率不高)等特殊技术来启动马达并使之达到某一个转速,在这个转速下对于反电动势观测器来说,反电动势已足够。通常,5%的基本速度足以使无传感器模式正常运行。

中/高速时,使用d/q参照系中的反电动势观测器。内部脉宽调变(PWM)频率和控制环路频率必需够高,才能获得合理数量的相电流和直流母线电压的样本。反电动势观测器的计算要求乘累加、除法、正弦/余弦(sin/cos)、开方等数学计算,适合使用基于ARM内核的Kinetis MCU或Power Architecture系列的数字讯号控制器(DSC)。

弱磁控制

超过马达额定转速的作业要求,PWM逆变器提供的输出电压高于直流母线电压所限制的输出能力。要克服速度限制,可实施弱磁算法。负的d轴给定电流将提高速度范围,但由于定子电流的限制,可得到的最大扭矩会相对地降低。在同样的直流母线电压限制下,控制d轴电流可以起到弱化转子磁场的效果,这降低了反电动势电压,允许更高的定子电流流入马达。

文章来源: 新电子

围观 272

在当今群雄逐鹿、竞争激烈的可穿戴市场中,获得成功的关键在于差异化的产品特性和服务。制造商和服务提供商竞相争夺同样的可穿戴“市场大饼”。成功设计可穿戴式产品是一项复杂的工程。成功的产品需要成本、性能、功能、电池使用寿命的完美组合,必须具备引人注目的外观、感受和表现以吸引消费者。我们需要通过关注最终用户体验和探索使用情形,以便在可穿戴产品中集成各种不同元素并完成复杂的权衡。

典型的嵌入式系统通常开始于功能和能力定义,它们可说是项目的首要驱动关键。同样,成功的可穿戴产品设计需求要关注于“用户体验”。这些需求包括可穿戴产品的外观、感觉和与最终用户的交互,以及它所引起的印象、感受和情绪。

当今有许多能够监测健康和生物特征、跟踪运动距离、记录移动路线、估计能量消耗、以及来电和邮件通知的可穿戴产品,同时可以无缝的和我们的智能电话进行整合和通信。这些可穿戴产品设计非常专注用户体验;它们时尚、特性丰富、易用、价格适中、并且可连接到物联网(IoT)。

可穿戴市场能够分成三种产品类别,每一类别需要的设计权衡,如图1所示:

●活动追踪器:这些相对简单的产品往往不包括LCD显示屏。如此简单的好处之一是这些产品是经济的、易用、并且往往有最长的电池使用寿命。

●带有小型或中型显示器的健身带和“超级手表”:这些可穿戴产品可能包括多种生物和环境传感器,并且在特性/功能、电池使用寿命和成本之间选择最佳平衡点。

●智能手表:这些手表大小的复杂设计占据高端市场,并且通常运行在操作系统(例如Android Wear)之上。智能手表提供特性丰富的用户体验,但是更多功能和处理能力消耗更多的电池电量,通常每天都需要进行充电。

图1:每种类型的可穿戴产品都需要特有的设计权衡

可穿戴产品中的一个关键器件选择是微控制器(MCU)。选择具有出色低功耗操作的MCU是大多数可穿戴应用的关键所在。当今的32位架构中,ARM Cortex-M系列已成为领先的低功耗处理平台。Cortex-M0+是2级流水线架构,在一些性能效率和低活动模式电流消耗之间进行了最佳权衡。Cortex-M3和M4处理器提供了3级流水线,具有良好的功耗和性能平衡。M4处理器的单精度浮点单元和DSP扩展能够为软件算法大大缩短了执行时间和能量消耗,例如常用于从噪声传感器数据中提取信息的Kalman滤波算法。智能手表需要更先进的处理器(例如Cortex-M7)和专有内核,要为更高处理能力和高带宽内存接口的一些功效进行权衡。表1总结了主要可穿戴产品类型所需的关键处理能力和特性需求。

表1:ARM Cortex-M系列满足各类可穿戴产品需求

选择合适的电池技术也是重要的设计考虑。一次性电池具有不需要任何专门充电电路的优势;它们也有更好的能量密度并提供更多的能量容量。不足之处是它们使得机械设计变得更复杂并且限制了整体产品的易用性。可充电电池能获得更轻薄的设计,但增加了成本和设计复杂性。无论如何选择,可穿戴产品都需要小巧的外形,这就限制了电池的尺寸和提供的能量。可穿戴产品需要一种系统级的方案,专注于尽可能的在包括硬件和软件在内的所有级别上减少能耗。

在追求更长电池使用寿命的过程中,可穿戴产品的设计师不能为能效而牺牲良好的用户体验。幸运的是,MCU现在已经为获得更长电池使用寿命而在最佳性能和低功耗优化之间取得平衡。除了低功耗电流之外,快速唤醒时间也是关键特性之一。休眠到激活状态的快速转换能够获得更好的系统响应并减少能耗。具有灵活唤醒源、超低功耗定时器和串行接口的MCU也为设计者提供了强大的选项。更先进的MCU即使在MCU处于休眠状态也能够提供有效运行的外设。这种自治外设技术的典型例子是Silicon Labs的外设反射系统(Peripheral Reflex System,PRS),如图2所示,在EFM32 Gecko MCU外设中,例如模数转换器(ADC)和直接存储器存取(DMA)引擎能够自治的响应外部输入或中断触发,而无需任何CPU参与。这种方法能够设置MCU处于休眠状态,可以在来自传感器的输入超过预设定的门限之后才醒来,而不是让MCU在活动、高功耗状态下不停的查询同一个传感器。

图2:通过使能MCU外设自治运行并且保持处理器内核处于休眠状态,外设反射系统节省系统能耗

可穿戴产品上基于CMOS的传感器为丰富用户体验提供了基础,使能新应用和使用案例。有三种主要的可穿戴产品传感器类别:运动传感器、环境传感器和生物传感器。每种传感器类型提供了对于最终用户活动、环境和健康的特有的洞察。当组合起来,它们更加强大。可穿戴产品中传感器的组合和使用需要许多权衡。光学传感器需要使用能够穿透光线的材料。特定传感器的电源可能需要门控,以至于它们不会成为电池的永久负载,但是这种方法增加了设计复杂性。预期的用户体验、成本和使用案例最终驱动可穿戴产品中传感器集成的最佳水平。

移动app是所有可穿戴解决方案的重要组成部分,而Bluetooth Smart已迅速成为连接可穿戴产品到基于iOS和Android的移动设备时的主要无线解决方案。Bluetooth Smart具有优化的低功耗运行模式。它非常适合于传输传感器数据、同步用户信息、提供空中更新支持。智能手机提供了非常灵活的用户界面,app实现了丰富的个性化能力,这种能力无法简单的以其他方式通过可穿戴产品单独实现。然而,添加和使用无线连接会增加设计成本。成功的可穿戴设计需要谨慎的平衡处理。无线传输通常是可穿戴系统中的最高耗能者。决定消息以多大数量和多大频率进行传输或者可穿戴产品与智能手机以多大频率进行同步,对于最终产品的电池使用寿命会产生巨大的影响。高数据量的使用能够把电池使用寿命缩短到数小时或数天。而更保守的方法也许能够使同样产品的寿命延长到几个星期或几个月。

可穿戴市场可能已不再处于起步阶段,随着低功耗MCU、基于CMOS传感器和无线SoC的不断突破,我们现在正处于可穿戴产品创新的新时代前夕。随着可以更容易的访问更精确传感器驱动的最终用户数据,可穿戴设备能够可靠和唯一的识别用户。从健康和活动跟踪到安全和可靠用户识别的转换能够在医疗保健、安全、移动支付和社交网络开辟更多新机会。第一个在这些领域以适当成本获得引人注目用户体验的可穿戴式产品,将成为市场的下一个大赢家。

文章来源:物联网在线

围观 342

便携式系统通常用电池供电,而电池使用寿命取决于系统的功耗。在提倡“绿色环保”计划的今天,即便是市电供电的应用也要把功耗作为一项重要的产品选择标准。

便携式设备通常分为使用充电电池供电的设备和使用非充电电池供电的设备。如果应用使用的是非充电电池,那么电池使用寿命将是至关重要的规范要求。对于任何应用而言,电池使用寿命取决于:
所用电池的可用电荷量;
应用的平均电流消耗。

使用充电电池的应用还要考虑到另一个参数,那就是电池充电的频率和每次充电所花的时间。从最简单的角度说,延长电池使用寿命可通过提高电池容量或降低应用的平均电流消耗来实现。由于电池重量过大会影响系统的机械约束和成本,因此系统设计人员只能将电池电量提高到一个限值。在电池化学技术的全新发展不断提高电池电荷密度的同时,我们还亟需想办法继续降低平均功耗。

应用的平均功耗取决于:

每个电路组件的功耗;

应用的供电方案以及电力如何通过栅极输送到设计的各个部分;

设计中的各个组件是如何在不同的工作条件下工作的;

每个组件的功耗可从各组件的器件数据表获得。了解每个组件的功耗拆分信息非常重要,这有助于设计出色的系统,实现低功耗优化。

不妨来设想一个简单的小型电池供电数字时钟。该设备可用于计时,并在按下按键时能显示当前时间。设备通常处于断电模式以节电,只有在检测到按键动作时才会被唤醒并刷新显示屏。显示屏和主电路在工作一段时间后会返回断电模式以节电。该系统的高层次方框图如下:

图1:小型数字时钟的高层次方框图

电路采用RTC计时,用主控制器芯片与RTC通信,并管理显示屏界面。整个系统大部分时间处于断电状态,显示屏关闭,主控制器也处于断电模式,这样电流消耗可降到最低,所有外设都关闭。按键则作为唤醒设备的触发器,以获取RTC数据并在显示屏(通常为LCD)上进行显示。

要分析这种系统的功耗,要看的第一个数据就是设备和显示屏都处在断电模式下的典型平均电流是多少。应查看每个外设和控制器的数据表,以了解功耗数据。为了最大限度地降低功耗并延长电池使用寿命,应做到给所有不使用的外设断电。在本应用中,这个不使用的外设就是显示屏。与显示屏形成对比的是,RTC需要始终进行供电,以实现计时功能。

MCU通常是大多数系统中总功耗的主要来源。这一点同样适用于本案例中的应用,如果不能选择并适当使用正确的MCU时尤为如此。有很多办法可降低MCU的功耗,包括但不限于:

1. 降低工作频率

2. 以更低的工作电压运行

3. 使用低功耗工作模式

MCU能在各种工作频率上运行。然而,不同器件支持的频率各不相同。MCU的功耗与工作频率成正比,随着频率的升高,动态功耗也会升高。因此,MCU应该以尽可能低的频率运行,同时能够可靠地满足系统的需求。

此外,频率也与时钟源有关。设备支持各种时钟源选项,包括内部高速振荡器、内部低速振荡器、外部晶体振荡器等。在大多数情况下,外部晶体可提高精确度,但代价是功耗较高。选择低功耗时钟源,往往要权衡速度和精确度。为选择适当的时钟源,确保系统性能和功耗的完美平衡,应该认真研究系统要求。

大多数MCU支持低功耗工作模式,从而满足低功耗系统设计的要求。同样,支持模式的数量以及每种模式的特性根据器件会有所不同。应适当使用低功耗模式,以降低平均功耗。常见的模式包括:

工作模式:MCU正常运行。

较低功耗模式:时钟经门控后送至MCU,保持各种寄存器和RAM的状态。

最低功耗模式:包括MCU在内的所有外设都断电。

当时钟经门控后送至MCU时,功耗就是静态功耗。静态功耗取决于几个因素,包括亚阈值条件和FET中的隧道电流等。此外,隧道电流在小型芯片设计的FET缩减时会成为主要因素(即尺寸减小使得氧化物的厚度减小)。

今天,我们已经拥有在单芯片上实现完整系统/子系统高度集成的SoC。 除了集成度之外,就功耗而言,这些SoC也有助于降低平均功耗,使其低于采用独立MCU和分立外设的情况。

文章来源:周立功单片机

围观 262

微控制器(MCU)深入人们应用生活,几乎大小设备都看得到MCU踪影,在MCU导入DSP数字信号处理器、FPU浮点运算单元功能后,MCU更大幅扩展元件可适用范围,这几年来,在众多MCU大厂纷纷针对旗下商品推出多样整合方案,不管是产品策略还是市场区隔,也让MCU市场更加丰富多元...

MCU(Microcontroller Unit)深入生活应用是不容易质疑的趋势,尤其是MCU在功能优化或市场区隔目的下,进行DSP(Digital Signal Processor)数字信号处理器或FPU(Floating Point Unit)浮点运算单元功能整合,使得MCU的可应用场域大幅扩展。

MCU整合FPU可以在进阶数值运算的精密度大幅提升、处理效能也能获得改善。

针对IoT应用开发的MCU方案,整合DSP可优化感测器数据撷取品质与提升信号处理效能。

如果以FPU或DSP导入目的,一般在MCU中追加FPU、DSP整合架构,主要目的还是在考量成本下的设计方向,尤其在早期半导体元件,SOC(System on Chip)系统单芯片与MCU存在一段价格差距,如果仅需要SDP或FPU进行运算加速,又不想选用高单价SOC,这时整合DSP或FPU硬件加速单元的MCU产品、不仅可以更好的提供运行效能,同时又能在成本控制上表现更加优异。

MCU整合芯片封装成本骤降 增加MCU功能扩充应用空间

以早期的SOC产品来看,搭载DSP与FPU硬件加速器是SOC产品的重要特性,其中DSP与FPU的应用方向主要以音讯、影像等处理加速运算为主,而在制程技术持续优化,SOC的成本逐步与MCU拉近,MCU在32位元甚至64位元架构下,也开始有结合DSP或是FPU硬件加速单元的解决方案。

先看看MCU加上硬件加速单元的优点,在MCU追加FPU导入,最直接的效益是早期利用MCU处理类似FPU运算内容,会因为MCU本身的运算架构限制,让运算结果得出时间会相对拉长,而在导入硬件加速器处理浮点运算时,因为硬件呼叫或是资料传递就能透过硬件算出数据,MCU本身耗在浮点运算的记忆体资源可以因硬件加速整合减少至少10%。

当然,从目的性来看,不管MCU有无整合FPU硬件加速单元,浮点运算需求使用MCU现有的运算能力也能得出结果,只是前提是计算过程会耗用较多运算时间与硬件资源,对于可等待、无需提供即时反应的系统自然可以不考虑整合FPU的MCU方案,但若是对系统效能、回馈反应速度要求高的整合需求,MCU结合FPU的效益提升不仅仅是运算资源耗用优化、节能优势等效果,反而是加快系统回应与效能提升的效用,才是MCU结合FPU硬件加速最直接、重要的功能改进,也让MCU可以因应更高复杂度的整合工作。

高阶数值运算 运用硬件加速满足设计需求

在早期MCU元件仍以8位元架构为主流的应用方向,MCU在资料处理与运算处理上,本来就有因架构的问题而有其处理限制,例如,MCU进行小数点、分数处理运算时,因为4位元或是8位元位数有限,就必须采用有限数值进行处理,透过数值结果的限制换取处理复杂度简化与效能要求目的,而这种因为数值处理产生的误差即“截断误差”,截断误差也会因为使用MCU进行数据运算的限制,而令误差数值产生扩大现象。

而在MCU整合FPU硬件加速,在运算同类型的数据处理时,例如在IoT物联网或是终端感测器应用中,常有将外部类比感测数据转换成数字资料的资料撷取、处理需求,这时透过MCU整合的FPU/DSP硬件加速单元,不仅可将感测数据更快速处理完成、加快系统回应,同时,也能导入进阶运算减少数据演算的误差。

在实际应用中,FPU硬件加速器本身并无法完全解决误差扩大问题,所以会有FPU、DSP等不同硬件加速整合架构下的应用目的考量,举例来说,透过DSP硬件加速器,可针对特殊数据类型更高速、可靠的运算处理输出,像是DSP可利用指令来进行多种运算,处理如快速快速傅立叶转换(fast Fourier transform;FFT)或有限脉冲回应(Finite impulse response;FIR)进阶运算中重要且耗资源的运算需求,甚至透过单周期的指令便能处理单一指令多重资料(Single Instruction Multiple Data;SIMD)运算需求,MCU在进行进阶数值处理方面还可获得进阶增强效益。

FPU/DSP不同硬件加速单元具互补作用

虽说整合FPU或DSP基本在架构与应用方向就不同,但实际上两者分别是针对数据运算、讯号处理对应至各式演算法应用,两者功能可以说是各有互补效用,比较难被独立拆分。以ARM Cortex-M4来看,若仅提供DSP硬件加速处理器反而没设置FPU浮点运算加速器反而会造成应用限制,因为在Cortex-M4应用场合如果仅有数字信号处理加速硬件支援,少了浮点运算支援,对开发需求端若碰到需要数值进阶运算加速,就会造成设计上的弹性限制,或是导致还需透过外部功能芯片支援,或利用原有的运算资源因应数值进阶计算需求,反而会因为数值处理效能限制了Cortex-M4的应用可能性。

同样的状况也发生在仅有FPU而没有设置DSP的微控制器应用方案上,对DSP或是FPU应用功能是相辅相成,独立整合对于微控制器的配置并未能产生综效,反而会成为发展路径的限制。

再者,从新一代IoT产品发展方向,透过感测器融合(Sensor Fusion)应用方向为例,若是Sensor Fusion概念为将多感测器整合在单一系统中协同运行,系统需要高阶数值与讯号处理能力,才可以将关键数值讯号自复杂数据中提取出来。

至于感测器融合可以再搭配即时的调整、控制与校正处理,由DSP加上FPU协同处理达到高精密度、高效率进行撷取数据的精密分析,尤其是现有的Sensor Fusion已做到陀螺仪、加速度器、温度、压力甚至触控感测都做在同一个模组中,必须透过DSP与FPU预先筛出相对精密且兼顾处理效率的讯号撷取与预处理的感测数据,提供相对高效的系统更具效率的感测数值处理机制。

DSP数字滤波应用 可提升感测讯号撷取品质

此外,在MCU整合FPU的另一个优势在于可在系统中善用其运算特性,例如,运用数字演算法进行撷取数值的数字滤波应用,针对处理讯号进一步以基于硬件加速的数字演算法进行波形或数据再处理,形成一提升数据噪讯比(SNR)的便捷作法,数字滤波器还可利用演算机制优化提供不同程度大小的滤波效果,这在于微控制器用于感测热门的心率、血液含氧量、运动数值等生理资讯,或是数字电表、智能电表等应用,解决末端数据因为杂讯或环境噪讯影响,倒置讯号失真的数据优化回补效用,优化终端取得的讯号波形信号品质,更利于后续处理或数据使用。

为了优化末端应用,微控制器整合硬件加速单元也蔚为一股风潮,不只是DSP或是FPU硬件加速单元,例如就有微控制器在架构上加入了VMU硬件加速单元,处理因应马达应用重点的三角函数数值运算需求,或是对应无线电通讯需求整合的数据分析演算支援,与现有FPU浮点运算硬件加速功能区隔,采取协同分工的方式加速整体微控制器的应用效能。

有趣的是,针对不同的市场与运算需求定位,微控制器除在运算时脉进行差异区隔,以最实际的运算效能区分不同应用场合、市场切分外,整合不同应用所需的硬件加速单元也成为产品市场定位的重要分界,例如针对穿戴式运算应用市场的微控制器,在要求功耗、感测器融合、元器件成本方面就可仅整合FPU、DSP硬件加速定位市场区隔,在高阶的微控制器应用上,甚至有解决方案直接整合硬件绘图引擎,直接看准工业用人机介面终端的应用需求,另针对如车用电子、IoT物联网等不同市场需求,也有五花八门的硬件加速单元配置组合,满足不同整合需求的应用架构。

另一个微控制器整合DSP、FPU硬件加速单元的目的,其实加入硬件加速单元整合而不采行外部解决方案来组构硬件加速运算需求,其最大的优点在于成本方面的极致优化,因为电子电路板可以更节省载板空间,运用单一芯片就能改善运算的整体效率,而在软件开发层面,可在整合架构下运用简单呼叫与资料传递的再处理,便能满足应用服务的数据计算产出效能要求,甚至于开发完成的成品还可运用一致性侦错分析工具,直接针对系统进行全面分析与勘误,在开发设计的效率与速度都能获得改善。

来源:互联网(版权归原著作者所有)

围观 399

微控制器(MCU)深入人们应用生活,几乎大小设备都看得到MCU踪影,在MCU导入DSP数位讯号处理器、FPU浮点运算单元功能后,MCU更大幅扩展元件可适用范围,这几年来,在众多MCU大厂纷纷针对旗下商品推出多样整合方案,不管是产品策略还是市场区隔,也让MCU市场更加丰富多元。

MCU(Microcontroller Unit)深入生活应用是不容易质疑的趋势,尤其是MCU在功能优化或市场区隔目的下,进行DSP(digital signal processor)数位讯号处理器或FPU(Floating Point Unit)浮点运算单元功能整合,使得MCU的可应用场域大幅扩展。
 
MCU整合FPU可以在进阶数值运算的精密度大幅提升、处理效能也能获得改善。
  
针对IoT应用开发的MCU方案,整合DSP可优化感测器数据撷取品质与提升信号处理效能。
  
如果以FPU或DSP导入目的,一般在MCU中追加FPU、DSP整合架构,主要目的还是在考量成本下的设计方向,尤其在早期半导体元件,SOC(System on Chip)系统单晶片与MCU存在一段价格差距,如果仅需要SDP或FPU进行运算加速,又不想选用高单价SOC,这时整合DSP或FPU硬体加速单元的MCU产品、不仅可以更好的提供运行效能,同时又能在成本控制上表现更加优异。
  
MCU整合晶片封装成本骤降 增加MCU功能扩充应用空间
  
以早期的SOC产品来看,搭载DSP与FPU硬体加速器是SOC产品的重要特性,其中DSP与FPU的应用方向主要以音讯、影像等处理加速运算为主,而在制程技术持续优化,SOC的成本逐步与MCU拉近,MCU在32位元甚至64位元架构下,也开始有结合DSP或是FPU硬体加速单元的解决方案。
  
先看看MCU加上硬体加速单元的优点,在MCU追加FPU导入,最直接的效益是早期利用MCU处理类似FPU运算内容,会因为MCU本身的运算架构限制,让运算结果得出时间会相对拉长,而在导入硬体加速器处理浮点运算时,因为硬体呼叫或是资料传递就能透过硬体算出数据,MCU本身耗在浮点运算的记忆体资源可以因硬体加速整合减少至少10%。
  
当然,从目的性来看,不管MCU有无整合FPU硬体加速单元,浮点运算需求使用MCU现有的运算能力也能得出结果,只是前提是计算过程会耗用较多运算时间与硬体资源,对于可等待、无需提供即时反应的系统自然可以不考虑整合FPU的MCU方案,但若是对系统效能、回馈反应速度要求高的整合需求,MCU结合FPU的效益提升不仅仅是运算资源耗用优化、节能优势等效果,反而是加快系统回应与效能提升的效用,才是MCU结合FPU硬体加速最直接、重要的功能改进,也让MCU可以因应更高复杂度的整合工作。

高阶数值运算 运用硬体加速满足设计需求
  
在早期MCU元件仍以8位元架构为主流的应用方向,MCU在资料处理与运算处理上,本来就有因架构的问题而有其处理限制,例如,MCU进行小数点、分数处理运算时,因为4位元或是8位元位数有限,就必须采用有限数值进行处理,透过数值结果的限制换取处理复杂度简化与效能要求目的,而这种因为数值处理产生的误差即“截断误差”,截断误差也会因为使用MCU进行数据运算的限制,而令误差数值产生扩大现象。
  
而在MCU整合FPU硬体加速,在运算同类型的数据处理时,例如在IoT物联网或是终端感测器应用中,常有将外部类比感测数据转换成数位资料的资料撷取、处理需求,这时透过MCU整合的FPU/DSP硬体加速单元,不仅可将感测数据更快速处理完成、加快系统回应,同时,也能导入进阶运算减少数据演算的误差。
  
在实际应用中,FPU硬体加速器本身并无法完全解决误差扩大问题,所以会有FPU、DSP等不同硬体加速整合架构下的应用目的考量,举例来说,透过DSP硬体加速器,可针对特殊数据类型更高速、可靠的运算处理输出,像是DSP可利用指令来进行多种运算,处理如快速快速傅立叶转换(fast Fourier transform;FFT)或有限脉冲回应(Finite impulse response;FIR)进阶运算中重要且耗资源的运算需求,甚至透过单周期的指令便能处理单一指令多重资料(Single Instruction Multiple Data;SIMD)运算需求,MCU在进行进阶数值处理方面还可获得进阶增强效益。
  
FPU/DSP不同硬体加速单元具互补作用
  
虽说整合FPU或DSP基本在架构与应用方向就不同,但实际上两者分别是针对数据运算、讯号处理对应至各式演算法应用,两者功能可以说是各有互补效用,比较难被独立拆分。以ARM Cortex-M4来看,若仅提供DSP硬体加速处理器反而没设置FPU浮点运算加速器反而会造成应用限制,因为在Cortex-M4应用场合如果仅有数位信号处理加速硬体支援,少了浮点运算支援,对开发需求端若碰到需要数值进阶运算加速,就会造成设计上的弹性限制,或是导致还需透过外部功能晶片支援,或利用原有的运算资源因应数值进阶计算需求,反而会因为数值处理效能限制了Cortex-M4的应用可能性。
  
同样的状况也发生在仅有FPU而没有设置DSP的微控制器应用方案上,对DSP或是FPU应用功能是相辅相成,独立整合对于微控制器的配置并未能产生综效,反而会成为发展路径的限制。
  
再者,从新一代IoT产品发展方向,透过感测器融合(Sensor Fusion)应用方向为例,若是Sensor Fusion概念为将多感测器整合在单一系统中协同运行,系统需要高阶数值与讯号处理能力,才可以将关键数值讯号自复杂数据中提取出来。
  
至于感测器融合可以再搭配即时的调整、控制与校正处理,由DSP加上FPU协同处理达到高精密度、高效率进行撷取数据的精密分析,尤其是现有的Sensor Fusion已做到陀螺仪、加速度器、温度、压力甚至触控感测都做在同一个模组中,必须透过DSP与FPU预先筛出相对精密且兼顾处理效率的讯号撷取与预处理的感测数据,提供相对高效的系统更具效率的感测数值处理机制。

DSP数位滤波应用 可提升感测讯号撷取品质
  
此外,在MCU整合FPU的另一个优势在于可在系统中善用其运算特性,例如,运用数位演算法进行撷取数值的数位滤波应用,针对处理讯号进一步以基于硬体加速的数位演算法进行波形或数据再处理,形成一提升数据噪讯比(SNR)的便捷作法,数位滤波器还可利用演算机制优化提供不同程度大小的滤波效果,这在于微控制器用于感测热门的心率、血液含氧量、运动数值等生理资讯,或是数位电表、智能电表等应用,解决末端数据因为杂讯或环境噪讯影响,倒置讯号失真的数据优化回补效用,优化终端取得的讯号波形信号品质,更利于后续处理或数据使用。
  
为了优化末端应用,微控制器整合硬体加速单元也蔚为一股风潮,不只是DSP或是FPU硬体加速单元,例如就有微控制器在架构上加入了VMU硬体加速单元,处理因应马达应用重点的三角函数数值运算需求,或是对应无线电通讯需求整合的数据分析演算支援,与现有FPU浮点运算硬体加速功能区隔,采取协同分工的方式加速整体微控制器的应用效能。
  
有趣的是,针对不同的市场与运算需求定位,微控制器除在运算时脉进行差异区隔,以最实际的运算效能区分不同应用场合、市场切分外,整合不同应用所需的硬体加速单元也成为产品市场定位的重要分界,例如针对穿戴式运算应用市场的微控制器,在要求功耗、感测器融合、元器件成本方面就可仅整合FPU、DSP硬体加速定位市场区隔,在高阶的微控制器应用上,甚至有解决方案直接整合硬体绘图引擎,直接看准工业用人机介面终端的应用需求,另针对如车用电子、IoT物联网等不同市场需求,也有五花八门的硬体加速单元配置组合,满足不同整合需求的应用架构。
  
另一个微控制器整合DSP、FPU硬体加速单元的目的,其实加入硬体加速单元整合而不采行外部解决方案来组构硬体加速运算需求,其最大的优点在于成本方面的极致优化,因为电子电路板可以更节省载板空间,运用单一晶片就能改善运算的整体效率,而在软体开发层面,可在整合架构下运用简单呼叫与资料传递的再处理,便能满足应用服务的数据计算产出效能要求,甚至于开发完成的成品还可运用一致性侦错分析工具,直接针对系统进行全面分析与勘误,在开发设计的效率与速度都能获得改善。

来源: DIGITIMES

围观 377

在单片机开发中,由于资源受限而没有平台的支持,每次开发都要重写很多代码,应用的千奇百怪的需求更是加剧了这种困难。解决问题的办法是,总结常见的需求,分析它,得出即高效有通用的解决方案。

今天我就来为大家提供一种按键的解决方案,它易用,高效,节省资源!

先给出这个按键模块解决方案的全部代码,稍后再来分析。

keyif.h内容:

1: #ifndef __KEY_IF_H__
2: #define __KEY_IF_H__
3: ////////////////////////////////////////////////////////////////////////////////
4: typedef unsigned char u8_t;
5:
6: #define KEY_NUM_MAX (8)
7:
8: #define KEY_STA_BEGIN (0)
9: #define KEY_STA_KEEP (1)
10: #define KEY_STA_END (2)
11:
12: #define KEY_PERIOD_MS (25)
13:
14: void kif_Init(void);
15: void kif_TickHook(void);
16:
17: /*
18: kindex 按键索引,从0开始,而小于KEY_NUM_MAX。
19: 返回值:按键被按下返回非零,按键被抬起返回零。
20: */
21: extern u8_t KeyRead(u8_t kindex);
22: /*
23: kindex 按键索引,从0开始,而小于KEY_NUM_MAX。
24: ksta 按键状态,取值为KEY_STA_系列宏。
25: ktick 按键计时,以KEY_PERIOD_MS时间为计数单位。
26: 返回值:如果本次按键操作已经处理妥当,就返回非零。
27: */
28: extern u8_t KeyProc(u8_t kindex, u8_t ksta, u8_t ktick);
29:
30: ////////////////////////////////////////////////////////////////////////////////
31: #endif /* __KEY_IF_H__ */
32:

keyif.c内容:

1: #include "keyif.h"
2: #include
3:
4: #if defined(KEY_NUM_MAX) && (KEY_NUM_MAX > 0)
5:
6: #if KEY_NUM_MAX > 255
7: #error 该模块为8位单片机优化,不支持255个以上按键。
8: #endif
9:
10: static u8_t kticks[KEY_NUM_MAX]; // 每个按键需要1字节计时器。
11: static u8_t kstats[(KEY_NUM_MAX+7)/8]; // 每个按键需要1BIT的状态标志。
12: static u8_t kvalid[(KEY_NUM_MAX+7)/8]; // 每个按键需要1BIT的有效标志。
13: ////////////////////////////////////////////////////////////////////////////////
14: //| |
15: //| 函数名称 |: kif_Init
16: //| 功能描述 |:
17: //| |:
18: //| 参数列表 |:
19: //| |:
20: //| 返 回 |:
21: //| |:
22: //| 备注信息 |:
23: //| |:
24: ////////////////////////////////////////////////////////////////////////////////
25: void kif_Init(void)
26: {
27: memset(kticks, 0, sizeof(kticks));
28: memset(kstats, 0, sizeof(kstats));
29: memset(kvalid, 0, sizeof(kvalid));
30: }
31:
32: ////////////////////////////////////////////////////////////////////////////////
33: //| |
34: //| 函数名称 |: kif_TickHook
35: //| 功能描述 |:
36: //| |:
37: //| 参数列表 |:
38: //| |:
39: //| 返 回 |:
40: //| |:
41: //| 备注信息 |:
42: //| |:
43: ////////////////////////////////////////////////////////////////////////////////
44: void kif_TickHook(void)
45: {
46: u8_t grp, msk;
47: u8_t now;
48: u8_t i;
49:
50: grp = 0;
51: msk = 1;
52: for(i = 0; i < KEY_NUM_MAX; ++i){
53: now = (KeyRead(i) ? msk : 0);
54: if((kstats[grp] ^ now) & msk){
55: // 按键状态发生变化。
56: if(now){
57: // 按键刚被按下。
58: kticks[i] = 0;
59: kstats[grp] |= msk;
60: kvalid[grp] |= msk;
61: if(KeyProc(i, KEY_STA_BEGIN, 0)){
62: kvalid[grp] &= ~msk;
63: }
64: }
65: else{
66: // 按键刚被抬起。
67: kticks[i] += 1;
68: kstats[grp] &= ~msk;
69: KeyProc(i, KEY_STA_END, kticks[i]);
70: }
71: }
72: else if(now){
73: // 按键保持按下状态。
74: kticks[i] += 1;
75: if(kvalid[grp] & msk){
76: // 按键处于有效状态。
77: if(KeyProc(i, KEY_STA_KEEP, kticks[i])){
78: kvalid[grp] &= ~msk;
79: }
80: }
81: }
82: // 处理用于加速执行的中间变量。
83: msk <<= 1;
84: if(msk == 0){
85: msk = 1;
86: grp++;
87: }
88: }
89: }
90:
91: #else /* KEY_NUM_MAX */
92:
93: void kif_Init(void){ ; }
94: void kif_TickHook(void){ ; }
95:
96: #endif /* KEY_NUM_MAX */
97:
example.c内容:

1: #include "keyif.h"
2:
3: // 读取按键物理状态的函数。
4: u8_t KeyRead(u8_t kindex)
5: {
6: switch(kindex){
7: case 0: // 按键#0
8: if(PIN_DOWN(0)){
9: return 1;
10: }
11: return 0;
12: case 1: // 按键#1
13: if(PIN_DOWN(1)){
14: return 1;
15: }
16: return 0;
17: case 2: // 按键#2
18: if(PIN_DOWN(2)){
19: return 1;
20: }
21: return 0;
22: case 3: // 按键#3
23: if(PIN_DOWN(3)){
24: return 1;
25: }
26: return 0;
27: }
28: return 0;
29: }
30:
31: // 按键事件处理函数。
32: u8_t KeyProc(u8_t kindex, u8_t ksta, u8_t ktick)
33: {
34: switch(kindex){
35: case 0: // 按键#0
36: if(ksta == KEY_STA_BEGIN){
37: // 按键被按下,TODO SOMETHING。
38:
39: return 0;
40: }
41: else if(ksta == KEY_STA_KEEP){
42: // 按键被保持,TODO SOMETHING。
43:
44: return 0;
45: }
46: else if(ksta == KEY_STA_END){
47: // 按键被松开,TODO SOMETHING。
48:
49: return 0;
50: }
51: break;
52: case 1: // 按键#1
53: if(ksta == KEY_STA_KEEP && ktick == 1000/KEY_PERIOD_MS){
54: // 按键按下保持了1000毫秒,TODO SOMETHING。
55:
56: return 1;
57: }
58: break;
59: case 2: // 按键#2
60: if(ksta == KEY_STA_KEEP && ktick == 1){
61: // 按键被按下,具备了间隔KEY_PERIOD_MS毫秒的去抖动时间,TODO SOMETHING。
62:
63: return 1;
64: }
65: break;
66: case 3: // 按键#3
67: if(ksta == KEY_STA_END){
68: // 响应按键松开事件,TODO SOMETHING。
69:
70: }
71: break;
72: }
73: return 0;
74: }
75:
76: ////////////////////////////////////////////////////////////////////////////////
77: //| |
78: //| 函数名称 |: main
79: //| 功能描述 |:
80: //| |:
81: //| 参数列表 |:
82: //| |:
83: //| 返 回 |:
84: //| |:
85: //| 备注信息 |:
86: //| |:
87: ////////////////////////////////////////////////////////////////////////////////
88: int main(void)
89: {
90: // 初始化KEYIF。
91: kif_Init();
92:
93: while(1){
94: delay(KEY_PERIOD_MS);
95: // 以KEY_PERIOD_MS毫秒为周期调用。
96: kif_TickHook();
97: }
98: }

上面的代码包括了3各文件,keyif.h、keyif.c、example.c。

其中example.c是使用举例,它提供了两个必须的函数,

u8_t KeyRead(u8_t kindex);
u8_t KeyProc(u8_t kindex, u8_t ksta, u8_t ktick);

先来分析KeyRead()函数:

它是读取物理按键的底层函数,该函数被KEYIF模块调用。当按键按下时,它必须返回非零;按键抬起时,返回零即可。例如我们通常把按键引脚设计为低电平为按下状态,那么当读取对应引脚电平状态时,如果读取的引脚为低电平则返回非零,高电平就返回零。

kindex参数是用于区别物理引脚的。例如:kindex为0时读取GPIO_B4,kindex为1时读取GPIO_A1,等等。

再来分析KeyProc()函数:

该函数是用户的按键响应函数,在该函数中用户可以加入一切按键响应代码。该函数被KEYIF模块调用。kindex参数是按键的索引,用于标识按键;ksta参数是按键的当前状态,取值为KEY_STA_BEGIN、KEY_STA_KEEP、KEY_STA_END其中之一。BEGIN代表按键刚被按下,KEEP代表按键保持在按下状态,END代表按键被松开了。ktick参数是KEEP状态的计时器,表示按键按下状态保持了多久,单位是KEY_PERIOD_MS毫秒。

KeyProc()函数的返回值决定了本次按键操作是否还会有后续的KEEP事件,如果用户不需要后续的KEEP事件,返回非零即可。当用户告诉KEYIF不需要后续KEEP事件后,按键保持在按下状态也不会产生KEEP事件,直到下一次按键操作。无论有无KEEP事件,BEGIN和END事件始终会有的,无法关闭!

example.c文件中给出了几个应用示例,其实这个按键框架能实现的操作远不止这些!用户自己根据需求可以轻易写出各种代码。

要使用KEYIF,必须在用户代码开始处调用kif_Init()函数来初始化KEYIF。然后在主循环或者时钟中断里,以KEY_PERIOD_MS毫秒为周期调用kif_TickHook()函数。

文章来源: 博客园

围观 201

页面

订阅 RSS - MCU