㈠ Java或者C/C++怎么用回溯法解决最小长度电路板排列问题
以java为例,希望能够帮到你。
电路板排列问题
问题描述
将n块电路板以最佳排列方式插入带有n个插槽的机箱中。n块电路板的不同排列方式对应于不同的电路板插入方案。设B={1, 2, …, n}是n块电路板的集合,L={N1, N2, …, Nm}是连接这n块电路板中若干电路板的m个连接块。Ni是B的一个子集,且Ni中的电路板用同一条导线连接在一起。设x表示n块电路板的一个排列,即在机箱的第i个插槽中插入的电路板编号是x[i]。x所确定的电路板排列Density (x)密度定义为跨越相邻电路板插槽的最大连线数。
例:如图,设n=8, m=5,给定n块电路板及其m个连接块:B={1, 2, 3, 4, 5, 6, 7, 8},N1={4, 5, 6},N2={2, 3},N3={1, 3},N4={3, 6},N5={7, 8};其中两个可能的排列如图所示,则该电路板排列的密度分别是2,3。
㈡ 请高手给我个高保真音频放大器设计的电路图,还有资料,详情看补充
LM4702高保真音频放大器的设计原理
1.静音功能
LM4702的静音功能由流入静音引脚的电流流量来控制。如果流入静音引脚的电流小于1mA,芯片处于静音状态。这可以通过短路到地或悬空静音引脚来实现。如果流入静音引脚的电流在1~2mA,芯片将处于播放模式。这可以通过电阻(Rm)将电源连接到静音引脚(Vmute)来实现。流入静音引脚的电流可以由公式
Imute=(Vmute-2.9)/Rm 来计算。例如,如果5V的电源通过1.4kΩ的电阻连接到静音引脚上,那么静音电流将为.5mA,在指定范围中。同样可以使用Vcc为静音脚供电,此时Rm需要相应地重新计算。目前不推荐使用流入静音引脚的电流大于2mA,因为这样LM4702可能会受到损坏。
强烈推荐在静音与播放模式之间迅速转换这个功能,它可通过拨动开关实现,拨动开关一边连接到静音引脚,另一边通过电阻连接到地或电源上。缓慢增加静音电流可能会导致直流电压产生在LM4702的输出上,致使喇叭损坏。
2.热保护
LM4702有完整的热保护系统来防止系统长时间工作所带来的热压。当芯片内部的温度超过150℃的时候,LM4702自动关闭,当芯片内部的温度降低到145℃时又开始工作,如果温度继续升高到150℃,芯片又继续关闭。因此,如果发生短暂故障,芯片允许发热到一定的高温,但如果是持续的故障,就有可能导致它工作在一个145℃ ~150℃的热开合工况下。这样一来,通过循环极大地减轻了芯片的热压力,从而大大改善了持续故障情况下的可靠性。因为晶圆温度与散热器的温度直接相关,所以散热器必须经过选择,以保证在正常状态下过热开关不会触发。如使用成本和空间所允许的最好散热器,则可以保证任何半导体设备长时间稳定地工作。
3.功耗和散热
在播放模式时,它的工作电流是常量,与输入信号幅度无关。因此,功耗对于给定的电压是一定的,可以用公式PDMAX=Icc×(Vcc-Vee)来表示。对PDMAX的一个快速计算方法是:在电流约为25mA的时候,用整个电压与它相乘即可(电流在工作范围内会有微小的变化)。
对高功率放大器的散热器进行选择完全是为了将晶圆的温度保持在一定的水平上,以保证在一定的水平上热保护系统不被触发。晶圆与外界空气间的热阻θJA(Junction to Ambient)与环境相关,它由3个热阻组成,分别为θJC(晶圆到封装外壳)、θCS(封装外壳到散热片)、θSA(散热片到环境)。θJC在LM4702中为0.8℃/W。使用耐热合金后,θCS大约为0.2 ℃/W。因为热流(功耗)类似于电流流动,所以热阻就像电阻,温度的降低就像电压下降。LM4702的功耗也可表示为
PDMAX=(TJMAx-TAMB)/θJA
当TJMAx=150℃时,TAMB是系统的环境温度,且θJA=θJC +θCS+ θSA散热片的最大热阻θSA为
θSA=[(TJMAX-TAMB)-PDMA×(θJC+θCS)]/PDMAX
再次说明,θSA的数值与系统设计师对放大器的要求有关。如果放大器的环境温度高于25℃,那么在其他条件不变的情况下散热器的热阻需要更小一些。
4.外部器件的恰当选择
为了满足应用的设计要求,应对外部器件进行恰当的选择。下面就来谈谈外围器件数值的选择将影响增益和低频响应。每个非反向放大器的增益都是由电阻Rf和Ri决定的,如图2所示。放大器的增益可表示为
Av=1+Rf/Ri
为了获得最好的信噪比表现,可以使用更低的电阻值。Ri通常采用1kΩ,然后再根据设计的放大倍数来确定Rf的值。对于LM4702,放大倍数必须不小于26dB,如果小于26dB将是不稳定的。Ri与Ci串联(如图2所示)构成了一个高通滤波器,低频响应就由这两个元件来决定。这个-3dB的频率点可以由下式来得到
fi=1/(2πRiCi)
如果一个输入耦合电容被用来阻断来自输入的直流,那里将会产生一个高通滤波器(CIN与RIN的结合)。当使用输入耦合电容时,必须用RIN来设置放大器输入端的直流偏置点。CIN与RIN结合后产生的-3dB频率响应可以由下式来表示
fIN=1/(2πRINCIN)
当输入端悬空时,在输出端有可能会观测到RIN值的大幅变化。减小RIN的值或输入平稳就可以使这种变动消失。在RIN减小的时候,CIN应该相应加大以保证-3dB的频率响应不变。
5.用作双极性输出时避免热失控
当对LM4702使用双极性晶体管作输出级的时候(如图2所示),设计者必须注意热失控的问题。热失控是由于对Vbe(晶体管的固有性质)的温度依赖所造成的。当温度上升时,Vbe下降。实际上,电流流过双极性晶体管的时候加热了晶体管,但又降低了Vbe,这又反过来增加了电流强度,并且开始循环这个过程。如果系统没有恰当的设计,这种正反馈机制将会毁坏输出级的双极性晶体管。第一种推荐方法是在双极性输出晶体管上使用散热器来避免热失控,这将使晶体管的温度降低。
第二种推荐方法是使用发射极负反馈电阻(Emitter DegenerationResistor,图2中的Re1、Re2、Re3、Re4)。当电流增加的时候,发射极负反馈电阻的电压也在增加,这样便可减小基极与发射极之间的电压。这种机制可以帮助限制电流,并中和热失控。
第三种推荐的方法是使用一种“Vbe乘法器”来钳位双极性输出级,如图2所示。这种Vbe乘法器包括了一个双极性晶体管(Qmult,如图2所示)和两个电阻,一个从基极到集电极(图2中的Rb2和Rb4),另一个从基极到发射极(图2中的Rb1和Rb3)。从集电极到发射极的电压(同时也是输出级的偏置电压)Vbias=Vbe(1+Rb2/Rb1),这也就是为什么这个循环叫做Vbe乘法器的原因。当Vbe乘法器晶体管Qmult像双极性输出晶体管一样连接散热器时,它的温度将与输出晶体管的温度同步。它的Vbe也与温度有关,所以当输出晶体管使它变热时,它将吸收更多的电流。这将限制基极进入输出晶体管的电流,从而中和热失控。
表1为LM4702 C工作电压在±75V 和±50V时的电气特性。表2为LM4702A、B工作电压在±100V时的电气特性。
表1 LM4702C的电气特性
(Imute=1.5mA,除非特别说明,否则TA=25℃)
㈢ 如何设计除频器
为了正确理解、使用与设计频率合成器,应对它提出合理的技术指标。频率合成器的使用场合不同,对它的要求也不尽相同。大体上讲,有如下几项主要技术指标:频率范围、频率间隔、准确度,频率稳定、成本、功能、频率转换时间等等。
频率范围:
频率范围是指频率合成器输出的最低频率f(min)和最高频率f(max)之间的变化范围。
频率间隔(频率分辨率)
频率合成器 输出是不连续的。两个相邻频率之间的最小间隔,就是频率间隔。频率间隔又称为频率分辨率。不同用途的频率合成器,对频率间隔的要求是不相同的。对短波单边带同信来说,现在多取频率间隔为100Hz,有的甚至取10Hz,1Hz乃至0.1Hz。这次设计的频率合成器,我们用的是10KHz。
设计要求:
A基本要求
输出频率范围:4.00M———4.99M
输出幅度大于100mv(在75欧负载上)
频率间隔:10KHz
频率稳定度不劣于0.00001
显示输出频率值
有失锁指示
集成芯片不能直接焊接(用插座)
b发挥
频率可按10KHZ、50KHZ、500KHZ步进
频率可实现多种模式搜索
进一步提高频率稳定度,不劣于0.000001(晶振工作在50度)
存储多个可预置的频率
C提供的主要芯片:
MC145106、MV1648P
设计思路:
锁相环的基本原理:
是利用频率误差去消除频率误差,所以当电路达到平衡状态之后,必然会有剩余频率误差存在,即频率误差不可能为零。这是它固有的缺点。锁相环也是一种消除频率误差为目的的反馈控制电路。但它的基本原理是利用相位去消除频率误差,所以当电路达到平衡状态时,虽然有剩余相位误差存在,但频率误差可以降到零,从而实现无频率误差的频率跟踪和相位跟踪。
工作原理:
锁相环是一个相位负反馈控制系统。它基本上由鉴相器(PD)、环路滤波器(LF)和电压控制震荡器(VCO)三个基本不见组成。组成的框图如下图(1)所示
Ur(t) Ud(t) Uc(t) Uo(t)
参考信号 输出信号
图(1) 锁相环基本构成
在这次的项目中我们运用MC145106,因为MC145106中含有鉴相器,并且依据要求,本实验需要频率间隔为10KHZ,而MC145106可以提供频率间隔为5KHZ和10KHZ。
MC145106的内部结构如下图(2)所示
图(2)MC145106内部结构
正如上图所示,OSCin为晶振的输入端,本项目中用的晶振为10.24M,Fin为VCO中输出的频率。P0~P8是一个N分频器,将Fin输入的信号经过分频输入到鉴相器与鉴相器的频率处理,经过几次的循环调整,得到VCO想要输出的频率。当VCO的频率被锁定时,LD 则呈现高电平,未被锁定时,LD呈现低电平
另一个芯片就是MC1648P该芯片就是用于VCO中的.
从图(1)就可以知道,信号进入VCO 后再从VCO进入MC145106中 ,经过分频则可以得到所需要的波形,不过频率范围是0.01M到5.11M,但是如果跟晶振相混频便可以得到10.25M到15.35M的频率.
㈣ 求dac0832与51单片机接口电路图,
我做的滤波器
#include<reg51.h>
#include"math.h"
#defineN25
#definePI3.1415926
sbitda_wr1=P3^6;
sbitda_cs=P2^7;
voidInputWave();
floatFIR();
voidda0832();
floatfHn[N]={0.0,0.0,0.001,-0.002,0.01,-0.09,
-0.018,0.049,-0.02,0.11,0.28,0.64,0.28,
-0.11,-0.02,0.049,-0.018,-0.009,0.01,
-0.002,-0.002,0.001,0.0,0.0
};
floatfXn[N]={0.0};
floatfInput,fOutput;
floatfSignal1,fSignal2;
floatfStepSignal1,fStepSignal2;
floatf2PI;
inti;
floatFIN[256],FOUT[256];
intnIn,nOut;
main(void)
{
nIn=0;nOut=0;
f2PI=2*PI;
fSignal1=0.0;
fSignal2=PI*0.1;
fStepSignal1=2*PI/30;
fStepSignal2=2*PI*1.4;
while(1)
{
//fInput=InputWave();
InputWave();
//FIN[nIn]=fInput;
//nIn++;nIn%=256;
fOutput=FIR();
FOUT[nOut]=fOutput;
nOut++;
if(nOut>=256)
{nOut=0;da0832();
}
}
}
/*floatInputWave()
{
for(i=N-1;i>0;i--)fXn[i]=fXn[i-1];
fXn[0]=sin(fSignal1)+cos(fSignal2)/6.0;
fSignal1+=fStepSignal1;
if(fSignal1>=f2PI)fSignal1-=f2PI;
fSignal2+=fStepSignal2;
if(fSignal2>=f2PI) fSignal2-=f2PI;
return(fXn[0]);
} */
voidInputWave()
{
inti;
for(i=0;i<=15000;i++)
{
fXn[i]=(sin(PI*2*i/N*15000)+1)*5;
}
}
floatFIR()
{
floatfSum;
fSum=0;
for(i=0;i<N;i++)fSum+=(fXn[i]*fHn[i]);
return(fSum);
}
voidda0832()
{
unsignedchari;
da_cs=0;//da转换输出使能标志置位
da_wr1=0;//输入寄存器的官写选通信号,表示单片机要传送数据了
for (i=0;i<255;i++)
P0=FOUT[i];
da_wr1=1;//数据传送完成,使能锁存
da_cs=1;
}
㈤ EDA课程设计,用VHDL编程做出租车计费器
课程设计内容与要求
1,用开关按键表示脉冲,每个脉冲代表100米,10个脉冲1公里,每公里1.4元,能同步显示里程和费用;
2,低于2公里5元计费,高于2公里总费用=起步费用+(里程-2公里)*里程单价+
等候时间*等后单价;
3,等候时间大于2分钟,按每分钟1.3元计费;
4,可以设定起步价和里程单价。
一、设计原理与技术方法:
包括:电路工作原理分析与原理图、元器件选择与参数计算、电路调试方法与结果说明;
软件设计说明书与流程图、软件源程序代码、软件调试方法与运行结果说明。
根据设计要求,系统的输入信号clk,计价开始信号start,等待信号stop,里程脉冲信号fin。系统的输出信号有:总费用数C0—c3,行驶距离k0—k1,等待时间m0—m1等。系统有两个脉冲输入信号clk_750k,fin,其中clk_750k将根据设计要求分频成14hz,15hz和1hz分别作为公里计费和超时计费的脉冲。两个控制输入开关start,stop;控制过程为:start作为计费开始的开关,当start为高电平时,系统开始根据输入的情况计费。当有乘客上车并开始行驶时,fin脉冲到来,进行行驶计费,此时的stop需要置为0;如需停车等待,就把stop变为高电平,
并去除fin输入脉冲,进行等待计费;当乘客下车且不等待时,直接将start置为0,系统停止工作;价格开始归为起步价5.0元。
整个设计由分频模块,计量模块,计费模块,控制模块和显示模块五个部分组成。
其中计量模块是整个系统实现里程计数和时间计数的重要部分;控制模块是实现不同计费方式的选择部分,根据所设计的使能端选择是根据里程计费还是根据等待时间计费,同时设计通过分频模块产生不同频率的脉冲信号来实现系统的计费。计量模块采用1hz的驱动信号,计费模块采用14hz,13hz的驱动信号;计量模块每计数一次,计量模块就实现14次或者13次计数,即为实现计时的1.3元/min,计程时的1.4元/km的收费。组成框图如下所示:
1.百进制模块:
实现百米脉冲的驱动信号,元件框图如图3所示:
图3 百进制模块框图
源程序如下:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity jin is
port(start,clk2: in std_logic; --秒脉冲
a: out std_logic_vector(3 downto 0));
end jin;
architecture rt1 of jin is
signal count_1:std_logic_vector(3 downto 0);
begin
a<=count_1;
process(start,clk2)
begin
if(start='0')then
count_1<="0000";
elsif(clk2'event and clk2='1')then
if(count_1="0111")then
count_1<="0000";
else
count_1<=count_1+'1';
end if;
end if;
end process;
end rt1
2.计费模块
; 实现里程和等候时间的计费并输出到显示,元件框图4如下:
图4 计费模块框图
源程序如下:
Library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;
entity jifei is
port(clk2:in std_logic; --计费驱动信号
start:in std_logic; --计费开始信号
c0,c1,c2,c3:buffer std_logic_vector(3 downto 0));
end jifei;
architecture rt1 of jifei is
begin
process(clk2,start)
begin
if start='0'then c3<="0000";c2<="0000";c1<="0101";c0<="0000"; --起步价5元
elsif clk2'event and clk2='1'then
if c0="1001" then c0<="0000";
if c1="1001" then c1<="0000";
if c2="1001" then c2<="0000";
if c3="1001" then c3<="0000";
else c3<=c3+1;
end if;
else c2<=c2+1;
end if;
else c1<=c1+1;
end if;
else c0<=c0+1;
end if;
end if;
end process;
end rt1;
3.公里模块
实现历程的计数和输出计费脉冲,元件框图5如下:
图5 公里模块框图
源程序如下:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity gongli is
port(clk1,start: in std_logic; --百米脉冲
k1,k2,k3,k4: out std_logic_vector(3 downto 0); --里程显示
temp2 : out std_logic);
end gongli;
architecture rt1 of gongli is
signal count_1: std_logic_vector(3 downto 0);
signal count_2: std_logic_vector(3 downto 0);
signal count_3: std_logic_vector(3 downto 0);
signal count_4: std_logic_vector(3 downto 0);
begin
k1<=count_1;
k2<=count_2;
k3<=count_3;
k4<=count_4;
process(start,clk1)
begin
if(start='0')then
count_1<="0000";
count_2<="0000";
count_3<="0000";
count_4<="0000"; ---公里清零
elsif(clk1'event and clk1='1')then
if(count_1="1001")then --公里计数器
count_1<="0000";count_2<=count_2+1;temp2<='1';
if(count_2="1001")then
count_2<="0000";count_3<=count_3+'1';
if(count_3="1001")then
count_3<="0000";count_4<=count_4+'1';
end if;
end if;
else
count_1<=count_1+'1';temp2<='0';
end if;
end if;
end process;
end rt1;
4.输出模块
实现所有数据的输出,元件框图6如下:
图6 输出模块框图
源程序如下:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity shuchu is
port(y: in std_logic_vector(3 downto 0);
e: out std_logic_vector(6 downto 0));
end shuchu;
architecture rt1of shuchu is
begin
process
begin
case y is
when"0000"=>e<="0111111";
when"0001"=>e<="0000110";
when"0010"=>e<="1011011";
when"0011"=>e<="1001111";
when"0100"=>e<="1100110";
when"0101"=>e<="1101101";
when"0110"=>e<="1111101";
when"0111"=>e<="0000111";
when"1000"=>e<="1111111";
when"1001"=>e<="1100111";
when others=>e<="0000000";
end case;
end process;
end rt1;
5.显示模块
实现所有数据的显示,元件框图7如下:
图7 显示模块框图
源程序如下:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity xianshi is
port(start: in std_logic;
a:in std_logic_vector(3 downto 0); --选择信号
c1,c2,c3,c4,out1,out2,out3,out4:in std_logic_vector(3 downto 0); --里程显示,时间显示输入
y:out std_logic_vector(3 downto 0)); --里程显示,时间显示输出
end xianshi;
architecture rt1 of xianshi is
begin
process
begin
if(start='0')then
y<="0000";
else case a is
when "0000"=> y<=c1 ;
when "0001"=> y<=c2 ;
when "0010"=> y<=c3 ;
when "0011"=> y<=c4 ;
when "0100"=> y<=out1 ;
when "0101"=> y<=out2;
when "0110"=> y<=out3 ;
when "0111"=> y<=out4;
when others =>y<= "0000";
end case;
end if;
end process;
end rt1;
6.dian模块
图8 dian模块框图
源程序如下:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity dian is
port(a: in std_logic_vector(3 downto 0);
e: out std_logic);
end dian;
architecture rt1 of dian is
begin
process
begin
case a is
when "0001"=>e<='1';
when "0101"=>e<='1';
when others=>e<='0';
end case;
end process;
end rt1;
三、中各个模块设计分析
系统总体顶层框图如下:
系统总体顶层框图
程序最终功能实现波形仿真
1. 分频模块
由于实验箱上没有14hz和13hz的整数倍时钟信号,因此采用频率较大的750khz进行分频,以近似得到14hz,13hz和1hz的时钟频率。通过以上三种不同频率的脉冲信号实行出租车行驶,等待两种情况下的不同计费。模块元件如下:
分频模块框图
源程序如下:
Library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;
entity fenpin is
port(clk_750k:in std_logic; --系统时钟
clk_14:buffer std_logic; --14分频
clk_13:buffer std_logic; --13分频
clk_1 : buffer std_logic); --1分频
end fenpin ;
architecture rt1 of fenpin is
signal q_14:integer range 0 to 53570; --定义中间信号量
signal q_13:integer range 0 to 57691;
signal q_1:integer range 0 to 749999;
begin
process(clk_750k)
begin
If(clk_750k' event and clk_750k='1')then
If q_14=53570 then q_14<=0;clk_14<=not clk_14;
else q_14<=q_14+1;
end if; --得14hz频率信号
If q_13=57691 then q_13<=0;clk_13<=not clk_13;
else q_13<=q_13+1;
end if; --得13hz频率信号
If q_1=749999 then q_1<=0;clk_1<=not clk_1;
else q_1<=q_1+1;
end if; --得1hz频率信号
end if;
end process;
end rt1;
2. 计量模块
计量模块主要完成计时和计程功能。
计时部分:计算乘客的等待累积时间,当等待时间大于2min时,本模块中en1使能信号变为1;当clk1每来一个上升沿,计时器就自增1,计时器的量程为59min,满量程后自动归零。
计程部分:计算乘客所行驶的公里数,当行驶里程大于2km时,本模块中en0使能信号变为1;当clk每来一个上升沿,计程器就自增1,计程器的量程为99km,满量程后自动归零。
元件框图为:
计量模块框图
计量模块仿真波形为:
源程序如下:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity jiliang is
port(start:in std_logic; --计费开始信号
fin:in std_logic; --里程脉冲信号
stop:in std_logic; --行驶中途等待信号
clk1:in std_logic; --驱动脉冲
en1,en0:buffer std_logic; --计费单价使能信号
k1,k0:buffer std_logic_vector(3 downto 0); --行驶公里计数
m1,m0:buffer std_logic_vector(3 downto 0)); --等待时间计数
end jiliang;
architecture rt2 of jiliang is
signal w:integer range 0 to 59; --计时范围0~59
begin
process(clk1)
begin
if(clk1'event and clk1='1')then
if start='0' then
w<=0;en1<='0';en0<='0';m1<="0000";
m0<="0000";k1<="0000";k0<="0000";
elsif stop='1' then --计时开始信号
if w=59 then
w<=0;
else w<=w+1;
end if;
if m0="1001" then
m0<="0000";
if m1="0101" then
m1<="0000";
else m1<=m1+1;
end if;
else m0<=m0+1;
end if;
if stop='1' then en0<='0';
if m1&m0>"00000001" then en1<='1'; --若等待时间大于2min则en1置1
else en1<='0';
end if;
end if;
elsif fin='1' then --里程计数开始
if k0="1001" then k0<="0000";
if k1="1001" then k1<="0000"; --计程范围0~99
else k1<=k1+1;
end if;
else k0<=k0+1;
end if;
if stop='0' then
en1<='0';
if k1&k0>"00000001" then
en0<='1'; --若行使里程大于2km,则en0置1
else en0<='0';
end if;
end if;
end if;
end if;
end process;
end rt2;
3. 控制模块
本模块主要是通过计量模块产生的两个不同的输入使能信号en0,en1,对每个分频模块输出的14hz,13hz的脉冲进行选择输出的过程;本模块实现了双脉冲的二选一;最终目的为了计费模块中对行驶过程中不同的时段进行计价。
模块元件如下:
控制模块框图
控制模块仿真波形为:
源程序如下:
Library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;
entity kong is
port(en0,en1:in std_logic; --使能选择信号
clk_in1:in std_logic; --14分频输入信号
clk_in2:in std_logic; --13分频输入信号
clk_out:out std_logic); --输出信号
end kong;
architecture rt3 of kong is
begin
process(en0,en1)
begin
if en0='1' then --实现二选一功能
clk_out<=clk_in1;
elsif en1='1' then
clk_out<=clk_in2;
end if;
end process;
end rt3;
4.计费模块
当计费信号start一直处于高电平即计费状态时,本模块根据控制模块选择出的信号从而对不同的单价时段进行计费。即行程在2km内,而且等待累计时间小于2min则为起步价5元;2km外以每公里1.4.元计费,等待累积时间超过2min则按每分钟1.3元计费。c0,c1,c2,c3分别表示费用的显示。
模块元件为:
计费模块框图
计费模块仿真波形为:
源程序如下:
Library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;
entity jifei is
port(clk2:in std_logic; --计费驱动信号
start:in std_logic; --计费开始信号
c0,c1,c2,c3:buffer std_logic_vector(3 downto 0));
end jifei;
architecture rt4 of jifei is
begin
process(clk2,start)
begin
if start='0'then c3<="0000";c2<="0000";c1<="0101";c0<="0000"; --起步价5元
elsif clk2'event and clk2='1'then
if c0="1001" then c0<="0000";
if c1="1001" then c1<="0000";
if c2="1001" then c2<="0000";
if c3="1001" then c3<="0000"; --计价范围0~999.9
else c3<=c3+1;
end if;
else c2<=c2+1;
end if;
else c1<=c1+1;
end if;
else c0<=c0+1;
end if;
end if;
end process;
end rt4;
5.显示模块
显示模块完成计价,计时和计程数据显示。计费数据送入显示模块进行译码,最后送至以百元,十元,元,角为单位对应的数码管上显示。计时数据送入显示模块进行译码,最后送至以分为单位对应的数码管上显示。计程数据送入显示模块进行译码,最后送至以km为单位的数码管上显示。
模块元件为:
显示模块框图
源程序如下:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all; --定义库包
entity xianshi is --定义实体
port(
clk_scan:in std_logic; --扫描时钟信号端口设置
c3,c2,c1,c0:in std_logic_vector(3 downto 0); --总费用输入端口
k0,k1:in std_logic_vector(3 downto 0); --里程输入端口
m0,m1:in std_logic_vector(3 downto 0); --等待时间输入端口
sel:out std_logic_vector(2 downto 0); --控制数码管位选信号的扫描信号输出端口
led:out std_logic_vector(6 downto 0); --数码管的控制端口
led_dp:out std_logic --数码管的小数点输出端口
);
end xianshi;
architecture rt5 of xianshi is
signal an:std_logic_vector(6 downto 0); --数码显示管中间变量
signal shuju:std_logic_vector(3 downto 0); --选择输入端的中间变量
signal cnt:std_logic_vector(2 downto 0); --控制数码管的中间变量
signal xiaodian:std_logic; --小数点的中间变量
begin
process(clk_scan) --开始进程
begin
if clk_scan'event and clk_scan='1' then
cnt<=cnt+1; --每有一个扫描信号上升沿实现加1扫描
end if;
end process; --结束进程
process(cnt) --开始进程(选择扫描显示数码管)
begin
case cnt is --扫描时给每个数码管赋值
when "000"=>shuju<=c0;
when "001"=>shuju<=c1;
when "010"=>shuju<=c2;
when "011"=>shuju<=c3;
when "100"=>shuju<=k0;
when "101"=>shuju<=k1;
when "110"=>shuju<=m0;
when "111"=>shuju<=m1;
when others=> null;
end case;
if (cnt="001" or cnt="110")
then xiaodian<='1'; --在里程和总费用的个位处显示小数点
else xiaodian<='0';
end if;
end process; --结束进程
process(shuju) --开始进程(译码显示)
begin
case shuju is
when "0000"=>an<="0111111"; --0
when "0001"=>an<="0000110"; --1
when "0010"=>an<="1011011"; --2
when "0011"=>an<="1001111"; --3
when "0100"=>an<="1100110"; --4
when "0101"=>an<="1101101"; --5
when "0110"=>an<="1111101"; --6
when "0111"=>an<="0000111"; --7
when "1000"=>an<="1111111"; --8
when "1001"=>an<="1101111"; --9
when others=>null;
end case;
end process;
sel<=cnt;
led<=an;
led_dp<=xiaodian;
end rt5;
二、课程设计工作记录:
包括:设计步骤与时间安排、调试步骤与时间安排、课题完成结果说明
2.课题完成结果说明:
此计费器能实现起步价是5元;实现实验要求的1公里计费一次单价,行驶公里大于2km时每公里按1.4元计费并能显示里程和总共的费用。当行驶了6公里,等待了4分钟时,费用显示为15.8元。与计算公式总费用=起步费用+(里程-2公里)*里程单价+等候时间*等后单价;即15.8=5+(6-2)*1.4+4*1.3。实验结果与理论结果完全一致,实验设计成功。
㈥ 锁相环频率合成器工作原理求解释!~~~~~~~~
本设计中锁相环选用摩托罗拉公司生产的锁相环频率合成器频率合成器
频率合成器是给微波扫频信号提供一定分辨力的频率参考信号,并对微波信号输出频率进行逐点锁定,以得到高准确度和稳定度的扫频输出信号。 [全文]
专用芯片MC145152,其内部组成方框图如图1 所示,其工作原理如下所述。
本设计中锁相环选用摩托罗拉公司生产的锁相环频率合成器频率合成器
频率合成器是给微波扫频信号提供一定分辨力的频率参考信号,并对微波信号输出频率进行逐点锁定,以得到高准确度和稳定度的扫频输出信号。 [全文]
专用芯片MC145152,其内部组成方框图如图1 所示,其工作原理如下所述。
图1 MCl45152内部组成方框图
参考晶振晶振
晶振:即所谓石英晶体谐振器和石英晶体时钟振荡器的统称。不过由于在消费类电子产品中,谐振器用的更多,所以一般的概念中把晶振就等同于谐振器理解了。后者就是通常所指钟振。 [全文]
产生的参考频率(12.8 MHz)输入OSCin,再经过内部R分频器(12 BIT÷RCOUNTER)分频产生信号fo给鉴相器(PHASE DETECTOR)作为基准频率。而VC0的检测频率经耦合输入fin(FIN),再经过一个反相器输入双模分频器,经过Ntotal=NP+A(P=fd/fin由于此电路中气=fin,所以P=1)分频后输出频率fout。fout送到鉴相器(PHASE DETECTOR)与基准频率fo进行比较,当fout与标准频率存在误差时,鉴相器就会输出一处理信睁ΦR、ΦV,这个信号经过衰减滤波后送给电压比较器比较器比较器是一种得到广泛使用的电路元件。实际上也是增益非常高的运算放大器,可以放大输入端很小的差分信号,并驱动输出端切换到两个输出状态中的一个。以至于无法稳定在中间放大区,再不跳到低电平,再不跳到高电平。 [全文]
LM258。LM258将产生一个误差纠正电压作为压控振荡器振荡器振荡器是收发设备的基础电路,它的作用是产生一定频率的交流信号,是一种能量转换装置——将直流电能转换为具有一定频率的交流电能。 [全文]
的uc,从而改变VC0内变容二极管二极管二极管又叫半导体二极管、晶体二极管,是最常用的基本电子元件之一。二极管只往一个方向传送电流,由p型半导体和n型半导体形成的p-n结构成,在其界面处两侧形成空间电荷层,并建有自建电场。当不存在外加电压时,由于p-n 结两边载流子浓度差引起的扩散电流和自建电场引起的漂移电流相等而处于电平衡状态。 [全文]
的电容值,继而改变vco的频率,直到鉴相器的两路输入信号频率相等时,比较器才里高阻态。此时环路处于锁定(LOCk)状态,直到N发生变化,进入下一个频率锁定状态。如果频率超过vco ff:变化范围时,锁相环路失锁,LEDLEDLED(Light Emitting Diode)即发光二极管,是一种固态的半导体器件,它可以直接把电转化为光。LED 的心脏是一个半导体的晶片,当电流通过导线作用于这个晶片的时候,电子和空穴就会被推向量子阱,在量子阱内电子跟空穴复合,然后就会以光子的形式发出能量。能完成数十种不同的工作,并且在各种设备中都能找到它们的身影。例如它们可以组成电子钟表 表盘上的数字,从遥控器 传输信息,为手表表盘照明并在设备开启时向您发出提示。 如果将它们集结在一起,可以组成超大电视屏幕上的图像,或是用于点亮交通信号灯。 [全文]
指示灯亮。当设定再次进入那个范圃时,系统叉自动进入锁定状态。
图1 中,R分频器的分频系数由RA, ̄~RA0接高低电平(二进制编码)决定,设掇不同的R值可实现不同频率的步进(STEPS),其对应关系如表1 所示,N计数器计数器
计数器是一种具有多种测量功能、多种用途的电子计数器。它可以测量频率、周期、时间间隔、频率比、累加计数、 计时等;配上相应的插件,还可以测量相位、电压等。一般我们把凡具有测频和测周两种以上功能的计数器都归类为通用计数器。 [全文]
(N)的系数由N9~NO确定,用二进制表示,比如N9~NO为0101010110,则N=342。同样,A渚数器的系数由A5~A0确定,比如A5~A0为100101时,A=/1131。此时,Ntotal=NP+A=379.
参考晶振晶振
晶振:即所谓石英晶体谐振器和石英晶体时钟振荡器的统称。不过由于在消费类电子产品中,谐振器用的更多,所以一般的概念中把晶振就等同于谐振器理解了。后者就是通常所指钟振。 [全文]
产生的参考频率(12.8 MHz)输入OSCin,再经过内部R分频器(12 BIT÷RCOUNTER)分频产生信号fo给鉴相器(PHASE DETECTOR)作为基准频率。而VC0的检测频率经耦合输入fin(FIN),再经过一个反相器输入双模分频器,经过Ntotal=NP+A(P=fd/fin由于此电路中气=fin,所以P=1)分频后输出频率fout。fout送到鉴相器(PHASE DETECTOR)与基准频率fo进行比较,当fout与标准频率存在误差时,鉴相器就会输出一处理信睁ΦR、ΦV,这个信号经过衰减滤波后送给电压比较器比较器比较器是一种得到广泛使用的电路元件。实际上也是增益非常高的运算放大器,可以放大输入端很小的差分信号,并驱动输出端切换到两个输出状态中的一个。以至于无法稳定在中间放大区,再不跳到低电平,再不跳到高电平。 [全文]
LM258。LM258将产生一个误差纠正电压作为压控振荡器振荡器振荡器是收发设备的基础电路,它的作用是产生一定频率的交流信号,是一种能量转换装置——将直流电能转换为具有一定频率的交流电能。 [全文]
的uc,从而改变VC0内变容二极管二极管二极管又叫半导体二极管、晶体二极管,是最常用的基本电子元件之一。二极管只往一个方向传送电流,由p型半导体和n型半导体形成的p-n结构成,在其界面处两侧形成空间电荷层,并建有自建电场。当不存在外加电压时,由于p-n 结两边载流子浓度差引起的扩散电流和自建电场引起的漂移电流相等而处于电平衡状态。 [全文]
的电容值,继而改变vco的频率,直到鉴相器的两路输入信号频率相等时,比较器才里高阻态。此时环路处于锁定(LOCk)状态,直到N发生变化,进入下一个频率锁定状态。如果频率超过vco ff:变化范围时,锁相环路失锁,LEDLEDLED(Light Emitting Diode)即发光二极管,是一种固态的半导体器件,它可以直接把电转化为光。LED 的心脏是一个半导体的晶片,当电流通过导线作用于这个晶片的时候,电子和空穴就会被推向量子阱,在量子阱内电子跟空穴复合,然后就会以光子的形式发出能量。能完成数十种不同的工作,并且在各种设备中都能找到它们的身影。例如它们可以组成电子钟表 表盘上的数字,从遥控器 传输信息,为手表表盘照明并在设备开启时向您发出提示。 如果将它们集结在一起,可以组成超大电视屏幕上的图像,或是用于点亮交通信号灯。 [全文]
指示灯亮。当设定再次进入那个范圃时,系统叉自动进入锁定状态。
R分频器的分频系数由RA, ̄~RA0接高低电平(二进制编码)决定,设掇不同的R值可实现不同频率的步进(STEPS),其对应关系如表1 所示,N计数器计数器
计数器是一种具有多种测量功能、多种用途的电子计数器。它可以测量频率、周期、时间间隔、频率比、累加计数、 计时等;配上相应的插件,还可以测量相位、电压等。一般我们把凡具有测频和测周两种以上功能的计数器都归类为通用计数器。 [全文]
(N)的系数由N9~NO确定,用二进制表示,比如N9~NO为0101010110,则N=342。同样,A渚数器的系数由A5~A0确定,比如A5~A0为100101时,A=/1131。此时,Ntotal=NP+A=379.
㈦ dc/dc的工作原理与电路图。
电感降压式DC/DC变换器:电路原理框图如图所示。
图中,VIN为输入电压,VOUT为输出电压,L为储版能电感,VD为续权流二极体,C为滤波电容,R1、R2为分压电阻,经分压後产生误差回馈信号FB,用以稳定输出电压和调输出电压的高低。电源开关管V既可采用N沟道绝缘栅场效应管(MOSFET),也可采用P沟道场效应管,当然也可用NPN型电晶体或PNP型电晶体,实际应用中,一般采用P沟道场效应管居多。
降压式DC/DC变换器的基本工作原理是:V开关管在控制电路的控制下工作在开关状态。开关管导通时,FIN电压经开关管S、D极、储能电感L和电容C构成回路,充电电流不但在C两端建立直流电压,而且在储能电感L上产生左正、右负的电动势;开关管截止期间,由於储能电感L中的电流不能突变,所以,L通过自感产生右正、左负的脉冲电压。於是,L右端正的电压→滤波电容C一续流二极体VD→L左端构成放电回路,放电电流继续在C两端建立直流电压,C两端获得的直流电压为负载供电。因此,降压式DC/DC变换器产生的输出电压不但波纹小,雨且开关管的反峰电压低。
㈧ 功放电路图问题 这个电路图我还看不懂。 那个高手指点指点,谢谢!
**下图是抄BTL方式,上图的优点是元件成本较低,下图的优点是具有更大的输出功率(理论上是上图的2倍)并保证音质不变坏,但是元件成本升高,因为上图一块IC就可以完成两个声道的功率放大,而下图要两块(一块IC一个声道)。
**在音量上,有变化,下图和上图比较,最大音量最大的是下图,因为下图的输出功率比上图大。
**输入的最大电压VCCmax=11V;该图电压VCC typ=9v;电压范围VCC RNG=3V--10V;7脚是正极,FIN是位于IC两边的大的引脚,接负极(单电源)。
**元件清单请参照这个图,图上都有标注的,电阻的单位是欧,电容的单位是UF。
**上图的音频接入是5脚和8脚,地线自己接个到地就行。下图只有8脚(一个声道),地线自己接个到地。
**另外说下,谐波失真较大,此IC一般般。。一般电视机里常见。。功率是2.3W,下图接近4.6W,但实际上没有那么多。。变压器供电的话50W绰绰有余
㈨ 出租车计价器设计
实验任务及要求
1.能实现计费功能,计费标准为:按行驶里程收费,起步费为10.00元,并在车行3公里后再按1.6元/公里,车暂停时,停车一分钟之后开始加价,每分钟增加2.5元。
2. 实现预置功能:能预置起步费、每公里收费、车行加费里程。
3. 实现模拟功能:能模拟汽车启动、停止、暂停等状态。
4. 设计动态扫描电路:将车费及暂停时间显示出来。
5. 用VHDL语言设计符合上述功能要求的出租车计费器,并用层次化设计方法设计该电路。
6. 综合仿真验证,并通过有关波形确认电路设计是否正确。
7. 完成电路全部设计后,通过GW48系统实验箱下载验证设计的正确性。
二、实验原理
图1出租车计价器流程图
图2系统结构图
接口部分定义如下:
输入:clk_240,系统时钟,频率为240Hz;
Start,启动信号,当start=1时,汽车启动,开始计价; 当start=0时,清零;
Stop,暂时计时信号,当stop-1时,中途暂停,开始计时;当stop=0时,再次出发;
Fin,汽车车速脉冲信号,是一个与随着车速变化而变化的脉冲信号。
输出:cha2,cha1,cha0,分别为价钱的十位,个位和角位;
Km1,km0,分别为行驶公里数的十位,个位;
Min0,暂时分钟数输出。
接口部分源程序如下:
port ( clk_240 :in std_logic; --频率为240Hz的时钟
start :in std_logic; --计价使能信号
stop:in std_logic; --等待信号
fin:in std_logic; --公里脉冲信号
cha2,cha1,cha0:out std_logic_vector(3 downto 0); --费用数据
km1,km0:out std_logic_vector(3 downto 0); --公里数据
min0: out std_logic_vector(3 downto 0)); --等待时间
计价部分原理如下:
起步价10元,3公里内10元,超出3公里部分,每公里1.6元,车暂停时,2分钟内不加价,超出2分钟部分,每分钟2.5元;
计费部分源程序如下:
feipin:process(clk_240,start)
begin
if clk_240'event and clk_240='1' then
if start='0' then q_15<=0;q_16<=0;f_15<='0';f_16<='0';f_1<='0';f<='0';
else
if q_15=15 then q_15<=0;f_15<='1'; --此IF语句得到频率为15Hz的信号
else q_15<=q_15+1;f_15<='0';
end if;
if q_16=14 then q_16<=0;f_16<='1'; --此IF语句得到频率为16Hz的信号
else q_16<=q_16+1;f_16<='0';
end if;
if q_1=239 then q_1<=0;f_1<='1'; --此IF语句得到频率为1Hz的信号
else q_1<=q_1+1;f_1<='0';
end if;
if en1='1' then f<=f_15; --此IF语句得到计费脉冲f
elsif en0='1' then f<=f_16;
else f<='0';
end if;
end if;
end if;
end process;
process(f_1)
begin
if f_1'event and f_1='1' then
if start='0' then
w<=0;en1<='0';en0<='0';m1<="000";m0<="0000";k1<="0000";k0<="0000";
elsif stop='1' then
if w=59 then w<=0; --此IF语句完成等待计时
if m0="1001" then m0<="0000"; --此IF语句完成分计数
if m1<="101" then m1<="000";
else m1<=m1+1;
end if;
else m0<=m0+1;
end if;
if m1&m0>"0000001"then en1<='1'; --此IF语句得到en1使能信号
else en1<='0';
end if;
else w<=w+1;en1<='0';
end if;
elsif fin='1' then
if k0="1001" then k0<="0000"; --此IF语句完成公里脉冲计数
if k1="1001" then k1<="0000";
else k1<=k1+1;
end if;
else k0<=k0+1;
end if;
if k1&k0>"00000010" then en0<='1'; --此IF语句得到en0使能信号
else en0<='0';
end if;
else en1<='0';en0<='0';
end if;
cha3<=c3;cha2<=c2;cha1<=c1;cha0<=c0; --费用数据输出
km1<=k1;km0<=k0;min1<='0'&m1;min0<=m0; --公里数据、分钟数据输出
end if;
end process;
process(f,start)
begin
if start='0' then c3<="0000";c2<="0001";c1<="0000";c0<="0000";
elsif f'event and f='1' then
if c0="1001" then c0<="0000"; --此IF语句完成对费用的计数
if c1="1001" then c1<="0000";
if c2="1001" then c2<="0000";
if c3<="1001" then c3<="0000";
else c3<=c3+1;
end if;
else c2<=c2+1;
end if;
else c1<=c1+1;
end if;
else c0<=c0+1;
end if;
end if;
end process;
end behav;
㈩ 用分立元件做一个高端CPU,理论上可行吗
用分立元件做一个高端CPU,这个逆科技潮流的想法,理论上是完全可行的,但实际操作,你必须得是土豪,而且是钻石级别的土豪才Hold住,至于原因,后面会详细说。最终的效果可用四个字概括:酸爽无比!先预告,图多量大,需要仔细看。
折腾这么多,耗资数以亿计,结果这块CPU的算力和几千块的芯片一样,这是何苦呢?