地弹的形成:芯片内部的地和芯片外的PCB地平面之间不可避免的会有一个小电感。这个小电感正是地弹产生的根源,同时,地弹又是与芯片的负载情况密切相关的。下面结合图介绍一下地弹现象的形成。 简单的构造如上图的一个小“场景”,芯片A为输出芯片,芯片B为接收芯片,输出端和输入端很近。输出芯片内部的CMOS等输入单元简单的等效为一个单刀双掷开关,RH和RL分别为高电平输出阻抗和低电平输出阻抗,均设为20欧。GNDA为芯片A内部的地。GNDPCB为芯片外PCB地平面。由于芯片内部的地要通过芯片内的引线和管脚才能接到GNDPCB,所以就会引入一个小电感LG,假设这个值为1nH。CR为接收端管脚电容,这个值取6pF。这个信号的频率取200MHz。虽然这个LG和CR都是很小的值,不过,通过后面的计算我们可以看到它们对信号的影响。先假设A芯片只有一个输出脚,现在Q输出高电平,接收端的CR上积累电荷。当Q输出变为低电平的时候。CR、RL、LG形成一个放电回路。自谐振周期约为490ps,频率为2GHz,Q值约为0.0065。使用EWB建一个仿真电路。(很老的一个软件,很多人已经不懈于使用了。不过我个人比较依赖它,关键是建模,模型参数建立正确的话仿真结果还是很可靠的,这个小软件帮我发现和解决过很多实际模拟电路中遇到的问题。这个软件比较小,有比较长的历史,也比较成熟,很容易上手。建议电子初入门的同学还是熟悉一下。)因为只关注下降沿,所以简单的构建下面一个电路。起初输出高电平,10纳秒后输出低电平。为方便起见,高电平输出设为3.3V,低电平是0V。(实际200M以上芯片IO电压会比较低,多采用1.5-2.5V。)
标签: 分
上传时间: 2013-10-17
上传用户:zhishenglu
IO口状态切换说明
上传时间: 2013-10-09
上传用户:truth12
1 概述由于在某些通讯设计应用中,需要扩展更多的串口数量,比如车床监控、纺织仪器检测和网状连接的数据采集等应用。为此成都国腾微电子有限公司推出的GM814x 可以满足多个同类产品的并联扩展,并且能简单的实现电路连接和程序控制,主MCU 可以识别数据的来源和指定和某个GM814x 通信。2 应用说明2.1 CS 与SPI 的数据通信GM814x 的CS(片选)引脚可用于控制SPI 总线时钟有效性,CS 低电平有效,内部下拉。CS 有效时,允许芯片的时钟接收和数据收发;无效时,SCLK、DIN 和DOUT 均为高阻状态,GM814x 不响应SPI 上的数据收发,但能正常收发子串口数据和产生相应中断。2.2 应用建议当使用GM814x 的应用需要扩展4 个以上的串口数量时,就需要使用2 片以上的GM814x。扩展的方式也有多种。方式一:将多个GM814x 的SPI 接口接在主MCU 的SPI 总线上,然后将所有GM814x 的中断进行线与后连接到MCU 的IRQ 上,同时将各GM814x 的IRQ 输出又连接到MCU的IO,以便MCU响应中断后检测是具体哪一个GM814x 输出的中断,然后再拉低对应的CS,拉高其它GM814x的CS,并执行通信操作。方式二:如果扩展的GM814x 数量较多,采用上述扩展方式可能会占用MCU较多的IO 资源,则可以将GM814x 的中断输出连接到具有OC 输出的与门芯片上,再输出到MCU 的中断输入。同时又将所有的GM814x 的中断输出进行编码输入到MCU,以供其判断产生中断的是哪一个GM814x。方式三:将所有GM814x 的中断输出连接到优先编码器进行编码输出,同时编码器也能输出低电平信号给MCU 作为中断响应。MCU 检测编码数据以获知产生中断的GM814x,然后进行数据通信处理。这种方式电路最简单,占用MCU 的IO 资源也最少。 举例:使用MCS51 单片机扩展8 片GM814x。本电路中,采用了上述提到的第三种扩展方式。通过普通的MCS51 单片机扩展最多8 片GM814x,可扩展最多32 个标准串口。为了节省MCU的IO 资源,电路中增加了一片8-3 线优先编码器74LS348 和一片3-8 线译码器74HC138。8 片GM814x 的IRQ 中断通过一片74LS348 输出中断源向量,同时产生GS 低电平信号到MCS51 的外部中断0 上,MCS51 响应中断后,可查询A0~A2 的值确定产生中断的GM814x,然后MCU 使能74HC138,输出对应的ABC 信号选中产生IRQ 信号的GM814x,再进行SPI 总线上的数据通信。 示例程序:本示例程序使用C 语言描述,仅供参考。 由于74LS348 是优先编码器,多个中断同时产生的时候,74LS348 的编码只会指示输入编号上最高的IRQ,MCU 无法直接获知是否其它的GM814x 也产生了中断。同时GM814x 在自己的中断申请后,数据传输到第8bit 时会自动清除,所以数据接收完后如果MCU 的中断引脚仍然为低,则表示还有其它GM814x 的中断申请,故必须在处理完当前中断后继续查询新的中断向量。这就是上述示例程序中while 循环的目的。 以上应用建议仅供设计者参考,不代表最终实现方式,更可靠和实际的实现方式可由设计者根据自己的实际情况确定。l 示例中的数据、参数和标志字命名不代表实际产品的特性,请参考实际产品的数据手册来获取你所需要的数据。
上传时间: 2013-10-26
上传用户:suicoe
该电路适合初学者使用,8乘8的LED点阵引脚示意图及运用。
上传时间: 2014-12-28
上传用户:lxm
fpga管脚电流电压设置
上传时间: 2013-11-03
上传用户:u789u789u789
FPGA设计管脚分配注意点
上传时间: 2014-12-28
上传用户:franktu
画 USB电路,老是忘记它的引脚排列,每次都要去翻手册,很麻烦,索性整理了一下,以后用着也方便,这些图来自 USB 标准上。 以下均为插座或插头的前视图,即将插座或插头面向自己。
上传时间: 2013-12-24
上传用户:旭521
核心板配置 核心板配置癿FPGA芯片是Cyclone II系列癿EP2C8Q208C,具有8256个LEs,36个M4K RAM blocks (4Kbits plus 512 parity bits),同时具有165,888bit癿RAM,支持18个Embedded multipliers和2个PLL,资源配备十分丰富。实验证明,返款芯片在嵌入NIOS II软核将黑釐开収板癿所有外讴全部跑起来,仅占全部资源癿70-80% ; 核心板同时配备了64Mbit癿SDRAM,对亍运行NIOS软核提供了有力癿保障,返款芯片为时钟频率有143MHz,实验证明,NIOS II软核主频可以平稳运行120MHz,速度迓是相当忚癿; 16Mbit癿配置芯片也为返款核心板增色丌少,丌仅可以存储配置信息,同时迓可以实现NIOS II软件程序存储,你编写癿程序再大也没有后顼乀忧了。 20M癿有源晶振也是必丌可少癿,他是整个系统癿时钟源泉;4个LED对亍调试来说更是提供了径多方便;复位按键,重新配置按键,配置指示灯一个也丌能少;同时支持AS模式和JTAG模式; 除此以外,核心板一个更大的特点是它可以独立亍底板单独运行,为此配备了5V癿电源接口,高质量癿红色开关,为了安全迓加入了自恢复保险丝。当然扩展口是丌能少癿,除了SDRAM占用癿38个IO口外,其他100个IO全部扩展出来,为大家可以迕行自我扩展实验做好了充分癿准备。 四、 下扩展板配置 为了让FPGA収挥它癿强大功能,黑釐开収板为其讴计一款资源丰富癿下扩展板(乀所以叨下扩展板,是因为我们后续迓会有上扩展板)。下面我们就来简单介终一下下扩展板癿资源配置。 支持网络功能,配置ENC28J60网口芯片。ENC28J60是Microchip Technology(美国微芯科技公司)推出癿28引脚独立以太网控刢器。目前市场上大部分以太网控刢器癿封装均赸过80引脚,而符吅IEEE 802.3协议癿ENC28J60叧有28引脚,既能提供相应癿功能,又可以大大简化相关讴计,减小空间; 支持USB功能,配置CH376芯片。CH376 支持USB 讴备方式和USB 主机方式,幵丏内置了USB 途讯协议癿基本固件,内置了处理Mass-Storage海量存储讴备癿与用途讯协议癿固件,内置了SD 卡癿途讯接口固件,内置了FAT16和FAT32 以及FAT12 文件系统癿管理固件,支持常用癿USB 存储讴备(包括U 盘/USB 硬盘/USB 闪存盘/USB 读卡器)和SD 卡(包括标准容量SD 卡和高容量HC-SD 卡以及协议兼容癿MMC 卡和TF 卡); 支持板载128*64的点阵LCD。ST7565P控刢芯片,内置DC/DC电路,途过软件调节对比度。该芯片支持,幵口和串口丟种方式;
上传时间: 2013-11-23
上传用户:ouyangtongze
51单片机IO口模拟I2C通信程序包。
上传时间: 2013-10-20
上传用户:a673761058
注:1.这篇文章断断续续写了很久,画图技术也不精,难免错漏,大家凑合看.有问题可以留言. 2.论坛排版把我的代码缩进全弄没了,大家将代码粘贴到arduino编译器,然后按ctrl+T重新格式化代码格式即可看的舒服. 一、什么是PWM PWM 即Pulse Wavelength Modulation 脉宽调制波,通过调整输出信号占空比,从而达到改 变输出平均电压的目的。相信Arduino 的PWM 大家都不陌生,在Arduino Duemilanove 2009 中,有6 个8 位精度PWM 引脚,分别是3, 5, 6, 9, 10, 11 脚。我们可以使用analogWrite()控 制PWM 脚输出频率大概在500Hz 的左右的PWM 调制波。分辨率8 位即2 的8 次方等于 256 级精度。但是有时候我们会觉得6 个PWM 引脚不够用。比如我们做一个10 路灯调光, 就需要有10 个PWM 脚。Arduino Duemilanove 2009 有13 个数字输出脚,如果它们都可以 PWM 的话,就能满足条件了。于是本文介绍用软件模拟PWM。 二、Arduino 软件模拟PWM Arduino PWM 调压原理:PWM 有好几种方法。而Arduino 因为电源和实现难度限制,一般 使用周期恒定,占空比变化的单极性PWM。 通过调整一个周期里面输出脚高/低电平的时间比(即是占空比)去获得给一个用电器不同 的平均功率。 如图所示,假设PWM 波形周期1ms(即1kHz),分辨率1000 级。那么需要一个信号时间 精度1ms/1000=1us 的信号源,即1MHz。所以说,PWM 的实现难点在于需要使用很高频的 信号源,才能获得快速与高精度。下面先由一个简单的PWM 程序开始: const int PWMPin = 13; int bright = 0; void setup() { pinMode(PWMPin, OUTPUT); } void loop() { if((bright++) == 255) bright = 0; for(int i = 0; i < 255; i++) { if(i < bright) { digitalWrite(PWMPin, HIGH); delayMicroseconds(30); } else { digitalWrite(PWMPin, LOW); delayMicroseconds(30); } } } 这是一个软件PWM 控制Arduino D13 引脚的例子。只需要一块Arduino 即可测试此代码。 程序解析:由for 循环可以看出,完成一个PWM 周期,共循环255 次。 假设bright=100 时候,在第0~100 次循环中,i 等于1 到99 均小于bright,于是输出PWMPin 高电平; 然后第100 到255 次循环里面,i 等于100~255 大于bright,于是输出PWMPin 低电平。无 论输出高低电平都保持30us。 那么说,如果bright=100 的话,就有100 次循环是高电平,155 次循环是低电平。 如果忽略指令执行时间的话,这次的PWM 波形占空比为100/255,如果调整bright 的值, 就能改变接在D13 的LED 的亮度。 这里设置了每次for 循环之后,将bright 加一,并且当bright 加到255 时归0。所以,我们 看到的最终效果就是LED 慢慢变亮,到顶之后然后突然暗回去重新变亮。 这是最基本的PWM 方法,也应该是大家想的比较多的想法。 然后介绍一个简单一点的。思维风格完全不同。不过对于驱动一个LED 来说,效果与上面 的程序一样。 const int PWMPin = 13; int bright = 0; void setup() { pinMode(PWMPin, OUTPUT); } void loop() { digitalWrite(PWMPin, HIGH); delayMicroseconds(bright*30); digitalWrite(PWMPin, LOW); delayMicroseconds((255 - bright)*30); if((bright++) == 255) bright = 0; } 可以看出,这段代码少了一个For 循环。它先输出一个高电平,然后维持(bright*30)us。然 后输出一个低电平,维持时间((255-bright)*30)us。这样两次高低就能完成一个PWM 周期。 分辨率也是255。 三、多引脚PWM Arduino 本身已有PWM 引脚并且运行起来不占CPU 时间,所以软件模拟一个引脚的PWM 完全没有实用意义。我们软件模拟的价值在于:他能将任意的数字IO 口变成PWM 引脚。 当一片Arduino 要同时控制多个PWM,并且没有其他重任务的时候,就要用软件PWM 了。 多引脚PWM 有一种下面的方式: int brights[14] = {0}; //定义14个引脚的初始亮度,可以随意设置 int StartPWMPin = 0, EndPWMPin = 13; //设置D0~D13为PWM 引脚 int PWMResolution = 255; //设置PWM 占空比分辨率 void setup() { //定义所有IO 端输出 for(int i = StartPWMPin; i <= EndPWMPin; i++) { pinMode(i, OUTPUT); //随便定义个初始亮度,便于观察 brights[ i ] = random(0, 255); } } void loop() { //这for 循环是为14盏灯做渐亮的。每次Arduino loop()循环, //brights 自增一次。直到brights=255时候,将brights 置零重新计数。 for(int i = StartPWMPin; i <= EndPWMPin; i++) { if((brights[i]++) == PWMResolution) brights[i] = 0; } for(int i = 0; i <= PWMResolution; i++) //i 是计数一个PWM 周期 { for(int j = StartPWMPin; j <= EndPWMPin; j++) //每个PWM 周期均遍历所有引脚 { if(i < brights[j])\ 所以我们要更改PWM 周期的话,我们将精度(代码里面的变量:PWMResolution)降低就行,比如一般调整LED 亮度的话,我们用64 级精度就行。这样速度就是2x32x64=4ms。就不会闪了。
上传时间: 2013-10-08
上传用户:dingdingcandy