最新日志

发表于:2008-6-16 17:07:13
标签:无标签

0

CRC算法原理及C语言实现

CRC算法原理及C语言实现 -来自(我爱单片机)

摘 要

 本文从理论上推导出CRC算法实现原理,给出三种分别适应不同计算机或微控制器硬件环境的C语言程序。读者更能根据本算法原理,用不同的语言编写出独特风格更加实用的CRC计算程序。


关键词 CRC 算法 C语言


1 引言
循环冗余码CRC检验技术广泛应用于测控及通信领域。CRC计算可以靠专用的硬件来实现,但是对于低成本的微控制器系统,在没有硬件支持下实现CRC检验,关键的问题就是如何通过软件来完成CRC计算,也就是CRC算法的问题。
这里将提供三种算法,它们稍有不同,一种适用于程序空间十分苛刻但CRC计算速度要求不高的微控制器系统,另一种适用于程序空间较大且CRC计算速度要求较高的计算机或微控制器系统,最后一种是适用于程序空间不太大,且CRC计算速度又不可以太慢的微控制器系统。


2 CRC简介
CRC校验的基本思想是利用线性编码理论,在发送端根据要传送的k位二进制码序列,以一定的规则产生一个校验用的监督码(既CRC码)r位,并附在信息后边,构成一个新的二进制码序列数共(k+r)位,最后发送出去。在接收端,则根据信息码和CRC码之间所遵循的规则进行检验,以确定传送中是否出错。
16位的CRC码产生的规则是先将要发送的二进制序列数左移16位(既乘以 )后,再除以一个多项式,最后所得到的余数既是CRC码,如式(2-1)式所示,其中B(X)表示n位的二进制序列数,G(X)为多项式,Q(X)为整数,R(X)是余数(既CRC码)。
(2-1)
求CRC码所采用模2加减运算法则,既是不带进位和借位的按位加减,这种加减运算实际上就是逻辑上的异或运算,加法和减法等价,乘法和除法运算与普通代数式的乘除法运算是一样,符合同样的规律。生成CRC码的多项式如下,其中CRC-16和CRC-CCITT产生16位的CRC码,而CRC-32则产生的是32位的CRC码。本文不讨论32位的CRC算法,有兴趣的朋友可以根据本文的思路自己去推导计算方法。
CRC-16:(美国二进制同步系统中采用)
CRC-CCITT:(由欧洲CCITT推荐)
CRC-32:

接收方将接收到的二进制序列数(包括信息码和CRC码)除以多项式,如果余数为0,则说明传输中无错误发生,否则说明传输有误,关于其原理这里不再多述。用软件计算CRC码时,接收方可以将接收到的信息码求CRC码,比较结果和接收到的CRC码是否相同。

3 按位计算CRC
对于一个二进制序列数可以表示为式(3-1):
(3-1)
求此二进制序列数的CRC码时,先乘以 后(既左移16位),再除以多项式G(X),所得的余数既是所要求的CRC码。如式(3-2)所示:
(3-2)
可以设: (3-3)
其中 为整数, 为16位二进制余数。将式(3-3)代入式(3-2)得:

(3-4)
再设: (3-5)
其中 为整数, 为16位二进制余数,将式(3-5)代入式(3-4),如上类推,最后得到:
(3-6)
根据CRC的定义,很显然,十六位二进制数 既是我们要求的CRC码。
式(3-5)是编程计算CRC的关键,它说明计算本位后的CRC码等于上一位CRC码乘以2后除以多项式,所得的余数再加上本位值除以多项式所得的余数。由此不难理解下面求CRC码的C语言程序。*ptr指向发送缓冲区的首字节,len是要发送的总字节数,0x1021与多项式有关。
unsigned int cal_crc(unsigned char *ptr, unsigned char len) {
unsigned char i;
unsigned int crc="0";
while(len--!=0) {
for(i=0x80; i!=0; i/=2) {
if((crc&0x8000)!=0) {crc*=2; crc^=0x1021;} /* 余式CRC乘以2再求CRC */
else crc*=2;
if((*ptr&i)!=0) crc^=0x1021; /* 再加上本位的CRC */
}
ptr++;
}
return(crc);
}
按位计算CRC虽然代码简单,所占用的内存比较少,但其最大的缺点就是一位一位地计算会占用很多的处理器处理时间,尤其在高速通讯的场合,这个缺点更是不可容忍。因此下面再介绍一种按字节查表快速计算CRC的方法。
4 按字节计算CRC
不难理解,对于一个二进制序列数可以按字节表示为式(4-1),其中 为一个字节(共8位)。
(4-1)
求此二进制序列数的CRC码时,先乘以 后(既左移16位),再除以多项式G(X),所得的余数既是所要求的CRC码。如式(4-2)所示:
(4-2)
可以设: (4-3)
其中 为整数, 为16位二进制余数。将式(4-3)代入式(4-2)得:
(4-4)
因为:
(4-5)
其中 是 的高八位, 是 的低八位。将式(4-5)代入式(4-4),经整理后得:
(4-6)
再设: (4-7)
其中 为整数, 为16位二进制余数。将式(4-7)代入式(4-6),如上类推,最后得:
(4-8)
很显然,十六位二进制数 既是我们要求的CRC码。
式(4-7)是编写按字节计算CRC程序的关键,它说明计算本字节后的CRC码等于上一字节余式CRC码的低8位左移8位后,再加上上一字节CRC右移8位(也既取高8位)和本字节之和后所求得的CRC码,如果我们把8位二进制序列数的CRC全部计算出来,放如一个表里,采用查表法,可以大大提高计算速度。由此不难理解下面按字节求CRC码的C语言程序。*ptr指向发送缓冲区的首字节,len是要发送的总字节数,CRC余式表是按0x11021多项式求出的。
unsigned int cal_crc(unsigned char *ptr, unsigned char len) {
unsigned int crc;
unsigned char da;
unsigned int crc_ta[256]={ /* CRC余式表 */
0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,
0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,
0x 1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,
0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,
0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,
0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,
0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,
0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,
0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,
0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,
0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,
0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,
0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,
0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,
0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,
0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,
0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,
0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,
0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,
0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,
0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,
0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,
0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,
0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,
0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,
0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,
0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,
0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,
0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,
0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,
0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,
0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0
};

crc=0;
while(len--!=0) {
da=(uchar) (crc/256); /* 以8位二进制数的形式暂存CRC的高8位 */
crc<<=8; /* 左移8位,相当于CRC的低8位乘以 */
crc^=crc_ta[da^*ptr]; /* 高8位和当前字节相加后再查表求CRC ,再加上以前的CRC */
ptr++;
}
return(crc);
}
很显然,按字节求CRC时,由于采用了查表法,大大提高了计算速度。但对于广泛运用的8位微处理器,代码空间有限,对于要求256个CRC余式表(共512字节的内存)已经显得捉襟见肘了,但CRC的计算速度又不可以太慢,因此再介绍下面一种按半字节求CRC的算法。
5 按半字节计算CRC
同样道理,对于一个二进制序列数可以按字节表示为式(5-1),其中 为半个字节(共4位)。
(5-1)
求此二进制序列数的CRC码时,先乘以 后(既左移16位),再除以多项式G(X),所得的余数既是所要求的CRC码。如式(4-2)所示:
(5-2)
可以设: (5-3)
其中 为整数, 为16位二进制余数。将式(5-3)代入式(5-2)得:
(5-4)
因为:
(5-5)
其中 是 的高4位, 是 的低12位。将式(5-5)代入式(5-4),经整理后得:
(5-6)
再设: (5-7)
其中 为整数, 为16位二进制余数。将式(5-7)代入式(5-6),如上类推,最后得:
(5-8)
很显然,十六位二进制数 既是我们要求的CRC码。
式(5-7)是编写按字节计算CRC程序的关键,它说明计算本字节后的CRC码等于上一字节CRC码的低12位左移4位后,再加上上一字节余式CRC右移4位(也既取高4位)和本字节之和后所求得的CRC码,如果我们把4位二进制序列数的CRC全部计算出来,放在一个表里,采用查表法,每个字节算两次(半字节算一次),可以在速度和内存空间取得均衡。由此不难理解下面按半字节求CRC码的C语言程序。*ptr指向发送缓冲区的首字节,len是要发送的总字节数,CRC余式表是按0x11021多项式求出的。
unsigned cal_crc(unsigned char *ptr, unsigned char len) {
unsigned int crc;
unsigned char da;
unsigned int crc_ta[16]={ /* CRC余式表 */
0x0000,0x1021,0x2042,0x3063,0x4084,0x50a5,0x60c6,0x70e7,
0x8108,0x9129,0xa14a,0xb16b,0xc18c,0xd1ad,0xe1ce,0xf1ef,
}

crc=0;
while(len--!=0) {
da=((uchar)(crc/256))/16; /* 暂存CRC的高四位 */
crc<<=4; /* CRC右移4位,相当于取CRC的低12位)*/
crc^=crc_ta[da^(*ptr/16)]; /* CRC的高4位和本字节的前半字节相加后查表计算CRC,
然后加上上一次CRC的余数 */
da=((uchar)(crc/256))/16; /* 暂存CRC的高4位 */
crc<<=4; /* CRC右移4位, 相当于CRC的低12位) */
crc^=crc_ta[da^(*ptr&0x0f)]; /* CRC的高4位和本字节的后半字节相加后查表计算CRC,
然后再加上上一次CRC的余数 */
ptr++;
}
return(crc);
}
5 结束语
以上介绍的三种求CRC的程序,按位求法速度较慢,但占用最小的内存空间;按字节查表求CRC的方法速度较快,但占用较大的内存;按半字节查表求CRC的方法是前两者的均衡,即不会占用太多的内存,同时速度又不至于太慢,比较适合8位小内存的单片机的应用场合。以上所给的C程序可以根据各微处理器编译器的特点作相应的改变,比如把CRC余式表放到程序存储区内等。

点击此处查看原文 >>

系统分类: 单片机   |    用户分类: 无分类    |    来源: 转贴

评论(0) | 阅读(148)
发表于:2008-6-14 23:00:28
标签:A/D转换  软件  滤波  

0

A/D转换后的软件滤波实现(1)

理论上讲单片机从A/D芯片上采集的信号就是需要的量化信号,但是由于存在电路的相互干扰、电源噪声干扰和电磁干扰,在A/D芯片的模拟输入信号上会叠加周期或者非周期的干扰信号,并会被附加到量化值中,给信号带来一定的恶化。考虑到数据采集的实时性和安全性,有时需要对采集的数据进行软处理,一尽量减小干扰信号的影响,这一过程称为数据采集滤波。

以下介绍十种数据采集滤波的方法和编程实例。这10种方法针对不同的噪声和采样信号具有不同的性能,为不同场合的应用提供了较广的选择空间。选择这些方法时,必须了解电路种存在的主要噪声类型,主要包括一下方面:

* 噪声是突发随机噪声还是周期性噪声

* 噪声频率的高低

* 采样信号的类型是块变信号还是慢变信号

* 另外还要考虑系统可供使用的资源等

通过对噪声和采样性能分析,选用最合适的方法以及确定合理的参数,才能达到良好的效果。

    目前用于数据采集滤波的主要方法有以下10种,这10种方法都是在时域上进行处理的,相对于从频域角度设计的IIR或者FIR滤波器,其实现简单,运算量小,而性能可以满足绝大部分的场合的应用要求。

1.限幅滤波法(又称程序判断滤波法)

实现方法:

1)根据经验判断,确定两次采样允许的最大偏差值(设为A);

2)每次检测到新值时判断,如果本次值与上次值之差 ≤ A ,则本次值有效;如果本次值与上次值之差>A,则本次值无效,放弃本次值,用上次值代替本次值。

这种方法能有效克服因偶尔因素引起的脉冲干扰,但是无法抑制那种周期性的干扰,平滑度差。

2.中位置滤波法

实现方法:

1)连续采样N次(N取奇数);

2)把N次采样值按大小排列;

3)去中间值韦本次有效值;。

这种方法能有效克服因偶然因素引起的波动干扰,对温度、液位变化缓慢的被测参数有良好的滤波效果。缺点是对流量、速度等快速变化的参数不宜使用。

3.算术平均值滤波法

实现方法:

把连续N个采样值进行算术平均运算,作为本次滤波得到的有效值;N值的选取为:一般流量,N=12;压力:N=4

这种方法的特点是:N值较大时,信号平滑度较高,但灵敏度较低;N值较小时,信号平滑度较低,但灵敏度较高,适用于对一般具有随机干扰的信号进行滤波。这种信号的特点是有一个平均值,信号在某一数值范围附近上下波动。其缺点是:对于测量速度较慢或要求数据计算速度较快的实时控制不适用;比较浪费RAM空间。

 

4.递推平均滤波法(又称滑动平均滤波法)

实现方法:

1)把连续去N个采样值看成一个队列,队列的长度固定为N

2)每次采样到一个新数据放入队尾,并扔掉原来队首的一个数据(先进先出原则);

3)把队列中的N个数据进行算术平均运算,就可获得新的滤波结果。

N值的选取依据应用场合的不同,分别为:流量,N=12;压力,N=4;液面,N=4~12;温度,N=1~4

这种方法对周期性干扰有良好的抑制效果,平滑度高,适用于高频震荡的系统。其缺点是:灵敏度低,对偶然出现的脉冲性干扰的一直作用比较差,不易消除由于脉冲干扰所引起的采样值偏差,不适用于脉冲干扰比较严重的场合;比较浪费RAM空间。

 

5.中位值平均滤波法(有称脉冲干扰平均滤波法)

这种方法相当于“中位置滤波法”+“算术平均值滤波法”,实现方法为:

1)连续采样N个数据,去掉一个最大值和一个最小值;

2)然后计算N-2个数据的算术平均值。

N值的选取范围为3~14

这种方法融合和两种滤波法的优点,对于偶然出现的脉冲性干扰,可消除由于脉冲干扰锁引起的采样值偏差。其缺点是:测量速度较慢,和算术平均滤波法一样比较浪费RAM空间。

 

6.限幅平均滤波法

这种方法相当于“限幅滤波法”+.递推平均滤波法”,其实现方法是:

1)每次采样到的新数据先进行限幅处理;

2)再送入队列进行递推平均滤波处理。

这种方法融合和两种滤波法的优点,对于偶然出现的脉冲性干扰,可消除由于脉冲干扰锁引起的采样值偏差。其缺点是比较浪费RAM空间。

 

 

7.一阶滞后滤波法

 

实现方法:

(1)        a=0~1

(2)       本次滤波结果=1-a)×本次采样值+a×上次滤波结果。

这种方法对周期性干扰具有良好的抑制作用,适用于波动频率较高的场合。其缺点是:相位

滞后,灵敏度低,滞后程度取决于a值大小;不能消除滤波频率高于采样频率的1/2的干扰信号。

 

 

8.加权递推平均滤波法

 

这种方法是对递推平均滤波法的改进,对于不同时刻的数据加以不同的权值。通常是越接近

现时刻的数据,权取得越大。给予新采样值的权系数越大,则灵敏度越高,但信号平滑度低。

    这种方法适用于有较大纯滞后时间常数的对象和采样周期较短的系统。其缺点是:对于纯滞后时间常数较小,采样周期较长,变化缓慢的信号不能迅速反应系统当前所受干扰的严重程度,滤波效果差。

 

 

9.消抖滤波法

 

实现方法:

1)设置一个滤波计数器;

2)将每次采样值与当前有效值比较;

3)如果采样值=当前有效值,则计数器清零;

4)如果采样值大于或小于当前有效值,则计数器+1,并判断计数器是否大于等于上限N(溢出);

5)如果计数器溢出,则将本次值替换当前有效值,并清计数器。

这种方法对于变化缓慢的被测参数有较好的滤波效果,可避免在临界值附近控制器的反复开/关跳动或显示器上数值抖动。缺点是:对于快速变化的参数不宜;如果在计数器溢出的那一次采样到的值恰好是干扰值,则会将干扰值当作有效输入导入系统。

 

 

10.限幅消抖滤波法

这种方法相当于“限幅滤波法+“消抖滤波法”,即先限幅,后消抖。

这种方法继承了“限幅”和“消抖”的优点,改进了“消抖滤波法”中的某些缺陷,避免将干扰值导入系统。其缺点是对于快速变化的参数不宜使用。

 

以上为设计思路分析。

点击此处查看原文 >>

系统分类: 单片机   |    用户分类:    |    来源: 整理

评论(0) | 阅读(98)
发表于:2008-4-24 13:42:06
标签:无标签

0

关于单位dB的说明(转自网络)

现实中,dB这个单位非常挠人,可能许多高手也不是十分清楚。下面摘录1994年出版的《简明计量单位符号词典》(李慎安)中有关分贝的说明。但如今我不能确定其中说明的“法定计量单位”是否还有效,也就是是否符合目前的标准化要求,我不敢肯定,仅作为学习单位“分贝”等时参考。麻烦掌握这方面标准的高人跟帖说明。

符号

说明

是否适合目前的标准化要求

db;
D.B.

级差单位“分贝”(decibel )的非标准化符号.这一非标准化的符号中,往往也给出表示测量条件和参考量大小的附加记号.例如:dbmW ,dbV, dbm0.其标准化符号依次为:dBmW ,dBV, dBm0.见:dB.

是否

dB

级差或水平的单位“分贝”(decibel)的符号,对数量单位,只用于常用对数.等于0.1 B.为我国法定计量单位.由于它由常用对数定义,不属物理量的单位,在SI中不包括,但ISO等国际组织承认,使用这一符号时常附加说明性记号.

是否

dBp

用噪声电压计测定的噪声声压级的单位符号.下标p表示来自声压比的常用对数.法定计量单位.

是否

dB0

级差单位“分贝”(decibel)在用于相对零电平点的绝对噪声电平单位符号.为区别于其他的量值而附加了记号“0”.法定计量单位.

是否

dBa

按FIA曲线加权给出的级差单位“分贝”(decibel)的符号.法定计量单位.

是否

dBk

功率级差、水平单位,“以千瓦作为参考量的分贝”(decibel referred to one  kilowatt)的符号.

是否

dBm

以1 mW作为参考量给出电功率级差单位“分贝”(decibel)时的UIT所规定的单位符号.法定计量单位.

是否

dB(mA)

以1 mA作为参考量给出电流级差的单位“分贝”(decibel)的符号,为IEC所规定.法定计量单位.

是否

dB(mW)

以1 mW作为参考量给出电功率级差时的单位“分贝”(decibel)的符号,为IEC所规定.法定计量单位.

是否

dB(mW,0);
dBm0

参考功率为1mW,折合到0-dBr点的水平为1dB的单位“分贝”(decibel)的符号,前者系IEC所定,后者为UIT所定.均为法定计量单位.

是否

dB(mW,0,p);
dBm0p

参考噪声功率为1 mW,折合到0-dBr点,频率值按电话评价曲线的单位dB的符号.前者为IEC所定,后者为UIT所定.法定计量单位.

是否

dbn;dBn

以1 V为零电平的差级单位“分贝”(decibel)的非标准化符号.标准化符号为dBV,dB(V).法定计量单位.但符号应改用dBV或dB(V)

是否

dBp

采用噪声电压计测出的加权的电压级单位“分贝”(decibel)的非标准化符号.标准化符号为:dBp.见dBp.(注:两者的区别在于下标p是否是斜体,如果量的符号它必须是斜体,否则是正体。----iC921)

是否

dB(pre 1mW)

以1mW作为参考量的功率水平单位“分贝”(decibel)的非标准化符号.见:dB(mW)

是否

dB(q,0,ps);
dB q 0 ps

无线电广播噪声功率,采用准峰值测量仪器测量,折合到0-dBr点,频率评价按广播评价曲线给出的单位dB的符号.前者为IEC给定,后者为UIT所定.法定计量单位.

是否

dBr

表示相对级差或相对水平(系统增强级)(system level)所用的单位“分贝”(decibel)的符号,以区别于绝对水平所用的统一单位.法定计量单位.

是否

dB(re 1 m W)

dB(W)的非标准化符号.见:dB(mW).

是否

db/rn;
DBRN

指超过基准噪声的级差单位“分贝”(decibel above reference noise)的非标准化符号.见:dB.

是否

dBrnc

参考噪声按c曲线加权给出的级差单位“分贝”(decibel)的符号.法定计量单位.

是否

dbsm;
dBsm

超过1 m2的级差单位“分贝”(decibel above one square metre)的非标准化符号.标准化符号为:dB.关于这里的附加说明记号sm,标准化为m2.至于m2如何附加在dB后,尚未标准化.

是否

dB(V);
dBV

以1 V作为参考量给出电压级差的单位“分贝”(decibel)的符号.前者为IEC所规定,后者为UIT规定.法定计量单位.

是否

dB(W);
dBW

以1 W作为参考量给出电功率级差单位“dB”的符号,前者为IEC所定,后者为UIT规定.法定计量单位.

是否

dB(W/K)

以1 W/K作为参考量给出功率温度比级差的单位“分贝”(decibel)的符号,为IEC所规定.法定计量单位.

是否

dB(W/4kHz)

以1 W/4kHz作为参考量给出功率频带宽比级差的单位“分贝”(decibel)的符号,为IEC所规定.法定计量单位.

是否

dB(W/m2)

以1 W/m2作为参考量给出面积功率级差的单位“分贝”(decibel)的符号,为IEC所规定.法定计量单位.

是否

dB(W/m2·kHz)

以1 W/(m2·kHz)作为参考量给出功率频宽面积级差的单位“分贝”(decibel)的符号,为IEC所规定.法定计量单位.

是否

dB(μV/m)

以1 μV/m作为参考量给出电场强度级差的单位“分贝”(decibel)为IEC所规定.法定计量单位.

是否

dB(0.775V)

以(0.6)1/2 V作为参考量给出电压级差的单位“分贝”(decibel)的符号,为IEC所规定.法定计量单位.

是否

%

数学符号,表示“百分”(procent),在表示物理量中的无量纲量采用10-2作为单位时,按标准可使用此数学符号.

是否


表示10-3即“千分”(promille)的数学符号,但我国GB 3102种未列,不宜代替10-3作为单位符号.

是否

% en masse

法语中用于表示质量百分浓度的非标准化单位“质量百分”(pourcentgae en  masse)的非标准化符号.见:m%.

是否

%FS

以计量仪器满刻度(全量程)(full scale)作为“1”给出的百分值得非标准化符号,规范化的表达为:全量程的…%.

是否

%rh;
%RH

相对湿度(relative humidity)的非标准化表示方法,标准化表示为:相对湿度…%

是否

%Sv-1

人体器官由于电离辐射致死的百分率单位“每希沃特致死比率”(percent per sievert)的符号,也用10-2Sv-1.用于致癌的比率时,在量的名称中指明.

是否

%(V/V);
%Vol

用体积分数表示含量的非标准化单位“体积百分数”(volume procent)符号,标准化表达形式为:体积百分数为…%.单位及符号均不得使用.

是否

%(w/v)

质量浓度的非标准化单位的符号.质量浓度不能以纯数给出,不得使用%数学符号.%后括弧中的w/v表示质量除以体积,应改为质量浓度的法定计量单位.如:g/L,mg/L.

是否

‰(w/v

质量浓度的非标准化单位的符号.质量浓度并非无量纲量.不得用‰或10-3来表达.见:%(w/v).

是否

%(w/w);
%(m/m)

用质量分数表示含量的非标准化单位“质量百分,重量百分”(mass procent ; weight procent)符号.标准化表达形式为:质量分数为…%.单位及符号均不在只用,而应代之以%或10-2.

是否

×

用于表示放大率的单位“倍”(times)的符号,放大率为无量纲量,按SI规则,应只用纯数表达,这个乘号可视为数学符号用以说明给出的数为倍率.

是否

注1:(0.6)1/2=0.774 596 669 241 483 377
注2:IEC为国际电工委员会;UIT为国际电信联合会

点击此处查看原文 >>

系统分类: 通信网络   |    用户分类: 无分类    |    来源: 无分类

评论(0) | 阅读(264)
发表于:2008-3-13 0:54:58
标签:无标签

0

led数码管的结构及检测方法

摘自网络:

led数码管的结构

LED数码管是由发光二极管构成的,亦称半导体数码管. 将条状发光二极管按照共阴极(负极)或共阳极(正极)的方法连接,组成"8"字,再把发光二极管另一电极作笔段电极,就构成了LED数码管.若按规定使某些笔段上的发光二极管就能显示从0~9的…系列数字。同荧光数码管、辉光数码管(NRT)相比它具有:体积小、功耗低、耐震动、寿命长、亮度高、单色性好、发光响应的时间短,能与TTL,CMOS电路兼容等的数显器件。

常见LED数码管的外形及内部结构如图1所示。图1(b)属于共阳极结构,图1(c)采用共阴极结构。+、一分别表示公共阳极和公共阴极。a~g是7个笔段电极,DP为小数点。另有一种字高为7.6mm的超小型LED数码管,管脚从左右两排引出,小数点则是独立的。

2.L印数码管的性能检测

LED数码管外观要求颜色均匀、无局部变色及无气泡等,在业余条件下可用干电池进一步检测。如图2所示。以共阴极数码管为例介绍检测方法。;将3;V干电池负极引出线固定接触在LED数码管的公共阴极上,电池正极引出线依次移动接触笔画的正极端。这一根引出线接触到某一笔画的正极端时,那~笔画就应显示出来。用这种简单的方法就可检测出数码管是否有断笔(某笔画不能显示),连笔(某些笔画连在一起),并且可相对比较出不同的笔画发光的强弱性能。若检测共阳极数码管,只需将电池正负极引出线对调一下,方法同上。

;LED数码管每笔画工作电流I在5~10;mA之间,若电流过大会损坏数码管,因此必须加限流电阻,其阻值可按下式汁算:;其中Uo为加在LED两端电压,U为LED数码管每笔画压降(约2;v)。

;利用数字万用表的hFE插口能够方便地检查LED数码管的发光情况。选择NPN档时,C孔带正电,E孔<带负电。例如检测LTS547R型共刚极LED数码管时,从E孔插入一根单股细导线,导线引出端接一极(第③脚与第⑧脚在内部连通,可任选一个作为-);再从c孔引出一根导线依次接触各笔段。若按图3所示电路,将第④、⑤、①、⑥、⑦脚短路后再与c孔引出线接通,则显示数宇‘2”。把a~g段全部接c引线,就显示令亮笔段,构成数字“8”

;

(1)检测时若发光暗淡,说明器件已老化,发光效率太低。如果显示的笔段残缺不全,说明数码管已局部损坏。

;(2)对丁型号不明、又无管脚排列图的LED数码管,用数字万用表的hFE档可完成下述测试工作:①判定数码管的结构形式(共阴或共阳);②识别管脚:⑧检测全亮笔段。预先可假定某个电极为公共极,然后根据笔段发光或不发光加以验证。当笔段电极接反或公共极判断错误时,该笔段就不能发光。

LED数码管的性能特点、简易检测及使用注意事项

1.性能特点

LED数码管的主要特点如下:

(1)能在低电压、小电流条件下驱动发光,能与CMOS、ITL电路兼容。

(2)发光响应时间极短(<0.1µs),高频特性好,单色性好,亮度高。

(3)体积小,重量轻,抗冲击性能好。

(4)寿命长,使用寿命在10万小时以上,甚至可达100万小时。成本低。

因此它被广泛用作数字仪器仪表、数控装置、计算机的数显器件。

2.性能简易检测

LED数码管外观要求颜色均匀、无局部变色及无气泡等,在业余条件下可用干
电池作进一步检查。现以共阴数码管为例介绍检查方法。

将3伏干
电池负极引出线固定接触在LED数码管的公共负极端上,电池正极引出线依次移动接触笔画的正极端。这一根引出线接触到某一笔画的正极端时,那一笔画就应显示出来。用这种简单的方法就可检查出数码管是否有断笔(某笔画不能显示),连笔(某些笔画连在一起),并且可相对比较出不同笔划发光的强弱性能。若检查共阳极数码管,只需将电池正负极引出线对调一下,方法同上。

LED数码管每笔画工作电流ILED约在5—10mA之间,若电流过大会损坏数码管,因此必须加限流
电阻,其阻值可按下式计算:

R限 =(U。—ULED)/ILED

其中U。为加在LED两端电压,ULED为LED数码管每笔画压降(约2伏)。

利用数字万用表的hFE插口能够方便地检查LED数码管的发光情况。选择NPN挡时,C孔带正电,月孔带负电。例如检查LTS547R型共阴极LED数码管时,从E孔插入一根单股细导线,导线引出端接9极(第③脚与第⑧脚在内部连通,可任选一个作为Ө);再从C孔引出一根导线依次接触各笔段电极,可分别显示所对应的笔段。

3.使用注意事项

(1)检查时若发光暗淡,说明器件已老化,发光效率太低。如果显示的笔段残缺不全,说明数码管已局部损坏。

(2)对于型号不明、又无管脚排列图的LED数码管,用数字万用表的h距挡可完成下述测试工作:①判定数码管的结构形式(共阴或共阳);②识别管脚;③检查全亮笔段。预先可假定某个电极为公共极,然后根据笔段发光或不发光加以验证。当笔段电极接反或公共极判断错误时,该笔段就不能发光。

点击此处查看原文 >>

系统分类: 显示光电   |    用户分类: 无分类    |    来源: 转贴

评论(0) | 阅读(421)
发表于:2008-3-12 23:44:50
标签:无标签

0

有关RS232和RS485接口的问答

有关RS232和RS485接口的问答

来自 中国工控网

什么是RS-232-C接口?采用RS-232-C接口有何特点?传输电缆长度如何考虑?

答: 计算机与计算机或计算机与终端之间的数据传送可以采用串行通讯和并行通讯二种方式。由于串行通讯方式具有使用线路少、成本低,特别是在远程传输时,避免了多条线路特性的不一致而被广泛采用。 在串行通讯时,要求通讯双方都采用一个标准接口,使不同 的设备可以方便地连接起来进行通讯。 RS-232-C接口(又称 EIA RS-232-C)是目前最常用的一种串行通讯接口。它是在1970年由美国电子工业协会(EIA)联合贝尔系统、 调制解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标 准。它的全名是“数据终端设备(DTE)和数据通讯设备(DCE)之间 串行二进制数据交换接口技术标准”该标准规定采用一个25个脚的 DB25连接器,对连接器的每个引脚的信号内容加以规定,还对各种信 号的电平加以规定。

(1)接口的信号内容 实际上RS-232-C的25条引线中有许多是很少使用的,在计算机与终端通讯中一般只使用3-9条引线。RS-232-C最常用的9条引线的信号内容见附表1所示

(2)接口的电气特性 在RS-232-C中任何一条信号线的电压均为负逻辑关系。即:逻 辑“1”,-5— -15V;逻辑“0” +5— +15V 。噪声容限为2V。即 要求接收器能识别低至+3V的信号作为逻辑“0”,高到-3V的信号 作为逻辑“1” 附表1

引脚序号

信号名称

符号

流向

功能

2

发送数据

TXD

DTE→DCE

DTE发送串行数据

3

接收数据

RXD

DTE←DCE

DTE接收串行数据

4

请求发送

RTS

DTE→DCE

DTE请求DCE将线路切换到发送方式

5

允许发送

CTS

DTE←DCE

DCE告诉DTE线路已接通可以发送数据

6

数据设备准备好

DSR

DTE←DCE

DCE准备好

7

信号地

   

信号公共地

8

载波检测

DCD

DTE←DCE

表示DCE接收到远程载波

20

数据终端准备好

DTR

DTE→DCE

DTE准备好

22

振铃指示

RI

DTE←DCE

表示DCE与线路接通,出现振铃

 

(3) 接口的物理结构 RS-232-C接口连接器一般使用型号为DB-25的25芯插头座,通常插头在DCE端,插座在DTE端. 一些设备与PC机连接的RS-232-C接口,因为不使用对方的传送控制信号,只需三条接口线,即“发送数据”、“接收数据”和“信号地”。所以采用DB-9的9芯插头座,传输线采用屏蔽双绞线。

(4)传输电缆长度 由RS-232C标准规定在码元畸变小于4%的情况下,传输电缆长度应为50英尺,其实这个4%的码元畸变是很保守的,在实际应用中,约有99%的用户是按码元畸变10-20%的范围工作的,所以实际使用中最大距离会远超过50英尺,美国DEC公司曾规定允许码元畸变为10%而得出附表2 的实验结果。其中1号电缆为屏蔽电缆,型号为DECP.NO.9107723 内有三对双绞线,每对由22# AWG 组成,其外覆以屏蔽网。2号电缆为不带屏蔽的电缆。型号为DECP.NO.9105856-04是22#AWG的四芯电缆。 附表2 DEC 公司的实验结果

波特率

1 号电缆传输距离(英尺)

2 号电缆传输距离(英尺)

110

5000

3000

300

5000

3000