}
//--------------------------------------------------------------------------------------------------
// 函数名称:
WRITE_AD9850
// 函数功能:
将控制字写入AD9850
//--------------------------------------------------------------------------------------------------
void WRITE_AD9850(void)
{
unsigned char i;
FQ_UD=0;
W_CLK=0;
delay(0);
CON_word[0]=CON_word[0]&0xFC; //置工作方式选择位为00
for(i=0;i<5;i++)
{
data_OUT=CON_word[i]; //送控制字
W_CLK=0;
delay(0);
W_CLK=1; //上升延
delay(0);
}
FQ_UD=1; //上升延要求AD9850改变输出
}
//--------------------------------------------------------------------------------------------------
// 函数名称:
main
// 用户主函数
// 函数功能:
主函数
//--------------------------------------------------------------------------------------------------
void main()
{
FQ_UD=0;
WRITE_AD9850();
}<
下面是总结的一些设计中应注意的问题,和单片机硬件设计原则,希望大家能看完
(1)在元器件的布局方面,应该把相互有关的元件尽量放得靠近一些,例如,时钟发生器、晶振、CPU的时钟输入端都易产生噪声,在放置的时候应把它们靠近些。
对于那些易产生噪声的器件、小电流电路、大电流电路开关电路等,应尽量使其远离单片机的逻辑控制电路和存储电路(ROM、RAM),如果可能的话,可以将这些电路另外制成电路板,这样有利于抗干扰,提高电路工作的可靠性。
(2)尽量在关键元件,如ROM、RAM等芯片旁边安装去耦电容。
实际上,印制电路板走线、引脚连线和接线等都可能含有较大的电感效应。
大的电感可能会在Vcc走线上引起严重的开关噪声尖峰。
防止Vcc走线上开关噪声尖峰的唯一方法,是在VCC与电源地之间安放一个0.1uF的电子去耦电容。
如果电路板上使用的是表面贴装元件,可以用片状电容直接紧靠着元件,在Vcc引脚上固定。
最好是使用瓷片电容,这是因为这种电容具有较低的静电损耗(ESL)和高频阻抗,另外这种电容温度和时间上的介质稳定性也很不错。
尽量不要使用钽电容,因为在高频下它的阻抗较高。
在安放去耦电容时需要注意以下几点:
·在印制电路板的电源输入端跨接100uF左右的电解电容,如果体积允许的话,电容量大一些则更好。
·原则上每个集成电路芯片的旁边都需要放置一个0.01uF的瓷片电容,如果电路板的空隙太小而放置不下时,可以每10个芯片左右放置一个1~10的钽电容。
·对于抗干扰能力弱、关断时电流变化大的元件和RAM、ROM等存储元件,应该在电源线(Vcc)和地线之间接入去耦电容。
·电容的引线不要太长,特别是高频旁路电容不能带引线。
(3)在单片机控制系统中,地线的种类有很多,有系统地、屏蔽地、逻辑地、模拟地等,地线是否布局合理,将决定电路板的抗干扰能力。
在设计地线和接地点的时候,应该考虑以下问题:
·逻辑地和模拟地要分开布线,不能合用,将它们各自的地线分别与相应的电源地线相连。
在设计时,模拟地线应尽量加粗,而且尽量加大引出端的接地面积。
一般来讲,对于输入输出的模拟信号,与单片机电路之间最好通过光耦进行隔离。
·在设计逻辑电路的印制电路版时,其地线应构成闭环形式,提高电路的抗干扰能力。
·地线应尽量的粗。
如果地线很细的话,则地线电阻将会较大,造成接地电位随电流的变化而变化,致使信号电平不稳,导致电路的抗干扰能力下降。
在布线空间允许的情况下,要保证主要地线的宽度至少在2~3mm以上,元件引脚上的接地线应该在1.5mm左右。
·要注意接地点的选择。
当电路板上信号频率低于1MHz时,由于布线和元件之间的电磁感应影响很小,而接地电路形成的环流对干扰的影响较大,所以要采用一点接地,使其不形成回路。
当电路板上信号频率高于10MHz时,由于布线的电感效应明显,地线阻抗变得很大,此时接地电路形成的环流就不再是主要的问题了。
所以应采用多点接地,尽量降低地线阻抗。
·电源线的布置除了要根据电流的大小尽量加粗走线宽度外,在布线时还应使电源线、地线的走线方向与数据线的走线方身一致在布线工作的最后,用地线将电路板的底层没有走线的地方铺满,这些方法都有助于增强电路的抗干扰能力。
·数据线的宽度应尽可能地宽,以减小阻抗。
数据线的宽度至少不小于0.3mm(12mil),如果采用0.46~0.5mm(18mil~20mil)则更为理想。
·由于电路板的一个过孔会带来大约10pF的电容效应,这对于高频电路,将会引入太多的干扰,所以在布线的时候,应尽可能地减少过孔的数量。
再有,过多的过孔也会造成电路板的机械强度降低。
一个单片机应用系统的硬件电路设计包含两部分内容:
一是系统扩展,即单片机内部的功能单元,如ROM、RAM、I/O、定时器/计数器、中断系统等不能满足应用系统的要求时,必须在片外进行扩展,选择适当的芯片,设计相应的电路。
二是系统的配置,即按照系统功能要求配置外围设备,如键盘、显示器、打印机、A/D、D/A转换器等,要设计合适的接口电路。
系统的扩展和配置应遵循以下原则:
1、尽可能选择典型电路,并符合单片机常规用法。
为硬件系统的标准化、模块化打下良好的基础。
2、系统扩展与外围设备的配置水平应充分满足应用系统的功能要求,并留有适当余地,以便进行二次开发。
3、硬件结构应结合应用软件方案一并考虑。
硬件结构与软件方案会产生相互影响,考虑的原则是:
软件能实现的功能尽可能由软件实殃,以简化硬件结构。
但必须注意,由软件实现的硬件功能,一般响应时间比硬件实现长,且占用CPU时间。
4、系统中的相关器件要尽可能做到性能匹配。
如选用CMOS芯片单片机构成低功耗系统时,系统中所有芯片都应尽可能选择低功耗产品。
5、可靠性及抗干扰设计是硬件设计必不可少的一部分,它包括芯片、器件选择、去耦滤波、印刷电路板布线、通道隔离等。
6、单片机外围电路较多时,必须考虑其驱动能力。
驱动能力不足时,系统工作不可靠,可通过增设线驱动器增强驱动能力或减少芯片功耗来降低总线负载。
7、尽量朝“单片”方向设计硬件系统。
系统器件越多,器件之间相互干扰也越强,功耗也增大,也不可避免地降低了系统的稳定性。
随着单片机片内集成的功能越来越强,真正的片上系统SoC已经可以实现,如ST公司新近推出的μPSD32××系列产品在一块芯片上集成了80C32核、大容量FLASH存储器、SRAM、A/D、I/O、两个串口、看门狗、上电复位电路等等。
单片机系统硬件抗干扰常用方法实践
影响单片机系统可靠安全运行的主要因素主要来自系统内部和外部的各种电气干扰,并受系统结构设计、元器件选择、安装、制造工艺影响。
这些都构成单片机系统的干扰因素,常会导致单片机系统运行失常,轻则影响产品质量和产量,重则会导致事故,造成重大经济损失。
形成干扰的基本要素有三个:
(1)干扰源。
指产生干扰的元件、设备或信号,用数学语言描述如下:
du/dt,di/dt大的地方就是干扰源。
如:
雷电、继电器、可控硅、电机、高频时钟等都可能成为干扰源。
(2)传播路径。
指干扰从干扰源传播到敏感器件的通路或媒介。
典型的干扰传播路径是通过导线的传导和空间的辐射。
(3)敏感器件。
指容易被干扰的对象。
如:
A/D、D/A变换器,单片机,数字IC,弱信号放大器等。
干扰的分类1干扰的分类干扰的分类有好多种,通常可以按照噪声产生的原因、传导方式、波形特性等等进行不同的分类。
按产生的原因分:
可分为放电噪声音、高频振荡噪声、浪涌噪声。
按传导方式分:
可分为共模噪声和串模噪声。
按波形分:
可分为持续正弦波、脉冲电压、脉冲序列等等。
2干扰的耦合方式干扰源产生的干扰信号是通过一定的耦合通道才对测控系统产生作用的。
因此,我有有必要看看干扰源和被干扰对象之间的传递方式。
干扰的耦合方式,无非是通过导线、空间、公共线等等,细分下来,主要有以下几种:
(1)直接耦合:
这是最直接的方式,也是系统中存在最普遍的一种方式。
比如干扰信号通过电源线侵入系统。
(2)公共阻抗耦合:
这也是常见的耦合方式,这种形式常常发生在两个电路电流有共同通路的情况。
为了防止这种耦合,通常在电路设计上就要考虑。
使干扰源和被干扰对象间没有公共阻抗。
(3)电容耦合:
又称电场耦合或静电耦合。
是由于分布电容的存在而产生的耦合。
(4)电磁感应耦合:
又称磁场耦合。
是由于分布电磁感应而产生的耦合。
(5)漏电耦合:
这种耦合是纯电阻性的,在绝缘不好时就会发生。
常用硬件抗干扰技术针对形成干扰的三要素,采取的抗干扰主要有以下手段。
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切断干扰传播路径按干扰的传播路径可分为传导干扰和辐射干扰两类。
所谓传导干扰是指通过导线传播到敏感器件的干扰。
高频干扰噪声和有用信号的频带不同,可以通过在导线上增加滤波器的方法切断高频干扰噪声的传播,有时也可加隔离光耦来解决。
电源噪声的危害最大,要特别注意处理。
所谓辐射干扰是指通过空间辐射传播到敏感器件的干扰。
一般的解决方法是增加干扰源与敏感器件的距离,用地线把它们隔离和在敏感器件上加蔽罩。
切断干扰传播路径的常用措施如下:
(1)充分考虑电源对单片机的影响。
电源做得好,整个电路的抗干扰就解决了一大半。
许多单片机对电源噪声很敏感,要给单片机电源加滤波电路或稳压器,以减小电源噪声对单片机的干扰。
比如,可以利用磁珠和电容组成π形滤波电路,当然条件要求不高时也可用100Ω电阻代替磁珠。
(2)如果单片机的I/O口用来控制电机等噪声器件,在I/O口与噪声源之间应加隔离(增加π形滤波电路)。
(3)注意晶振布线。
晶振与单片机引脚尽量靠近,用地线把时钟区隔离起来,晶振外壳接地并固定。
(4)电路板合理分区,如强、弱信号,数字、模拟信号。
尽可能把干扰源(如电机、继电器)与敏感元件(如单片机)远离。
(5)用地线把数字区与模拟区隔离。
数字地与模拟地要分离,最后在一点接于电源地。
A/D、D/A芯片布线也以此为原则。
(6)单片机和大功率器件的地线要单独接地,以减小相互干扰。
大功率器件尽可能放在电路板边缘。
(7)在单片机I/O口、电源线、电路板连接线等关键地方使用抗干扰元件如磁珠、磁环、电源滤波器、屏蔽罩,可显著提高电路的抗干扰性能。
3提高敏感器件的抗干扰性能提高敏感器件的抗干扰性能是指从敏感器件这边考虑尽量减少对干扰噪声的拾取,以及从不正常状态尽快恢复的方法。
提高敏感器件抗干扰性能的常用措施如下:
(1)布线时尽量减少回路环的面积,以降低感应噪声。
(2)布线时,电源线和地线要尽量粗。
除减小压降外,更重要的是降低耦合噪声。
(3)对于单片机闲置的I/O口,不要悬空,要接地或接电源。
其它IC的闲置端在不改变系统逻辑的情况下接地或接电源。
(4)对单片机使用电源监控及看门狗电路,如:
IMP809,IMP706,IMP813,X5043,X5045等,可大幅度提高整个电路的抗干扰性能。
(5)在速度能满足要求的前提下,尽量降低单片机的晶振和选用低速数字电路。
(6)IC器件尽量直接焊在电路板上,少用IC座。
4其它常用抗干扰措施交流端用电感电容滤波:
去掉高频低频干扰脉冲。
变压器双隔离措施:
变压器初级输入端串接电容,初、次级线圈间屏蔽层与初级间电容中心接点接大地,次级外屏蔽层接印制板地,这是硬件抗干扰的关键手段。
次级加低通滤波器:
吸收变压器产生的浪涌电压。
采用集成式直流稳压电源:
因为有过流、过压、过热等保护。
I/O口采用光电、磁电、继电器隔离,同时去掉公共地。
通讯线用双绞线:
排除平行互感。
防雷电用光纤隔离最为有效。
A/D转换用隔离放大器或采用现场转换:
减少误差。
外壳接大地:
解决人身安全及防外界电磁场干扰。
加复位电压检测电路。
防止复位不充份,CPU就工作,尤其有EEPROM的器件,复位不充份会改变EEPROM的内容。
印制板工艺抗干扰:
①电源线加粗,合理走线、接地,三总线分开以减少互感振荡。
②CPU、RAM、ROM等主芯片,VCC和GND之间接电解电容及瓷片电容,去掉高、低频干扰信号。
③独立系统结构,减少接插件与连线,提高可靠性,减少故障率。
④集成块与插座接触可靠,用双簧插座,最好集成块直接焊在印制板上,防止器件接触不良故障。
⑤有条件采用四层以上印制板,中间两层为电源及地。
计算机与单片机串口通信源程序
(欢迎光临中国IEEE,希望本文能对您有所帮助)
一个单片机与PC机通信的程序,pc机程序用c语言来编写,单片机程序用汇编语言来编写
1.PC机编程
PC采用ToubrC进行编写。
程序如下:
#include
#define port 0x3f8 /*利用串口1进行通信*/
intch[15];
main()
{
inta;
inti,j;
intb[6]={88,15,38,26,20,0};
charc;
clrscr();
outportb(port+3,0x80); /*准备设置波特率*/
outportb(port,0x0C); /*波特率设置为9600bps*/
outportb(port+1,0x00);
outportb(port+3,0x03); /*8位数据位,奇偶检验,1位停止位*/
outportb(port+1,0x00); /*关中断*/
inportb(port+5); /*读一次线路状态寄存器,使其复位*/
{
printf("\t\tsenddataorreceivedata:
(sorr?
)\n\n\n");
c=getchar();
switch(c)
{
case’s’:
case’S’:
{
while(!
(inportb(port+5)&0x20)); /*发送保持器满则等待*/
outportb(port,0x01); /*否则发送数据01通知单片机准备接收*/
for(i=0;i<6;i++) /*共发送6个数据*/
{
a=b[i];
while(!
(inportb(port+5)&0x20))
delay(100); /*发送保持器满,等待*/
outportb(port,a); /*发送a*/
printf("%d\n",a); /*显示a*/
while(!
(inport(port+5)&1)); /*接收单片机送回的数据*/
ch[i]=inport(port); /*保存*/
}
delay(10);
for(j=0;j<8;j++) /*显示接收的回送数据*/
printf("\n%d\n",ch[j]);
getch();
break;
}
case’r’:
/*接收数据*/
case’R’:
{
while(!
(inportb(port+5)&0x20));
outportb(port,0x02); /*发送数据02通知单片机发送数据*/
for(j=0;j<9;j++) /*共接收9个数据*/
{
while(!
(inportb(port+5)&1));
ch[j]=inportb(port);
}
for(j=0;j<9;j++)
printf("\n%d\n",ch[j]);
getch();
break;
}
}
}
}
2.单片机与PC机通信之单片机程序
LIST P=16F876
#INCLUDE P16F876.INC
CBLOCK0X24
COUNT
TEMP
ENDC
ORG 0X0000
NOP
START GOTO MAIN
ORG 0X020
MAIN MOVLW 0X30 ;将RAM单元初始化
MOVWF FSR
BCF STATUS,RP0
MOVLW 0X22
MOVWF COUNT
INTRAM MOVF COUNT,0
MOVWF INDF
INCF COUNT,1
INCF FSR,1
BTFSS FSR,7
GOTO INTRAM
BANKSEL