单片机

做电子硬件的同学都会用单片机做一些小玩意,学会单片机的硬件抗干扰方法也是一项必备技能。单片机系统中若是包含以下原件或模块,一般都要考虑防静电干扰的问题。  

1、微控制器时钟频率特别高,总线周期特别快的系统。  

2、系统含有大功率,大电流驱动电路,如产生火花的继电器,大电流开关等。  

3、含微弱模拟信号电路以及高精度A/D变换电路的系统。  

应对方法有:  

1、选用频率低的微控制器  

2、减小信号传输中的畸变 信号在印刷板上传输,其延迟时间不应大于所用器件的标称延迟时间。  

3、减小信号线间的交叉干扰。若AB线为一模拟信号,要避免数字电路信号线CD对AB的干扰,AB线下方要有大面积的地,AB线到CD线的距离要大于AB线与地距离的2~3倍。可用局部屏蔽地,在有引结的一面引线左右两侧布以地线。  

4、减小来自电源的噪声  电源在向系统提供能源的同时,也将其噪声加到所供电的电源上。电路中微控制器的复位线,中断线,以及其它一些控制线最容易受外界噪声的干扰。电网上的强干扰通过电源进入电路,即使电池供电的系统,电池本身也有高频噪声。模拟电路中的模拟信号更经受不住来自电源的干扰。  

5、元件布置要合理分区  元件在印刷线路板上排列的位置要充分考虑抗电磁干扰问题,原则之一是各部件之间的引线要尽量短。在布局上,要把模拟信号部分,高速数字电路部分,噪声源部分(如继电器,大电流开关等)这三部分合理地分开,使相互间的信号耦合为最小。

6、处理好接地线  印刷电路板上,电源线和地线最重要。克服电磁干扰,最主要的手段就是接地。

对于双面板,地线布置特别讲究,通过采用单点接地法,电源和地是从电源的两端接到印刷线路板上来的,电源一个接点,地一个接点。印刷线路板上,要有多个返回地线,这些都会聚到回电源的那个接点上,就是所谓单点接地。所谓模拟地、数字地、大功率器件地开分,是指布线分开,而最后都汇集到这个接地点上来。与印刷线路板以外的信号相连时,通常采用屏蔽电缆。对于高频和数字信号,屏蔽电缆两端都接地。低频模拟信号用的屏蔽电缆,一端接地为好。

对噪声和干扰非常敏感的电路或高频噪声特别严重的电路应该用金属罩屏蔽起来。 

来源:至秦单片机

围观 986

引言

我在学习STM32芯片的GPIO模块时对一些细节感到困惑,Demystifying Microcontroller GPIO Settings这篇文章几乎解答了我所有的疑问。因此将它翻译出来,希望对大家有帮助。

写单片机软件的人都会配置和管理通用输入输出口(GPIO)的引脚。表面上看,GPIO配置非常简单:引脚是输入或输出,是高电平或低电平。但是,你不可避免地会碰到配置选项很多的芯片,或者电子工程师会问一些你不懂的引脚配置(比如将某条线设置成高阻态)。本文会帮助你理解现代单片机上不同的引脚配置。

背景知识

在学习引脚配置之前,先要弄懂一些和GPIO、IO信号有关的描述和名词。

大多数现代GPIO线路都实现成一个三态缓冲器(tri-state buffer)。这表明这些GPIO线路可以有三个状态:

1. 逻辑低电平(和GND相连)
2. 逻辑高电平(和VCC相连)
3. 高阻抗,也称为“悬空”(floating)、高阻(Hi-Z)和三态(tri-stated)

如果某条线路是高阻抗(High-impedance)状态,那么它实际上就从电路中移除了。这使得多个电路或设备能够共用输出线路,就可以实现通信总线(communication buses)。在需要高阻抗的场合但没能使用高阻态会导致I/O争用(I/O contention)和短路(short-circuit)。

如果信号的状态不确定,则称为悬空(Floating),表示它没有连接到VCC或GND。该信号的电压会“悬空”,和残余电压匹配。“悬空”这个名词还可以用来描述引脚是高阻抗状态。

上拉(Pull-Up)是指将信号通过电阻连接到VCC,上拉电阻用于将悬空的信号设置成一个默认状态。当输入引脚处于高阻抗模式且没有外部源驱动它时,引脚就处于悬空状态,电压值是残余电压。引脚没有主动的驱动时,上拉电阻强行将信号电压变成VCC,避免引脚悬空。当其他的源将信号拉低(连接到GND),就忽略上拉电阻,输入引脚会读到低电平。很多单片机提供内置的上拉配置选项。有时候,需要在芯片外部上拉一个特定阻值的电阻,而非使用内部的上拉电阻。

下拉(Pull-Down)是将信号通过一个电阻连接到GND。下拉电阻用于将悬空的信号设置到某个默认状态。如果其他的源将信号拉高(连接到VCC),就忽略下拉电阻,输入引脚会读到高电平。很多单片机提供内置的下拉配置选项。有时候,需要在芯片外部下拉一个特定阻值的电阻,而非使用内部的下拉电阻。

电流阱(Current Sink)表示电流流入引脚、结点或信号中。对于数字I/O口,电流阱为负载提供了GND连接端。电流源(Current Source)和电流阱相反,表示电流流出引脚、结点或信号中。对于数字I/O口,电流阱为负载提供了电压源。电流阱和电流源都有电流流动,但方向相反。

输入输出模式

GPIO输入模式

如果配置GPIO为输入,就可以读取电子信号的状态。配置GPIO为输入,引脚就是高阻抗状态。总体来说,GPIO输入主要配置成下面三种方式:

1. 高阻抗(默认,没有驱动则是悬空状态)
2. 上拉(内部连接到VCC的电阻)
3. 下拉(内部连接到GND的电阻)

大多数GPIO输入引脚内部有可以防止引脚状态虚假变化的迟滞模块。迟滞模块是内置特性,而不是配置选项。

GPIO输出模式
如果GPIO配置成输出,可以驱动一个信号为高电平或低电平。GPIO输出主要有两个选项:推拉(push-pull)和开漏(open-drain)。

推拉输出

推拉(也有翻译成“推挽”)输出是大多数场景下GPIO输出的默认配置。推拉输出的GPIO既能灌电流(source)也能拉(sink)电流。推拉输出的GPIO中,有一个连接到VCC或GND的三极管来驱动信号为高电平或低电平。当输出是低电平,信号就被主动地拉(pull)到GND,如果输出是高电平,信号就被主动地推(push)到VCC。

开漏输出

和推拉模式不同的是,开漏输出只能拉电流。输出有两种状态:低电平和高阻抗。想在线路上输出一个高电平,需用上拉电阻将开漏输出连接到想要的输出电平。你可以将开漏输出GPIO想象成一个接地或断开的开关。

开漏GPIO可以典型地配置成两种模式:开漏或内部上拉的开漏。大多数使用开漏电路的应用在开漏输出上使用外部上拉电阻。一般来说,内部上拉电阻的阻值对目标电路是不够的。

当多个门或引脚连接到一起时,开漏输出会很有用,比如I2C总线。当设备没有在用总线时,开漏输出处于高阻抗模式,电压被上拉电阻拉高。当设备将输出拉低时,所有连接到一起的线路都是低电平。

开漏输出的另一个用途是在单片机上用多个外部设备驱动一个主动拉低的中断引脚。

集电极开路(Open-Collector)
集电极开路和漏极开路的功能一样。集电极开路指的是从BJT输出拉电流,漏极开路指的是从FET输出拉电流。我在元器件数据手册上比在单片机数据手册上碰到集电极开路更多一些。

GPIO速度

GPIO速度控制转换速度(slew rate),也就是信号在高低电平直接转换的速度(上升速度和下降速度)。速度控制选项描述为“速度”、“转换速度”、“频率”和“高频模式”。提高GPIO速度可以提高输出电压(减小上升时间)改变的速度。但是,功耗和发射到电路中的噪声也会随着GPIO速度升高。一般来讲,没有特殊原因的话,应该降低GPIO速度。

本文作者: Krist Pan
本文链接:
http://panqiincs.me/2019/09/25/mcu-gpio-settings/
版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!

围观 1369

在单片机开发过程中,我们总被代码的执行效率、单片机器件的性能、成本困扰着,以至于用很长时间思考这类问题,这是难以避免的,毕竟开发过程中的性价比、执行效率等因素都是十分重要的考量因素。为了让大家更高效率的开发,小编总结了几个技巧,帮助大家进阶,在优秀的开发者路上越走越远!

如何提高C的代码效率?

用C语言进行单片机程序设计是单片机开发与应用的必然趋势。如果使用C编程时,要达到最高的效率,最好熟悉所使用的C编译器。 先试验一下每条C语言编译以后对应的汇编语言的语句行数,这样就可以很明确的知道效率。在今后编程的时候,使用编译效率最高的语句。

各种C编译器都会有一定的差异,故编译效率也会有所不同,优秀的嵌入式系统C编译器代码长度和执行时间仅比以汇编语言编写的同样功能程度长 5-20%。

虽然C语言是最普遍的一种高级语言,但由于不同的MCU厂家其C语言编译系统是有所差别的,特别是在一些特殊功能模块的操作上。所以如果对这些特性不了解,那么调试起来问题就会很多,反而导致执行效率低于汇编语言。

如何解决单片机的抗干扰性问题?

防止干扰最有效的方法是去除干扰源、隔断干扰路径,但往往很难做到,所以只能看单片机抗干扰能力够不够强了。单片机干扰最常见的现象就是 复位;至于程序跑飞,其实也可以用软件陷阱和看门狗将程序拉回到复位状态;所以单片机软件抗干扰最重要的是处理好复位状态。

一般单片机都会有一些标志寄存 器,可以用来判断复位原因;另外你也可以自己在RAM中埋一些标志。在每次程序复位时,通过判断这些标志,可以判断出不同的复位原因;还可以根据不同的标 志直接跳到相应的程序。这样可以使程序运行有连续性,用户在使用时也不会察觉到程序被重新复位过。

如何测试单片机系统的可靠性?

对于不同的单片机系统产品会有不同的测试项目和方法,但是有一些是必须测试的:

测试单片机软件功能的完善性。这是针对所有单片机系统功能的测试,测试软件是否写的正确完整。

上电、掉电测试。在使用中用户必然会遇到上电和掉电的情况,可以进行多次开关电源,测试单片机系统的可靠性。

老化测试。测试长时间工作情况下,单片机系统的可靠性。必要的话可以放置在高温,高压以及强电磁干扰的环境下测试。

ESD和EFT等测试。可以使用各种干扰模拟器来测试单片机系统的可靠性。例如使用静电模拟器测试单片机系统的抗静电ESD能力;使用突波杂讯模拟器进行快速脉冲抗干扰EFT测试等等。

来源:网络,转载此文目的在于传递更多信息,版权归原作者所有。

围观 47

1. 接地

这里的接地指接大地,也称作保护地。为单片机系统提供良好的地线,对提高系统的抗干扰能力极为有益。特别是对有防雷击要求的系统,良好的接地至关重要。上面提到的一系列抗干扰元件,意在将雷击、浪涌式干扰以及快脉冲群干扰去除,而去除的方法都是将干扰引入大地,如果系统不接地,或虽有地线但接地电阻过大,则这些元件都不能发挥作用。为单片机供电的电源的地俗称逻辑地,它们和大地的地的关系可以相通、浮空、或接一电阻,要视应用场合而定。不能把地线随便接在暖气管子上。绝对不能把接地线与动力线的火线、零线中的零线混淆。

2. 隔离与屏蔽

典型的信号隔离是光电隔离。使用光电隔离器件将单片机的输入输出隔离开,一方面使干扰信号不得进入单片机系统,另一方面单片机系统本身的噪声也不会以传导的方式传播出去。屏蔽则是用来隔离空间辐射的,对噪声特别大的部件,如开关电源,用金属盒罩起来,可减少噪声源对单片机系统的干扰。对特别怕干扰的模拟电路,如高灵敏度的弱信号放大电路可屏蔽起来。而重要的是金属屏蔽本身必须接真正的地。

3. 滤波

滤波指各类信号按频率特性分类并控制它们的方向。常用的有各种低通滤波器、高通滤波器、带通滤波器。低通滤波器用在接入的交流电源线上,旨在让50周的交流电顺利通过,将其它高频噪声导入大地。低通滤波器的配置指标是插入损耗,选择的低通滤波器插入损耗过低起不到抑制噪声的作用,而过高的插入损耗会导致“漏电”,影响系统的人身安全性。高通、带通滤波器则应根据系统中对信号的处理要求选择使用。

来源:网络

围观 55

单片机主要作用是控制外围的器件,并实现一定的通信和数据处理。但在某些特定场合,不可避免地要用到数学运算,尽管单片机并不擅长实现算法和进行复杂的运算。下面主要是介绍如何用单片机实现数字滤波。

在单片机进行数据采集时,会遇到数据的随机误差,随机误差是由随机干扰引起的,其特点是在相同条件下测量同一量时,其大小和符号会现无规则的变化而无法预测,但多次测量的结果符合统计规律。为克服随机干扰引起的误差,硬件上可采用滤波技术,软件上可采用软件算法实现数字滤波。滤波算法往往是系统测控算法的一个重要组成部分,实时性很强。

采用数字滤波算法克服随机干扰的误差具有以下优点:

1、数字滤波无需其他的硬件成本,只用一个计算过程,可靠性高,不存在阻抗匹配问题。尤其是数字滤波可以对频率很低的信号进行滤波,这是模拟滤波器做不到的。

2、数字滤波使用软件算法实现,多输入通道可共用一个滤波程序,降低系统开支。

3、只要适当改变滤波器的滤波程序或运算,就能方便地改变其滤波特性,这对于滤除低频干扰和随机信号会有较大的效果。

4、在单片机系统中常用的滤波算法有限幅滤波法、中值滤波法、算术平均滤波法、加权平均滤波法、滑动平均滤波等。

(1)限幅滤波算法

该运算的过程中将两次相邻的采样相减,求出其增量,然后将增量的绝对值,与两次采样允许的最大差值A进行比较。A的大小由被测对象的具体情况而定,如果小于或等于允许的最大差值,则本次采样有效;否则取上次采样值作为本次数据的样本。

算法的程序代码如下:

#defineA //允许的最大差值
chardata; //上一次的数据
char filter()
{
chardatanew; //新数据变量
datanew=get_data(); //获得新数据变量
if((datanew-data)>A||(data-datanew>A))
return data;
else
returndatanew;
}

说明:限幅滤波法主要用于处理变化较为缓慢的数据,如温度、物体的位置等。使用时,关键要选取合适的门限制A。通常这可由经验数据获得,必要时可通过实验得到。

(2)中值滤波算法

该运算的过程是对某一参数连续采样N次(N一般为奇数),然后把N次采样的值按从小到大排列,再取中间值作为本次采样值,整个过程实际上是一个序列排序的过程。

算法的程序代码如下:

#define N11 //定义获得的数据个数
char filter()
{
charvalue_buff[N]; //定义存储数据的数组
char count,i,j,temp;
for(count=0;count
{
value_buf[count]=get_data();
delay(); //如果采集数据比较慢,那么就需要延时或中断
}
for(j=0;j
{
for(value_buff[i]>value_buff[i+1]
{
temp=value_buff[i];
value_buff[i]=value_buff[i+1];
value_buff[i+1]=temp;
}
}
returnvalue_buff[(N-1)/2];
}

说明:中值滤波比较适用于去掉由偶然因素引起的波动和采样器不稳定而引起的脉动干扰。若被测量值变化比较慢,采用中值滤波法效果会比较好,但如果数据变化比较快,则不宜采用此方法。

(3)算术平均滤波算法

该算法的基本原理很简单,就是连续取N次采样值后进行算术平均。

算法的程序代码如下:

char filter()
{
int sum=0;
for(count=0;count
{
sum+=get_data();
delay():
}
return (char)(sum/N);
}

说明:算术平均滤波算法适用于对具有随机干扰的信号进行滤波。这种信号的特点是有一个平均值,信号在某一数值附近上下波动。信号的平均平滑程度完全到决于N值。当N较大时,平滑度高,灵敏度低;当N较小时,平滑度低,但灵敏度高。为了方便求平均值,N一般取4、8、16、32之类的2的整数幂,以便在程序中用移位操作来代替除法。

(4)加权平均滤波算法

由于前面所说的“算术平均滤波算法”存在平滑度和灵敏度之间的矛盾。为了协调平滑度和灵敏度之间的关系,可采用加权平均滤波。它的原理是对连续N次采样值分别乘上不同的加权系数之后再求累加,加权系数一般先小后大,以突出后面若干采样的效果,加强系统对参数变化趋势的认识。各个加权系数均小于1的小数,且满足总和等于1的结束条件。这样加权运算之后的累加和即为有效采样值。设D为N个采样值的加权平均值:XN-i为第N-i次采样值;N为采样次数;Ci为加权系数。加权系数Ci体现了各种采样值在平均值中所占的比例。一般来说采样次数越靠后,取的比例越大,这样可增加新采样在平均值中所占的比重。加权平均值滤波法可突出一部分信号抵制另一部分信号,以提高采样值变化的灵敏度。

样例程序代码如下:

char codejq[N]={1,2,3,4,5,6,7,8,9,10,11,12}; //code数组为加权系数表,存在程序存储区
char codesum_jq=1+2+3+4+5+6+7+8+9+10+11+12;
char filter()
{
char count;
char value_buff[N];
int sum=0;
for(count=0;count
{
value_buff[count]=get_data();
delay();
}
for(count=0;count
sum+=value_buff[count]*jq[count];
return(char)(sum/sum_jq);
}

(5)滑动平均滤波算法

以上介绍和各种平均滤波算法有一个共同点,即每获取一个有效采样值必须连续进行若干次采样,当采速度慢时,系统的实时得不到保证。这里介绍的滑动平均滤波算法只采样一次,将一次采样值和过去的若干次采样值一起求平均,得到的有效采样值即可投入使用。如果取N个采样值求平均,存储区中必须开辟N个数据的暂存区。每新采集一个数据便存入暂存区中,同时去掉一个最老数据,保存这N个数据始终是最新更新的数据。采用环型队列结构可以方便地实现这种数据存放方式。

程序代码如下:

char value_buff[N];
char i=0;
char filter()
{
char count;
int sum=0;
value_buff[i++]=get_data();
if(i==N)
i=0;
for(count=0;count
sum=value_buff[count];
return (char)(sum/N);
}

(6)低通滤波

将普通硬件RC低通滤波器的微分方程用差分方程来表求,变可以采用软件算法来模拟硬件滤波的功能,经推导,低通滤波算法如下:

Yn=a* Xn+(1-a) *Yn-1

式中 Xn——本次采样值

Yn-1——上次的滤波输出值;

,a——滤波系数,其值通常远小于1;

Yn——本次滤波的输出值。

由上式可以看出,本次滤波的输出值主要取决于上次滤波的输出值(注意不是上次的采样值,这和加权平均滤波是有本质区别的),本次采样值对滤波输出的贡献是比较小的,但多少有些修正作用,这种算法便模拟了具体有教大惯性的低通滤波器功能。滤波算法的截止频率可用以下式计算:

fL=a/2Pit pi为圆周率3.14…

式中 a——滤波系数;

, t——采样间隔时间;

例如:当t=0.5s(即每秒2次),a=1/32时;

fL=(1/32)/(2*3.14*0.5)=0.01Hz

当目标参数为变化很慢的物理量时,这是很有效的。另外一方面,它不能滤除高于1/2采样频率的干搅信号,本例中采样频率为2Hz,故对1Hz以上的干搅信号应采用其他方式滤除,低通滤波算法程序于加权平均滤波相似,但加权系数只有两个:a和1-a。为计算方便,a取一整数,1-a用256-a,来代替,计算结果舍去最低字节即可,因为只有两项,a和1-a,均以立即数的形式编入程序中,不另外设表格。虽然采样值为单元字节(8位A/D)。为保证运算精度,滤波输出值用双字节表示,其中一个字节整数,一字节小数,否则有可能因为每次舍去尾数而使输出不会变化。

设Yn-1存放在30H(整数)和31H(小数)两单元中,Yn存放在32H(整数)和33H(小数)中。

小结一下吧:数字滤波器,说白了,就是多次采样求平均值的一个过程,精确一点的,就是再顺序排列,去掉首位再求平均值,就是求平均数!!

本文转自:玩转单片机,转载此文目的在于传递更多信息,版权归原作者所有。

围观 239

影响单片机系统可靠安全运行的主要因素主要来自系统内部和外部的各种电气干扰,并受系统结构设计、元器件选择、安装、制造工艺影响。这些都构成单片机系统的干扰因素,常会导致单片机系统运行失常,轻则影响产品质量和产量,重则会导致事故,造成重大经济损失。

形成干扰的基本要素有三个:

(1)干扰源。指产生干扰的元件、设备或信号。如:雷电、继电器、可控硅、电机、高频时钟等都可能成为干扰源。

(2)传播路径。指干扰从干扰源传播到敏感器件的通路或媒介。典型的干扰传播路径是通过导线的传导和空间的辐射。

(3)敏感器件。指容易被干扰的对象。如:A/D、 D/A变换器,单片机,数字IC,弱信号放大器等。

1、干扰的耦合方式

(1)直接耦合:

这是最直接的方式,也是系统中存在最普遍的一种方式。比如干扰信号通过电源线侵入系统。对于这种形式,最有效的方法就是加入去耦电路。

(2)公共阻抗耦合:

这也是常见的耦合方式,这种形式常常发生在两个电路电流有共同通路的情况。为了防止这种耦合,通常在电路设计上就要考虑。使干扰源和被干扰对象间没有公共阻抗。

(3)电容耦合:

又称电场耦合或静电耦合。是由于分布电容的存在而产生的耦合。

(4)电磁感应耦合:

又称磁场耦合。是由于分布电磁感应而产生的耦合。

(5)漏电耦合:

这种耦合是纯电阻性的,在绝缘不好时就会发生。

2、常用硬件抗干扰技术

针对形成干扰的三要素,采取的抗干扰主要有以下手段。

2.1、抑制干扰源

抑制干扰源就是尽可能的减小干扰源的du/dt, di/dt。这是抗干扰设计中最优先考虑和最重要的原则,常常会起到事半功倍的效果。 减小干扰源的du/dt主要是通过在干扰源两端并联电容来实现。减小干扰源的di/dt则是在干扰源回路串联电感或电阻以及增加续流二极管来实现。

抑制干扰源的常用措施如下:

(1)继电器线圈增加续流二极管,消除断开线圈时产生的反电动势干扰。仅加续流二极管会使继电器的断开时间滞后,增加稳压二极管后继电器在单位时间内可动作更多的次数。

(2)在继电器接点两端并接火花抑制电路(一般是RC串联电路,电阻一般选几K到几十K,电容选0.01uF),减小电火花影响。

(3)给电机加滤波电路,注意电容、电感引线要尽量短。

(4)电路板上每个IC要并接一个0.01μF~0.1 μF高频电容,以减小IC对电源的影响。注意高频电容的布线,连线应靠近电源端并尽量粗短,否则,等于增大了电容的等效串联电阻,会影响滤波效果。

(5)布线时避免90度折线,减少高频噪声发射。

(6)可控硅两端并接RC抑制电路,减小可控硅产生的噪声(这个噪声严重时可能会把可控硅击穿的)。

2.2、切断干扰传播路径

按干扰的传播路径可分为传导干扰和辐射干扰两类。

所谓传导干扰是指通过导线传播到敏感器件的干扰。高频干扰噪声和有用信号的频带不同,可以通过在导线上增加滤波器的方法切断高频干扰噪声的传播,有时也可加隔离光耦来解决。电源噪声的危害最大,要特别注意处理。

所谓辐射干扰是指通过空间辐射传播到敏感器件的干扰。一般的解决方法是增加干扰源与敏感器件的距离,用地线把它们隔离和在敏感器件上加屏蔽罩。

切断干扰传播路径的常用措施如下:

(1)充分考虑电源对单片机的影响。电源做得好,整个电路的抗干扰就解决了一大半。许多单片机对电源噪声很敏感,要给单片机电源加滤波电路或稳压器,以减小电源噪声对单片机的干扰。比如,可以利用磁珠和电容组成π形滤波电路,当然条件要求不高时也可用100Ω电阻代替磁珠。

(2)如果单片机的I/O口用来控制电机等噪声器件,在I/O口与噪声源之间应加隔离(增加π形滤波电路)。

(3)注意晶振布线。晶振与单片机引脚尽量靠近,用地线把时钟区隔离起来,晶振外壳接地并固定。

(4)电路板合理分区,如强、弱信号,数字、模拟信号。尽可能把干扰源(如电机、继电器)与敏感元件(如单片机)远离。

(5)用地线把数字区与模拟区隔离。数字地与模拟地要分离,最后在一点接于电源地。A/D、D/A芯片布线也以此为原则。

(6)单片机和大功率器件的地线要单独接地,以减小相互干扰。大功率器件尽可能放在电路板边缘。

(7)在单片机I/O口、电源线、电路板连接线等关键地方使用抗干扰元件如磁珠、磁环、电源滤波器、屏蔽罩,可显著提高电路的抗干扰性能。

2.3、提高敏感器件的抗干扰性能

提高敏感器件的抗干扰性能是指从敏感器件这边考虑尽量减少对干扰噪声的拾取,以及从不正常状态尽快恢复的方法。

提高敏感器件抗干扰性能的常用措施如下:

(1)布线时尽量减少回路环的面积,以降低感应噪声。

(2)布线时,电源线和地线要尽量粗。除减小压降外,更重要的是降低耦合噪声。

(3)对于单片机闲置的I/O口,不要悬空,要接地或接电源。其它IC的闲置端在不改变系统逻辑的情况下接地或接电源。

(4)对单片机使用电源监控及看门狗电路,如: IMP809,IMP706,IMP813, X5043,X5045等,可大幅度提高整个电路的抗干扰性能。

(5)在速度能满足要求的前提下,尽量降低单片机的晶振和选用低速数字电路。

(6)IC器件尽量直接焊在电路板上,少用IC座。

2.4、其它常用抗干扰措施

(1)交流端用电感电容滤波:去掉高频低频干扰脉冲。

(2)变压器双隔离措施:变压器初级输入端串接电容,初、次级线圈间屏蔽层与初级间电容中心接点接大地,次级外屏蔽层接印制板地,这是硬件抗干扰的关键手段。次级加低通滤波器:吸收变压器产生的浪涌电压。

(3)采用集成式直流稳压电源: 有过流、过压、过热等保护作用。

(4)I/O口采用光电、磁电、继电器隔离,同时去掉公共地。

(5)通讯线用双绞线:排除平行互感。

(6)防雷电用光纤隔离最为有效。

(7)A/D转换用隔离放大器或采用现场转换:减少误差。

(8)外壳接大地:解决人身安全及防外界电磁场干扰。

(9)加复位电压检测电路。防止复位不充分, CPU就工作,尤其有EEPROM的器件,复位不充份会改变EEPROM的内容。

(10)印制板工艺抗干扰:

① 电源线加粗,合理走线、接地,三总线分开以减少互感振荡。

② CPU、RAM、ROM等主芯片,VCC和GND之间接电解电容及瓷片电容,去掉高、低频干扰信号。

③ 独立系统结构,减少接插件与连线,提高可靠性,减少故障率。

④ 集成块与插座接触可靠,用双簧插座,最好集成块直接焊在印制板上,防止器件接触不良故障。

⑤ 有条件的采用四层以上印制板,中间两层为电源及地。

来源:电子产品世界

围观 187

I/O口是单片机与外界联系的通道。它可对各类外部信号(开关量、模拟量、频率信一号)进行检测、判断、处理,并可控制各类外部设备。单片机通过I/O口感知外界的存在,而外界也通过I/O口感知单片机的存在。


现在的单片机I/O口已经集成了更多的特性和功能。因此,在学习某一款单片机时,需要先了解其I/O口具有哪些特性和特殊的应用功能(不同的单片机是有所差别的),并因地制宜设计外围电路、编写控制软件,充分发挥该I/O口的优势。


1. 输入/输出概念

大多数I/O口都是双向三态的。根据具体应用情况,可以分为输入口和输出口。输人口用来读取外部输人的电平信号,输出口则用于对外输出一个电平信号。

有些单片机(如PIC)允许设置I/O口的输入/输出状态。这样做的好处是可以让I/O口适应更多的应用环境:当I/O口处于输入状态时,对外表现为“高阻态”;而当I/O口处于输出状态时,对外可以提供更大的灌电流或拉电流,这样可以直接驱动一些如LED之类的负载。无需再外扩驱动电路了。

2. 输入门槛电平

对于51系列单片机来说,输入电平低于0.7V就是低电平,高于1. 8 V就是高电平。如果输入的电平介于二者之间,那么CPU在读取该I/O口时可能会得到一个不确定的错误数据。一般来说,我们不希望输入口上出现这种模棱两可的电平状态(除非那个口是ADC检测口)。

3. 最大输出电流

这个特性是针对输出来讲的。最大输出电流包括两种:灌电流和拉电流。灌电流是指当I/O口输出“0”(低电平)时允许灌人(流入)该I/O口的电流;拉电流则是指当I/O口输出“1"(高电平)时允许流出的电流。

4. 输出电平

这个特性是也针对输出来讲的,包括两种:“0”(低电平电压)和“1"(高电平电压)。理想状态上来说,输出高电平应该等于单片机的工作电压Vcc。但是实际由于内阻的关系,输出高电平会略低于Vcc。尤其是当拉电流较大时,高电平会被进一步拉低。同样的道理,输出低电平也往往不是正好等于0V,而是有可能比0V高出一点。

5. I/O口附加功能

许多单片机都为I/O口集成了许多新的功能控制,包括内部上拉/下拉电阻功能、R-op-TION功能以及漏极(或集电极)开路功能。如果能够合理地使用这些功能,就可以简化外围工作电路。

6. I/O口功能的拓展与复用

包括中断、唤醒、ADC检测以及PWM输出等。

本文转自:电工学习网,转载此文目的在于传递更多信息,版权归原作者所有。

围观 122

LED数码显示器的连接与编程

在单片机系统中,通常用LED数码显示器来显示各种数字或符号。由于它具有显示清晰、亮度高、使用电压低、寿命长的特点,因此使用非常广泛。

八段LED显示器

引入:还记得我们小时候玩的“火柴棒游戏”吗,几根火柴棒组合起来,可以拼成各种各样的图形,LED显示器实际上也是这么一个东西。


八段LED显示器由8个发光二极管组成。基中7个长条形的发光管排列成“日”字形,另一个贺点形的发光管在显示器的右下角作为显示小数点用,它能显示各种数字及部份英文字母。

LED显示器有两种不同的形式:一种是8个发光二极管的阳极都连在一起的,称之为共阳极LED显示器;另一种是8个发光二极管的阴极都连在一起的,称之为共阴极LED显示器。

共阴和共阳结构的LED显示器各笔划段名和安排位置是相同的。当二极管导通时,相应的笔划段发亮,由发亮的笔划段组合而显示的各种字符。

8个笔划段hgfedcba对应于一个字节(8位)的D7 D6 D5 D4 D3 D2 D1 D0,于是用8位二进制码就可以表示欲显示字符的字形代码。例如,对于共阴LED显示器,当公共阴极接地(为零电平),而阳极hgfedcba各段为0111011时,显示器显示"P"字符,即对于共阴极LED显示器,“P”字符的字形码是73H。如果是共阳LED显示器,公共阳极接高电平,显示“P”字符的字形代码应为10001100(8CH)。

这里必须注意的是:很多产品为方便接线,常不按规则的方法去对应字段与位的关系,这时字形码就必须根据接线来自行设计了,后面我们会给出一个例子。

1、静态显示接口

在单片机应用系统中,显示器显示常用两种方法:静态显示和动态扫描显示。所谓静态显示,就是每一个显示器都要占用单独的具有锁存功能的I/O接口用于笔划段字形代码。这样单片机只要把要显示的字形代码发送到接口电路,就不用管它了,直到要显示新的数据时,再发送新的字形码,因此,使用这种方法单片机中CPU的开销小。

可以提供单独锁存的I/O接口电路很多,这里以常用的串并转换电路74LS164为例,介绍一种常用静态显示电路,以使大家对静态显示有一定的了解。MCS-51单片机串行口方式押为移们寄存器方式,外接6片74LS164作为6位LED显示器的静态显示接口,把8031的RXD作为数据输出线,TXD作为移位时钟脉冲。74LS164为TTL单向8位移位寄存器,可实现串行输入,并行输出。其中A、B(第1、2脚)为串行数据输入端,2个引脚按逻辑与运算规律输入信号,公一个输入信号时可并接。T(第8脚)为时钟输入端,可连接到串行口的TXD端。每一个时钟信号的上升沿加到T端时,移位寄存器移一位,8个时钟脉冲过后,8位二进制数全部移入74LS164中。R(第9脚)为复位端,当R=0时,移位寄存器各位复0,只有当R=1时,时钟脉冲才起作用。Q1…Q8(第3-6和10-13引脚)并行输出端分别接LED显示器的hg---a各段对应的引脚上。

关于74LS164还可以作如下的介绍:所谓时钟脉冲端,其实就是需要高、低、高、低的脉冲,不管这个脉冲是怎么来的,比如,我们用根电线,一端接T,一端用手拿着,分别接高电平、低电平,那也是给出时钟脉冲,在74LS164获得时钟脉冲的瞬间(再讲清楚点,是在脉冲的沿),如果数据输入端(第1,2引脚)是高电平,则就会有一个1进入到74LS164的内部,如果数据输入端是低电平,则就会有一个0进入其内部。在给出了8个脉冲后,最先进入74LS164的第一个数据到达了最高位,然后再来一个脉冲会有什么发生呢?再来一个脉冲,第一个脉冲就会从最高位移出,就象车站排队买票,栏杆就那么长,要从后面进去一个人,前面必须要从前面走出去一个人才行。

搞清了这一点,下面让我们来看电路,6片7LS164首尾相串,而时钟端则接在一起,这样,当输入8个脉冲时,从单片机RXD端输出的数据就进入到了第一片74LS164中了,而当第二个8个脉冲到来后,这个数据就进入了第二片74LS164,而新的数据则进入了第一片74LS164,这样,当第六个8个脉冲完成后,首次送出的数据被送到了最左面的164中,其他数据依次出现在第一、二、三、四、五片74LS164中。有个问题,在第一个脉冲到来时,除了第一片74LS164中接收数据外,其他各片在干吗呢?它们也在接收数据,因为它们的时钟端都是被接在一起的,可是数据还没有送到其他各片呢,它们在接收什么数据呢?。。。。。。其实所谓数据不过是一种说法而已,实际就是电平的高低,当第一个脉冲到来时,第一片164固然是从单片机接收数据了,而其它各片也接到前一片的Q8上,而Q8是一根电线,在数字电路中它只可能有两种状态:低电平或高电平,也就是“0”和“1”。所以它的下一片74LS164也相当于是在接收数据啊。只是接收的全部是0或1而已。这个问题放在这儿说明,可能有朋友不屑一顾,而有的朋友可能还是不清楚,这实际上涉及到数的本质的问题,如果不懂的,请仔细思考,并找一些数字电路的数,理解164的工作原理,再来看这个问题。务必搞懂,搞懂了这一点,你的级别就高过初学者了。


入口:把要显示的数分别放在显示缓冲区60H-65H共6个单元中,并且分别对应各个数码管LED0-LED5。

出口:将预置在显示缓冲区中的6个数成相应的显示字形码,然后输出到显示器中显示。

显示程序如下:
DISP: MOV SCON,#00H ;初始化串行口方式0
MOV R1,#06H ;显示6位数
MOV R0,#65H ;60H-65H为显示缓冲区
MOV DPTR,#SEGTAB ;字形表的入口地址
LOOP:
MOV A,@R0 ;取最高位的待显示数据
MOVC A,@A+DPTR ;查表获取字形码
MOV SBUF,A ;送串口显示
DELAY: JNB TI,DELAY ;等待发送完毕
CLR TI ;清发送标志
DEC R0 ;指针下移一位,准备取下一个待显示数
DJNZ R1,LOOP ;直到6个数据全显示完。
RET
SETTAB: ;字形表,前面有介绍,以后我们再介绍字形表的制作。
DB 03H 9FH 27H 0DH 99H 49H 41H 1FH 01H 09H 0FFH
; #9; 0 1 2 3 4 5 6 7 8 9 消隐码

测试用主程序
ORG 0000H
AJMP START
ORG 30H
START: MOV SP,#6FH
MOV 65H,#0
MOV 64H,#1
MOV 63H,#2
MOV 62H,#3
MOV 61H,#4
MOV 60H,#5
LCALL DISP
SJMP $

如果按图示数码管排列,则以上主程序将显示的是543210,想想看,如果要显示012345该怎样送数?

下面我们来分析一下字形表的制作问题。先就上述“标准”的图形来看吧。写出数据位和字形的对应关系并列一个表如下(设为共阳型,也就是相应的输出位为0时笔段亮)


如何,字形表会做了吧,就是这样列个表格,根据要求(0亮或1亮)写出相应位的0和1,就成了。做个练习,写出A-F的字形码吧。

如果为了接线方便而打乱了接线的顺序,那么字形表又该如何接呢?也很简单,一样地列表啊。以新实验板为例,共阳型。接线如下:
P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0
C E H D G F A B

则字形码如下所示:
;0 00101000 28H
;1 01111110 7EH
;2 10100100 0A4H
;3 01100100 64H
;4 01110010 72H
;5 01100001 61H
;6 00100001 21H
;7 01111100 7CH
;8 00100000 20H
;9 01100000 60H

作为练习,大家写出A-F的字形代码。

本来这里是讲解显示器的静态接口的,到此应当可算结束了,但是我还想接着上面讲到的数的本质的问题再谈一点。单片机中有一些术语、名词本来是帮助我们理解事物的,但有时我们会被这些术语的相关语义所迷惑,以致不能进一步认清他们的本质,由此往往陷入困惑的境界。只有深入地了解了74LS164的工作特性,才能真正理解何谓串行的数据。

本文来源网络,版权归原作者所有。

围观 133

PLC底层,实际就是单片机在运行,它只不过是基于单片机的基础,开发出来的一款二次应用的工业逻辑控制器,方便具有电工思维的用户来使用,所以PLC对比单片机的最大优势就是简单易用。PLC既然是基于单片机来开发的,PLC所有功能,单片机肯定可以都做到,比如一些计时,计数,中断,模拟量处理,通讯,逻辑控制,这些单片机都可以实现,而且响应速度上比PLC还要快很多,精度也会比PLC高。

但是PLC使用了扫描周期来避免立刻刷新I/O端口状态,这点从软件而言,牺牲了速度,可靠性却强了很多,用户无论如何编程刷写程序,一般都不会发生死机等问题。毕竟大多数工业场合,往往毫秒级别的响应就足够了,并不需要非常高速的实时控制。而单片机虽然编程更加灵活,但是对编程人员要求太高了,稍微有差错,就可能会造成一些死循环或者逻辑不正常。

PLC硬件电路,一般电源会考虑到工业电网污染问题,在稳压滤波上做了很多设计。输入输出回路,往往也会使用光耦来隔离,电路元件选型都严格要求工业级别的,电路板布线也会考虑到干扰问题,PCB板子也会加涂层之类保护。而单片机,往往从商用民用角度去选型和设计,可靠性没有PLC的高,电子元件也未必像工业那样严格选择,整体的可靠性不如PLC。对于工业场所,产品的稳定可靠性,还有耐用性,是非常重要的,毕竟工业设备价值比较贵重,需要长期24小时不断电运转,很多会连续工作十多年。

PLC简单易学易用

单片机太麻烦,首先要有一定的电子电路基础,往往软件和硬件人员还分开,但是你要编写软件,一般也要知道一些硬件的东西,这个对于一般的工控人员而言,是比较费劲的,毕竟电气和电子还是有一定差距的。如果针对某款工业设备来开发一款单片机控制板,也不是三天两头就可以制作好的,涉及到选型和调试等问题,稳定下来还真需要一段时间。

单片机早期使用汇编语言,现在虽然进步了,基本上可以使用C语言编程了,但是C语言是面向过程的语言,一般人学习起来段期间也是不太好掌握的。即使你掌握了某款单片机编程,换了一种,学习起来依然是要花时间的,毕竟细节的东西挺多。

而PLC是梯形图编程,和线下的继电器电路几乎一模一样,只要有电工基础的人,摸索一个月基本上都可以胜任了,有一种PLC的应用基础,换一个牌子,一般也可以很快上手。而且硬件产品市场上已经有现成的了,并不需要自己去操心底层的电子硬件电路。

PLC符合电工的使用习惯

电工的思维习惯就是找线,改线和接线,PLC就是迎合这个来设计的,在电脑上,也基本上是面对常开和常闭触点的组合问题,一些自保和互锁电路而已,编程起来和接线是大同小异。而且PLC和外围的接线,人家已经设计成一排排的端子,直接接上去就可以了,并不用考虑太多细节。

而单片机完全是字母花的编程,并不直观,虽然可以通过一些循环跳转结构来处理,但是和接线是两码事情了,想让一个电工去掌握这些复杂的逻辑思维,又要兼顾外围的线路和控制问题,是比较操心的。

来源:电工电气学习

围观 115

页面

订阅 RSS - 单片机