fish001

  • 2020-01-18
  • 发表了主题帖: 话筒与话筒前置放大器之间的匹配

    现在网上唱歌或发表言论尤其多,那么话筒与话筒放大器之间的匹配就显得非常重要!      在话筒和前置放大器应用领域,“阻抗匹配(Impedance Matching)”是一个存在广泛误解的话题。因为事实上,绝大多数话筒和绝大多数前置放大器,相互之间都能够形成比较令人满意的组合,根本不需要进行所谓“真正”的阻抗匹配。至于“阻抗匹配”问题的提出,只有在极力追求某种特定的音质、音调、着色(coloration)以及特点时,才会变得有意义。      在详细讲解这个问题之前,我们先来解释一下什么是阻抗。我们知道,任何一款话筒都不可避免地带有输出阻抗,而任何一款前置话放也都不可避免地带有输入阻抗。这里所说的“阻抗”指的就是信号电流在流出话筒电路、流向前置放大器电路时所遇到的“电阻”。 由于阻抗通常用“Z”来表示,因而,就产生了专门用来描述输入输出接口的术语——“Hi-Z(高阻抗)”(吉他手应该对这个词汇比较熟悉)。在实际应用中,前置话放的输入阻抗会对输入信号的声音效果产生重大影响。这主要是因为,话筒的输出阻抗与前置话放的输入阻抗之间的相互作用相互影响关系,会给声音信号的最终效果带来重大改变,比如不同的声音均衡效果、不同的上冲特点等等。进一步讲就是,不同前置话放的输入阻抗同不同话筒的输入阻抗之间的相互作用在方式和程度上也是不一样的。        我们就用花园里浇水用的管道和管道前面所带的喷嘴来打个比方。话筒就好比是管道,属于低阻抗源,也就是说,水流前进时的阻力比较小;而前置话放则好比是喷嘴,阻抗很高。首先,如果我们将喷嘴的阀门关掉的话,输入阻力(前置话放的输入阻抗)就会急剧增加,水压(电压)也会猛升至最大值,这时,喷嘴中水流的流量(电流)就变为0。       接下来,如果我们再稍微将阀门打开一点的话,输入阻力和水流压力就会相应变小(尽管依旧很大),水流也开始出现,但是,这时喷嘴会发出“咝咝”的声音(高频)。后来,随着喷嘴阀门的不断开大,输入阻力和水流压力开始不断下降,水流的流量也开始持续增加,这时,“咝咝”声就会开始逐渐消失。从这个比方中,我们可以发现,前置话放的阻抗越低,声音信号的高频部分就会变得越不明显。        实际操作中,将话筒和前置话放的阻抗设定在同一水平上的做法是完全错误的,因为这会将声音信号的电平和信噪比同时降低6dB。一般来说,对于动圈话筒和电容话筒,前置话放的最佳输入阻抗应该在话筒输出阻抗的10倍左右。而对于现在市场上新兴的输入阻抗可以调节的前置话放(比如FocusriteISA428、Summit2BA-221等)来说,上述标准则可以有所变通。因为这种前置话放的变压器电平及其与话筒阻抗的相互作用程度都是可以调整的,能够在前面我提到过的均衡效果作用下,制造出各种各样的话筒/前置话放“着色”效果。       这种前置话放最大的优点就是,在录音时,无需在信号路径中添加均衡器,即可实现对频率内容的自由组合和调整,从而避免由于信号路径中所用设备过多而可能引起的噪音增加、信号减弱现象。另外,在使用这种放大器时,除了可以按照上述所说的10:1标准来对输入阻抗进行调整外,还可以在不损坏设备的前提下,根据需要,对输入阻抗的设定进行多次试验,直至找到自己满意的声音效果为止。  

  • 发表了主题帖: 低噪声前置放大器电路的设计方法

          前置放大器在音频系统中的作用至关重要。本文首先讲解了在为家庭音响系统或PDA设计前置放大器时,工程师应如何恰当选取元件。随后,详尽分析了噪声的来源,为设计低噪声前置放大器提供了指导方针。最后,以PDA麦克风的前置放大器为例,列举了设计步骤及相关注意事项。       前置放大器是指置于信源与放大器级之间的电路或电子设备,例如置于光盘播放机与高级音响系统功率放大器之间的音频前置放大器。前置放大器是专为接收来自信源的微弱电压信号而设计的,已接收的信号先以较小的增益放大,有时甚至在传送到功率放大器级之前便先行加以调节或修正,如音频前置放大器可先将信号加以均衡及进行音调控制。无论为家庭音响系统还是PDA设计前置放大器,都要面对一个十分头疼的问题,即究竟应该采用哪些元件才恰当? 元件选择原则        由于运算放大器集成电路体积小巧、性能卓越,因此目前许多前置放大器都采用这类运算放大器芯片。我们为音响系统设计前置放大器电路时,必须清楚知道如何为运算放大器选定适当的技术规格。在设计过程中,系统设计工程师经常会面临以下问题。  是否有必要采用高精度的运算放大器?        输入信号电平振幅可能会超过运算放大器的错误容限,这并非运算放大器所能接受。若输入信号或共模电压太微弱,设计师应该采用补偿电压(Vos)极低而共模抑制比(CMRR)极高的高精度运算放大器。是否采用高精度运算放大器取决于系统设计需要达到多少倍的放大增益,增益越大,便越需要采用较高准确度的运算放大器。  运算放大器需要什么样的供电电压?       这个问题要看输入信号的动态电压范围、系统整体供电电压大小以及输出要求才可决定,但不同电源的不同电源抑制比(PSRR)会影响运算放大器的准确性,其中以采用电池供电的系统所受影响最大。此外,功耗大小也与内部电路的静态电流及供电电压有直接的关系。  输出电压是否需要满摆幅?       低供电电压设计通常都需要满摆幅的输出,以便充分利用整个动态电压范围,以扩大输出信号摆幅。至于满摆幅输入的问题,运算放大器电路的配置会有自己的解决办法。由于前置放大器一般都采用反相或非反相放大器配置,因此输入无需满摆幅,原因是共模电压(Vcm)永远小于输出范围或等于零(只有极少例外,例如设有浮动接地的单供电电压运算放大器)。  增益带宽的问题是否更令人忧虑?       是的,尤其是对于音频前置放大器来说,这是一个非常令人忧虑的问题。由于人类听觉只能察觉大约由20Hz至20kHz频率范围的声音,因此部分工程师设计音频系统时会忽略或轻视这个“范围较窄”的带宽。事实上,体现音频器件性能的重要技术参数如低总谐波失真(THD)、快速转换率(slew rate)以及低噪声等都是高增益带宽放大器所必须具备的条件。   深入了解噪声      在设计低噪声前置放大器之前,工程师必须仔细审视源自放大器的噪声,一般来说,运算放大器的噪声主要来自四个方面:       热噪声 (Johnson):由于电导体内电流的电子能量不规则波动产生的具有宽带特性的热噪声,其电压均方根值的正方与带宽、电导体电阻及绝对温度有直接的关系。对于电阻及晶体管(例如双极及场效应晶体管)来说,由于其电阻值并非为零,因此这类噪声影响不能忽视。       闪烁噪声(低频):由于晶体表面不断产生或整合载流子而产生的噪声。在低频范围内,这类闪烁以低频噪声的形态出现,一旦进入高频范围,这些噪声便会变成“白噪声”。闪烁噪声大多集中在低频范围,对电阻器及半导体会造成干扰,而双极芯片所受的干扰比场效应晶体管大。       射击噪声(肖特基):肖特基噪声由半导体内具有粒子特性的电流载流子所产生,其电流的均方根值正方与芯片的平均偏压电流及带宽有直接的关系。这种噪声具有宽带的特性。  爆玉米噪声(popcorn frequency):半导体的表面若受到污染便会产生这种噪声,其影响长达几毫秒至几秒,噪声产生的原因仍然未明,在正常情况下,并无一定的模式。生产半导体时若采用较为洁净的工艺,会有助减少这类噪声。 此外,由于不同运算放大器的输入级采用不同的结构,因此晶体管结构上的差异令不同放大器的噪声量也大不相同。下面是两个具体例子。       双极输入运算放大器的噪声:噪声电压主要由电阻的热噪声以及输入基极电流的高频区射击噪声所造成,低频噪声电平大小取决于流入电阻的输入晶体管基极电流产生的低频噪声;噪声电流主要由输入基极电流的射击噪声及电阻的低频噪声所产生。       CMOS 输入运算放大器的噪声:噪声电压主要由高频区通道电阻的热噪声及低频区的低频噪声所造成,CMOS放大器的转角频率(corner frequency)比双极放大器高,而宽带噪声也远比双极放大器高;噪声电流主要由输入门极漏电的射击噪声所产生,CMOS放大器的噪声电流远比双极放大器低,但温度每升高10(C,其噪声电流便会增加约40%。  

  • 发表了主题帖: 运算放大器选型及其要求

    1.共模输入电阻(RINCM)该参数表示运算放大器工作在线性区时,输入共模电压范围与该范围内偏置电流的变化量之比。 2.直流共模抑制(CMRDC)该参数用于衡量运算放大器对作用在两个输入端的相同直流信号的抑制能力。 3.交流共模抑制(CMRAC)CMRAC用于衡量运算放大器对作用在两个输入端的相同交流信号的抑制能力,是差模开环增益除以共模开环增益的函数。 4.增益带宽积(GBW)增益带宽积AOL ƒ是一个常量,定义在开环增益随频率变化的特性曲线中以-20dB/十倍频程滚降的区域。 5.输入偏置电流(IB)该参数指运算放大器工作在线性区时流入输入端的平均电流。 6.输入偏置电流温漂(TCIB)该参数代表输入偏置电流在温度变化时产生的变化量。TCIB通常以pA/°C为单位表示。 7.输入失调电流(IOS)该参数是指流入两个输入端的电流之差。 8.输入失调电流温漂(TCIOS)该参数代表输入失调电流在温度变化时产生的变化量。TCIOS通常以pA/°C为单位表示。 9.差模输入电阻(RIN)该参数表示输入电压的变化量与相应的输入电流变化量之比,电压的变化导致电流的变化。在一个输入端测量时,另一输入端接固定的共模电压。 10.输出阻抗(ZO)该参数是指运算放大器工作在线性区时,输出端的内部等效小信号阻抗。 11.输出电压摆幅(VO)该参数是指输出信号不发生箝位的条件下能够达到的最大电压摆幅的峰峰值,VO一般定义在特定的负载电阻和电源电压下。 12.功耗(Pd)表示器件在给定电源电压下所消耗的静态功率,Pd通常定义在空载情况下。 13.电源抑制比(PSRR)该参数用来衡量在电源电压变化时运算放大器保持其输出不变的能力,PSRR通常用电源电压变化时所导致的输入失调电压的变化量表示。 14.转换速率/压摆率(SR)该参数是指输出电压的变化量与发生这个变化所需时间之比的最大值。SR通常以V/µs为单位表示,有时也分别表示成正向变化和负向变化。 15.电源电流(ICC、IDD)该参数是在指定电源电压下器件消耗的静态电流,这些参数通常定义在空载情况下。 16.单位增益带宽(BW)该参数指开环增益大于1时运算放大器的最大工作频率。 17.输入失调电压(VOS)该参数表示使输出电压为零时需要在输入端作用的电压差。 18.输入失调电压温漂(TCVOS)该参数指温度变化引起的输入失调电压的变化,通常以µV/°C为单位表示。 19.输入电容(CIN)CIN表示运算放大器工作在线性区时任何一个输入端的等效电容(另一输入端接地)。 20.输入电压范围(VIN)该参数指运算放大器正常工作(可获得预期结果)时,所允许的输入电压的范围,VIN通常定义在指定的电源电压下。 21.输入电压噪声密度(eN)对于运算放大器,输入电压噪声可以看作是连接到任意一个输入端的串联噪声电压源,eN通常以 nV / 根号Hz 为单位表示,定义在指定频率。 22.输入电流噪声密度(iN)对于运算放大器,输入电流噪声可以看作是两个噪声电流源,连接到每个输入端和公共端,通常以 pA / 根号Hz 为单位表示,定义在指定频率。  

  • 发表了主题帖: 三极管驱动电路及电平转换分析

    三极管,全称应为半导体三极管,也称双极型晶体管、晶体三极管,是一种控制电流的半导体器件。其作用是把微弱信号放大成幅度值较大的电信号,也用作无触点开关。   三极管是半导体基本元器件之一,具有电流放大作用,是电子电路的核心元件。三极管是在一块半导体基片上制作两个相距很近的PN结,两个PN结把整块半导体分成三部分,中间部分是基区,两侧部分是发射区和集电区,排列方式有PNP和NPN两种。   三极管的电平转换-3.3V-5V电平转换电路     如上图,左端接3.3VCMOS电平,可以是STM32、FPGA等的IO口,右端输出为5V电平,实现3.3V到5V电平的转换。   现在来分析下各个电阻的作用(抓住的核心思路是三极管的Vbe导通时为恒定值0.7V左右):   假设没有R87,则当US_CH0的高电平直接加在三极管的BE上,>0.7V的电压要到哪里去呢?   假设没有R91,当US_CH0电平状态不确定时,默认是要Trig输出高电平还是低电平呢?因此R91起到固定电平的作用。同时,如果无R91,则只要输入>0.7V就导通三极管,门槛电压太低了,R91有提升门槛电压的作用(可参见第二小节关于蜂鸣器的分析)。   但是,加了R91又要注意了:R91如果太小,基极电压近似。   只有Vb>0.7V时才能使US_CH0为高电平时导通,上图的Vb=1.36V   假设没有R83,当输入US_CH0为高电平(三极管导通时),D5V0(5V高电平)直接加在三极管的CE级,而三极管的CE,三极管很容易就损坏了。   再进一步分析其工作机理:   当输入为高电平,三极管导通,输出钳制在三极管的Vce,对电路测试结果仅0.1V   当输入为低电平,三极管不导通,输出相当于对下一级电路的输入使用10K电阻进行上拉,实际测试结果为5.0V(空载)。 请注意:   对于大电流的负载,上面电路的特性将表现的不那么好,因此这里一直强调——该电路仅适用于10几mA到几十mA的负载的电平转换。   蜂鸣器驱动电路     上面是从周立功的iMX283开发板上载下的电路,既可以是有源也可以是无源蜂鸣器。来分析下:   计算下各处的电流(S9013的β=120,设蜂鸣器电流15mA):     输入为高电平的门槛电压计算为:     R1起到了提供啊门槛电压的作用。   有源蜂鸣器和无源蜂鸣器的驱动电路区别主要在于无源蜂鸣器本质上是一个感性元件,其电流不能瞬变,因此必须有一个续流二极管D1提供续流。否则,在蜂鸣器两端会有反向感应电动势,产生几十伏的尖峰电压,可能损坏驱动三极管,并干扰整个电路系统的其它部分。而如果电路中工作电压较大,要使用耐压值较大的二极管,而如果电路工作频率高,则要选用高速的二极管。   设计这种电路的基本思路:确定负载(蜂鸣器10mA~80mA)电流和输入门槛电压。依据1中的方法计算获得R1与R2的值。   ULN2x03驱动电路     针对上面的驱动电路: 1.负载接的是红外二极管,其串联电阻是限流电阻,控制红外发射强度   2.输入连接到STM32的PWM功能普通IO口(设置推挽输出),COM口接输出电压5V     针对上面的电路测试(Power=5.0V): 1.输入3.3V,输出0.6V 2.输入0V,输出5.0V 3.输入不接,输出5.0V   所以,ULN2003/2803同样可以用于电平转换,那这是为什么呢?ULN2803/2003与三极管又有什么关系——其内部实现就是两个三极管。     其结构有3个特点: 1.输出集电极开漏,因此可以自己接上拉电阻,将信号上拉到相应的电平,ULN2803手册上说明能承受的最大电压为50V   2.数据手册上说明在Ic=250mA时的输入门槛电压为VI(on)=2.7V   3.COM端接有一个反向二极管:接到输出电源,用于驱动电机等负载电感器件时能在上下电时提供电流回路保护电路;输出电压高于COM端电压,则电压会钳制在VCOM+0.4V左右(这里的二极管压降较小)   ULN2003与ULN2803的区别仅在于ULN2003只有8个通道,而ULN2803有9个通道。   相对于前面的自己搭建的三极管电路,其具有更好的电流驱动特性,因此,前面的自己搭建的三极管电路适用于电平切换及小电流的驱动,而ULN2803及ULN2003适用于更大电流的驱动(Datasheet上说最大驱动电流能达到500mA左右)。因此常用ULN2803及ULN2003(还有其它的如75452、MC1413、L293D)提高系统的带负载能力(电机、大型LED、继电器等)。   三极管的作用 晶体三极管具有电流放大作用,其实质是三极管能以基极电流微小的变化量来控制集电极电流较大的变化量。这是三极管最基本的和最重要的特性。我们将ΔIc/ΔIb的比值称为晶体三极管的电流放大倍数,用符号“β”表示。电流放大倍数对于某一只三极管来说是一个定值,但随着三极管工作时基极电流的变化也会有一定的改变。

  • 2020-01-13
  • 发表了主题帖: 什么是RFID无线射频识别技术?

          RFID(Radio Frequency Identification,无线射频识别)是一种非接触式的自动识别技术,它通过射频信号自动识别目标对象并获取相关数据,可快速进行物品追踪和数据交换,其识别工作无需人工干预。       RFID作为一种新的技术,是无线电技术与雷达技术的结合。1948年,哈里·斯托克曼发表的“利用反射功率的通信”奠定了射频识别RFID的理论基础。奠定RFID基础的技术在第二次世界大战中得到发展。当时为了鉴别飞机,又称为“敌友”识别技术,该技术的后续版本至今仍在飞机识别中使用。 一个典型的RFID系统包括电子标签、读写器(含天线)和应用系统三个主要组成部分。      电子标签是射频识别系统的数据载体,它由标签天线和标签专用芯片组成,能接收读写器的电磁场调制信号并返回响应信号,实现对标签识别码和内存数据的读出或写入操作。      读写器用于接收主机端命令,并将存储在感应器中的数据以有线或无线的方式传回主机,它内含控制器和天线,如果读取距离较长,则天线会单独存在。       应用系统是指用户原有的MIS系统。与RFID系统交互的应用系统的终端计算机,传递着应用系统发出的工作指令,并通过中间件控制电子标签和读写器之间的协调工作,处理RFID系统采集的所有数据,并进行运算、存储及数据传输。       RFID系统工作原理为:当带有电子标签的物品进入读写器天线辐射范围时,接收读写器发出的无线射频信号。无源电子标签凭借感应电流所获得的能量发送出存储在标签芯片中的数据,有源电子标签则主动发送存储在标签芯片中的数据,读写器一般配备了一定功能的中间件,可以读取数据、解码并直接进行简单的数据处理,然后送至应用系统。应用系统根据逻辑运算判断电子标签的合法性,并针对不同的设定进行相应的处理和控制,由此实现RFID系统的基本功能。        射频标签即射频卡,又称非接触式IC卡。由IC芯片、感应天线组成,芯片和天线无外露,被封装在一个标准的PVC卡片内。射频卡的读写过程,通常由射频卡与读写器之间通过无线电波来完成读写操作。它成功地将射频识别技术和IC卡技术结合在一起,结束了无源和免接触这两大技术难题,这是电子器件领域的一大突破。 按照标签的供电方式,射频标签可以分为有源和无源两种形式。      有源标签使用标签内电源提供的能量,识别距离较远(可以达到几十米甚至上百米),但寿命有限,成本较高。      无源标签内不含电源,工作时从读写器的电磁场中获取能量,其重量轻、体积小,寿命很长,成本很低,但通信距离受到限制。 按照工作频率的不同,RFID系统可分为低频、中高频、超高频和微波系统。       低频系统的工作频率一般在30KHz~300KHz,其典型工作频率有125KHz和133KHz。其基本特点是标签的成本较低,标签内保存的数据量较少,读写距离较短(10cm左右),标签外形多样,阅读天线方向性不强,主要应用于畜牧业和动物管理等。      中高频系统的工作频率一般在3MHz~30MHz,其典型工作频率有13.56MHz。其基本特点是标签和读写器的成本较低,标签内保存的数据量较大,读写距离较远(可达到1m以上),适应性强,外形一般为卡状,读写器和标签天线均有一定的方向性,主要应用于二代身份证系统和一卡通系统等。       超高频和微波系统的工作频率一般在300MHz~3GHz或者大于3GHz。其典型工作频率有433MHz、915MHz、2.45GHz和5.8GHz。根据各频段电波特点可适用于不同场合。       例如,433MHz有源标签常用于近距离通信及工业控制领域。915MHz无源标签式物流领域的选择。2.45GHz除广泛应用于近距离通信之外,还广泛应用于我国的铁路运输识别管理。5.8GHz的RFID系统更是作为我国ETC的工作频段,并率先制定了国家ETC标准。

  • 发表了主题帖: 也说射频识别技术的国际标准

           国际标准一般都是西方人制定的,原版都是英文的,而所谓中文版往往是对原版的直译,许多情况下并未准确说出实际的意思,所以如果想看这些标准,还是看原版好。以下仅简单介绍比较重要的关于智能卡的国际标准。以后的叙述我可能很少提及这些标准,不读这些标准也不影响朋友们继续往下读,但是正所谓没有规矩,不成方圆,在这里只是告诉大家,之后的叙述都是基于这些国际标准的。       一、ISO 7810:规定了识别卡的物理特性,比如卡的形状、尺寸等。       二、ISO 7816:身份证集成电路卡国际标准。 这个标准包含的部分比较多,目前还在陆续发布与补充。7816是接触式IC卡必须遵循的国际标准,其中的有些部分也适用于非接触式智能卡。       第一部分规定了接触式智能卡的物理特性;     第二部分规定了接触式智能卡的触点尺寸与位置;     第三部分规定了接触式智能卡的电信号和传输协议;     第四部分规定了接触式智能卡与外界交互的接口组织、安全和命令;     第五部分规定了接触式智能卡应用的命名方式与注册系统;     第六部分规定了接触式智能卡与外界交互的数据元素;     第七部分规定了接触式智能卡用于结构化查询语句的命令;     第八部分规定了接触式智能卡安全操作命令;     第九部分规定了接触式智能卡的卡管理命令;     第十部分规定了同步卡的电信号和复位应答;     第十一部分规定了使用生物统计法的个人认证;     第十二部分规定了接触式智能卡USB电信号接口和操作时序;     第十三部分规定了多应用环境下的应用管理命令;     第十四部分好像没有;     第十五部分规定了加密信息应用.修改件1:加密信息应用的实例。     三、ISO 10536:密耦合卡(CICC)的国际标准。     第一部分规定了CICC的物理特性;     第二部分规定了CICC的耦合区域的尺寸和位置;     第三部分规定了CICC的电信号和复位规程。     四、ISO 14443:接近卡(PICC)的国际标准。     第一部分规定了PICC的物理特性;     第二部分规定了PICC的射频功率和信号接口;     第三部分规定了PICC的的初始化和防冲突算法;     第四部分规定了PICC的传输协议。     五、ISO 15693:疏耦合卡(VICC)的国际标准。     第一部分规定了VICC的物理特性;     第二部分规定了VICC的空中接口和初始化;     第三部分规定了VICC的防冲突和传输协议。     六、ISO 11784/11785:动物识别编码的国际标准。     11784规定了动物识别信号的编码结构;     11785规定了动物识别的一些技术概念。     七、ISO 10373:规定了识别卡的测试方法。     这么多标准看了让人头都大了,其实作为一个RFID的开发和应用者来说,并不是所有这些协议都需要看的。首先如果你不造卡,物理部分就不用看了,厂家做出来什么样就是什么样;信号接口了解一下就行,因为每种卡片通常都有专用的接口芯片,除非从天线到CPU接口你自己全部用分立器件搭建,否则你应该花更多时间研究专用接口芯片的说明书;卡的通讯协议是我们最应该关注的,因为它需要开发人员在软件中实现;而动物识别编码的国际标准是做动物识别卡时用,它规定了卡片发送动物识别信息的编码规则,属于智能卡的应用范畴。

  • 发表了主题帖: CPU卡常用的APDU指令错误码

    状态码 性质 错误解释 -------------------------------- 9000 正常 成功执行 6200 警告 信息未提供 6281 警告 回送数据可能出错 6282 警告 文件长度小于Le 6283 警告 选中的文件无效 6284 警告 FCI格式与P2指定的不符 6300 警告 鉴别失败 63Cx 警告 校验失败(x-允许重试次数) 6400 出错 状态标志位没有变 6581 出错 内存失败 6700 出错 长度错误 6882 出错 不支持安全报文 6981 出错 命令与文件结构不相容,当前文件非所需文件 6982 出错 操作条件(AC)不满足,没有校验PIN 6983 出错 认证方法锁定,PIN被锁定 6984 出错 随机数无效,引用的数据无效 6985 出错 使用条件不满足 6986 出错 不满足命令执行条件(不允许的命令,INS有错) 6987 出错 MAC丢失 6988 出错 MAC不正确 698D 保留  6A80 出错 数据域参数不正确 6A81 出错 功能不支持;创建不允许;目录无效;应用锁定 6A82 出错 该文件未找到 6A83 出错 该记录未找到 6A84 出错 文件预留空间不足 6A86 出错 P1或P2不正确 6A88 出错 引用数据未找到 6B00 出错 参数错误 6Cxx 出错 Le长度错误,实际长度是xx 6E00 出错 不支持的类:CLA有错 6F00 出错 数据无效 6D00 出错 不支持的指令代码 9301 出错 资金不足 9302 出错 MAC无效 9303 出错 应用被永久锁定 9401 出错 交易金额不足 9402 出错 交易计数器达到最大值 9403 出错 密钥索引不支持 9406 出错 所需MAC不可用 6900 出错 不能处理 6901 出错 命令不接受(无效状态) 61xx 正常 需发GET RESPONSE命令 6600 出错 接收通讯超时 6601 出错 接收字符奇偶错 6602 出错 校验和不对 6603 警告 当前DF文件无FCI 6604 警告 当前DF下无SF或KF

  • 发表了主题帖: 射频识别有关CPU卡

            智能卡按安全级别可以分为三类:存储器卡、逻辑加密卡和CPU卡,其中CPU卡是安全级别最高的。从“CPU”这个名字可以看出,CPU卡最大的特点就是卡片里面有一个"CPU",有了CPU我们就可以对卡片编程写入软件(COS,卡片操作系统),实现复杂的安全加密算法,所以CPU卡的安全性是最高的。与之形成对比的是,存储器卡和逻辑加密卡中没有"CPU",尽管在我们看来像MIFARE1卡看起来似乎也很智能,但M1卡里存在的仅仅是一个专用集成电路(ASIC),而不是CPU。     说到非接触式CPU卡,就不得不提接触式CPU卡,因为就CPU卡的灵魂——COS来说,二者遵循的协议基本是一样的,都是ISO7816-4,不同之处在于二者进入COS的方式和途径,在此以复旦微电的非接触式CPU卡FM1208M01为例,与接触式CPU卡进入COS的过程对比如下图所示。 CPU卡在进入ISO7816-4协议之前所做的都是一些为卡片和读写器对话进行的准备工作。接触式CPU卡的序列比较简单,卡片插在卡座上,读写器给卡片一个复位(Reset)信号,卡片回送一个应答ATR(Answer To Reset),ATR由5部分组成:     (1)初始字符TS:指定字符传送规则,如果是3B则高电平表示1,低电平表示0,先传送字符最低有效位;如果是3F 则高电平表示0,低电平表示1,先传送字符最高有效位。     (2)格式字符T0:指定存在哪些接口字符以及历史字符的个数。     (3)接口字符  :指定协议参数和协议类型     (4)历史字符  :说明诸如制造商、芯片型号等一般信息     (5)校验字符  :保证ATR数据的完整性,使用的是异或校验     非接触式CPU卡得到ATS(Answer To Select)相对步骤多一些,不过这也是迫不得已,这是由卡片本身的“非接触”特性决定的。不像接触式卡片那样一卡一座,非接触式卡片由于“无源”和“免接触”,读写器的射频场中可能同时存在多张卡片,为了从多张卡片中选中一张进行操作,读写器要启动防冲突和卡选择的过程。由于不能保证射频场中的卡片都是CPU卡,所以读写器选中一张卡片后还要向卡片发送RATS命令,CPU卡会回送一个ATS响应,此ATS与接触式CPU卡的ATR也大同小异,同样由5部分组成:     (1)长度字符TL:指出ATS的长度,不包括后面的校验字节。     (2)格式字符T0:指定存在哪些接口字符以及卡片能接收的帧的最大长度。     (3)接口字符  :指定协议参数和协议类型     (4)历史字符  :说明诸如制造商、芯片型号、序列号等一般信息     (5)校验字符  :保证ATS数据的完整性,使用的是2字节CRC校验     完成ATR或ATS应答之后,卡片可以进行PPS(Protocol Parameter Selection)协商,也可以不协商而使用默认值。此后就进入7816-4,执行COS命令进行数据交换了。

  • 2020-01-12
  • 发表了主题帖: 用于流量测定的超声波技术

     用于流量测定的超声波技术

  • 发表了主题帖: 水流量计快速入门指南

        水流量计快速入门指南

  • 发表了主题帖: 配备 MSP430™ 超声波传感微控制器的智能流量计

    配备 MSP430™ 超声波传感微控制器的智能流量计

  • 发表了主题帖: 用于气流和水流计量应用的 MSP430FR604x、MSP430FR504x 数据表

          MSP430FR6043 SoC 隶属 MSP430 超声波传感微控制器 (MCU) 系列产品,该器件功能强 大、集成度高,专为超声波水表、热量计和燃气表而设计。这些 MCU 提供集成的超声波传感解决方案 (USS_A) 模块,该模块可针对多种流速提供高精度测量。USS_A 高度集成,需要的外部组件极少,因而有 助于实现超低功耗计量并降低系统成本。          MSP430FR6043 器件采用低功耗加速器 (LEA),可实现基于高速 ADC 的信号采集以及后续优化数字信号处 理,为电池供电型计量提供了一款超低功耗、高精度的计量解决方案 应用。 USS_A 模块包括可编程脉冲发生器 (PPG) 和具有低阻抗输出驱动器的物理接口 (PHY),以实现最佳传感器 激励和准确的阻抗匹配,从而在零流量漂移 (ZFD) 方面达到最佳效果。USS_A 模块还包含可编程增益放大 器 (PGA) 和高速 12 位 8Msps Σ-Δ ADC (SDHS),便于通过行业标准超声波传感器实现精确的信号采集。 MSP430FR6043 MCU 还集成了其他外设,以针对计量提高系统集成度。它具有计量测试接口 (MTIF) 模 块,能够通过脉冲生成来指示仪表测量的流量。它还具有片上 8 通道多路复用器 LCD 驱动器、实时时钟 (RTC)、12 位 SAR ADC、模拟比较器、高级加密 (AES256) 和循环冗余校验 (CRC) 模块。 MSP430FR604x 和 MSP430FR504x MCU 由广泛的硬件和软件生态系统提供支持,随附参考设计和代码示 例,便于您快速开始设计。开发套件包括 MSP-TS430PN80C 80 引脚目标开发板和 EVM430-FR6043 超声 波气流计 EVM。TI 还提供免费软件,包括超声波传感设计中心、超声波传感软件库和 MSP430Ware™ 软 件。 MSP430FR604x MCU 系列集成了 TI 的 FRAM(铁电 RAM)和功耗整体超低 MSP 系统架构,从而使系统 设计人员能够在降低能耗的同时提升性能。FRAM 技术兼有 RAM 的低功耗快速写入、灵活性、耐用性和闪 存非易失性等特性。 用于气流和水流计量应用的 MSP430FR604x、MSP430FR504x 超声波传感 MSP430™ 微 控制器 数据表  

  • 发表了主题帖: TI TMS320F2812的SVPWM 程序

    replyreload += ',' + 2941071;TI TMS320F2812的SVPWM 程序 游客,如果您要查看本帖隐藏内容请回复

  • 2020-01-11
  • 发表了主题帖: MSP430F149最小系统板利用1602液晶显示的正弦波示波器程控

     首先,讲一下 MSP430F149 的结构。MSP430 系列单片机是美国德州仪器(TI)1996年开始推向市场的一种16位超低功耗、具有精准指令集(RISC)的混合信号处理器(Mixed Signal Processor)。单个芯片的价格在 20 元左右。MSP430F149 是最小系统板,其中自带了 12 位的ADC模块,液晶显示屏我们可以另加,采集到单片机内部也就是 4096 个不同的读数。再由单片机引脚的最高电压是2.5V,易得理论精度为 0.6 mV,也就是说ADC的位数越多,数据采集精度越高。需要什么样的ADC模块也可以根据需求另外加上。另外提示一点 MSP430F149 的RAM只有 2K。以上都是一些用的上的常识,我们当初写程控的时候出过一些相关的问题,在这里写在前面,希望读者引以为鉴。     示波器的制作主要分为三部分:ADC采集,数据处理和显示。今天主要讲解ADC模块和数据处理。     首先说一下采用系统板自带的ADC的采集。ADC采集首先分为选择输入通道,选择采样频率。MSP430F149有很多功能和51不太一样,引脚全都要先定义后使用,这一点对初学者来说很不方便,但是相信通过视频课学习掌握。那么来点干货放在附录里,这是我们参加TI杯比赛的时候的一个程控,这里是一个ADC初始化的程控,仅供大家学习和参考。     第二部分是数据处理。笔者提供一种思路,采用定时中断的方式将将ADC模块采集到的数据存放到一个数组里,然后对整个数组进行数据处理。在处理整个数组的数据时要注意数据的精度和位数,笔者在这里不再赘述。自带的 12 位 ADC 模块一定会有失真,具体表现就是如果把所有采集的数据绘图,会发现图形上有很多小锯齿,这就需要我们处理这些数据,留下失真较小和不失真的数据,推荐大家去学习一下 SMOOTH 函数,这是一个可以把曲线变平滑的函数(现在又学了很多相关的知识关于滤波)。在这些都处理完了以后我们才可以进行真正意义上的数据分析处理。示波器所要显示的信息有两个:波幅和频率。波幅我们可以用一个排序然后求峰峰值的方法得到。频率则可以比较两个最大值出现的时间来得到。如果有杂波的信号可以用傅里叶变换(FFT)来分离基波和各次谐波,从而求出频率和波幅。     我们在比赛的时候也出现了很多问题,理论上我们可以显示 0 ~ 1000 Hz 的频率, 600 Hz 以上的频率无法显示,而且峰峰值测量误差较大,欢迎大佬留言讨论。 附录(ADC模块初始化函数): void ADC_Init() { P6SEL|=0x01; ADC12CTL0 &= ~(ENC); ADC12MCTL0= SREF0 + INCH_0+EOS; ADC12CTL0 =0x00; ADC12CTL0|= ADC12ON + SHT0_1+REFON+REF2_5V + MSC ; ADC12CTL1 =0x00; ADC12CTL1|= CSTARTADD_0 + SHP + CONSEQ_2 + ADC12SSEL_0 + ADC12DIV_0; ADC12IE = 0; ADC12IE = 0x00; ADC12CTL0|= ENC + ADC12SC; return; }  

  • 发表了主题帖: 单片机中使用printf打印浮点数问题

    对于单片机,处理能力有限,我使用stm32直接使用printf函数(当然printf使用串口方式),直接使用printf(“xxxx=%f”,xxxx),打印出来的数据时一大长串乱七八糟的数据, 在实时性较强的应用中,一般自己编写处理程序,现在的问题是:怎么样更方便快速地将浮点数输出到显示器件上。 按照网上网友的方式,将小数提炼出来是个好办法: void PrintFloat(float value) {     int tmp,tmp1,tmp2;     tmp = (int)value;     tmp1=(int)((value-tmp)*10)%10;     tmp2=(int)((value-tmp)*100)%10;     printf("value=%d.%d%d\r\n",tmp,tmp1,tmp2); }

  • 发表了主题帖: 单片机如何串口发送数值,带小数点的

    发送端: float a = 1.12345; char* p ; p = char*(&a); for(char i = 0;i<sizeof(a);i++) {   send(*p);   p++; } 接收端: float a = 1.12345; char* p ; p = char*(&a); for(char i = 0;i<sizeof(a);i++) {   *p = sbuf;   p++; }

  • 发表了主题帖: msp430单片机通过串口向上位机发送浮点数

    组装数据  首先将数据组装起来,通过sprintf函数。  组装数据时用的小技巧:     length = 0;      sprintf(Storage+length, "Rr=%4.3f ", g_StrComm.aSBuf[0]);     length = strlen(Storage);   //strlen =12     sprintf(Storage+length, "Rh=%4.3f ", g_StrComm.aSBuf[2]);     length = strlen(Storage);   //strlen =24     sprintf(Storage+length, "B1=Rr/Rh=%2.4f", g_StrComm.aSBuf[0]/g_StrComm.aSBuf[2]);     length = strlen(Storage);     SendStr(Storage,strlen(Storage));   //组装完发送数据 通过这样方式组装数据比较轻松,方便获取数组长度,方便更新数组内容;  通过sprintf函数轻松的将浮点数类型转换为char类型,每个数字对应一个byte字节, 2.发送数据 void SendStr(char SBuf[],int len) {   int m = 0;   for( m = 0; m < len; m++ ) //循环发送len 个字节   {     while (!(UCA1IFG&UCTXIFG));        // UART1发送寄存器准备好     UCA1TXBUF = SBuf[m] ;               //发送一个字节   } }  

  • 发表了主题帖: MSP430F149的串口RS485接口

    一、简述     RS485通信基本原理和使用方法同RS232,不同点如下。 RS232接口只能实现点对点的通信方式,但这种方式不能实现联网功能,便出现了RS485解决了这个问题。RS485采用差分信号负逻辑,+2V~+6V表示“1”,- 6V~- 2V表示“0”。双机通信时只需A-A,B-B连接。 硬件电路一般采用SN65176等RS485电平转换芯片。与MCU相连时有三个引脚:DE(RE同DE连在一起),DI(接受引脚),RO(发送引脚)。MCU发送一帧信号时,要先使能DE=1;接收信号前要先使能DE=0(即RE=0)。 二、实例 2.1 发送字符8.N.1.2400 #define DRE_out   P3DIR |= BIT3 //连接485芯片的DE,RE端口的IO设置为输出状态 #define DE        P3OUT |= BIT3     //设置485芯片处于发送状态 void Set_UART1(void) {     P3SEL |= 0xC0;                         //将P3.6,P3.7选做UART1的通信端口     ME2 |= UTXE1 + URXE1;                     //使能USART1的TXD和RXD     UCTL1 |= CHAR;                            //选择8-bit字符     UTCTL1 |= SSEL0;                          //驱动时钟选择ACLK     UBR01 = 0x0D;                             //波特率2400     UBR11 = 0x00;     UMCTL1 = 0x6B;                            //调整     UCTL1 &= ~SWRST;                          //初始化UART状态机 } main {     DRE_out;     DE;     Set_UART1();         TXDATA = 0X30;     TXBUF1 = TXDATA;                          //这里可直接赋值传送固定的数据 while(!(IFG2 & UTXIFG1));               //等待发送结束 ……  } 2.2 中断函数接收字符8.N.1.2400 void Set_UART1(void) {     P3SEL |= 0xC0;                         //将P3.6,P3.7选做UART1的通信端口     ME2 |= UTXE1 + URXE1;                     //使能USART1的TXD和RXD     UCTL1 |= CHAR;                            //选择8-bit字符     UTCTL1 |= SSEL0;                          //驱动时钟选择ACLK     UBR01 = 0x0D;                             //波特率2400     UBR11 = 0x00;     UMCTL1 = 0x6B;                            //调整     UCTL1 &= ~SWRST;                          //初始化UART状态机     IE2 |= URXIE1;                            //使能UART1接收中断 } #pragma vector=UART1RX_VECTOR __interrupt void UART1_RX (void) {     Disp1Char(pX++,pY,RXBUF1);     if(pX == 16)     {       pX = 0;       pY ^= 1;     } }

  • 发表了主题帖: MSP430F149小系统开发板实现RS232串口通信

    /***************************************************** 程序功能:MCU不停向PC机发送数据,在屏幕上显示0~127对应           的ASCII字符 ------------------------------------------------------ 通信格式:N.8.1, 2400 ------------------------------------------------------ 测试说明:打开串口调试精灵,正确设置通信格式,观察屏幕 调试说明:该程序通过USB口,在sscom32上可以观察到现象。                    用的是com6串口。在调试的时候,注意P34、P35相连。                    RS232串口也是可以工作的,在sscom32和串口调试精                    灵上都可以很好地工作。 ******************************************************/ #include  <msp430x14x.h> typedef unsigned char uchar; typedef unsigned int  uint; void Delays(void); void PutString(uchar *ptr); /********************主函数**********************/ void main(void) {     uchar *tishi = " MCU sends 0~127 to PC and the\                     \n screen will display their corresponding\                     \n ASCII code as follows:";     uchar value = 0;        /*下面六行程序关闭所有的IO口*/     P1DIR = 0XFF;P1OUT = 0XFF;     P2DIR = 0XFF;P2OUT = 0XFF;     P3DIR = 0XFF;P3OUT = 0XFF;     P4DIR = 0XFF;P4OUT = 0XFF;     P5DIR = 0XFF;P5OUT = 0XFF;     P6DIR = 0XFF;P6OUT = 0XFF;          WDTCTL = WDTPW + WDTHOLD;                 // 关狗     P6DIR |= BIT2;P6OUT |= BIT2;              // 关电平转换     P3SEL |= 0x30;                            // P3.4,5选择为UART收发端口     ME1 |= UTXE0 + URXE0;                     // 使能USART0收发     UCTL0 |= CHAR;                            // 8-bit character     UTCTL0 |= SSEL0;                          // UCLK = ACLK     UBR00 = 0x0D;                             // 32k/2400 - 13.65     UBR10 = 0x00;                             //     UMCTL0 = 0x6B;                            // Modulation     UCTL0 &= ~SWRST;                          // 初始化UART0状态机     IE1 |= URXIE0;                            // 使能接收中断     _EINT();     PutString(tishi);     while(1)     {              while (!(IFG1 & UTXIFG0));         TXBUF0 = value++;         value &= 0x7f;                        // 保证value的数值小于128         while (!(IFG1 & UTXIFG0));         TXBUF0 = '\n';         Delays();     } } /******************************************* 函数名称:PutSting 功    能:向PC机发送字符串 参    数:无 返回值  :无 ********************************************/ void PutString(uchar *ptr) {       while(*ptr != '\0')       {             while (!(IFG1 & UTXIFG0));                // TX缓存空闲?             TXBUF0 = *ptr++;                       // 发送数据       }       while (!(IFG1 & UTXIFG0));       TXBUF0 = '\n'; } /******************************************* 函数名称:Delays 功    能:延时一会 参    数:无 返回值  :无 ********************************************/ void Delays(void) {     uchar i=20;     uint j;     while(i--)     {             j=2000;             while(j--);     } }      

  • 发表了主题帖: MSP430F149程序——RS485

    一、引脚说明 1.1 接口定义 485引脚    功能说明 DE、RE    置为高电平则处于发送状态,置为低电平则处于接收状态 1.2 硬件连接 485引脚    430引脚 DE、RE    P4.0 二、移植文件 将 485.c 、 485.h 文件加入到工程文件夹下 2.1 485.c #include <msp430x14x.h> #include "485.h" //9600.8.N.1 extern char str[30];//最终显示的字符串 char data = 0; void Set_UART1(void) {         UCTL1 |= SWRST; //置为1     UCTL1 |= CHAR; //选择8-bit字符     UTCTL1 |= SSEL1; //驱动时钟选择外部时钟     UBR01 = 0x41; //波特率9600     UBR11 = 0x03;     UMCTL1 = 0x00; //调整         ME2 |= UTXE1 + URXE1; //使能USART1的TXD和RXD     UCTL1 &= ~SWRST; ////置为0  初始化UART状态机     IE2 |= URXIE1; // 中断允许寄存器设置,接收中断允许         P3SEL |= BIT6 + BIT7; //将P3.6,P3.7选做UART1的通信端口         P3DIR |= BIT6; //设置TX口方向为输出         DRE_out;//连接485芯片的DE,RE端口的IO设置为输出状态 } void Send1Char(char sendchar)//发送一个字符 {     while (!(IFG2 & UTXIFG1)); //等待发送寄存器为空     TXBUF1 = sendchar; } void PutString0(char *ptr)//基于发送一个字符函数实现发送字符串 {     while (*ptr != '\0')       Send1Char(*ptr++); // 发送数据          } void _485(void) {       Set_UART1();//UART1初始化       DE;//设置485芯片处于发送状态       PutString0("1你好天朝hello world........test485");       delay_ms(5);       _EINT();//打开串行中断       RE;//设置485芯片处于接收状态 } //串口接收中断,接收字符串指令. #pragma vector=USART1RX_VECTOR __interrupt void usart1_rx(void) {       data = RXBUF1;//data保存接收到的字符     //测试代码 收到什么发什么     DE;//设置485芯片处于发送状态     Send1Char(data);     delay_ms(5);     RE;//设置485芯片处于接收状态          /*     str[i]=data;     i++;     if(i==10)//缓冲区满就发出     {         str[i]=0;         i=0;         DE;//设置485芯片处于发送状态         PutString0(str);         delay_ms(5);         RE;//设置485芯片处于接收状态     }     */     /*     if(data=='#')//监听到结束字符'#' 就发出之前的字符串并显示在液晶上     {         str[i - 1]=0;         mLCD_ClearLCD();         mLCD_WriteStrings(0,0,"revice",0);         mLCD_WriteStrings(0,16,str,0);         mLCD_LCDDISP();         DE;//设置485芯片处于发送状态         PutString0(str);         delay_ms(5);         RE;//设置485芯片处于接收状态         i=0;     }     */ } 2.2 485.h #define CPU_F ((double)8000000)        //内部延时函数所需时钟频率/Hz #define delay_ms(x) __delay_cycles((long)(CPU_F*(double)(x)/1000.0)) #define DRE_out   P4DIR |= BIT0 //连接485芯片的DE,RE端口的IO设置为输出状态 #define DE        P4OUT |= BIT0 //设置485芯片处于发送状态 #define RE        P4OUT &= ~BIT0 //设置485芯片处于接收状态 void Set_UART1(void); void PutString0(char *ptr); void Send1Char(char sendchar); void _485(void);  

统计信息

已有1303人来访过

  • 芯币:10299
  • 好友:--
  • 主题:2612
  • 回复:713
  • 课时:--
  • 资源:19

留言

你需要登录后才可以留言 登录 | 注册


博浩元电子 2018-10-25
不错,干货
查看全部
永利高网上注册送彩金 qq等级送彩金线上娱乐 网上百家乐免费送彩金 最新注册送彩金棋牌 网上赌场送彩金 彩票大赢家 白菜送彩金59网站大全 棋牌娱乐app送彩金 APP机器人 彩票网送彩金存款