最新日志

发表于:2008-5-12 15:50:42
标签:无标签

1

单片机驱动标准PC机键盘的C51程序

功能:实现pc机键盘(p/s2接口)与8位单片机连接使用
原理:键盘时钟接在p3.2口,既8051的外部中断int0上,键盘数据接到p1.0上
每次按键,键盘会向单片机发脉冲使单片机发生外部中断,数据有p1.0口一位一位传进来
传回的数据格式为:1位开始位(0),8位数据位(所按按键的通码,用来识别按键),1位
校验位(奇校验)
1位结束位(1)
实现:将键盘发回的数据放到一个缓冲区里(数组),当按键结束后发生内部中断来处理所
按的按键
缺点:由于51单片机的容量有限所以缓冲区不可以开的太大,这就导致可以记录键盘的按键
次数过少,
也就是容错性一般。不过如果正常使用键盘是不会出错的
================================================================================
====================*/</P><P>//#include"reg51.h"
#include "intrins.h"
#include "ku.h" //按键通码与ascii对照表
sbit sda= p1^0; //键盘数据线</P><P>unsigned char dat=0,dat1=0,dat2=0; //接收键盘
数据变量? 存储通码变量 接受连续通码变量
unsigned char count=0,num=9,temp[5],shu=0; //中数次数 中断控制变量 缓冲区数组 缓
冲区指针
unsigned char key=0; //按键最终值</P><P>void zhongduan() interrupt 0 //外部中断
0 用来接受键盘发来的数据
{
dat>>=1; //接受数据 低->高
if(sda) dat|=0x80;
count++;
if(count==num)
{
if(count==9)
{
dat1=dat; //中断9次后为键盘所按按键的通码(开始位始终为0在第一次中断时右移中忽
略)
num=20; //使中断可以继续中断11次
}
if(count==20)
{
dat2=dat; //取回第二个通码
if(dat1==0xe0 || dat2==0xf0) //第一个通码是0xe0则证明所按按键为功能键,第二个通
码是0xf0证明按键结束
{
temp[shu]=dat1;temp[shu+1]=dat2; shu+=2; //将所按按键存到缓冲区中
ie=0x82; //关闭外部中断并打开内部中断来处理所按按键
tr0=1;
}
else
{
temp[shu]=dat1;temp[shu+1]=dat2; shu+=2; //如果shift键被按下则记录与它同时按下的
那个键
count=0;
}
if((temp[0]==18 || temp[0]==89) && (temp[2]==18 || temp[2]==89) ) tr0=1; //如果
缓冲区中有两个间隔的shift键则证明需要的铵键结束
}
}
}</P><P>
void getkey() interrupt 1 //内部中断0 用来处理缓冲区里的数据
{
unsigned char i=0;
tr0=0;
th0=0;
tl0=0;
count=0; //中断记数则0
if((temp[0]==18 || temp[0]==89) && temp[1]!=0xf0 ) //shift被按下

for(i=0;i<21;i++)
{
if(addshift[i][0]==temp[1]) //搜索shift被按下的表
{
key=addshift[i][1];
ie=0x83; //打开外部中断
return;
}
}
}
else if(temp[0]==0xe0) //所按下的按键是功能键
{
for(i=0;i<80;i++)
{
if(noshift[i][0]==temp[1]) //功能键的通码在缓冲区的第二位
{
key=noshift[i][1];
ie=0x83;
return;
}
}
}
else //普通按键
{
for(i=0;i<80;i++)
{
if(noshift[i][0]==temp[0]) //普按键的通码在缓冲区的第一位
{
key=noshift[i][1];
ie=0x83;
return;
}
}

for(i=0;i<5;i++) 
{
temp[i]=0;

}

点击此处查看原文 >>

系统分类: 单片机   |    用户分类: 无分类    |    来源: 转贴

评论(1) | 阅读(157)
发表于:2008-5-12 15:50:05
标签:无标签

0

串行驱动led显示

//一个74hc595位移寄存器驱动三极管驱动led位,
//两个74hc595驱动led段,方式位5位x8段x2=10个数码管
//5分频,每次扫描时间位1.25ms


//定义特殊符号

#define nul 0xf
#define qc 0xc
#define qb 0xb
#define q_ 0xa
#define q__ 0xd
#define q___ 0xe
#define qp 0x10
#define qe 0x11
#define qj 0x12
#define qn 0x13
#define qf 0x14
#define qa 0x15
#define qr 0x16
#define qd 0x17
#define qu 0x18
#define ql 0x19
#define qh 0x1a
#define qwen 0x1b
#define qt 0x1c
#define qla 0x1d
#define qlb 0x1e
#define qlc 0x1f
#define qld 0x20
#define qle 0x21
#define qlf 0x22
#define qlg 0x23
#define qldp 0x24


//显示段信息,不同led排列组合的段信息只需更改8个数值即可。
//因此,该定义具有通用性。

// 显示 
//  -d 20
// |c 40 |e 10
//  - g  80  
// |b 2 |f 4
//  _a1 .dp 8
#define pa 1
#define pb 2
#define pc 0x40
#define pd 0x20
#define pe 0x10
#define pf 4 
#define pg 0x80
#define pdp 8

//--------------
#define l0 pdp+pg
#define l1 255-pf-pe
#define l2 pdp+pc+pf
#define l3 pdp+pc+pb
#define l4 pdp+pa+pb+pd
#define l5 pdp+pb+pe
#define l6 pdp+pe
#define l7 pdp+pc+pg+pb+pa
#define l8 pdp
#define l9 pdp+pb
#define la pdp+pa
#define lb pdp+pd+pe
#define lc pdp+pg+pe+pf
#define ld pdp+pc+pd
#define le pdp+pe+pf
#define lf pdp+pe+pf+pa
#define l_ 255-pg
#define lnul 255
#define ll pdp+pg+pd+pf+pe
#define lp pdp+pa+pf
#define lt pdp+pd+pe+pf
#define lr pdp+pe+pf+pg+pa
#define ln pdp+pg+pa
#define lh pdp+pd+pe+pa
#define ly pdp+pb+pd
#define lu pdp+pg+pd
#define l__ pdp+pg+pb+pc+pe+pf
#define l___ l__-pg
#define l_1 255-pa
#define l_2 255-pa-pg
#define lj 255-(pe+pf+pa)
#define lwen 255-(pd+pe+pg+pb)
#define lall 0


#define lla 255-pa
#define llb 255-pb
#define llc 255-pc
#define lld 255-pd
#define lle 255-pe
#define llf 255-pf
#define llg 255-pg
#define lldp 255-pdp


//串行送出的位信息,目前是10位led显示。
unsigned char code un_dig[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb};
//串行送出的短信息。
unsigned char code un_disp[]={l0,l1,l2,l3,l4,l5,l6,l7,l8,l9,l_,lb,lc,l__,l___,lnul,lp,le,lj,ln,lf,la,lr,ld,lu,
ll,lh,lwen,lt,lla,llb,llc,lld,lle,llf,llg,lldp,lnul};




sbit d_clk=P0^0;  //移位时钟
sbit d_dat=P0^1;  //移位数据
sbit d_st=P0^2;   //移位锁定


unsigned char dig;   //位扫描计数器
unsigned char d[10];       //显示缓冲

//送出8位串行数据
void out_disp(unsigned char dd) {
 unsigned char i;
 for (i=0;i<8;i++) {
  if (dd&1) d_dat=1; else d_dat=0;
  d_clk=0;
  dd>>=1;
  d_clk=1;
 }
}
//控制小数点和闪烁,显示数据|0x040表示有小数点;显示数据|0x80表示闪烁。
void out_displ(unsigned char dd) {
 if (dd>=0x80) {
  if (s001>flash_time) {out_disp(0xff);return;}
 }
 dd&=0x7f;
 if (dd>=0x40) {
  dd=un_disp[dd&0x3f]^pdp;
 } else dd=un_disp[dd];
 out_disp(dd);
}





unsigned int s001; //闪烁时间参考
void int_t0(void) interrupt 1 {
 unsigned char dd;
 TL0=TL0+30;TH0=0xfb; //800
 time++;
 if ((++s001)>=800) s001=0;
 // 显示 
 if ((++dig)>4) dig=0;
 d_st=0;
 dd=d[dig+5];
 out_displ(dd);
 dd=d[dig];
 out_displ(dd);
 out_disp(un_dig[dig]);
 d_st=1;
}
void main(void) {
 unsigned char i;
 TMOD=0x1;
 TR0=ET0=1;
 EA=1;
 for (i=0;i<10;i++) d[i]=i; //display test
 while (1) {}
}

点击此处查看原文 >>

系统分类: 单片机   |    用户分类:    |    来源: 整理

评论(0) | 阅读(146)
发表于:2008-5-12 15:48:47
标签:无标签

0

老师是这么教我们进修单片机的

看到不少网友都在问怎样提高自己的能力,我在这里想谈一下我自己当年的学习过程。

我学的是计算机系的通讯工程专业,主要的发展方向是做计算机网络偏软件这一块,这点从我的毕业设计课题《宾馆客房管理系统》就能看出来。

因为带到通讯,所以学校里也教数电模电单片机什么的。其中《单片机和通讯接口》这门课我学到了很多东西,可以说,整个大学觉得最有收获的就是这门课。

我的老师上课很有特性,首先没有教材,理由是现在技术一日千里,等到教材出来就已经淘汰了。我们直接拿磁盘从老师的电脑上拷课件,然后打印。通常讲到单片机这门课,许多人学的时候都会觉得枯燥,因为很多都是一成不变的在讲8051,大段大段的源代码讲的大家昏昏欲睡,而我们的老师在整个单片机的教学过程中,从来没有提过8051这个东东,她可以说不是在上课,而是在介绍新技术,让大家都听得津津有味,大大提高了学生的积极性。

绝的是我们老师给我们布置的作业,总共有四次,作业从布置到上交有2周时间。第一次作业,拷给我们一篇IC资料,全英文的,打印了三十几页,然后“微笑地”对我们说,作业很“少”,请大家把其中介绍XX控制字的那一段翻译一下,很少,就两段。当时我们很开心,上课听故事,下课作业就只要翻译两段英文。回去以后发现被卖了,三十几页,哪两段是介绍那个控制字的???最后基本把三十几页啃完后才在最后找到。哭倒一片。

第二次作业和第三次作业是都做一个单片机产品设计,作业题目就是《具有XX功能的产品》,具体怎么做让我们上网去查,要我们写出实现的硬件架构和软件运算流程,所用到的IC必须注明网址,要随机抽查,看看我们是不是有“天才”会自己开发IC,并说有很多IC可以实现这个功能,如果你们每一个IC都一样,我就知道你们抄袭作业,后果自负,然后就夹了包跑了。我们什么都不懂,只能去校园bbs广发英雄贴,然后在高手指点下去电子进修网(www.studydz.com)、21IC找资料(www.21ic.com),或者用google大海捞针地翻,因为工作量大,最主要是看英文资料比较慢,作业又不能一样,然后就几个人合作,一个人专门找传感器方面的资料,一个人专门找数据处理IC方面的资料,一个专门找数据通信接口方面的IC,因为同样的产品,资料中的单词相同的比较多,可以提高速度,最后三个人合作了三款东东交差。

第四次是最BT的,让我至今记忆犹新,要做一个远程粮库温控系统,20个粮库,4*5的排列方式,每个粮库为20米边长的正方形,粮库间距10米,每个粮库要12个测温点,第一排粮库左边20米有一个房间监控所有粮库温度。数据要用10 Base T双绞线传输。要求我们设计粮库端数据采集器的温度采集、数模转换、数据前期处理的硬件架构和软件运算流程,并简短介绍相关IC;网络传输的硬件架构,因为粮库距离超过了10 Base T双绞线直接传输的有效距离;后台服务器要求我们写出所用服务器配置,操作系统,用什么数据库,数据库的关系图,用什么语言写后台处理程序,后台处理程序的运算流程,如果温度超标还要能自动发出警报,最后还要你说明,你为什么选用这个操作系统、数据库和后台程序语言,要和其他的比较一下,写出你的选用理由。这个作业算作50分成绩,同时和前面第二第三次作业一样,抄袭没门。同学抱怨BT,老师很轻松的口气说,你们大一学了C和C++,大二学了数电模电,大三学了DSP、数据库、系统集成、计算机原理和汇编,现在我只是让你们学会综合运用而已,前面没学好的,现在补补,不要出去说老师没有教。

工作到现在,觉得这个老师的四次作业,让我们非常受益,

1.我们不怕看英文资料,特别是IC方面的;

2.我们学会了怎样获取最新技术和资讯;

3.我们锻炼了团队合作,完成作业的时间限制就相当于现在抢占市场一样拖不得,怎样分工合作大家双赢才是最主要的;

4.就是我们已经养成了由面找点的习惯,每接触到一个电子产品,就会很快在大脑中出现这个产品的整个系统框架,然后逐一了解每个功能。而不是对每一个功能了解后,再去把他们联系起来。

5.毕业后感到在学校还学了不少东西.

点击此处查看原文 >>

系统分类: 自由话题   |    用户分类:    |    来源: 原创

评论(0) | 阅读(134)
发表于:2008-5-6 16:52:17
标签:无标签

0

车载电源系统开关电源的设计

目前世界各国正在研究48VDC汽车用电源系统,欧共体计划从2008年开始采用48VDC电源系统。如何在48VDC电源系统下兼容12VDC电子设备成为了一个课题。通过线性稳压电源实现48VDC/12VDC的转换会产生很大的功率损耗,缺点明显。

    本文提出了一种具有过载和短路保护的车载电源系统的开关电源设计方案。该方案采用单端反激式结构实现48VDC/12VDC的转换,输出电压稳定,波纹小,不间断,性能可靠且电源损耗小。

UC3842的保护电路设计

1 UC3842的典型应用

    UC3842是高性能的单端输出式电流控制型脉宽调制(PWM)芯片,其典型应用电路如图1所示。

图1 UC3842典型应用电路

2 过载保护原理分析

    当出现输出短路时,输出电压会下降,同时为UC3842供电的反馈绕组也会出现输出电压下降。当输入电压低于10V时,UC3842停止工作,开关管截止。短路现象消失后,电源重新启动,自动恢复正常工作。

    但由于在高频关断的时候会出现很高的尖峰电压,即使占空比很小的情况下,电路中7脚的输入电压也可能不会降到足够低,过载保护电路并不总能有效的响应所出现的过载情况,对整个系统的性能会产生不良的影响,存在着一定的安全隐患。

3 过流保护原理分析

    当电流取样端3脚上的电压值超过电流检测比较器负端的电压时,可以使脉宽调制锁存器输入复位信号,开关管于是被关闭。这样峰值检测电路限制输出的最大电流,起到了一定的保护作用。

    但是随着开关频率的升高,可能会出现开关电源处于连续模式下,也就是每个开关周期的初级电感电流是从一定的幅度开始增长,这样会产生分谐波振荡。这种不稳定性和稳压器的闭环特性无关,它是由固定频率和峰值电流取样同时工作引起的。图2说明了这样的现象。

图2 补偿前的电流波形

    如图2所示,在t0时刻,开关管被导通,这时初级线圈电流以斜率m1上升,该斜率是输入电压和电感的函数。在t1时刻,电流取样输入到达了电流检测比较器的门限,将导致开关管关闭,电流以斜率m2衰减,直到下一个开关周期的到来。如果有一个扰动加在电流检测比较器的门限电压上,产生了一个小的△I(如图2中虚线所示),就会发生不稳定的现象。在一个固定的振荡周期内,电流衰减时间减少,最小电流在开关管导通时刻(t 2)上升了△I+m 2/m 1。最小电流在下一个周期(t 3)减小到(△I+m 2/m 1)·(m 2/m 1)。

图3 开关电源原理框图

    每一个后续的开关周期内,该扰动都会与(m 2/m 1)相乘,在几个开关周期交替增加和减小初级线圈电流,也许若干个开关周期后电流会减小到零,使这个过程重新开始。如果m 2/m 1大于1,系统将不稳定。

4 保护电路的改进

    如图3所示,本设计针对UC3842典型应用电路的过流、过载保护电路做出以下改进。

    在反馈绕组的整流二极管回路串一个电阻,它和电容C2组成RC滤波网络,对开关管开通瞬间时的尖峰电压起到了滤除的作用。这样,由于尖峰电压的减少,当短路现象发生时,反馈绕组输出的电压会有效的降低,UC3842会停止工作直到短路现象解除。

    对过流保护电路进行斜率补偿。补偿斜率从RT、CT振荡器产生,加到电压反馈端,以提高误差放大器输出的斜率补偿。如图3所示,误差放大器的输出是具有m3斜率的斜坡,经过两个二极管后被电阻分压,然后输入到电流检测比较器的负端作为过流保护电路的控制电压。这样通过电流检测比较器和脉宽调制锁存器的配置保证了在任何一个振荡器周期中只有一个单脉冲出现在输出端。当出现过载或者输出电压取样丢失等异常工作情况,内部比较门限会被限定在1V,而不会出现电路失调的情况。

    图4显示了通过在控制电压上增加一个与脉宽调制时钟同步的人为的斜坡,可以在后续的开关周期有效的抑制由于△I扰动而引起的不稳定。该补偿斜坡的斜率(m 3)必须等于或者大于m 2/2才具有稳定性。通过m 3斜率的补偿,初级线圈电流会被控制电压所抑制,紧跟控制电压的幅度。

实验结果

    表1为输入电压在30~50V波动时,输出电压的波动情况,表2是负载电流在10~500mA变化时,输出电压的波动情况。由表1的数据可得到电压调整率S v<0.3%。由表2的数据可得到输出电阻R o<0.4Ω。

图4 斜率补偿后的电流波形

结论

     本文所提出的是一种结构简单、性能稳定的单端反激式结构开关电源设计方案。由于采用了“斜率补偿”的过流保护方式,性能更加稳定可靠,电压调整率低、输出电阻小、纹波低,功率损耗低,系统安全系数高,实现对车载电源系统的供电,对提高汽车整体性能大有益处。本设计已经成功应用于武汉理工大学智能信息系统研究所自行设计的车用直流无刷电机控制器的电源系统中。

    同时,本文所提出的DC/DC方案也适用于其他直流供电电源的应用设计。由于其性能稳定,纹波小,对采用微控制器的数字控制系统的供电电源设计有一定的借鉴意义。

点击此处查看原文 >>

系统分类: 电源技术   |    用户分类:    |    来源: 转贴

评论(0) | 阅读(212)
发表于:2008-5-6 16:50:15
标签:无标签

0

开关功率放大器的数字控制方案研究

   功率放大器在音频功放、发射系统、伺服系统、声纳探测、振动测试等很多领域都得到广泛的应用。传统的功率放大器采用线性放大电路,其效率较低(40%一60%),且体积大,故应用领域受到限制。为了解决传统功率放大器的缺点,开关功率放大器应运而生。

    目前国内外在高功率(5 kW以上)放大器系统设计中,为了满足功率要求普遍使用IGBT为主的全桥逆变拓扑。相比之下,以MOSFET为功率器件的高功率放大器系统的设计方案只占少数,而且其开发的控制方式不能够很好地解决系统模块间的均流控制,以及电容器中点电位控制等问题。故急需开发出以M0SFET为主的高功率放大器系统,以可靠地提高放大器系统的性能。本文提出了一种适合于高功率放大器系统模块化使用的逆变单元,并详细介绍了单元的拓扑和数字控制原理,实验结果证明了它的良好性能。

1 主电路拓扑
    传统的两电平全桥逆变拓扑应用于高功率放大器系统时,由于受到器件耐压的限制,难以使用频率较高的MOSFET,故系统性能无法有效提高。借鉴了已有的研究,我们采用了文献提出的五电平二极管中点钳位逆变拓扑(“Five—Level NPC Inverter”,以下简写为“FNI”)作为基础功率单元。图l所示为FNI电路。

    这种FNI结构的基础——NPC逆变拓扑,最早是由Nable-等人于1981年提出的。与传统两电平变换器相比,有以下优点:在大功率系统中,将功率器件直接串联使用而无须外加辅助电路;器件耐压极限降至直流侧电压的一半,使器件的选取变得灵活;输出波形中谐波成分相对于两电平变换器大为减少,减轻了滤波环节负担;负载上电压纹波减小,抑止了电磁干扰问题。

2 控制方式的比较与改进
2.l 已有控制方案的介绍 

    文献中Lau W H等开发的控制方案的优点在于提高模块输出的等效开关频率,抑止输出谐波;缺点在于系统的输入信号在经过PWM调制后,仍不能作为驱动信号使用,还须继续进行较繁琐的计算,故不能很好地使用于现有的数字信号处理芯片。该方案的详细分析请见文献。

2.2 改进的控制方案的原理
   
改进后的控制方式首先将文献中的载波频率提高一倍至2fc,并调整其偏置后,再进行PWM比较,如图2所示调制后的信号即为驱动信号。而且控制左右桥臂(Legl、Leg2)的载波相位相同,没有文献控制方式所要求的相位差,其好处在于避免系统在调整开关频率的同时还需要调整相位差,同时有利于系统调节直流侧电容的中点电位。

    比较图2和文献可以发现,开关管的驱动信号是相同的,所以输出波形也一定是相同的。改进后的控制策略能够便捷地应用到数字信号处理芯片中,同时保留文献控制方式的优点。例如在DSP(TMS320LF2407)芯片上PWM的调制可以通过专职的事件管理模块EVA及EVB直接完成,这样大大降低了控制方式的实现难度。


    改进后的控制策略也有不足之处,就是也没有提供解决直流侧电容的中点电位不平衡问题的方案。根据实验结果可以发现,由于电路元件的固有电阻特性不对称所造成的电容中点电位的静态误差不能被忽略。图9(f)为直流侧电源为400 V时中点电位的情况,可以发现有13.2 V的静态误差。

2.3 中点电位不平衡的危害与解决方案

    文献分析了系统直流侧中点电位漂移对输出THD的影响,如图3所示。图3中的k值:,代表了中点的失衡程度。在其他工业用途中,由于对输出波形畸变要求不高,中点的适当漂移是允许的。但是,在诸如功率放大器系统等对输出波形质量要求较高的应用中,中点不平衡可以成为输出畸变的重要原因之一。为了克服中点不平衡带来的输出波形质量下降,我们在改进的控制方式中加入中点平衡控制,程序流程图如图4所示,中点平衡控制方案框图如图5所示。

    中点平衡控制原理为,每个开关周期开始时首先对直流侧电容电压采样得到Kc1和Vc2(见图1),然后对Vc1和Vc2。的差值做PI运算。如果PI运算的结果为正,则和POSREF(系统能够容忍的Vc1超过Vc2的最大值)比较,如果发现比较器的输出为正,即意味着中点的漂移情况较为严重。进而检测参考信号Vs的幅值,如果Vs的幅值为负时(表现为当O和Vs的幅值通过比较器后,输出为正),则将载波频率提高为2fc;反之,如果电压差值PI运算的结果小于NECREF,且参考信号Vs幅值为正,则将载波频率提高为2fc;其他情况下,载波频率维持fc不变。图5中Switch模块的功能是,如果模块左面中间脚的输入信号为正,则模块的右面输出同模块左面最下脚输入信号一致;如果模块左面中间脚的输入信号为零,则模块的右面输出同模块左面最上脚输入信号一致。

    载波频率确定后.将Vs函数值加载至DSP芯片事件管理器模块中的比较单元,准备同载波进行PWM调制。加载完成后即进行中断复位。

    这种中点控制方式的本质是通过调节载波的频率来改变中点电流的流向。通过比较载波频率加倍前后中点电流流向的仿真,我们可以得知:如果以参考信号Ks的频率fs为参考,载波频率加倍前,中点电流ineu的流向每周期内交替变化(见图6),变换的频率为2fc;载波频率加倍后,中点电流ineu的流向每周期内只改变一次(见图7),即变换的频率为2fs。又因为后者中点电流的流向同参考信号Ks的幅值有关,所以在决定是否将载波频率加倍前,需要检测Vs幅值的正负。

点击看大图

    比较图8和图2可知,当载波频率加倍时,输出波形同原来一致。在DSF(TMS320LF2407)芯片中,载波频率只有在载波的幅值为O时才能改变;故载波无相位差可以使控制左右桥臂的载波频率同时变化而对输出波形无任何影响。

3 实验验证与结果
    本文设汁了一个单模块多电平电路的实验模型,其具体的电路参数及规格如下:
    输出满载功率 1 kW:
    输出频率2 kHz;
    直流侧输入电压400 V:
    基础开关频率 100 kHz。

    开关管驱动信号由DSP提供,驱动信号的PWM调制产生均在DSP内部完成。图9和图10分别为采用中点平衡控制前后的输出波形和中点电位比较。

    如图9(e)和图9(f)所示,采用中点平衡控制后,直流侧电容电压静态误差3.2V;采用中点平衡控制前,直流侧电容电压静态误差13.2V。

 


4 结语
    本文分析了开关功率放大器的拓扑和数字控制方案。在控制方案设计中,介绍了一种适合五电平二极管中点钳位逆变拓扑的PWM控制技术,它能提高输出的等效开关频率并降低直流侧中点电位的漂移,提高系统输出波形质量。
 
    文中的FNI功率模块可以采用交错并列的方式提高系统的总功率和输出波形的电平数,这样既达到了扩展系统功率等级的要求,又可以降低系统的输出畸变,详细分析请见文献。

    当然还有很多问题需要解决,比如多电平逆变电路的死区补偿问题,以及多模块问的均流问题等,这些都将作为下一步研究工作的重点。

点击此处查看原文 >>

系统分类: 电源技术   |    用户分类:    |    来源: 转贴

评论(0) | 阅读(196)
发表于:2008-4-27 20:31:14
标签:无标签

0

电子工程师必备的60个电子类网址

以下是一位高级电子工程师归纳总结的60个电子行业技术网站,电子工程师必备网站.

资料(PDF芯片)查询类网站:
IC/PDF查询     http://www.21icsearch.com
电子元器件查询 http://www.chinadz.com/
IC/PDF查询     http://www.ic37.com/
器件手册       http://www.datasheet5.com/

电子技术文章资源下载类
今日电子        http://www.epc.com.cn
中国电子资源网:http://www.ec66.com
中国电子进修网  http://www.studydz.com
电子设计技术网: http://www.ednchina.com
21IC            http://www.21IC.COM
电子工程专辑:  http://www.eetchina.com
国际电子商情:  http://www.esmchina.com
北极星电子技术网http://www.bjx.com.cn
大虾电子网      http://www.daxia.com/
ET电子技术网    http://www.et-dz.com
老古开发网      http://www.laogu.com
我爱研发网      http://www.52rd.com/
变频技术应用    http://www.chinabianpin.com/
网易电器        http://co.163.com/index_dq.htm
中国IT技术门户  http://develop.csai.cn/
无线电          http://www.radio.com.cn/
电子爱好者      http://www.etuni.com/
PCB信息网       http://web.pcbinfo.net/
中国PCB技术网   http://www.pcbtech.net/

电子论坛
电子论坛         http://www.ecbbs.com/
21IC社区         http://bbs.21ic.com
综合电子论坛     http://www.avrw.com/bbs/
电子产品世界论坛 http://forum.eepw.com.cn
中电网技术论坛   http://bbs.eccn.com/
中国电子进修论坛:http://bbs.studydz.com
光电论坛         http://www.oecr.com/bbs/
大虾电子论坛     http://www.daxia.com/bibis/
电子工程世界论坛 http://bbs.eeworld.com.cn
国际电子技术论坛 http://bbs.elec.cc/
伟纳单片机论坛   http://www.willar.com/forum.asp
中国PCB论坛      http://www.pcbbbs.com/index.htm
家电论坛         http://www.jd-bbs.com
广播论坛         http://bbs.leowood.net
EDA专业论坛      http://www.edacn.net/bbs/
研发BBS          http://www.52rd.com/bbs/


电子工程博客
中国电子工程博客 http://www.mcublog.com/blog
21IC博客         http://blog.21ic.com
工控博客         http://blog.gkong.com/
电源网博客       http://www.dianyuan.com/blog/
EDA博客          http://www.ednchina.com/blog
中国电子网博客   http://blog.electron.cn
电子人博客       http://www.dianziren.com
中国子设计网博客 http://www.cediy.com
中电网博客       http://blog.eccn.com/
进修博客         http://www.studydz.com/html/blog.html
工控博客         http://blog.gkong.com

电路图
电子电路图网:   http://www.cndzz.com
电路图           http://circuit.eeworld.com.cn/

单片机类
单片机平凡网     http://www.mcustudio.com
单片机           http://www.8951.com/
AVR单片机        http://www.avrvi.com/
周立功单片机     http://www.zlgmcu.com/home.asp
晶控电子         http://www.hificat.com/
PIC学习网:      http://www.pic16.com

嵌入式技术网     http://www.icembed.com/
DSP专业资讯网    http://dsp.blueidea.com/


希望对广大工程师朋友有用.这是本人总结了半天的心血.

建议发到你们自已的个人空间上,不至于遗失.

点击此处查看原文 >>

系统分类: 资源共享   |    用户分类:    |    来源: 原创

评论(1) | 阅读(127)
发表于:2008-4-25 21:51:58
标签:无标签

1

利用定时器1延时1秒的程序

;利用定时器精确延时1秒
                         ;循环点亮P1口接的八只发光二极管。  
                            ORG 0000H
                             AJMP START
                             ORG                       001BH                           ;T1中断入口地址
                             AJMP INT_T1
                             ORG                       0030H
START:
                             MOV                       SP,#60H
                             MOV                       TMOD,#10H                       ;置T1为方式1
                             MOV                       TL1,#00H                        ;延时50mS的时间常数
                             MOV                       TH1,#4CH
                             MOV                       R0,#00H
                             MOV                       R1,#20
                             SETB TR1                            ;启动定时器1,开始定时
                             SETB ET1
                             SETB EA                              ;开中断
                             SJMP $
INT_T1:                                      ;T1中断服务子程序
                             PUSH ACC                             ;保护现场
                             PUSH PSW
                             PUSH DPL
                             PUSH DPH
                             CLR                       TR1                             ;关闭定时器1,停止定时
                             MOV                       TL1,#00H                        ;延时50mS常数
                             MOV                       TH1,#4CH       
                             DJNZ R1,EXIT
                             MOV                       R1,#20                          ;延时一秒的常数
                             MOV                       DPTR,#DATAb ;置常数表基址
                             MOV                       A,R0                            ;置常数表偏移量
                             MOVC A,@A+DPTR                       ;读常数表
                             MOV                       P1,A                            ;送P1口显示
                             INC                       R0
                             ANL                       R0,#07H
EXIT:
                             SETB TR1                             ;启动定时器1,开始定时
                             POP                       DPH                             ;恢复现场
                             POP                       DPL
                             POP                       PSW
                             POP                       ACC
                             RETI
                                             ;发光二极管显示常数表
DATAb:                        DB 55H,0AAH,05H,0AH,50H,0A0H,0FFH,0H
                             END

点击此处查看原文 >>

系统分类: 单片机   |    用户分类:    |    来源: 原创

评论(0) | 阅读(161)
发表于:2008-4-25 21:51:09
标签:无标签

0

基于51单片机的带时间显示和紧急控制的交通灯的设计

;特别说明,本程序仅供单片机爱好者自己学习使用,

;不得做为其它商业用途

;此程序在硬件上调试通
;晶振频率为11.0592MHZ
;用定时器1延时,外部中断0接紧急控制
;R0为100MS延时常数,R2为状态延时常数
;8279控制数码管显示时间
;用P1口控制双色灯
;此程序写于2007-7-6,作者:徐学军
Z8279                 EQU                 0FF82H                     ;8279 状态/命令口地址
D8279                 EQU                 0FF80H                     ;8279 数据口地址
LEDMOD                EQU                 00H                        ;左边输入 八位字符显示
                                         ;外部译码键扫描方式,双键互锁
LEDFEQ                EQU                 33H                        ;扫描速率
LEDCLS                EQU                 0C1H                       ;清除显示 RAM
LEDWR0                EQU                 80H                        ;设定的将要写入的显示RAM地址
       
                      ORG                0000H
                      LJMP START
                      ORG                0003H                  ;INT 0 中断入口地址
                      LJMP INT_0
                      ORG                001BH                    ;T1中断入口地址
                      LJMP INT_T1
                      ORG                0040H
START:
                      MOV SP,#60H
                      MOV                TMOD,#10H                ;置T1为方式1                        
                      SETB EX0                    ;INT 0 中断有效
                      SETB IT0
                      SETB EA      
                      MOV                TL1,#00H                 ;延时50mS常数
                      MOV                TH1,#4cH
                      MOV                R0,#2                   ;延时100mS常数
                      SETB TR1                      ;启动T1
                      SETB ET1
                      setb                pt1                   ;必须设置定时器1的中断优先级高于外部中断0
                       LCALL INIT8279                   ;初始化8279


                      LCALL STATUS0 ;初始状态(都是红灯)
CIRCLE:
                      LCALL STATUS1 ;南北绿灯,东西红灯
                      LCALL STATUS2 ;南北绿灯闪转黄灯,东西红灯
                      LCALL STATUS3 ;南北红灯,东西绿灯
                      LCALL STATUS4 ;南北红灯,东西绿灯闪转黄灯
                      LJMP CIRCLE
INT_0:
                      PUSH PSW                    ;保护现场
                      PUSH 2
                      PUSH 90H  
                      clr                ex0      
                      MOV P1,#0FH                  ;南北,东西都亮红灯       
                      MOV R2,#100                 ;延时10秒
                      LCALL DELAY_DISPLAY
                      setb                ex0
                      POP 90H                     ;恢复现场       
                      POP 2
                      POP PSW
                      RETI
                INT_T1:
                      PUSH ACC
                      PUSH PSW
                      CLR                TR1
                      MOV                TL1,#00H                 ;延时 50mS 常数
                      MOV                TH1,#4CH        
                      SETB TR1
                      DJNZ R0,EXIT
                      MOV                R0,#2                   ;延时 100ms常数
                        DEC R2
                 EXIT:
                      POP                PSW
                      POP                ACC
                      RETI
      
STATUS0:                            ;南北红灯,东西红灯       
                      MOV P1,#0FH       
                      MOV R2,#10                  ;延时1秒
                      LCALL DELAY_DISPLAY
                      RET
STATUS1:                            ;南北绿灯,东西红灯        
                      MOV P1,#96H                  ;南北绿灯,东西红灯      
                      MOV R2,#200                 ;延时20秒
                      LCALL DELAY_DISPLAY
                      RET
STATUS2:                            ;南北绿灯闪转黄灯,东西红灯        
                      MOV R3,#03H                 ;绿灯闪3次
FLASH:
                      MOV P1,#9FH       
                      MOV R2,#03H
                      LCALL DELAY_DISPLAY
                      MOV P1,#96H       
                      MOV R2,#03H
                      LCALL DELAY_DISPLAY
                      DJNZ R3,FLASH
                      MOV P1,#06H                  ;南北黄灯,东西红灯       
                      MOV R2,#10                  ;延时1秒
                      LCALL DELAY_DISPLAY
                      RET
STATUS3:                            ;南北红灯,东西绿灯       
                      MOV P1,#69H       
                      MOV R2,#200                 ;延时20秒
                      LCALL DELAY_DISPLAY
                      RET
STATUS4:                            ;南北红灯,东西绿灯闪转黄灯       
                      MOV R3,#03H                 ;绿灯闪3次
FLASH1:
                      MOV P1,#6FH        
                      MOV R2,#03H
                      LCALL DELAY_DISPLAY
                      MOV P1,#69H       
                      MOV R2,#03H
                      LCALL DELAY_DISPLAY
                      DJNZ R3,FLASH1
                      MOV P1,#09H                 ;南北红灯,东西黄灯       
                      MOV R2,#10                 ;延时1秒
                      LCALL DELAY_DISPLAY
                      NOP
                      RET
                   INIT8279:                                ;8279初始化子程序
                      PUSH                DPH                        ;保存现场
                      PUSH                DPL
                      PUSH                ACC
                      LCALL DELAY                      ;延时
                      MOV                 DPTR ,#Z8279
                      MOV                 A,#LEDMOD                  ;置8279工作方式
                      MOVX                @DPTR,A
                      MOV                 A,#LEDFEQ                  ;置键盘扫描速率
                      MOVX                @DPTR,A
                      MOV                 A,#LEDCLS                  ;清除 LED 显示
                      MOVX                @DPTR,A
                      LCALL DELAY                      ;延时
                      POP                 ACC                        ;恢复现场
                      POP                 DPL
                      POP                 DPH
                      RET
                                         ;显示字符子程序
                                         ;输入: R4,位置 R5,值
DISLED:
                      PUSH                DPH                        ;保存现场
                      PUSH                DPL
                      PUSH                ACC
                      MOV                 A,#LEDWR0                  ;置显示起始地址
                      ADD                 A,R4                       ;加位置偏移量
                      MOV                 DPTR,#Z8279
                      MOVX                @DPTR,A                    ;设定显示位置
                      MOV                 DPTR,#LEDSEG ;置显示常数表起始位置
                      MOV                 A,R5
                      MOVC                A,@A+DPTR                  ;查表
                      MOV                 DPTR,#D8279
                      MOVX                @DPTR,A                    ;显示数据
                      POP                 ACC                        ;恢复现场
                      POP                 DPL
                      POP                 DPH
                      RET
DELAY:                                  ;延时子程序
                      PUSH                0                          ;保存现场
                      PUSH                1
                      MOV                 0,#0H
DELAY1:
                      MOV                 1,#0H
                      DJNZ                1,$
                      DJNZ                0,DELAY1
                      POP                 1                          ;恢复现场
                      POP                 0
                      RET
   
DELAY_DISPLAY:                              ;延时和显示时间子程序       
                      PUSH 1
                      PUSH 0
                      push acc
loopwait: mov b,#10
                      mov a,2
                      div ab
                      mov b,#10