显示下一条  |  关闭

小兵的故事

在事业的峰峦上,有汗水的溪流飞淌;在智慧的珍珠里,有勤奋的心血闪光。

 
 
 
 
 
 

陕西省 西安市 摩羯座

 发消息  写留言

 
平平淡淡才是真!
 
近期心愿愿所有我认识的人身休健康!
QQ190499679
博客等级加载中...
今日访问加载中...
总访问量加载中...
最后登录加载中...
 
 
 
 
 
 
 
心情随笔列表加载中...
 
 
 
 
 
 
 
模块内容加载中...
 
 
 
 
 
 我要留言
 
 
 
留言列表加载中...
 
 
 
 
 
 
 
日志评论
评论列表加载中...
 
 
 
 
 

天气

 
 
模块内容加载中...
 
 
 
 
 

日历

 
 
模块内容加载中...
 
 
 
 
 

发现好博客

 
 
列表加载中...
 
 
 
 
 
 
 
博友列表加载中...
 
 
 
 
 

自定义模块

 
 
模块内容加载中...
 
 
 
 
 
 
 
 

RF电路的PCB布线技巧

2011-6-15 12:44:42 阅读89 评论0 152011/06 June15

在设计RF布局时,以下几个总的原则必须优先加以满足:

      1. 尽可能地把高功率RF放大器(HPA)和低噪音放大器(LNA)隔离开来,简单地说,就是让高功率RF发射电路远离低功率RF接收电路。如果你的PCB板上有很多物理空间,那么你可以很容易地做到这一点,但通常元器件很多,PCB空间较小,因而这通常是不可能的。可以将HPA和LNA分别放在PCB板的两面,或者让它们交替工作,而不是同时工作。(高功率电路有时还可包括RF缓冲器和压控制振荡器VCO)。

2.  确保PCB板上高功率区至少有一整块地,最好上面没有过孔,铜皮越多越好。

3. 芯片和电源的去耦。

有效的芯片去耦: 集成了线性线路的RF芯片对电源的噪音非常敏感,通常每个芯片都需要采用高达四个电   容  和一个隔离电感来确保滤除所有的电源噪音)。最小电容值通常取决于其自谐振频率和低引脚电感,C4的值就是据此选择的。C3和C2的值由于其自身引脚电感的关系而相对较大一些,从而RF去耦效果要差一些,不过它们较适合于滤除较低频率的噪声信号。电感L1使RF信号无法从电源线耦合到芯片中。记住:所有的走线都是一条潜在的既可接收也可发射RF信号的天线,另外将感应的射频信号与关键线路隔离开也很必要。

去耦元件的物理位置通常也很关键,这几个重要元件的布局原则是:C4要尽可能靠近IC引脚并接地,C3必须最靠近 C4,C2必须最靠近C3,而且IC引脚与C4的连接走线要尽可能短,这

作者  | 2011-6-15 12:44:42 | 阅读(89) |评论(0) | 阅读全文>>

基于ZigBee芯片构建无线传感器网

2011-6-15 12:43:57 阅读114 评论0 152011/06 June15

基于ZigBee芯片构建的无线传感器网是由一组ZigBee节点以Ad Hoc方式构成的无线网络,其目的是协作地感知、采集和处理网络覆盖的地理区域中感知对象的信息,并发布给观察者传感器、感知对象和观察者,它们是传感器网络的3个基本要素;传感器与观察者之间的通信方式是无线,用于存传感器与观察者之间建立通信路径;协作地感知、采集、处理、发布感知信息是传感器网络的基本功能。一组功能有限的传感器协作地完成大的感知任务是传感器网络的重要特点,传感器网络中的部分或全部节点可以移动,传感器网络的拓扑结构也会随着节点的移动而不断地动态变化。节点问以Ad Hoc方式进行通信。每个节点都可以充当路由器的角色,并且每个节点都具备动态搜索、定位和恢复连接的能力。

基于ZigBee芯片构建的无线传感器网可以利用GSM(全球移动通信系统)网络、CDMA(码分多址)网络、以太网等来实现数据的传输与控制(见图5),网络可以采用星形或者混合型拓扑和需求时唤醒ZigBee模块的通信方式,有效降低每个ZigBee传感器节点的功耗,减少传感器节点向汇节点上报数据时相互碰撞的概率。

中央控制中心通过网络与多个汇节点连接,汇节点和传感器节点之间通过ZigBee技术实现无线的信息交换,带有射频收发器的无线传感器节点负责对数据的感知和处理并传送给汇节点;控制中心通过网络获取采集到的相关信息,实现对现场的有效控制和管理。分布在传感器网络中的汇节点主要用于接收传感器节点的数据上报,并将其进行融合处理,传给无线通信数据传输模块,通过网络传递给中央信息控制中心。ZigBee模块与MCU之间的连接是通过

作者  | 2011-6-15 12:43:57 | 阅读(114) |评论(0) | 阅读全文>>

USB设计要点

2011-6-15 12:42:46 阅读70 评论0 152011/06 June15

1.USB原理设计

    USB2.0的高速传输速率,提高传输质量,减小电磁干扰和静电放电最为关键。

1.在数字电源和地之间尽可能多放一些去耦电容,在USB2.0主控制器芯片处多放一些旁路电容,以减少耦合,降低高频辐射噪声,在尽可能靠近主主控器信号管脚处放负载电阻,维持对地45欧姆的高速负载,在下游每个端口放15K的下拉电阻,在尽可能靠近接插元件处放差分模式阻抗较低的共模扼流元件和ESD抑制元件,以提高差分信号的质量。

2.PCB设计最好为4层,1层和4层位信号层,2层位电源层,3层位底层,4层位USB2.0最佳布线层。在地层将模拟地和数字地分开,不要将USB线不在晶振,时钟,和磁性IC的下面。分层厚度和主要走线宽度都必须采用阻抗控制进行阻抗匹配。以满足规定的阻抗值。保证D+和D-同样长度且始终平行,以得到D+/D- 90欧姆的差分对阻抗及45欧姆的共模阻抗,

PCB主要注意以下:

1.并行:包括走线宽度一致,走线层一致,长度一致。

     2.屏蔽:不走表层,上下邻层最好是GND Plane,或者Power Plane,同层也需要用GND包裹。

     3.如果是USB 2.0 HS,上下邻层不要穿越敏感信号如高频Clock,RF信号以及DC-DC振荡信号。

     4.IC至I/O线路越短越好。

作者  | 2011-6-15 12:42:46 | 阅读(70) |评论(0) | 阅读全文>>

IAR for AVR 学习笔记(6)--中断及相关函数操作

2010-9-4 13:06:50 阅读902 评论0 42010/09 Sept4

6.1.中断函数:

    在IAR编译器里用关键字来__interrupt来定义一个中断函数。用#pragma vector来提供中断函数的入口地址

#pragma vector=0x12//定时器0溢出中断入口地址

__interrupt void time0(void)

{

;

}

    上面的入口地址写成#pragma vector=TIMER0_OVF_vect更直观,每种中断的入口地址在头文件里有描述。函数名称time0可以为任意名称。中断函数会自动保护局部变量,但不会保护全局变量。

6.2.内在函数也可以称为本征函数

    编译器自己编写的能够直接访问处理器底层特征的函数。在intrinsics.h中有描述完整类型在comp_a90.h里有进一步的简化书写方式

6.2.1延时函数,以周期为标准

__delay_cycles(unsigned long );

如果处理器频率为1M,延时100us,如下:

__delay_cycles(100 );

当然你也可以对该函数进行修改:

#define CPU_F 1000000

#define delay_us (unsigned long) __delay_cycles((unsigned long )*CPU_F)

作者  | 2010-9-4 13:06:50 | 阅读(902) |评论(0) | 阅读全文>>

IAR for AVR 学习笔记(5)--SRAM操作

2010-9-4 13:05:08 阅读440 评论0 42010/09 Sept4

SARM数据类型的具体操作方法

SARM空间是AVR单片机最重要的部分,所有的操作必须依赖该部分来完成。变量在SARM空间的存储模式有tiny ,small large 三种,也就是对应于__tiny, __near __far三中存储属性。一旦选择为哪种存储模式,对应的数据默认属性也就确定了,但可以采用__tiny, __near __far关键字来更改。

对于程序中的局部变量,编译器会自动处理的,我们也不可能加什么储存属性,但IAR提供了强大的外部变量定义。

5.1.定义变量在工作寄存器

IAR编译器内部使用了部分工作寄存器,留给用户的只有R4-R15供12个寄存器供用户使用,要使用工作寄存器必须在工程选项里打开锁定选项。

例:

定义两个变量使用工作寄存器R14,R15。

#i nclude<iom8.h>

__regvar __no_init char g @ 15;

__regvar __no_init char P @ 14;

void main(void)

{

g++;

P++;

}

在工程选项里c/c++ complier>code里打开要使用的寄存器R14-R15。

编译结果就如下,看看是不是直接使用了寄存器做为数据应用

// 4 void main(void)

main:

CFI Block cfiBlock0 Using cfiCommon0

作者  | 2010-9-4 13:05:08 | 阅读(440) |评论(0) | 阅读全文>>

IAR for AVR 学习笔记(4)--Flash操作

2010-9-4 13:02:13 阅读360 评论0 42010/09 Sept4

FLASH常用类型的具体操作方法

4.1.FLASH 区域数据存储。

用关键字 __flash 控制来存放, __ flash 关键字写在数据类型前后效果一样

__flash unsigned char a;//定义一个变量存放在flash空间

unsigned char __flash a;//效果同上

__flash unsigned char p[];//定义一个数组存放在flash空间

对于flash空间的变量的读操作同SRAM数据空间的操作方法一样,编译器会自动用

LPM,ELPM 指令来操作。

例:

#i nclude<iom8.h>

__flash unsigned char p[];

__flash unsigned char a;

void main(void)

{PORTB=p[1];// 读flash 数组变量的操作

PORTB=a;// 读flash 变量的操作

}

由于在正常的程序中,flash 空间是只读的,所以没有赋值的变量是没有意义的。定义常数在flash 空间,只要给变量赋与初值就可以了。由于常数在flash空间的地址是随机分配的,读取变量才可以读取到常数值。

10

IAR-AVR –C 编译器简要指南

__flash unsigned char a=9;//定义一个常数存放在EEPROM空间。

作者  | 2010-9-4 13:02:13 | 阅读(360) |评论(0) | 阅读全文>>

IAR for AVR 学习笔记(3)--位操作

2010-9-4 13:00:41 阅读594 评论0 42010/09 Sept4

3.1.在c语言里对位的操作如一般如下:

PORTB|=(1<<2);//置PORTB的第2位=1

PORTB&=~(1<<2);//置PORTB的第2位=0

PORTB^|=(1<<2);//取反PORTB的第2位

While(PORTB&(1<<2));//判断1

While(!(PORTB&(1<<2)));//判断为0

3.2.IAR编译器对位的支持更强大,除了上面的方法外还有以下更简单的操作方法:

PORTB_ Bit2=1; //置PORTB的第2位=1

PORTB_ Bit2=0; //置PORTB的第2位=0

PORTB_ Bit2=~ PORTB_ Bit2;//取反PORTB的第2位

While(PORTB_ Bit2);或者while(PORTB_Bit2==1);//判断1

while(PORTB_ Bit2==0);//判断0

PORTC_Bit4=PORTB_Bit2;//把PORTB的第2位传送到PORTC的第4位

3.3.位变量定义:

由于iar使用了扩展语言,它对位域的支持变为最小为char类型,我们可以很方便地用来定义位变量。

采用结构体来定义位变量:

struct

{

unsigned char bit0:1;

作者  | 2010-9-4 13:00:41 | 阅读(594) |评论(0) | 阅读全文>>

IAR for AVR 学习笔记(2)--扩展关键字

2010-9-4 12:55:56 阅读393 评论0 42010/09 Sept4

可以用来解决数据,函数的存放等。有了它我们就可以定义变量存放在EEPROM,FLASH空间。定义中断函数,指针等等。IAR关键字很多,这里只列举常用的。

2.1.扩展关键字:用于控制数据和指针。

__eeprom 用于EEPROM 存储空间, 控制数据存放,控制指针类型和存放

__tinyflash, __flash, __farflash, __hugeflash 用于flash 存储空间, 控制数据存放,控制指针类型和存放:

__ext_io, __io 用于I/O存储空间, 控制数据存放,控制指针类型和存放

__regvar 放置一个变量在工作寄存器中

2.2.函数扩展关键字:。

__nearfunc __farfunc 用于控制数据存放,这组关键字必须在函数声明和定义的时候指定:

__interrupt. 关键字控制函数的类型。这组关键字必须在函数声明和定义的时候指定

__root. 关键字仅仅控制有定义的函数:

2.3.其它特别的关键字:

@ 用于变量的绝对地址定位。也可以用#pragma location 命令

#pragma vector 提供中断函数的入口地址。

__root 保证没有使用的函数或者变量也能够包含在目标代码中

__no_init 禁止系统启动的时候初始化变量.

asm, __asm 插入汇编代码

作者  | 2010-9-4 12:55:56 | 阅读(393) |评论(0) | 阅读全文>>

IAR for AVR 学习笔记(1)--数据类型

2010-9-4 12:54:37 阅读624 评论1 42010/09 Sept4

数据类型(编译器支持 ISO/ANSI C 基本数据类型和一些附加数据类型)

1.1. 整型数据

bool 数据类型在C++语言里是默认支持的。如果你在C代码的头文件里包含stdbool.h, bool数据类型也可以使用在C语言里。也可以使用布尔值 false和 true。

1.2.浮点数据类型:

1.3.指针类型:指针有数据指针和函数指针。

1、数据指针:

数据指针的大小为8位,16位,24位。定义为:在整型数据类型后加”*”符号。

例如:char * p;

整型数据没有24位,具体定义指针见后面扩展关键字章节。

2、函数指针:函数指针的大小为16位,24位。

指针定义:在函数类型后加”*”符号

作者  | 2010-9-4 12:54:37 | 阅读(624) |评论(1) | 阅读全文>>

MSP430学习点滴-1

2010-9-4 12:33:10 阅读388 评论0 42010/09 Sept4

1、#define ME1_ (0x0004)

DEFC( ME1 , ME1_)

me1关联端口0x0004

defc的c是字节的意思,也就是me1 就是地址0004处的一个字节

2、#define FCTL1_ (0x0128)

DEFW( FCTL1 , FCTL1_)

其功能是从指定地址开始,定义若干个16位数据

使用处理器专用扩展的保持可可移植性的 #pragma 伪指令

一、新增数据类型:

1、Sfrb----字节类型的特殊功能寄存器或外围模块

2、Sfrw----字类型的特殊功能寄存器或外围模块

3、Pointer--指针

4、Enum-----枚举

1、外围模块变量Sfrb、Sfrw也称作特殊功能寄存器变量,直接位于内部RAM单元。

Sfrb范围为:0X00---OXFF;

Sfrw范围为:0X100---0X1FF;

外围模块变量使符号名与此范围的字节或字相联系,该地址处寄存器可以符号化被寻址,但没有分配存储空间。

例如:

Sfrb P1IES = 0X24H; 字节是8位

Sfrb P1DIR = 0X22H;

Sfrw ADC12CTL1 = 0X01A2H 字是16位

经过定义后就可以直接通过对应的符号访问这些寄存器了。

PIDIR = 0X01;P1.0输出

作者  | 2010-9-4 12:33:10 | 阅读(388) |评论(0) | 阅读全文>>

查看所有日志>>

 
 
 
 
 
 
 
圈子列表加载中...
 
 
 
 
 
 
 
列表加载中...
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2012

   
创建博客 登录  
 关注