zoukankan      html  css  js  c++  java
  • DSP与STM32大PK

    1.FPGA:是可编程逻辑阵列,常用于处理高速数字信号,不过随着科技的发展,现在很多FPGA CPLD可以集成mcu内核,甚至具备了ARM DSP的功能  
    2.ARM,是一类内核的称谓,就像51一样,具体到芯片的话,会有很多不同的厂家不同等级,诸如三星、易法、飞利浦、摩托罗拉等等,其中STM32是易法半导体的一款面向工控低功耗内核为Cortex M3内核的ARM芯片  
    3.DSP顾名思义就是数字信号处理,厂家主要是德州仪器(TI)主要用于数字型号处理等对运算速度有特殊要求的场合,诸如音频视频算法,军工等领域,但同时dsp有2000 5000 6000等系列也可满足不场合需要

    1.FPGA一般不会用来做复杂的系统,只用来做些简单的系统如状态机实现的自动售货机...展开>等,多少还是用来做信号的高速变换和处理,毕竟它只是可编程逻辑阵列。  
    2.ARM和DSP就各有千秋了;  
    ARM的系列从V3 V5 V7 V9 XSCALE,从thumb指令到arm指令(thumb arm也可同时实现),可以说遍布机会所有的领域,只要你接的价格可以接受(其实许多arm并不是很贵的),单片机所有的功能基本他都能实现,我就不用举例子,特别是现在与各种RTOS结合更是开发方便功能强大。  
    DSP相对arm价格要贵些,这也是可能个体厂家使用较少的一个原因吧,2000系列主要用于工控特别是2812这个用的人比较多,5000 6000主要用于手持设备、PDA、通信等领域; 
    DSP还有一个特色就是对一些特殊算法的支持如快速福利叶变换等,所以对运算速度有特殊要求的场合一般会选择DSP; 
    DSP因其性能和功能比较好,还广泛用于军工领域!

     
     
    关于DSP和普通51 AVR还有STM32的区别
         DSP是为运算而生的芯片,他最强大的地方就在与它的数**算性能,那是由它的指令集支持的。那些拿DSP和STM32比较的,省省吧,如果你两者都熟悉你就知道根本没啥好比的,
         如果我需要很多高级的接口,比如以太网和USB,那么我自然选STM32,如果我需要实现一些算法,那肯定会选DSP。如果你对运算速度不敏感,反正72M的速度已经比原先单片机快很多了,那当然是看你熟悉哪个,哪个价格比较好,支持比较好。
         从51 AVR到DSP最大的障碍
      1、应该是编译环境吧,TI的DSP都用的是CCS,CCS界面和原先IAR区别不是一般的大,比如程序导入,比如观察变量,比如烧写FLASH。恩,是的。用过了IAR那种傻瓜化的操作了之后,真是怎么弄怎么别扭,CCS真是太不友好了。但是没办法,IAR他们是专门做编译软件的,TI主要是做DSP的,TI也意识到这个问题了,所以现在推出的CCSV4好像在这方面有很大的加强。不过网上还是CCS3.3的资料最多,大家也熟悉,如果刚接触还是先用CCS3.3为好。
    如果你手头有快开发板,那里面应该有对这些操作的详细说明。所以这个慢慢应该也可以熟悉。

      2、库文件。TI的库文件都是联合+结构+位域的形式。对这些结构不是非常熟悉的话可能看着有点晕,这个只能慢慢去看C的书。最纳闷的可能就是它的地址映射,如何把寄存器映射到相应的地址,那是它由编译器来支持的主要通过#PROGRM来实现,可以去看看它的CMD文件

      3、CMD,CMD文件可能是入门最大的一个坎了,单片机或者ARM根本就没这么一说,这破东西到底啥用呐?CMD文件主要作用就是用来做内存分配,你的芯片里面有FLASH有RAM有BOOT ROM,你编写的程序有代码,要烧到FLASH中,有全局变量要存到RAM的全局变量区域,有局部变量,要存到堆栈中。CDM文件其实就是把你代码中的这些一块一块的东西和具体的硬件存储对应起来。你可以随你需要任意来配置,比如我有一个数据表格,普通的单片机你定义好了之后会有编译器来帮你存放到一个地方,但是DSP里面你可以通过配置CMD把它放在你认为合适的地方。再比如堆栈空间的大小,以前从来没关心过堆栈大小,但是开辟的太大的话可能浪费内存空间。当然,每个芯片都有一个标准的CMD文件,初学者完全可以不用去修改它。

      4、文档。TI的文档包括数据手册和外设指南,很多人说很乱,不像其它芯片,所有外设的资料都会放在一起,但是TI会每个外设弄一个。这就要说说TI的外设,它的外设都非常专业,是的专业。比如它的PWM外设,叫ePWM,也就是增强型的PWM,这个外设可以轻松输出非常复杂的PWM波形,而且不用CPU参与。所以它的外设指南有100多页,你会发现很多外设都是这样,里面有很多很多增强的功能,相对应的它的说明文档也就非常长。要是全部都集合在一起那就会非常的大。而且它的每个外设都是有独立版本的,比如ADC,已经从0版到3版,而ePWM还是1版,分开之后升级的维护会方便很多,很多外设在类似的芯片都是一样的。

      用STM32的时候我从来没看懂过它的库,甚至都没仔细看过它的手册。但是最后也搞出来了,完了之后我对这块芯片没多少熟悉的感觉。但是用C2000系列的DSP的时候则要反反复复的去看外设指南,分析手册上给出的结构,让我对芯片非常熟悉,再加上它的编译环境是完全可以配置的,我甚至都知道我某个变量会在哪个地方。
      工业控制与自动化, 这个按21IC的网友说:“那是万精油”面很广。。。!

      芯片只是个躯壳。 重要的是专业知识和算法。TI的DSP 性能质量稳定可靠。 让你用的放心。
      而STM32, 有许多未知的因素,比如BUG,可靠性等等,  如果楼主的产品价钱利润高,当然使用TI的DSP或者MICROCHIP的DSPIC.咱们不用太担心 芯片的质量问题,芯片的BUG/抗干扰等等。。。
      TI的DSP有些地方做的比STM32专业好多。例如可靠性,TI的DSP的许多寄存器有写保护功能,因此对某些从引脚等干扰芯片内部寄存器/改写内部寄存器等严重问题,会有很大帮助。但是STM32没有这个功能。还有TI在DSP在电机控制控制方面做得很专业,PWM部件的功能,比如死区,输入保护,PWM脉冲的特殊波形等方面都有独到的地方。
          而STM32 还是显得比较嫩。 TI多年前都专门有虚拟浮点库给定点的DSP使用。也是最找出浮点DSC的厂家。  28335比STM32F4早了3-4年推出市场。
      而且TI 还出了一个芯片内包括两个核心:ARM7/CM3+DSP的控制器。还有多通道同时采样转换的ADC , TI在医学/电力电子与新能源方面的应用等都可以看出 TI比ST公司专业很多。更知道咱们需要什么。
      但对于咱们使用者来说,如果是中档路线或民用的工业产品,或者对成本比较敏感的产品,当然要STM32之类的了。作为工程师,可以快速使用多种芯片,这个是必须的。
      用STM32的好处是, 芯片可以前后呼应, 有ARM7,ARM9, CORTEX-M/A等等。一系列的产品。从低到高,功能外设都很强大,可以承前启后的。如果是作为学习,我建议楼主用STM32来入门。
     
     
    *********************************************************************************************************************************************************************************************************************************************************************************************
     
     就电机控制而言,你怎么就觉得STM32的功能更强大呢?我从datasheet来看,dsPIC和STM32F4xx其实半斤八两,只是Microchip已经在这个行业混了很久了,各种应用手册相对ST的来说要多些。不用DSP,你会很累的。
            另外,注意的是,现在市面上很流行的STM32都是不带DSP功能的STM32F1xx系列。而带DSP和浮点运算的STM32F4系列才是面向电机控制的产品。但这个东西比较新,如果有什么BUG或有什么问题你现在在网上不一定有人帮你解决。除非你要的量比较大,可以让ST的FAE来帮你搞定。
            其实做电机控制,我优先推荐:1:TI的C2XXX系列;2:Microchip的dsPIC系列。
     
            如果你做的项目中包含多种保护的话,外扩CPLD是一个推荐的方式。如果你只是想做三闭环PID控制,之前推荐的C2000 DSP基本是较好的选择,这是硬件层面上的考虑。题外话,无刷控制难度在于控制算法的选择,工业控制领域以PID见广,如果是学校做项目的话不妨研究几种较为前沿的控制算法。
            STM32做电机控制?可能有点偏颇。小型集成无刷直流电机控制用DSP+FPGA也是有点夸张了。
            推荐下简单的做法,TI:TMS320F28335;如果你想要有更高大上的玩法:TI:TMS320F28377D,双核浮点,做无刷控制无压力。
     
     
    *********************************************************************************************************************************************************************************************************************************************************************************************
     
     
    常所说的单片机侧重于控制,不支持信号处理,属于低端嵌入式处理器,arm可以看做是低端单片机升级版,支持操作系统管理,更多接口如网卡,处理能力更强;fpga是可编程逻辑器件,侧重时序,可构建从小型到大型的几乎所有数字电路系统,DSP主要完成复杂的数字信号处理,如fft,通常一个复杂系统可以由单片机、arm、FPGA、dsp中的一种或几种构成,各有优势和不足。

        dsp通常用于运算密集型,fpga用于控制密集型,许多人都用dsp高算法,用fpga作外围控制电路。

        去年xilinx在北京介绍FPGA和DSP融合的时候,大有席卷DSP和FPGA市场之势。但后来在实际中发现其阻力也是不小的,关键是很难搭配FPGA和DSP的比重。我们知道FPGA擅长各种控制(也包括适时性非常高的信号处理如移动通信中基带滤波,该滤波用C5000,C6000很难胜任,除非多芯片并行),DSP擅长各种信号处理运算,但在一个系统中究竟有多大的控制电路,有多少密集运算?变数是很大的,我们不可能用一个芯片解决这个问题。对于运算密集性系统,我们如果使用这种芯片的话很有可能还要其他DSP,那么我们需要了解多种DSP编程和接口设计,这是否与我们的初衷背道而驰呢?

        上面都是一些基本概念的介绍,下面我就来通俗介绍一下,在DSP里,你是一个软件设计者,硬件已经完全固化,你所要做的,就是在这个固定的硬件平台实现其功能的最优化,一般TI的DSP涉及最多的是一些基本的BIOS操作系统之间的任务调度,以及算法改进与优化等待,DSP的关键优势包括其对于新型及复杂算法时的更短的开发时间,以及能够运行多种算法的灵活性。

        而对于FPGA来说,你是一个硬件设计者,FPGA就是一张白纸,上面写什么,画什么都取决于你。同样一片FPGA,菜鸟和高手实现的功能会是天壤之别,FPGA的最大优势在于硬件实现已及通过并行处理实现的效率增益。使用FPGA,您大多的时间并非进行算法设计与优化,而是逻辑设计与时序约束等等。

        FPGA与DSP关系:

        1、DSP侧重于核心算法处理,FPGA侧重于外围控制处理。

        2、DSP内是用C语言编写,语言执行是串行处理,效率比较低。

        FPGA侧重于并行处理,效率较高;还有交合逻辑(外围接口、通讯等);

        FPGA发展领域:

        使用领域:电子设计、通讯、汽车、军工

        不适合:消费类产品(手机)—FPGA功耗高;

        FPGA技术难点:

        1、需要专门的硬件语言来开发

        2、FPGA灵活性比较高,设计是由工程师来决定,需要测试验证

    ****************************************************************************************************************************************************************************************************************************

    1.内容概要
    信号处理系统一般不单单是模拟信号或者数字信号,一般两者都会有。信号的处理关注的是信号以及信号所包含的信息的表示、变换及运算。

    图1 典型的数字信号处理系统

    1>模拟信号(analog signal)的输入一般包括(声、电、光、热等)模拟的连续信号;
    2>模拟信号抗混叠(anti-aliasing filter)希望分开两个或多个混叠在一起的信号,或者增强某些信号;
    3>AD将模拟信号转换成数字信号;
    4>DSP/FPGA/ARM/MPU数字信号处理。
    整个系统分为三个域,从模拟到数字,再到数字信号处理,再到数字变模拟。
    数字信号处理一般所研究的内容涉及采样、滤波、变换、检测、谱分析、估计、压缩以及识别等;数字信号处理的理论和算法是密不可分的;相对于模拟信号系统处理,数字信号处理体积小、功耗低、精度高、易于大规模集成以及可进行二维以及多维处理等优势。

    数字信号处理系统的性能取决于三个因素:采样频率、架构和字长。

    2.典型处理器对比
    DSP芯片,也称数字信号处理器,是一种特别适合于进行数字信号处理运算的微处理器,其主要应用是实时快速地实现各种数字信号处理算法。根据数字信号处理的要求,DSP芯片一般具有如下主要特点:
    (1)在一个指令周期内可完成一次乘法和一次加法;
    (2)程序和数据空间分开,可以同时访问指令和数据;
    (3)片内具有快速RAM,通常可通过独立的数据总线在两块中同时访问;
    (4)具有低开销或无开销循环及跳转的硬件支持;
    (5)快速的中断处理和硬件I/O支持;
    (6)具有在单周期内操作的多个硬件地址产生器;
    (7)可以并行执行多个操作;
    (8)支持流水线操作,使取指、译码和执行等操作可以重叠执行。
    当然,与通用微处理器相比,DSP芯片的其他通用功能相对较弱些。
    MPU(Microprocessor Unit)微处理器
    微机中的中央处理器(CPU)称为微处理器(MPU),是构成微机的核心部件,也可以说是微机的心脏。它起到控制整个微型计算机工作的作用,产生控制信号对相应的部件进行控制,并执行相应的操作。
    微处理器的功能结构主要包括:运算器、控制器、寄存器三部分:
    运算器的主要功能就是进行算术运算和逻辑运算。
    控制器是整个微机系统的指挥中心,其主要作用是控制程序的执行。包括对指令进行译码、寄存,并按指令要求完成所规定的操作,即指令控制、时序控制和操作控制。
    寄存器用来存放操作数、中间数据及结果数据。
    FPGA 具有规则的可编程结构,可实现各种逻辑功能。
    1>运算能力强,并行能力强。
    2>设计过程中具有很大的灵活性。

    3>通过集成可以降低系统成本。

    3. 混合系统

    图2 FPGA作为协处理系统



     
    图3 FPGA作为预处理系统

    图4 FPGA+DSPs+ARM的数字信号处理系统

    如图2、3和4数字信号处理系统,在不同的情况下我们可以采用不同的系统,具体根据芯片各自的优势来选择不同的系统。

  • 相关阅读:
    POJ 2823 Sliding Window 单调队列
    Java常见面试题汇总(一)
    5.4 heapq--堆队列算法
    使用 rman duplicate from active database 搭建dataguard 手记--系列二
    [LeetCode]Delete Node in a Linked List
    webstorm中使用java的块凝视
    Gradle 1.12用户指南翻译——第三十二章. JDepend 插件
    iOS上如何让按钮(UIbutton)文本左对齐展示
    【matlab】:matlab中不断的出现计算过程怎么办
    apk 签名
  • 原文地址:https://www.cnblogs.com/ly0019/p/9135358.html
Copyright © 2011-2022 走看看