㈠ 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的算力和幾千塊的晶元一樣,這是何苦呢?