当前位置:文档之家› NOR-FLASH驱动文档(SST39VF1601)

NOR-FLASH驱动文档(SST39VF1601)

NOR-FLASH驱动文档(SST39VF1601)
NOR-FLASH驱动文档(SST39VF1601)

NOR-FLASH驱动文档(SST39VF1601)2012-03-30 00:57:33

NOR-FLASH是最早出现的Flash Memory,目前仍是多数供应商支持的技术架

构.NOR-FLASH在擦除和编程操作较少而直接执行代码的场合,尤其是纯代码存储的应用中广泛使用,但是由于NOR-FLASH只支持块擦除,其擦除和编程速度较慢,而块尺寸又较大,导致擦除和编程操作所花费的时间很长,所以在纯数据存储和文件存储的应用中显得力不从心.

NOR-FLASH的特点是:

1. 程序和数据可存放在同一芯片上,FLASH芯片拥有独立的数据总线和地址总线,能快速随

机读取,并且允许系统直接从Flash中读取代码执行,而无需先将代码下载至RAM中再执行;

2. 可以单字节或单字读取,但不能单字节擦除,必须以部分或块为单位或对整片执行擦除操

作,在执行写操作之前,必需先根据需要对部分,块或整片进行擦除,然后才能写入数据。

以SST系列NOR-FLASH芯片为例介绍FLASH的使用方法及驱动.

首先,在驱动的头文件中,要根据芯片的具体情况和项目的要求作如下定义:

1. 定义操作的单位,如

typedef unsigned char BYTE; // BYTE is 8-bit in length

typedef unsigned short int WORD; // WORD is 16-bit in length

typedef unsigned long int Uint32; // Uint32 is 32-bit in length

在这里地址多是32位的,芯片写操作的最小数据单位为WORD,定义为16位,芯片读操作的最小数据单位是BYTE,定义为8位.

2. 因为芯片分为16位和32位的,所以对芯片的命令操作也分为16位操作和32位操作(命令

操作在介绍具体的读写过程中将详细介绍).

#ifdef GE01

/*宏NorFlash_32Bit,若定义了为32位NorFlash,否则为16位NorFlash*/

#define NorFlash_32Bit

#endif

3. 根据芯片的情况,定义部分(段)和块的大小.

#define SECTOR_SIZE 2048 // Must be 2048 words for 39VF160X

#define BLOCK_SIZE 32768 // Must be 32K words for 39VF160X

/*其中words根据上述定义,指的是16位的数据*/

其余的参数可以不用改。

下面来看具体的操作。

1.读操作

NOR-FLASH可以随机读取数据,速度快,可以在FLASH的任意地址读取且读数据的最小单位控制在8位。

如下是驱动中的读操作,该段代码的作用是从Flash中偏移地址为Dst地址处读取一个长为length的数据到源地址SrcWord地址处(length的单位是字节):

void NorFlash_Read(U8 *SrcWord, Uint32 Dst, int length)

{

Uint32 DestBuf = Dst;

U8 *SourceBuf = SrcWord;

int Index;

for(Index = 0; Index < length; Index++)

{

ReadOneWord(SourceBuf, DestBuf);//读一个字节的函数

SourceBuf++;

DestBuf++;

}

}

void ReadOneWord(U8 *SrcWord, Uint32 Dst)

{

Uint32 DestBuf = Dst;

U8 *SourceBuf = (U8 *)SrcWord;

*SourceBuf = *(volatile U8*)(system_base|DestBuf); //system_base是FLASH的基址,

在驱动中可以自行定义,另外

读操作不需要发送命令,直接

读取即可

}

用法:若需从FLASH的地址为0x20001000处读一段10个字节的数据至SDRAM的地址0x30001000中,代码应写成:NorFlash_Read((U8 *)0x30001000, 0x1000, 10);//FLASH 的基址是0x20000000,所以偏移地址只需写成0x1000即可。

2.擦除操作

擦除操作分为3种,一是部分擦除,即擦除一个sector大小的空间,二是块擦除,三是整片擦除。

部分擦除的函数,除了读操作,其余对FLASH的操作都必须向FLASH发送相应的命令。而具体发送什么样的命令,由FLASH芯片的型号决定,用时请查阅SST39VF1601芯片说明书

int EraseOneSector(Uint32 Dst)

{

Uint32 DestBuf = Dst;

int ReturnStatus;

// 39VF160X系列FLASH的命令,对照下表来写命令

*sysAddress(0x5555) = 0x00AA; // write data 0x00AA to device addr 0x5555

*sysAddress(0x2AAA) = 0x0055; // write data 0x0055 to device addr 0x2AAA

*sysAddress(0x5555) = 0x0080; // write data 0x0080 to device addr 0x5555

*sysAddress(0x5555) = 0x00AA; // write data 0x00AA to device addr 0x5555

*sysAddress(0x2AAA) = 0x0055; // write data 0x0055 to device addr 0x2AAA

*sysAddress(DestBuf) = 0x0030; // write data 0x0030 to device sector addr

ReturnStatus = CheckToggleReady(DestBuf); //检查Flash中偏移为DstBuf地址处是否正在进行写或者擦除操作。返回1:目的地址处不在进行写和擦除操作;0:目的地址处正在进行写或擦除操作

return ReturnStatus;

}

对应的中文

擦除一个块和擦除整片的驱动代码与上述类似,但是命令有所区别,可根据上表Block-Erase和Chip-Erase的命令修改。擦除操作具体的应用在写操作中可以看到。

3.写操作

写操作的速度较慢,不要频繁使用

int NorFlash_Write(WORD *Src, U32 Dst, int length)//将源地址Src地址处将一个长为length的数据写到Flash中偏移地址为Dst地址处,length的单位是字节

{

WORD *SourceBuf;

Uint32 DestBuf;

int Index, ReturnStatus;

WORD tempBuf[SECTOR_SIZE];

SourceBuf = Src;

DestBuf = Dst;

length = (length + 1) / 2; //字节数转半字数

//在写数据之前,需要先擦除。所以先要计算出要写的数据占多少块零多少个部分然后分别将其擦除

Index = length / BLOCK_SIZE; //计算所占块的个数,不到一块的就不算

for(Index = Index - 1; Index >= 0; Index--)

{

//将目的地址变为偏移地址

DestBuf = (DestBuf + Index * BLOCK_SIZE * 2) - system_base ;

//因为该FLASH以半字为单位,所以将偏移地址DestBuf除以2。例如一个块大小为0x8000,单位为16位的word,实际占用的存储空间为0x10000。存储地址是以8位字节为单位的,而函数EraseOneBlock(Dest)是以word为单位的。擦除块时D est是块的首地址的偏移地址,擦除第二块时,首地址的偏移地址为0x10000,而对于EraseOneBlock(Dest)来说,第二块的首地址应是0x8000。所以需对偏移地址作移位处理,左移一位。

ReturnStatus = EraseOneBlock(DestBuf >> 1);

if (!ReturnStatus)

return ReturnStatus;

}

Index = (length % BLOCK_SIZE) / SECTOR_SIZE;//计算剩下未擦除的数据占用多少个部分,不足一部分的按照一部分计算

DestBuf = Dst;

for(Index; Index >= 0; Index--)

{

DestBuf = (DestBuf + (length / BLOCK_SIZE) * BLOCK_SIZE * 2 + Index *

SECTOR_SIZE * 2) - system_base;

//将目的地址变为偏移地址

ReturnStatus = EraseOneSector(DestBuf >> 1);

if (!ReturnStatus)

return ReturnStatus;

}

for (Index = 0; Index < length; Index++) //全部擦除完以后开始写数据

{

ReturnStatus = ProgramOneWord( SourceBuf, DestBuf);//写一个字

DestBuf = DestBuf + 2;

++SourceBuf;

if (!ReturnStatus)

return ReturnStatus;

}

return ReturnStatus;//若擦除和写操作其中的任意一个出错,返回的状态就为0

}

int ProgramOneWord (WORD *SrcWord, Uint32 Dst)//从源地址SrcWord地址处取一个WORD(16位)写到Flash中偏移地址为Dst地址处

{

Uint32 DestBuf = Dst;

WORD *SourceBuf = SrcWord;

int ReturnStatus;

//写一个word的命令见上述命令表的word-program

*sysAddress(0x5555) = 0xAAAA; // write data 0x00AA to device addr 0x5555

*sysAddress(0x2AAA) = 0x5555; // write data 0x0055 to device addr 0x2AAA

*sysAddress(0x5555) = 0xA0A0; // write data 0x00A0 to device addr 0x5555

*(volatile U16*)(system_base|DestBuf) = *SourceBuf; // 把起始地址是SourceBuf的数据写到FLASH的地址

(system_base|DestBuf)中

ReturnStatus = CheckToggleReady(DestBuf);

return ReturnStatus;

}

用法:若需将SDRAM的地址为0x30000000处的一段10个字节的数据写至FLASH的地址0x20001000中,代码应写成:NorFlash_Write((U8 *)0x30000000, 0x1000, 10);

写操作需要注意的是:源数据地址一定是偶数,否则会出错,Flash中的目的地址也一定为偶数(否则会出现第一个字节丢失的错误)。

MOS管驱动电路 (1)

MOS管寄生参数的影响和其驱动电路要点 我们在应用MOS管和设计MOS管驱动的时候,有很多寄生参数,其中最影响MOS管开关性能的是源边感抗。寄生的源边感抗主要有两种来源,第一个就是晶圆DIE和封装之间的Bond ing线的感抗,另外一个就是源边引脚到地的PCB走线的感抗(地是作为驱动电路的旁路电容和电源网络滤波网的返回路径)。在某些情况下,加入测量电流的小电阻也可能产生额外的感抗。我们分析一下源边感抗带来的影响: 1.使得MOS管的开启延迟和关断延迟增加 由于存在源边电感,在开启和关段初期,电流的变化被拽了,使得充电和放电的时间变长了。同时源感抗和等效输入电容之间会发生谐振(这个谐振是由于驱动电压的快速变压形成的,也是我们在G端看到震荡尖峰的原因),我们加入的门电阻Rg和内部的栅极电阻Rm都会抑制这个震荡(震荡的Q值非常高)。 我们需要加入的优化电阻的值可以通过上述的公式选取,如果电阻过大则会引起G端电压的过冲(优点是加快了开启的过程),电阻过小则会使得开启过程变得很慢,加大了开启的时间(虽然G端电压会被抑制)。 园感抗另外一个影响是阻碍Id的变化,当开启的时候,初始时di/dt偏大,因此在原感抗上产生了较大压降,从而使得源点点位抬高,使得Vg电压大部分加在电感上面,因此使得G点的电压变化减小,进而形成了一种平衡(负反馈系统)。另外一个重要的寄生参数是漏极的感抗,主要是有内部的封装电感以及连接的电感所组成。 在开启状态的时候Ld起到了很好的作用(Subber吸收的作用),开启的时候由于Ld的作用,有效的限制了di/dt/(同时减少了开启的功耗)。在关断的时候,由于Ld的作用,Vds电压形成明显的下冲(负压)并显著的增加了关断时候的功耗。

设备驱动程序

驱动程序 驱动程序一般指的是设备驱动程序(Device Driver),是一种可以使计算机和设备通信的特殊程序。相当于硬件的接口,操作系统只有通过这个接口,才能控制硬件设备的工作,假如某设备的驱动程序未能正确安装,便不能正常工作。 因此,驱动程序被比作“硬件的灵魂”、“硬件的主宰”、和“硬件和系统之间的桥梁”等。 中文名 驱动程序 外文名 Device Driver 全称 设备驱动程序 性质 可使计算机和设备通信的特殊程序 目录 1定义 2作用 3界定 ?正式版 ?认证版 ?第三方 ?修改版 ?测试版 4驱动程序的开发 ?微软平台 ?Unix平台 5安装顺序 6inf文件 1定义 驱动程序(Device Driver)全称为“设备驱动程序”,是一种可以使计算机和设备通信的特殊程序,可以说相当于硬件的接口,操作系统只能通过这个接口,才能控制硬件设备的工作,假如某设备的驱动程序未能正确安装,便不能正常工作。 惠普显卡驱动安装 正因为这个原因,驱动程序在系统中的所占的地位十分重要,一般当操作系统安装完毕后,首要的便是安装硬件设备的驱动程序。不过,大多数情况下,我们并不需要安装所有硬件设备的驱动程序,例如硬盘、显示器、光驱等就不需要安装驱动程序,而显卡、声卡、扫描仪、摄像头、Modem等就需要安装驱动程序。另外,不同版本的操作系统对硬件设

备的支持也是不同的,一般情况下版本越高所支持的硬件设备也越多,例如笔者使用了Windows XP,装好系统后一个驱动程序也不用安装。 设备驱动程序用来将硬件本身的功能告诉操作系统,完成硬件设备电子信号与操作系统及软件的高级编程语言之间的互相翻译。当操作系统需要使用某个硬件时,比如:让声卡播放音乐,它会先发送相应指令到声卡驱动程序,声卡驱动程序接收到后,马上将其翻译成声卡才能听懂的电子信号命令,从而让声卡播放音乐。 所以简单的说,驱动程序提供了硬件到操作系统的一个接口以及协调二者之间的关系,而因为驱动程序有如此重要的作用,所以人们都称“驱动程序是硬件的灵魂”、“硬件的主宰”,同时驱动程序也被形象的称为“硬件和系统之间的桥梁”。 戴尔电脑驱动盘 驱动程序即添加到操作系统中的一小块代码,其中包含有关硬件设备的信息。有了此信息,计算机就可以与设备进行通信。驱动程序是硬件厂商根据操作系统编写的配置文件,可以说没有驱动程序,计算机中的硬件就无法工作。操作系统不同,硬件的驱动程序也不同,各个硬件厂商为了保证硬件的兼容性及增强硬件的功能会不断地升级驱动程序。如:Nvidia显卡芯片公司平均每个月会升级显卡驱动程序2-3次。驱动程序是硬件的一部分,当你安装新硬件时,驱动程序是一项不可或缺的重要元件。凡是安装一个原本不属于你电脑中的硬件设备时,系统就会要求你安装驱动程序,将新的硬件与电脑系统连接起来。驱动程序扮演沟通的角色,把硬件的功能告诉电脑系统,并且也将系统的指令传达给硬件,让它开始工作。 当你在安装新硬件时总会被要求放入“这种硬件的驱动程序”,很多人这时就开始头痛。不是找不到驱动程序的盘片,就是找不到文件的位置,或是根本不知道什么是驱动程序。比如安装打印机这类的硬件外设,并不是把连接线接上就算完成,如果你这时候开始使用,系统会告诉你,找不到驱动程序。怎么办呢参照说明书也未必就能顺利安装。其实在安装方面还是有一定的惯例与通则可寻的,这些都可以帮你做到无障碍安装。 在Windows系统中,需要安装主板、光驱、显卡、声卡等一套完整的驱动程序。如果你需要外接别的硬件设备,则还要安装相应的驱动程序,如:外接游戏硬件要安装手柄、方向盘、摇杆、跳舞毯等的驱动程序,外接打印机要安装打印机驱动程序,上网或接入局域网要安装网卡、Modem甚至ISDN、ADSL的驱动程序。说了这么多的驱动程序,你是否有一点头痛了。下面就介绍Windows系统中各种的不同硬件设备的驱动程序,希望能让你拨云见日。 在Windows 9x下,驱动程序按照其提供的硬件支持可以分为:声卡驱动程序、显卡驱动程序、鼠标驱动程序、主板驱动程序、网络设备驱动程序、打印机驱动程序、扫描仪驱动程序等等。为什么没有CPU、内存驱动程序呢因为CPU和内存无需驱动程序便可使用,不仅如此,绝大多数键盘、鼠标、硬盘、软驱、显示器和主板上的标准设备都可以用Windows 自带的标准驱动程序来驱动,当然其它特定功能除外。如果你需要在Windows系统中的DOS 模式下使用光驱,那么还需要在DOS模式下安装光驱驱动程序。多数显卡、声卡、网卡等内置扩展卡和打印机、扫描仪、外置Modem等外设都需要安装与设备型号相符的驱动程序,否则无法发挥其部分或全部功能。驱动程序一般可通过三种途径得到,一是购买的硬件附

分享一个比较经典的MOS管驱动电路

问题提出: 现在的MOS驱动,有几个特别的需求, 1,低压应用 当使用5V电源,这时候如果使用传统的图腾柱结构,由于三极管的be有0.7V 左右的压降,导致实际最终加在gate上的电压只有4.3V。这时候,我们选用标称gate电压4.5V的MOS管就存在一定的风险。 同样的问题也发生在使用3V或者其他低压电源的场合。 2,宽电压应用 输入电压并不是一个固定值,它会随着时间或者其他因素而变动。这个变动导致PWM电路提供给MOS管的驱动电压是不稳定的。 为了让MOS管在高gate电压下安全,很多MOS管内置了稳压管强行限制gate 电压的幅值。在这种情况下,当提供的驱动电压超过稳压管的电压,就会引起较大的静态功耗。 同时,如果简单的用电阻分压的原理降低gate电压,就会出现输入电压比较高的时候,MOS管工作良好,而输入电压降低的时候gate电压不足,引起导通不够彻底,从而增加功耗。 3,双电压应用 在一些控制电路中,逻辑部分使用典型的5V或者3.3V数字电压,而功率部分使用12V甚至更高的电压。两个电压采用共地方式连接。 这就提出一个要求,需要使用一个电路,让低压侧能够有效的控制高压侧的MOS 管,同时高压侧的MOS管也同样会面对1和2中提到的问题。 在这三种情况下,图腾柱结构无法满足输出要求,而很多现成的MOS驱动IC,似乎也没有包含gate电压限制的结构。 于是我设计了一个相对通用的电路来满足这三种需求。 电路图如下:

图1 用于NMOS的驱动电路 图2 用于PMOS的驱动电路 这里我只针对NMOS驱动电路做一个简单分析: Vl和Vh分别是低端和高端的电源,两个电压可以是相同的,但是Vl不应该超

Windows驱动开发入门

接触windows驱动开发有一个月了,感觉Windows驱动编程并不像传说中的那么神秘。为了更好地为以后的学习打下基础,记录下来这些学习心得,也为像跟我一样致力于驱动开发却苦于没有门路的菜鸟朋友们抛个砖,引个玉。 我的开发环境:Windows xp 主机+ VMW ARE虚拟机(windows 2003 server系统)。编译环境:WinDDK6001.18002。代码编辑工具:SourceInsight。IDE:VS2005/VC6.0。调试工具:WinDBG,DbgView.exe, SRVINSTW.EXE 上面所有工具均来自互联网。 对于初学者,DbgView.exe和SRVINSTW.EXE是非常简单有用的两个工具,一定要装上。前者用于查看日志信息,后者用于加载驱动。 下面从最简单的helloworld说起吧。Follow me。 驱动程序的入口函数叫做DriverEntry(PDRIVER_OBJECT pDriverObj,PUNICODE_STRING pRegisgryString)。两个参数,一个是驱动对象,代表该驱动程序;另一个跟注册表相关,是驱动程序在注册表中的服务名,暂时不用管它。DriverEntry 类似于C语言中的main函数。它跟main的差别就是,main完全按照顺序调用的方法执行,所有东西都按照程序员预先设定的顺序依次发生;而DriverEntry则有它自己的规则,程序员只需要填写各个子例程,至于何时调用,谁先调,由操作系统决定。我想这主要是因为驱动偏底层,而底层与硬件打交道,硬件很多都是通过中断来与操作系统通信,中断的话就比较随机了。但到了上层应用程序,我们是看不到中断的影子的。说到中断,驱动程序中可以人为添加软中断,__asm int 3或者Int_3();前者是32位操作系统用的,后者是64位用的。64位驱动不允许内嵌汇编。下面是我的一个helloworld的源码:

Windows驱动程序开发环境配置

Windows驱动程序开发笔记 一、WDK与DDK环境 最新版的WDK 微软已经不提供下载了这里:https://https://www.doczj.com/doc/0514361075.html,/ 可以下并且这里有好多好东东! 不要走进一个误区:下最新版的就好,虽然最新版是Windows Driver Kit (WDK) 7_0_0,支持windows7,vista 2003 xp等但是它的意思是指在windows7操作系统下安装能编写针对windows xp vista的驱动程序, 但是不能在xp 2003环境下安装Windows Driver Kit (WDK) 7_0_0这个高版本,否则你在build的时候会有好多好多的问题. 上文build指:首先安装好WDK/DDK,然后进入"开始"->"所有程序"->"Windows Driver Kits"->"WDK XXXX.XXXX.X" ->"Windows XP"->"x86 Checked Build Environment"在弹出来的命令行窗口中输入"Build",让它自动生成所需要的库 如果你是要给xp下的开发环境还是老老实实的找针对xp的老版DDK吧,并且xp无WDK 版只有DDK版build自己的demo 有个常见问题: 'jvc' 不是内部或外部命令,也不是可运行的程序。 解决办法:去掉build路径中的空格。 二、下载 WDK 开发包的步骤 1、访问Microsoft Connect Web site站点 2、使用微软 Passport 账户登录站点 3、登录进入之后,点击站点目录链接 4、在左侧的类别列表中选择开发人员工具,在右侧打开的类别:开发人员工具目录中找到Windows Driver Kit (WDK) and Windows Driver Framework (WDF)并添加到您的控制面板中 5、添加该项完毕后,选择您的控制面板,就可以看到新添加进来的项了。 6、点击Windows Driver Kit (WDK) and Windows Driver Framework (WDF),看到下面有下载链接,OK,下载开始。下载后的文件名为: 6.1.6001.18002.081017-1400_wdksp-WDK18002SP_EN_DVD.iso将近600M大小。

分享一个比较经典的MOS管驱动电路

问题提出:现在的MOS驱动,有几个特别的需求, 1,低压应用 当使用5V电源,这时候如果使用传统的图腾柱结构,由于三极管的be有左右的压降,导致实际最终加在gate 上的电压只有。这时候,我们选用标称gate 电压的MOS管就存在一定的风险。 同样的问题也发生在使用3V或者其他低压电源的场合。 2,宽电压应用 输入电压并不是一个固定值,它会随着时间或者其他因素而变动。这个变动导致PWM fe 路提供给MOS管的驱动电压是不稳定的。 为了让MOS管在高gate电压下安全,很多MOS管内置了稳压管强行限制gate电压的幅值。在这种情况下,当提供的驱动电压超过稳压管的电压,就会引起较大的静态功耗。同时,如果简单的用电阻分压的原理降低gate 电压,就会出现输入电压比较高的时候,MOS I工作良好,而输入电压降低的时候gate电压不足,引起导通不够彻底,从而增加功耗。 3,双电压应用

在一些控制电路中,逻辑部分使用典型的5V 或者数字电压,而功率部分使用12V 甚至更高的电压。两个电压采用共地方式连接。 这就提出一个要求,需要使用一个电路,让低压侧能够有效的控制高压侧的MOS 管,同时高压侧的MOS t也同样会面对1和2中提到的问题。 在这三种情况下,图腾柱结构无法满足输出要求,而很多现成的MOS区动IC,似 乎也没有包含gate 电压限制的结构。于是我设计了一个相对通用的电路来满足这三种需求。 电路图如下: ? 图1用于NMO的驱动电路 图2用于PMO的驱动电路 这里我只针对NMO驱动电路做一个简单分析: VI和Vh分别是低端和高端的电源,两个电压可以是相同的,但是VI不应该超过Vh。 Q1和Q2组成了一个反置的图腾柱,用来实现隔离,同时确保两只驱动管Q3和Q4 不会同时导通。

mos驱动+自举

MOS管驱动电路综述 2008-12-25 15:15 在使用MOS管设计开关电源或者马达驱动电路的时候,大部分人都会考虑MOS的导通电阻,最大电压等,最大电流等,也有很多人仅仅考虑这些因素。这样的电路也许是可以工作的,但并不是优秀的,作为正式的产品设计也是不允许的。 下面是我对MOSFET及MOSFET驱动电路基础的一点总结,其中参考了一些资料,非全部原创。 包括MOS管的介绍,特性,驱动以及应用电路。 1,MOS管种类和结构 MOSFET管是FET的一种(另一种是JFET),可以被制造成增强型或耗尽型,P沟道或N沟道共4种类型,但实际应用的只有增强型的N沟道MOS管和增强型的P沟道MOS管,所以通常提到NMOS,或者PMOS指的就是这两种。 至于为什么不使用耗尽型的MOS管,不建议刨根问底。 对于这两种增强型MOS管,比较常用的是NMOS。原因是导通电阻小,且容易制造。所以开关电源和马达驱动的应用中,一般都用NMOS。下面的介绍中,也多以NMOS为主。 MOS管的三个管脚之间有寄生电容存在,这不是我们需要的,而是由于制造工艺限制产生的。 寄生电容的存在使得在设计或选择驱动电路的时候要麻烦一些,但没有办法避免,后边再详细介绍。 在MOS管原理图上可以看到,漏极和源极之间有一个寄生二极管。这个叫体二极管,在驱动感性负载(如马达),这个二极管很重要。顺便说一句,体二极管只在单个的MOS管中存在,在集成电路芯片内部通常是没有的。 2,MOS管导通特性 导通的意思是作为开关,相当于开关闭合。 NMOS的特性,Vgs大于一定的值就会导通,适合用于源极接地时的情况(低端驱动),只要栅极电压达到4V或10V就可以了。 PMOS的特性,Vgs小于一定的值就会导通,适合用于源极接VCC时的情况(高端驱动)。但是,虽然PMOS可以很方便地用作高端驱动,但由于导通电阻大,价格贵,替换种类少等原因,在高端驱动中,通常还是使用NMOS。 3,MOS开关管损失 不管是NMOS还是PMOS,导通后都有导通电阻存在,这样电流就会在这个电阻上消耗能量,这部分消耗的能量叫做导通损耗。选择导通电阻小的MOS管会减小导通损耗。现在的小功率MOS 管导通电阻一般在几十毫欧左右,几毫欧的也有。 MOS在导通和截止的时候,一定不是在瞬间完成的。MOS两端的电压有一个下降的过程,流过的电流有一个上升的过程,在这段时间内,MOS管的损失是电压和电流的乘积,叫做开关损失。 通常开关损失比导通损失大得多,而且开关频率越快,损失也越大。 导通瞬间电压和电流的乘积很大,造成的损失也就很大。缩短开关时间,可以减小每次导通时的损失;降低开关频率,可以减小单位时间内的开关次数。这两种办法都可以减小开关损失。

WINDOWS驱动编程

WDM驱动程序开发之读写设备寄存器:KIoRange类 2009-11-09 14:05 WDM驱动程序开发之读写设备寄存器:KIoRange类收藏 KIoRange类: 一、Overview KIoRange类将一系列特殊的外围总线的地址映射到CPU总线的地址空间。CPU总线上的地址即可能在CPU的I/O空间,也可能在CPU的内存空间,这取决于平台和外围总线的控制方式。考虑到可移植性,所有对I/O周期(I/O cycle)进行译码的设备驱动程序必须用这个类对I/O的位置(location)进行正确的访问(access)。KIoRange是KPeripheralAddress类的派生类。 一旦映射关系建立起来,驱动程序就用KIoRange类的成员函数去控制设备的I/O寄存器。这个类提供了8位、16位和32位I/O访问控制的函数。这些函数是以内联(in-line)函数方式来使用的,它们调用系统内相应的宏来产生依赖于平台的代码。 对I/O位置(location)进行访问的另一种备选方案是创建一个KIoRegister 的实例。这要通过取得一个KIoRange对象的数组元素来实现。 为了访问一系列外围总线内存空间的地址,需要用KMemoryRange类。 二、Member Functions 1、KIoRange - Constructor (4 forms) 构造函数 【函数原型】 FORM 1: KIoRange( void ); FORM 2: (NTDDK Only) KIoRange( INTERFACE_TYPE IntfType, ULONG BusNumber , ULONGLONG BaseBusAddress, ULONG Count, BOOLEAN MapToSystemVirtual =TRUE ); FORM 3 (WDM): KIoRange( ULONGLONG CpuPhysicalAddress, BOOLEAN InCpuIoSpace, ULONG Count, BOOLEAN MapToSystemVirtual =TRUE

Windows 内核技术与驱动开发笔记(完整版)

Windows 内核技术与驱动开发笔记 1.简述Driver Entry例程 动程序的某些全局初始化操作只能在第一次被装入时执行一次,而Driver Entry例程就是这个目的。 * Driver Entry是内核模式驱动程序主入口点常用的名字。 * Driver Entry的第一个参数是一个指针,指向一个刚被初始化的驱动程序对象,该对象就代表你的驱动程序。WDM驱动程序的Driver Entry例程应完成对这个对象的初始化并返回。非WDM驱动程序需要做大量额外的工作,它们必须探测自己的硬件,为硬件创建设备对象(用于代表硬件),配置并初始化硬件使其正常工作。 * Driver Entry的第二个参数是设备服务键的键名。这个串不是长期存在的(函数返回后可能消失)。如果以后想使用该串就必须先把它复制到安全的地方。 * 对于WDM驱动程序的Driver Entry例程,其主要工作是把各种函数指针填入驱动程序对象,这些指针为操作系统指明了驱动程序容器中各种例程的位置。 2.简述使用VC进行内核程序编译的步骤 编译方式是使用VC++进行编译 1.用VC新建工程。 2.将两个源文件Driver.h和Driver.cpp拷贝到工程目录中,并添加到工程中。 3.增加新的编译版本。 4.修改工程属性,选择“project | setting”将IterMediate file和Output file 都改为MyDriver_Check。 5.选择C/C++选项卡,将原有的Project Options内容全部删除替换成相关参数。 6.选择Link选项卡,将原有的Project Options内容删除替换成相关Link。 7.修改VC的lib目录和include的目录。 8.在VC中选择tools | options,在弹出的对话框中选择“Directories”选项卡,在“Show directories for”下拉菜单中选择“Include file”菜单。添加DDK的相关路径。 3.简述单机内核调试技术 答:1.下载和安装WinDbg能够调试windows内核模块的调试工具不多,其中一个选择是微软提供的WinDbg 下载WinDbg后直接双击安装包执行安装。 2.安装好虚拟机以后必须把这个虚拟机上的windows设置为调试执行。在被调试系统2000、2003或是xp的情况下打开虚拟机中的windows系统盘。 3.将boot.ini文件最后一行复制一下,并加上新的参数使之以调试的方法启动。重启系统,在启动时就可以看到菜单,可以进入正常windows xp,也可以进入Debug模式的windows xp。 4.设置VMware管道虚拟串口。调试机与被调试机用串口相连,但是有被调试机是虚拟机的情况下,就不可能用真正的串口连接了,但是可以在虚拟机上生成一个用管道虚拟机的串口,从而可以继续内核调试。 4.请画出Windows架构简图

mos驱动汇总

大功率开关电源中功率MOSFET的驱动技术 功率MOSFET具有导通电阻低、负载电流大的优点,因而非常适合用作开关电源(switch-mode power supplies,SMPS)的整流组件,不过,在选用MOSFET时有一些注意事项。 功率MOSFET和双极型晶体管不同,它的栅极电容比较大,在导通之前要先对该电容充电,当电容电压超过阈值电压(VGS-TH)时MOSFET才开始导通。因此,栅极驱动器的负载能力必须足够大,以保证在系统要求的时间内完成对等效栅极电容(CEI)的充电。 在计算栅极驱动电流时,最常犯的一个错误就是将MOSFET的输入电容(CISS)和CEI混为一谈,于是会使用下面这个公式去计算峰值栅极电流。 I = C(dv/dt) 实际上,CEI的值比CISS高很多,必须要根据MOSFET生产商提供的栅极电荷(QG)指标计算。 QG是MOSFET栅极电容的一部分,计算公式如下: QG = QGS + QGD + QOD 其中: QG--总的栅极电荷 QGS--栅极-源极电荷 QGD--栅极-漏极电荷(Miller) QOD--Miller电容充满后的过充电荷 典型的MOSFET曲线如图1所示,很多MOSFET厂商都提供这种曲线。可以看到,为了保证MOSFET导通,用来对CGS充电的VGS要比额定值高一些,而且CGS也要比VTH高。栅极电荷除以VGS等于CEI,栅极电荷除以导通时间等于所需的驱动电流(在规定的时间内导通)。 用公式表示如下: QG = (CEI)(VGS) IG = QG/t导通 其中: ●QG 总栅极电荷,定义同上。 ●CEI 等效栅极电容 ●VGS 删-源极间电压 ●IG 使MOSFET在规定时间内导通所需栅极驱动电流 MOSFET 驱动器的功耗 对MOSFET 的栅极进行充电和放电需要同样的能量,无论充放电过程快或慢(栅极电压的上升和下降)。因此,MOSFET 驱动器的电流驱动能力并不影响由MOSFET 栅极的容性负载产生的驱动器功耗。 MOSFET 驱动器的功耗包含三部分: 1. 由于MOSFET栅极电容充电和放电产生的功耗。 公式1 :PC = CG × VDD2 × F 其中: CG = MOSFET 栅极电容 VDD = MOSFET 驱动器电源电压(V) F = 开关频率 2. 由于MOSFET 驱动器吸收静态电流而产生的功耗。 公式2:

windows驱动开发 driverstudio 教程

前言 鉴于国内开发人员迫切需要学习驱动开发技术,而国内有关驱动开发工具DriverStudio的资料很少,大家在开发过程中遇到很多问题却没处问,没法问.而这些问题却是常见的,甚至是很基础的问题。 有感于此,本站联合北京朗维计算机应用公司编写了本教程。本教程的目的是让一个有一些核心态程序编写经验或对系统有所了解的人学习编写驱动程序。当然,本教程不是DDK中有关驱动方面内容的替换,而只是一个开发环境的介绍和指导。 学习本教程,你应该能熟练地使用本套工具编写基本的驱动程序。当然如果你想能顺利地编写各种各样的驱动的话,你应该有相关的硬件知道和系统核心知识并且要经过必要的训练才能胜任。 如果真心说一句话,DriverStudio并没有对驱动程序开发有什么实质的改变,它和DDk的关系不过是sdk和mfc的关系,但很多人选择了MFC,原因不言自明,方便二字何以说得完呀?你再也不用去关注繁琐的框架实现代码,也不用去考虑让人可怕的实现细节。封装完整的C++函数库让你专注于你要实现的程序逻辑。它包含一套完整调试和性能测试、增强工具,使你的代码更稳定。 说些题外话,作驱动开发很苦,不是一般的人能忍受的,那怕开发一个小小的驱动也要忍受无数次的宕机,有时甚至有些灾难性的事故等着你,所以要有充分的思想准备。当然,在开发的过程中你会有一种彻底控制计算机的满足感,调试开发完毕后的成就感是其它开发工作所不能体会到的。当然,就个人前途来说,作驱动开发能拿到别的开发所不能得到的薪水。而且开发的生命期也会长一些,你不用不断的学习新的开发工具,只需要不断的加深对系统的理解就行了。当然,还有一点是必需的,那就是英文要好,否则永远比国外同行慢半拍。 本人水平不高,所做的工作只要能提起大家学习驱动开发的兴趣,能带领大家入门便心满意足了。在此感谢北京朗维公司(DriverStduio 国内总代理)的大力赞助,特别是感谢技术部的王江涛,市场部的李强两位先生的大力支持。同时要感谢我的女友,可爱的小猫(我对她的呢称)的贴心照顾和支持(一些很好看的图片就出自她手:))。在此我也要感谢论坛各大版主的鼎力支持和广大网友的关怀。 DriverStudio工具包介绍: DriverStudio 是一套用来简化微软Windows 平台下设备驱动程序的开发,调试和测试的工具包。DriverStudio 当前的版本包括下列工具模块: DriverAgent DriverAgent 为Win32 应用程序提供直接访问硬件的功能。即使你没有任何设备驱动程序开发的经验或经历,你也能编写出DriverAgent应用程序来直接访问硬件设备。DriverAgent 应用程序可以运行在 Windows 98, Windows 95, Windows NT 和 Windows 2000平台上。(当前版本不支持Windows XP平台。) VToolsD VToolsD 是一个用来开发针对Win9X (Windows 95 和 Windows 98)操作系统下设备驱动程序(VxD)

Windows驱动程序框架理解_经典入门

标题: 【原创】Windows驱动程序框架 windows驱动程序入门比较坑爹一点,本文旨在降低入门的门槛。注:下面的主要以NT式驱动为例,部分涉及到WDM驱动的差别会有特别说明。 首先,肯定是配置好对应的开发环境啦,不懂的就百度下吧,这里不再次描述了。 在Console控制台下,我们的有一个入口函数main;在Windows图形界面平台下,有另外一个入口函数Winmain。我们只要在这入口函数里面调用其他相关的函数,程序就会按照我们的意愿跑起来了。在我们用IDE开发的时候,也许你不会发现这些细微之处是如何配置出来的,一般来说我们也不用理会,因为在新建工程的时候,IDE已经帮我们把编译器(Compiler)以及连接器(Linker)的相关参数设置好,在正式编程的时候,我们只要按照规定的框架编程就行了。 同样,在驱动程序也有一个入口函数DriverEntry,这并不是一定的,但这是微软默认的、推荐使用的。在我们配置开发环境的时候我们有机会指定入口函数,这是链接器的参数/entry:"DriverEntry"。 入口函数的声明 代码: DriverEntry主要是对驱动程序进行初始化工作,它由系统进程(System)创建,系统启动的时候System系统进程就被创建了。 驱动加载的时候,系统进程将会创建新的线程,然后调用执行体组件中的对象管理器,创建一个驱动对象(DRIVER_OBJECT)。另外,系统进程还得调用执行体组件中的配置管理程序,查询此驱动程序在注册表中对应项。系统进程在调用驱动程序的Driv erEntry的时候就会将这两个值传到pDriverObject和pRegistryPath。 接下来,我们介绍下上面出现的几个数据结构: typedef LONG NTSTATUS 在驱动开发中,我们应习惯于用NTSTATUS返回信息,NTSTATUS各个位有不同的含义,我们可以也应该用宏NT_SUCCESS来判断是否返回成功。 代码: NTSTAUS的编码意义: 其中 Ser是Serviity的缩写,代表严重程度。 00:成功01:信息10:警告11:错误 C是Customer的缩写,代表自定义的位。

MOSFET及MOSFET驱动电路总结

MOSFET及MOSFET驱动电路总结 在使用MOS管设计开关电源或者马达驱动电路的时候,大部分人都会考虑MOS的导通电阻,最大电压等,最大电流等,也有很多人仅仅考虑这些因素。这样的电路也许是可以工作的,但并不是优秀的,作为正式的产品设计也是不允许的。 下面是我对MOSFET及MOSFET驱动电路基础的一点总结,其中参考了一些资料,非全部原创。包括MOS管的介绍,特性,驱动以及应用电路。 1、MOS管种类和结构 MOSFET管是FET的一种(另一种是JFET),可以被制造成增强型或耗尽型,P沟道或N沟道共4种类型,但实际应用的只有增强型的N沟 道MOS管和增强型的P沟道MOS管,所以通常提到NMOS,或者PMOS指的就是这两种。右图是这两种MOS管的符号。 至于为什么不使用耗尽型的MOS管,不建议刨根问底。 对于这两种增强型MOS管,比较常用的是NMOS。原因是导通电阻小且容易制造。所以开关电源和马达驱动的应用中,一般都用NMOS。下面的介绍中,也多以NMOS为主。 在MOS管原理图上可以看到,漏极和源极之间有一个寄生二极管。这个叫体二极管,在驱动感性负载(如马达),这个二极管很重要。顺便说一句,体二极管只在单个的MOS管中存在,在集成电路芯片内部通常是没有的。下图是MOS管的构造图,通常的原理图中都画成右图所示的样子。 (栅极保护用二极管有时不画)

MOS管的三个管脚之间有寄生电容存在,如右图所示。这不是我们需要的,而是由于制造工艺限制产生的。寄生电容的存在使得在设计或选择驱动电路的时候要麻烦一些,但没有办法避免,在MOS管的驱动电路设计时再详细介绍。 2、MOS管导通特性 导通的意思是作为开关,相当于开关闭合。 NMOS的特性,Vgs大于一定的值就会导通,适合用于源极接地时的情况(低端驱动),只要栅极电压达到4V或10V就可以了。 PMOS的特性,Vgs小于一定的值就会导通,使用与源极接VCC时的情况(高端驱动)。但是,虽然PMOS可以很方便地用作高端驱动,但由于导通电阻大,价格贵,替换种类少等原因,在高端驱动中,通常还是使用NMOS。 右图是瑞萨2SK3418的Vgs电压和Vds电压的关系图。可以看出小电流时,Vgs达到4V,DS间压降已经很小,可以认为导通。

Windows7+WDK+VS2010+VisualDDK驱动开发环境搭建

[置顶]Windows7+WDK+VS2010+VisualDDK驱动开发环境搭建(菜鸟的经验) 分类:驱动开发2011-08-12 23:30 863人阅读评论(3) 收藏举报 自己在研究驱动开发,第一步就是开发环境的搭建,网上已有很多的教程一,我也是按着教程一步一步搭建的,但在搭建过程的过程当中遇到一些问题,也花了我不少时间。 第一个难题就是,我是Windows7+VS2010+WDK的开发环境。 首先我参考了网上的一篇文章:https://www.doczj.com/doc/0514361075.html,/guojingjia2006/archive/2011/03/19/142211.html WINDOWS 7 配置驱动开发环境(wdk7.60) 1. 安装VS2010,WDK7.60 (GRMWDK_EN_7600_1) 2. 新建VC 控制台项目(选择为空项目)

3. 新建项目配置“driver” ,点击下拉按钮-点击(配置管理器) 输入名称(driver)点击确定就可以了,其他的不要动哦!

完成后的效果! 点击确定按钮之后呈现出来的画面

鼠标右击新建的driver属性,会弹出以下窗口! 4. 设置VC++路径 <我把wdk安装在E盘下> a. 配置可执行文件目 录:E:\WinDDK\7600.16385.1\bin\x86;

b. 配置包含目录: E:\WinDDK\7600.16385.1\inc\ddk E:\WinDDK\7600.16385.1\inc\ E:\WinDDK\7600.16385.1\inc\api c. 配置库目 录: E:\WinDDK\7600.16385.1\lib\win7\i3865 新建C/C++文件不然无C/C++设置选项 <刚开始我们创建了一个空的项目所以项目里没有 c++文件,现在要做的就是在空的项目-源文件-添加一个新建项c++文件> 常规 目标文件扩展名:.sys //必选 6. 设置C/C++选项 常规选项卡 1 调试信息格式(C7 兼容(/Z7) //可选 2 警告等级(2 级(/W2) //可选 3 将警告视为错误(是(/wx) //可选

学习笔记windows驱动开发技术详解

<学习笔记>Windows驱动开发技术详解 派遣函数是Windows驱动程序中的重要概念。驱动程序的主要功能是负责处理I/O请求,其中大部分I/O请求是在派遣函数中处理的。 用户模式下所有对驱动程序的I/O请求,全部由操作系统转换为一个叫做IRP数据结构,不同的IRP会被“派遣”到不同的派遣函数中。IRP与派遣函数 IRP的处理机制类似于Windows应用程序中的“消息处理”,驱动程序接收到不同的IRP后,会进入不同的派遣函数,在派遣函数中IRP得到处理。1.IRP 在Windows内核中,有一种数据结构叫做IRP(I/O Request Package),即输入输出请求包。上层应用程序与底层驱动程序通信时,应用程序会发出I/O请求。操作系统将I/O请求转化为相应的IRP数据,不同类型的IRP会被传递到不同的派遣函数中。 IRP有两个基本的重要属性,一个是MajorFunction,另一个MinorFunction,分别记录IRP的主类型和子类型,操作系统根据MajorFunction将IRP“派遣”到不同的派遣函数中,在派遣函数中还可以继续判断这个IRP属于哪种MinorFunction。 下面是HelloDDK的DriverEntry中关于派遣函数的注册:

view plaincopy to clipboardprint? #pragma INITCODE extern "C" NTSTATUS DriverEntry( IN PDRIVER_OBJECT pDriverObject, IN PUNICODE_STRING pRegisterPath ) { NTSTATUS status; KdPrint(("Enter DriverEntry\n")); //设置卸载函数 pDriverObject->DriverUnload = HelloDDKUnload; //设置派遣函数 pDriverObject->MajorFunction[IRP_MJ_CREATE] = HelloDDKDispatchRoutine; pDriverObject->MajorFunction[IRP_MJ_CLOSE] = HelloDDKDispatchRoutine;

MOS管驱动电路总结

MOS管驱动电路总结 在使用MOS管设计开关电源或者马达驱动电路的时候,大部分人都会考虑MOS的导通电阻,最大电压等,最大电流等,也有很多人仅仅考虑这些因素。这样的电路也许是可以工作的,但并不是优秀的,作为正式的产品设计也是不允许的。 下面是我对MOSFET及MOSFET驱动电路基础的一点总结,其中参考了一些资料,非全部原创。包括MOS管的介绍,特性,驱动以及应用电路。 1,MOS管种类和结构 MOSFET管是FET的一种(另一种是JFET),可以被制造成增强型或耗尽型,P沟道或N沟道共4种类型,但实际应用的只有增强型的N 沟道MOS管和增强型的P沟道MOS管,所以通常提到NMOS,或者PMOS 指的就是这两种。 至于为什么不使用耗尽型的MOS管,不建议刨根问底。 对于这两种增强型MOS管,比较常用的是NMOS。原因是导通电阻小,且容易制造。所以开关电源和马达驱动的应用中,一般都用NMOS。下面的介绍中,也多以NMOS为主。 MOS管的三个管脚之间有寄生电容存在,这不是我们需要的,而是由于制造工艺限制产生的。寄生电容的存在使得在设计或选择驱动电

路的时候要麻烦一些,但没有办法避免,后边再详细介绍。 在MOS管原理图上可以看到,漏极和源极之间有一个寄生二极管。这个叫体二极管,在驱动感性负载(如马达),这个二极管很重要。顺便说一句,体二极管只在单个的MOS管中存在,在集成电路芯片内部通常是没有的。 2,MOS管导通特性 导通的意思是作为开关,相当于开关闭合。 NMOS的特性,Vgs大于一定的值就会导通,适合用于源极接地时的情况(低端驱动),只要栅极电压达到4V或10V就可以了。 PMOS的特性,Vgs小于一定的值就会导通,适合用于源极接VCC时的情况(高端驱动)。但是,虽然PMOS可以很方便地用作高端驱动,但由于导通电阻大,价格贵,替换种类少等原因,在高端驱动中,通常还是使用NMOS。 3,MOS开关管损失 不管是NMOS还是PMOS,导通后都有导通电阻存在,这样电流就会在这个电阻上消耗能量,这部分消耗的能量叫做导通损耗。选择导通电阻小的MOS管会减小导通损耗。现在的小功率MOS管导通电阻一般在几十毫欧左右,几毫欧的也有。 MOS在导通和截止的时候,一定不是在瞬间完成的。MOS两端的电

MOSFET驱动技术详解

MOSFET的驱动技术详解 simtriex/simplis仿真电路用软件 MOSFET作为功率开关管,已经是是开关电源领域的绝对主力器件。虽然MOSFET作为电压型驱动器件,其驱动表面上看来是非常简单,但是详细分析起来并不简单。下面我会花一点时间,一点点来解析MOSFET的驱动技术,以及在不同的应用,应该采用什么样的驱动电路。 首先,来做一个实验,把一个MOSFET的G悬空,然后在DS上加电压,那么会出现什么情况呢?很多工程师都知道,MOS会导通甚至击穿。这是为什么呢?我根本没有加驱动电压,MOS怎么会导通?用下面的图1,来做个仿真;去探测G极的电压,发现电压波形如图2所示。 图1 图2 这种情况有什么危害呢?实际情况下,MOS肯定有驱动电路的么,要么导通,要么关掉。问题就出在开机,或者关机的时候,最主要是开机的时候,此时你的驱动电路还没上电。但是输入上电了,由于驱动电路没有工作,G级的电荷无法被释放,就容易导致MOS导通击穿。那么怎么解决呢?在GS之间并一个电阻。其仿真的结果如图4。几乎为0V。

图 3 图4 什么叫驱动能力,很多PWM 芯片,或者专门的驱动芯片都会说驱动能力,比如384X 的驱动能力为1A ,其含义是什么呢? 假如驱动是个理想脉冲源,那么其驱动能力就是无穷大,想提供多大电流就给多大。但实际中,驱动是有内阻的,假设其内阻为10欧姆,在10V 电压下,最多能提供的峰值电流就是1A ,通常也认为其驱动能力为1A 。 那什么叫驱动电阻呢,通常驱动器和MOS 的G 极之间,会串一个电阻,就如下图5的R3。 图5 对上图进行仿真,R3分别取1欧姆,和100欧姆。下图6是MOS 的G 极的电压波形上升沿。图7是驱动的下降沿(G 极电压)。 图6 图7 驱动电阻的作用,如果你的驱动走线很长,驱动电阻可以对走线电感和MOS 结电容引起的震荡起阻尼作用。但是通常,现在的PCB 走线都很紧凑,走线电感非常小。 第二个,重要作用就是调解驱动器的驱动能力,调节开关速度。当然只能降低驱动能力,而不能提高。

mos管驱动资料

下面是我对MOSFET及MOSFET驱动电路基础的一点总结,其中参考了一些资料,非全部原创。包括MOS管的介绍,特性,驱动以及应用电路。 1,MOS管种类和结构 MOSFET管是FET的一种(另一种是JFET),可以被制造成增强型或耗尽型,P沟道或N沟道共4种类型,但实际应用的只有增强型的N沟道MOS管和增强型的P沟道MOS管,所以通常提到NMOS,或者PMOS指的就是这两种。 至于为什么不使用耗尽型的MOS管,不建议刨根问底。 对于这两种增强型MOS管,比较常用的是NMOS。原因是导通电阻小,且容易制造。所以开关电源和马达驱动的应用中,一般都用NMOS。下面的介绍中,也多以NMOS为主。 MOS管的三个管脚之间有寄生电容存在,这不是我们需要的,而是由于制造工艺限制产生的。寄生电容的存在使得在设计或选择驱动电路的时候要麻烦一些,但没有办法避免,后边再详细介绍。 在MOS管原理图上可以看到,漏极和源极之间有一个寄生二极管。这个叫体二极管,在驱动感性负载(如马达),这个二极管很重要。顺便说一句,体二极管只在单个的MOS管中存在,在集成电路芯片内部通常是没有的。 2,MOS管导通特性 导通的意思是作为开关,相当于开关闭合。 NMOS的特性,Vgs大于一定的值就会导通,适合用于源极接地时的情况(低端驱动),只要栅极电压达到4V或10V就可以了。 PMOS的特性,Vgs小于一定的值就会导通,适合用于源极接VCC时的情况(高端驱动)。但是,虽然PMOS可以很方便地用作高端驱动,但由于导通电阻大,价格贵,替换种类少等原因,在高端驱动中,通常还是使用NMOS。 3,MOS开关管损失 不管是NMOS还是PMOS,导通后都有导通电阻存在,这样电流就会在这个电阻上消耗能量,这部分消耗的能量叫做导通损耗。选择导通电阻小的MOS管会减小导通损耗。现在的小功率MOS管导通电阻一般在几十毫欧左右,几毫欧的也有。 MOS在导通和截止的时候,一定不是在瞬间完成的。MOS两端的电压有一个下降的过程,流过的电流有一个上升的过程,在这段时间内,MOS管的损失是电压和电流的乘积,叫做开关损失。通常开关损失比导通损失大得多,而且开关频率越快,损失也越大。 导通瞬间电压和电流的乘积很大,造成的损失也就很大。缩短开关时间,可以减小每次导通时的损失;降

相关主题
文本预览
相关文档 最新文档