正弦波發生器如何實現?

文章插圖
具體回答如圖:正弦波發生電路能產生正弦波輸出,它是在放大電路的基礎上加上正反饋而形成的,它是各類波形發生器和信號源的核心電路 。為了產生正弦波,必須在放大電路里加入正反饋 , 因此放大電路和正反饋網絡是振蕩電路的最主要部分 。但是,這樣兩部分構成的振蕩器一般得不到正弦波,這是由于很難控制正反饋的量 。如果正反饋量大,則增幅,輸出幅度越來越大,最后由三極管的非線性限幅,這必然產生非線性失真 。反之,如果正反饋量不足,則減幅 , 可能停振,為此振蕩電路要有一個穩幅電路 。擴展資料:產生正弦波的條件與負反饋放大電路產生自激的條件十分類似 。只不過負反饋放大電路中是由于信號頻率達到了通頻帶的兩端,產生了足夠的附加相移 , 從而使負反饋變成了正反饋 。在振蕩電路中加的就是正反?。?振蕩建立后只是一種頻率的信號,無所謂附加相移 。振蕩器在剛剛起振時,為了克服電路中的損耗,需要正反饋強一些 , 即要求 。既然,起振后就要產生增幅振蕩,需要靠三極管大信號運用時的非線性特性去限制幅度的增加,這樣電路必然產生失真 。這就要靠選頻網絡的作用,選出失真波形的基波分量作為輸出信號 , 以獲得正弦波輸出 。也可以在反饋網絡中加入非線性穩幅環節,用以調節放大電路的增益,從而達到穩幅的目的 。參考資料來源:百度百科--正弦波發生電路
RC正弦波信號發生器你好 。一.信號發生器電路的組成有四部分:1.放大電路(圖中集成運放) 。2.正反?。–1,R1,C3) 。3.選頻網絡(C1,R1,C2,R2).4.負反?。≧6,R8,VD1,VD2)
二:放大倍數A=1+(R8//rd+R6)/R7,其中rd是二極管導通內阻 。(兩個二極管正反相對放置是為了輸出電壓正負半周各自工作,截止時可認為內阻無窮大,故公式中不出現 。)反饋系數F=1/3,那么平衡時AF=1,按照二極管正向特性曲線,電流電壓越大,rd越小 , 那么就會使A=3.達到正弦波振蕩的平衡條件 , 達到穩幅的效果 。
三:用示波器測量信號發生器的輸出信號的頻率 , 一端接Vo端,一端接地 。
四:由振蕩頻率fo=1/(2πRC) , R=R1 , C=C1,可算出f0=159Hz,用交流毫伏表測量輸出信號的有效值較準確 。
五:集成運放組成放大電路,放大輸入信號 。運放是一個開環放大倍數極大的放大器 , 兩個輸入端“+”、“-”之間只要有微小的電壓差異,就會使輸出端截止或者飽和 。而輸入端的輸入電阻非常大,可以認為不需要輸出電流 。
正弦波發生器原理?前級是個典型的有源二階帶通濾波器電路 , 后級是個比較器電路,然后通過R1支路構成大環路正反饋 , 從而構成個方波(后級)正弦波振蕩器輸出電路(前級);
比較器輸出方波信號,經過帶通濾波器后得到基波信號輸出,基波就是正弦波了
51單片機信號發生器的正弦波程序首先,我要聲明一點,單片機的浮點數處理能力非常弱的,你這個程序,基礎可以用數組查表的方法來做,當然,你這么錯不是不行,初學者可以用來做實驗,但是高手可不會這么錯 。
言歸正傳 , 我來給你講解一下這個do里面的思路 。我們分步來看,先看sin(x),從 -3.1415---+3.1415
sin(x)的數值是多少?答案是0到-1再到0再到1再到0,這么個過程 , 這是高中的數學知識,如果你不明白,我就沒有辦法了 。
搞明白了sin(x)的變化范圍,我們就不難明白,如果不加以限制的,直接用 255*sin(x),那么,這個結果就會出現負數 , 變化范圍是 0----(-255)---(0)----(255)---0,因為你需要把這個數值賦值給P1口,那么,你知道如果把一個負數賦值給 P1口是什么結果嗎?因為負數在單片機里是用補碼表示的,所以,把一個負數表示成無符號的數,它是很大的,所以P1口就會亂 。
所以,為了避免負數,就要把sin(x)里產生的負數抵消去,怎么抵消?我們知道,sin(x)最小值是 -1 , 所以,只要 (1 + sin(x)),那么 , 這個結果就永遠不可能小于0,這個的變化范圍是
1----0----1----2----1
最大的數值是2 , 最小的是0
然后乘以 255再給P1口送去,我們又知道,P1口最大只能到 255,而你的式子(1 + sin(x))
最大是2,(1 + sin(x))*255最大得到的是 510,那為了不失真,所以,要把(1 + sin(x))*255再除以一個2,就得到你上面的結果了 。
如果你是用的DA轉換器,通過示波器,你可以看到一個如下公式的波形:
f = 2.5*sin(2*3.1415926*f) + 2.5
這樣的函數波形 。
求一個正弦波發生電路,越簡單越好具體的參數取值如圖所示,這是一個最簡單的正弦波發生電路 。基本文氏電橋反饋型振蕩電路如圖所示,它由放大器即運算放大器與具有頻率選擇性的反饋網絡構成 , 施加正反饋就產生振蕩 。運算放大器施加負反饋就為放大電路的工作方式,施加正反饋就為振蕩電路的工作方式 。圖中電路既應用了經由R3和R4的負反饋,也應用了經由串并聯RC網絡的正反饋 。電路的特性行為取決于是正反饋還是負反饋占優勢 。這個電路有兩部分組成,即方框里的放大電路和由R1、R2、C1和C2組成的選頻網絡 。正弦波發生電路:不需要外加激勵信號,電路就能產生輸出信號的電路稱為信號發生電路或波形振蕩器 。其中能產生正弦波輸出信號的電路稱為正弦波發生電路或正弦振蕩器 。
有沒有人用FPGA產生正弦波?這樣的verilog代碼應該怎樣寫?具體的步驟是什么呀?最簡單常用的方法是查找表法 , 例化一塊ram,存儲正弦波的幅度值 , 只要循環地依次將這些值讀出來就可以了 。要求不高的情況下可以這么用 , 因為這樣會有周期性的誤差,使頻譜產生雜散 。
用verilog在fpga上實現: 10k~100khz正弦波,三角波,鋸齒波波形發生器(基于d樓上太犀利了 , 哈哈
你的第一二三條可以合成一條,直接在modesim里面寫代碼,testbench,然后仿真,當然也可以直接用quartus II里面的仿真器仿真 , 如果信號較少的話也很方便的 。
四五六七條可以合成一條,直接在quartus II里面的全編譯選項即可
編譯完成后直接下載調試了 。
還有既然開發FPGA,肯定要選擇芯片的型號,具體的型號要看你有哪種FPGA的實體了,芯片上都有標示的 。
4PSK的信號發生器的Verilog程序先看看采用查表法產生正弦波信號的描述(書上就有,比較簡單),然后弄清楚這種方法的缺陷 , 再看一下DDS產生正弦波信號的描述 , 對比一下就清楚了 。至于MATLAB , 不見得是必須的,只是在存放正弦波信號的ROM比較大的時候,用MTLAB產生波形數據比較方便而已 。當只需要了解原理的時候,波形精度要求不高,做個簡單的表 , 手工寫寫就可以 。
急求課程設計 。基于FPGA的正弦波,三角波 , 方波的信號發生器verilog或者VHDL源代碼基于FPGA的正弦波,三角波,方波的信號發生器verilog或者VHDL源代碼了解分析的
方波正弦波函數發生器??/,幫你做什么,自己動一腦,這東西不難的,學會有用的 。自己想辦法吧 。
設計一個函數信號發生器~要求輸出波形為正弦波,方波,三角波,頻率1KHZ,幅值1v 。1、正弦波發生器2、方波發生器3、積分器方波輸出接積分器可得到三角波 。下圖左側為方波發生器,右側為積分器
方波信號發生器 正弦波逆變器工作原理1、方波信號發生器:由集成運放構成的方波發生器,包括遲滯比較電路和RC積分電路兩大部分 。因為矩形波電壓只有兩種狀態 , 不是高電平 , 就是低電平,所以電壓比較器是它的重要組成部分;因為產生振蕩,就是要求輸出的兩種狀態自動地相互轉換,所以電路中必須引入反?。灰蛭涑鱟刺Π匆歡ǖ氖奔浼涓艚惶姹浠? ,即產生周期性變化,所以電路中要有延遲環節來確定每種狀態維持的時間 , 即RC 積分電路 。
2、正弦波逆變器工作原理:
直流電壓分兩路 一給前級IC供電產生一個KHZ級的控制信號,一路到前級功率管 。由控制信號推動功率管不斷開關使高頻變壓器初級產生低壓的高頻交流電(此時的交流電雖然電壓低,但是頻率相當高,目的就是為了能讓變壓器后級產生一個高的電壓,前級的頻率和后級輸出的電壓成正比 , 當然也要在功率管所能承受的頻率范圍) 通過高頻變壓器輸出高頻交流電再經過快速恢復二極管全橋整流輸出一個高頻的幾百V直流電到后級功率管 ,然后再由后級IC產生50HZ左右的控制信號來控制后級的功率管工作然后輸出220V50HZ的交流電 。當然一個完整的逆變器還需要一些保護電路比如過載保護 溫度保護 高低輸入電壓保護 和濾波電路 高頻電路里的濾波也相當重要 應為高頻容易產生一些干擾和寄生耦合 所以需要濾波電路來濾除這些因素的影響來增加電路的穩定性 。
正弦波信號發生器與方波信號發生器中運算放大器工作情況有什么不同正弦波信號發生器中的運算放大器工作在線性狀態中,方波信號發生器中的運算放大器工作在連續的正向飽和狀態與負向飽和狀態中 。
用運算放大器設計一個方波、正弦波、三角波的信號發生器震蕩用文氏橋電路,可以產生正弦波 , 再通過比較器(還是運放)這里是過零比較,也可以是上下門限對稱的施密特觸發器,得到方波,(上下門限不對稱講生成矩形波),在對方波積分(電容和運放組成積分器)可得到三角波(之前如果生成矩形波的話 , 這一步將得到鋸齒波) 。運放選型上要注意運放帶寬問題,需要考慮信號發生器所需要發生的頻率
正弦信號發生器你這個是用數字電路實現打得吧 , 用延時器或者單片機編程可以實現
正弦信號發生器的設計我們去年好像做過 , , 有點難度,現在手頭沒有詳細的資料了 , 見諒
調節用電位器可以實現,但是有不小的干擾和誤差
程控我記得好像可以用ad603實現,但是那個芯片有dsp和貼片兩種封裝,前者更貴跟好用些,很容易燒毀 。
同學有用657搭建的 , 純硬件,最好得用貼片 。
建議你去看看前兩年的電賽題吧,會有幫助,但是注意不少論文不一定是他們真的做出來的,只是論文而已 。。。。。
正弦波信號發生器范圍~20kHz而步進調整的步長為5HZ , 這很難實現,如果范圍達200kHz,步長還要任意設置,這更不可能了 。
正弦信號發生器的主要性能指標有哪些?各自具有什么含義?正弦信號發生器的主要性能指標及各自具有的含義如下:(1)頻率范圍指信號發生器所產生的信號頻率范圍 。(6)輸出阻抗信號發生器的輸出阻抗視其類型不同而異 。低頻信號發生器電壓輸出端的輸出阻抗一般600Ω (或1kΩ),功率輸出端依輸出匹配變壓器的設計而定,通常50Ω、75Ω、150Ω、600Ω和5kΩ等檔 。高頻信號發生器一般僅有50Ω或75Ω檔 。(7)輸出電平輸出電平指的是輸出信號幅度的有效范圍 。(8)調制特性當調制信號由信號發生器內部產生時,稱為內調制 , 當調制信號由外部加到信號發生器進行調制時,稱為外調制 。
單片機C語言版正弦波信號發生器怎么做?#include
//unsigned char TIME0_H=0xec,TIME0_L=0x78;//定時器0的初值設置;全局變量
#include
#include
void main()
{
TMOD=0X01;
TH0=0xff;
TL0=0xd9;
IT0=1;//設置中斷觸發方式,下降沿
EA=1;
EX0=1;
ET0=1;
IP=0X01;//鍵盤中斷級別高
TR0=1;
while(1)
{
// square();
;
}
}
#ifndef __0832_h__
#define __0832_h__
//#define INPUT XBYTE[0xbfff]//即cs 與xfer 輪流低電平 。
//#define DACRXBYTE[0x7fff]//單通道輸出,單緩沖就行了 。
unsigned char i,sqar_num=128; //最大值100 , 默認值50
unsigned char cho=0;//0:正弦波 。1:方波 。2:三角波 。3:鋸齒波 。
unsigned char num=0;
unsigned char TIME0_H=0xff,TIME0_L=0xd9;//定時器0的初值設置;全局變量.對應正弦波,鋸齒波50HZ
sbit chg=P1^0;//三角波100Hz.
sbit freq_u=P1^1;
sbit freq_d=P1^2;
sbit duty_u=P1^3;
sbit duty_d=P1^4;
sbit cs=P3^7;
bit flag=0;
unsigned int FREQ=50;//初始化頻率,50HZ
//調節部分——頻率
void freq_ud(void)
{
unsigned int temp;
if(freq_d==0)
{FREQ--;}
else if(freq_u==0)
{ FREQ++;}
if(cho==1|cho==3) //鋸齒波256次中斷一周期 , 特殊處理下 。否則他的頻率是100(+\-)n*2Hz.
{
temp=0xffff-3906/FREQ;//方波,三角波默認為100hz,切換后頻率也為50HZ 65336-10^6/(256*FREQ)
TIME0_H=temp/256;
TIME0_L=temp%256;
}
else if(cho==0|cho==3){//正弦波 三角波默認周期50hz65536-10^6//(512*FREQ)
temp=0xffff-1953/FREQ;
TIME0_H=temp/256;
TIME0_L=temp%256;
}
}
//調節部分——方波的占空比
void duty_ud(void)//方波也采用512次中斷構成一個周期 。
{
if(duty_d==0&sqar_num>0)
sqar_num--;
else if(duty_u==0&sqar_num<255)
sqar_num++;
}
//波形發生函數
void sint(void)
{
if(!flag)
{
cs=0;P2=sin_num[num++];cs=1;
if(num==0){num=255;flag=1;}
}
else if(flag)
{
cs=0;P2=sin_num[num--];cs=1;
if(num==255){num=0;flag=0;}
}
}
void square(void)
{
if(i++<sqar_num){cs=0;P2=0XFF;cs=1;}
else{cs=0;P2=0X00;cs=1;}
}
void triangle(void)
{
cs=0;P2=num++;cs=1;
}
void stw(void)
{
if(~flag)
{
cs=0;P2=num++;cs=1;
if(num==0){num=255;flag=1;}
}
else if(flag)
{
cs=0;P2=num--;cs=1;
if(num==255){num=1;flag=0;}
}
}
//按鍵中斷處理程序 。
void it0() interrupt 0
{
if(chg==0) { if(++cho==4) {cho=0;num=0;} }//num=0;所有數據從新開始,保證波形的完整性
else if(freq_u==0|freq_d==0)
{freq_ud();}
else if (cho==1&(duty_d==0|duty_u==0))
{duty_ud();}
else ;
}
//定時器中斷處理程序 。
void intt0() interrupt 1
{
//TH0=0x00;TL0=0x00;sinx();
switch(cho)
{
case 0:{TH0=TIME0_H;TL0=TIME0_L;sint();break;}//正弦波//每半周期256取樣 。
case 1:{TH0=TIME0_H;TL0=TIME0_L;square();break;} //方波//為了提高方波的最高頻率,只有犧牲占空比的最小可調值 。分100份 每次1% 。
case 2:{TH0=TIME0_H;TL0=TIME0_L;triangle();break;} //三角波
case 3:{TH0=TIME0_H;TL0=TIME0_L;stw();break;} //鋸齒波
default: ;
}
}
#endif
//正弦表;每半個周期256個取值,最大限度保證波形不失真 。
//各個值通過MATLAB算出,并四設五如取整 。具體程序如下
#ifndef __sinx_h__
#define __sinx_h__
unsigned char code sin_num[]={
0,0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2,
2, 3, 3, 4, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9,
10, 10, 11, 12, 12, 13, 14, 15, 15, 16, 17, 18, 18, 19, 20, 21,
22, 23, 24, 25, 25, 26, 27, 28, 29, 30, 31, 32, 34, 35, 36, 37,
38, 39, 40, 41, 42, 44, 45, 46, 47, 49, 50, 51, 52, 54, 55, 56,
57, 59, 60, 61, 63, 64, 66, 67, 68, 70, 71, 73, 74, 75, 77, 78,
80, 81, 83, 84, 86, 87, 89, 90, 92, 93, 95, 96, 98, 99, 101,102,
104, 106, 107, 109, 110, 112,113, 115, 116, 118, 120, 121, 123, 124, 126, 128,
129, 131,132, 134, 135,137,139, 140, 142, 143, 145, 146, 148,149, 151, 153,
154, 156, 157, 159, 160, 162, 163, 165,166, 168, 169, 171, 172, 174, 175, 177,
178, 180, 181,182, 184, 185, 187, 188, 189, 191, 192, 194, 195, 196, 198, 199,
200, 201, 203, 204, 205, 206, 208, 209, 210, 211, 213, 214, 215, 216, 217, 218,
219, 220, 221, 223, 224, 225, 226, 227, 228, 229, 230, 230, 231, 232, 233, 234,
235, 236, 237, 237, 238, 239, 240, 240, 241, 242, 243, 243, 244, 245, 245, 246,
246, 247, 247, 248, 248, 249, 249, 250, 250, 251, 251,251, 252, 252, 253, 253,
253, 253, 254, 254, 254, 254, 254, 255, 255, 255, 255,255, 255, 255, 255, 255
};
#endif
//MATLAB程序:
//x=linspace(-pi/2,pi/2,255);%如果過采用1位采用,很多值是重的 。雖然實際中并不會 。
//y=(sin(x)+1)/2.0*255;
//%uint32(y)%強制類型轉換 。
//%fprintf('%.f\n',uint32(y));%控制輸出類型
//round(y)%四舍五入函數
正弦波信號發生器設計就是DDS是吧,你輸出的正弦信號的頻率顯然正比于DAC的數據輸出速度,比如你讓DAC每秒輸出1000個點 , 而你的正弦信號由100個點構成,那就相當于每秒輸出了10個正弦信號,頻率為10Hz,所以要改變正弦信號的頻率只要改變DAC的輸出速度就可以了
函數信號發生器怎么輸出0到5V的正弦波信號,具體如何調節?

文章插圖
信號發生器輸出接入用示波器監看波形,波形選擇正弦波,選擇合適的頻率,調整輸出直流電平至2.5V , 調整輸出幅度Vp-p(峰峰值)至5V,微調兩個旋鈕,使Vp-p是0-5V 。產生某些特定的周期性時間函數波形(正弦波、方波、三角波、鋸齒波和脈沖波等)信號,頻率范圍可從幾個微赫到幾十兆赫 。擴展資料:信號發生器一般區分為函數信號發生器及任意波形發生器,而函數波形發生器在設計上又區分出模擬及數字合成式 。眾所周知,數字合成式函數信號源無論就頻率、幅度乃至信號的信噪比(S/N)均優于模擬 , 其鎖相環( PLL)的設計讓輸出信號不僅是頻率精準 。而且相位抖動及頻率漂移均能達到相當穩定的狀態,但畢竟是數字式信號源 , 數字電路與模擬電路之間的干擾 , 始終難以有效克服,也造成在小信號的輸出上不如模擬式的函數信號發生器 。參考資料來源:百度百科——函數信號發生器
頻率可調的移相式正弦波發生器電路設計 如圖,可調頻率怎么計算的 , 最好要有計算表達式電路不太懂
如何制作0—100Hz(頻率連續可調)正弦信號發生器(附上電路圖)這是一個標準的直接數字頻率合成方案:
時鐘脈沖發生器→地址掃描計數器→正弦函數查表(EPROM)→D/A變換→濾波器→輸出0——100Hz標準正弦波
請問怎么用運算放大器搭一個正弦波發生器,要求頻率、幅值可調?謝謝用運算放大器搭成文氏電橋振蕩器正弦波發生器 。這個文氏電橋振蕩器的振蕩頻率約是1600Hz,用一個10k雙聯電位器使兩個電阻R同步變化,就能調節頻率 。
有一個固定頻率方波信號發生器,怎么樣才能把它變成可變頻率的正弦波發生器??坦白說,做了這么多年的電子,還頭一次聽說只有固定頻率的方波發生器 。
anyway,也許這只是一道常識基礎題,那么答案是這樣的:
方波信號可以看做是無限個不同頻率的正弦波的疊加,你可以通過一個中心頻率可變的點通(帶通)濾波器實現 。而這個中心頻率決定于構成濾波器的RC(或LC)的值 。
設計一個能產生三種波形(方波,正弦波,三角波)且頻率步進可調的信號發生器 。#include#includevoid Delayus(unsigned int t);void INT0_isr(void);void Init_PORT(void);void INT0_init(void);unsigned int select_num,num;unsigned int pl,zkb;const unsigned char sin_tab[]={ 128,130,132,135,137,139,141,143,146,148, 150,152,154,157,159,161,163,165,167,169, 171,174,176,178,180,182,184,186,188,190, 191,193,195,197,199,201,203,204,206,208, 210,211,213,215,216,218,219,221,222,224, 225,227,228,229,231,232,233,235,236,237, 238,239,240,241,242,243,244,245,246,247, 247,248,249,249,250,251,251,252,252,253, 253,253,254,254,254,255,255,255,255,255, 255,255,255,255,255,255,254,254,254,253, 253,253,252,252,251,251,250,249,249,248, 247,247,246,245,244,243,242,241,240,239, 238,237,236,235,233,232,231,229,228,227, 225,224,222,221,219,218,216,215,213,211, 210,208,206,204,203,201,199,197,195,193, 192,190,188,186,184,182,180,178,176,174, 171,169,167,165,163,161,159,157,154,152, 150,148,146,143,141,139,137,135,132,130, 128,126,124,121,119,117,115,113,110,108, 106,104,102, 99, 97, 95, 93, 91, 89, 87, 85,82,80,78,76,74,72,70,68,66, 65,63,61,59,57,55,53,52,50,48, 46,45,43,41,40,38,37,35,34,32, 31,29,28,27,25,24,23,21,20,19, 18,17,16,15,14,13,12,11,10,9, 9,8,7,7,6,5,5,4,4,3, 3,3,2,2,2,1,1,1,1,1, 1,1,1,1,1,1,2,2,2,3, 3,3,4,4,5,5,6,7,7,8, 9,9,10,11,12,13,14,15,16,17, 18,19,20,21,23,24,25,27,28,29, 31,32,34,35,37,38,40,41,43,45, 46,48,50,52,53,55,57,59,61,63, 64,66,68,70,72,74,76,78,80,82, 85,87,89,91,93,95,97,99,102,104, 106,108,110,113,115,117,119,121,124,126};const unsigned char table[]={0x3F,/*0*/0x06,/*1*/0x5B,/*2*/0x4F,/*3*/0x66,/*4*/0x6D,/*5*/0x7D,/*6*/0x07,/*7*/0x7F,/*8*/0x6F/*9*/};void Delayus(unsigned int t){WDR();dot--;while(t>1);WDR();}void Init_PORT(void){ PORTA = 0XFF; DDRA= 0X00; PORTB = 0X00; DDRB= 0XFF; PORTC = 0X00; DDRC= 0XFF; PORTD = 0XF4;//0000 0100 DDRD= 0XFB;}void INT0_init(void){ SREG|=BIT(7);MCUCR|=0x02;GICR|=BIT(6);GIFR|=BIT(6);}#pragma interrupt_handler INT0_isr:2void INT0_isr(void){ PORTB|=BIT(0); Delayus(100); num=PINA&0X1F; if(num==0x1E) {select_num++;//0001 1110if(select_num>=4)select_num=0;} if(num==0x1C)pl++; if(num==0x1B)pl--; if(num==0x17)zkb++; if(num==0x0F)zkb--;}void main(void){ unsigned int ii,jj,nn,mm,kk=100; Init_PORT(); INT0_init(); while(1) {if(select_num==0){for(ii=0;ii<360;ii++){PORTD&=~BIT(0);PORTC=sin_tab[ii];Delayus(kk);PORTD|=BIT(0);}}if(select_num==1){jj=180;//方波寬度可修改PORTD&=~BIT(0);PORTC=0XFF;PORTD|=BIT(0);doDelayus(kk);while(--jj);jj=180;PORTD&=~BIT(0);PORTC=0X00;PORTD|=BIT(0);doDelayus(kk);while(--jj);}if(select_num==2){for(nn=0;nn<255;nn++)//產生上升波{PORTD&=~BIT(0);PORTC=nn;//A口輸出上升波PORTD|=BIT(0);Delayus(kk);}for(nn=255;nn>0;nn--)//產生下降波{PORTD&=~BIT(0);PORTC=nn;//A口輸出下降波PORTD|=BIT(0);Delayus(kk);//延時}}if(select_num==3){if(mm==0)mm=256;PORTD&=~BIT(0);PORTC=mm--;PORTD|=BIT(0);Delayus(kk);} }}
單片機C語言版信號發生器單片機信號發生器,一般是通過控制單片機的IO的高低電平來實現的 , 具體為
1,可以通過先配置一個管腳為輸出,然后給這個管腳寫0 , 輸出就為低電平,然后寫1,這個管腳就輸出為高電平 。如果你的單片機是3.3v供電的話,那么高電平一般為3.3V,低電平一般為0v 。
2 , 如果要產生一個方波的話,需要先輸出1,然后延遲一段時間,然后再輸出0,然后再延遲一段時間,然后輸出1.... 要如此反復的話,可以用while(1), 然后在while(1)里面寫入你的置高,延遲 , 置低的代碼 , 具體偽代碼可以為
配置對應輸出管腳為輸出;//因為管腳可以配置為輸出和輸入 , 所以需要先配置為輸出
while(1)
{
對對應輸出管腳置高;
sleep(半個周期的時間);
對對應輸出管腳置低;
sleep(半個周期的時間);
}
3, 如果你牽涉到高級應用的話,比如要輸出一個正弦波 , 那么需要外加信號產生芯片,比如DDS芯片 。
4,如果還需要更加復雜的信號,任意波形的 , 可以用一個片內DA按照你的意思輸出對應的電平,或者片外DA來輸出 。
怎么用單片機做一個信號發生器?如果要求頻率不是很高 , 可以采用PWM方式,優點是無需另外加DA,且輸出分辨率可靈活調整 。考慮到單片機的運算能力不強 , 你可以用EXCEL編制一個正弦信號在一個周期內的等間隔幅值表,比如說,將一個周期的正弦信號分為64個點,信號的峰值為1000,初始相位為0°,那么 , 這個表格的第一個點是0 , 第n點為1000*sin(2πn/64),用EXCEL將64個點的幅值計算完畢,按照需要的格式編制為編程語言能夠接受的表格 。利用單片機的一個定時器 , 定時器的溢出值設置為1000,溢出時,某個IO口輸出低電平 , 再用一個寄存器存儲輸出點序號,序號為n時,根據輸出點序號通過查表獲取1000*sin(2πn/64)的數值,將定時器的計數值與1000*sin(2πn/64)比較,相等時 , IO口輸出高電平 。不斷循環執行上述程序,IO將輸出占空比與正弦信號幅值成正比的方波信號,這就是常說的正弦調制PWM信號 。設計一個增益可調的有源低通濾波器,PWM信號經過低通濾波器后,輸出就是正弦波,調節低通濾波器的增益,即可改變正弦信號的幅值 。當然,在設置PWM占空比時,將查表結果先乘以一個設定數值(一般是0~1的小數),也可以調節輸出幅值 。為了簡化運算,可以是先乘以一個整數M,再除以N(N為128、256等2的冪的數值) , M取值范圍為0~N , 因為這種除法可通過移位進行,程序簡單,且運算速度快 。
C語言怎么編寫正弦波

文章插圖
源代碼如下:#include#include#define EX 0.000001#define PI 3.14159265int main(){double x=0.0, temp=1.0, sin=0.0;int i;printf("Please input a degree:");scanf("%lf",&x);x=x*PI/180;temp=x;i=0 ;while ( fabs(temp) >EX ) ...{sin += temp;i += 2;temp = (-1) * temp*x*x/( (i+1)*(i) );}printf("sin(%lf) = %lf ",x,sin);printf("The number is %d ",i);return 0;}擴展資料C語言編寫一個程序輸出一個正方形的源代碼如下:#include int main(){int i,j,n;scanf("%d",&n);for(i=0;iprintf("*");else printf(" "); }printf("\n");}return 0; }
單片機實現正弦波的C程序我這是在arm板上實現的,你看看對你有用沒
*****************************畫正弦波************************/
void sinmain(void)
{
unsigned int x,y;
//double offset=0;//x坐標偏移量
//for(;;)
{
for(x=320;x>0;x--)
{//畫正弦波
y=(int)(100*sin(((double)x)/20.0));//+offset
PutPixel (y+120, x,0x07e0); Delay(10);
}
/*offset+=1;
if(offset>=2*3.14)
offset=0;*/
Delay(100);
Lcd_ClearScr( (0x00<<11) | (0x00<<5) | (0x00) );
}
}
multisim里信號發生器使用問題

文章插圖
multisim中,函數發生器與待測設備連接時要注意以下情況:函數發生器有三個連接端子,+連接端、-連接端,中間為Common端子 。當使用+和Common端子時,輸出信號為正極性信號;當使用-和Common端子時 , 輸出信號為負極性信號;當使用+和-端子時輸出信號等于信號發生器的有效值的兩倍 。采用集成運放和分立元件相結合的方式 , 利用遲滯比較器電路產生方波信號,以及充分利用差分電路進行電路轉換,從而設計出一個能變換出三角波、正弦波、方波的簡易信號發生器 。通過對電路分析,確定了元件的參數,并利用 Multisim 軟件仿真電路的理想輸出結果,克服了設計低頻信號發生器電路方面存在的技術難題,使得設計的低頻信號發生器結構簡單 , 實現方便 。擴展資料Multisim界面由多個區域構成:菜單欄 , 各種工具欄,電路輸入窗口,狀態條,列表框等 。通過對各部分的操作可以實現電路圖的輸入、編輯,并根據需要對電路進行相應的觀測和分析 。用戶可以通過菜單或工具欄改變主窗口的視圖內容 。通用模擬式函數信號發生器的結構,是以三角波產生電路為基礎經二極管所構成的正弦波整型電路產生正弦波,同時經由比較器的比較產生方波 。如果以恒流源對電容充電,即可產生正斜率的斜波 。同理,右以恒流源將儲存在電容上的電荷放電即產生負斜率的斜波 。參考資料:百度百科-Multisim參考資料:百度百科-函數信號發生器
基于Multisim的正弦波信號發生器自己找一個正弦波信號發生器電路,然后用MULTISIM畫一下~
multisim中函數信號發生器怎么接

文章插圖
若單端輸出,即中間端口接地,“+”和“-”兩端分別輸出信號的幅度(峰值)即是函發面板的設置值,但相位相反(即相差π) 。若由“+”和“-”兩端輸出(即“-”或“+”一端接地 , 另一端輸出),則輸出信號的幅度(峰值)是函發面板的設置值2倍 。信號發生器的正輸入端接C5輸入口,負輸入端接GND,示波器A相正輸入接信號發生器輸入端,示波器B相輸入接U3輸出口,示波器兩個負是入口接GND 。擴展資料Multism的上方工具欄最后一行可找到各類元器件,如電阻、放大器、電源等,右邊工具欄可找到測量分析儀器,如萬用表、示波器、函數信號發生器等 。Multisim為用戶提供了類型豐富的虛擬儀器,可以從Design工具欄®Instruments工具欄 , 或用菜單命令(Simulation/ instrument)選用這11種儀表 , 如下圖所示 。在選用后,各種虛擬儀表都以面板的方式顯示在電路中 。參考資料來源:百度百科-multisim
multisim里面的音頻信號發生器在哪函數發生器或者交流電壓源
設計一個正弦波信號發生器 , 再用單片機搭建一個系統,測量該信號不是吧?
信號發生器實驗室都有,我也不會做~~~
系統就不用搭建了,一般的開發板都能實現這功能
下面是基于單片機的(不曉得你要什么類型的,下面的是AT89S52)程序,不過我的開發板是12M的晶振,最大只能測量500Khz,你也可以用幾個分頻器,那可以擴大量程,數電上有講 , 就不多說了 , 貌似你用大的晶振也行(這句不清楚)
#include
unsigned char code dispbit[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};
unsigned char dispbuf[8]={0,0,0,0,0,0,10,10};
unsigned char temp[8];
unsigned char dispcount;
unsigned char T0count;
unsigned char timecount;
bit flag;
unsigned long x;
void main(void)
{
unsigned char i;
TMOD=0x15;
TH0=0;
TL0=0;
TH1=(65536-4000)/256;
TL1=(65536-4000)%256;
TR1=1;
TR0=1;
ET0=1;
ET1=1;
EA=1;
while(1)
{
if(flag==1)
{
flag=0;
x=T0count*65536+TH0*256+TL0;
for(i=0;i<8;i++)
{
temp[i]=0;
}
i=0;
while(x/10)
{
temp[i]=x%10;
x=x/10;
i++;
}
temp[i]=x;
for(i=0;i<6;i++)
{
dispbuf[i]=temp[i];
}
timecount=0;
T0count=0;
TH0=0;
TL0=0;
TR0=1;
}
}
}
void t0(void) interrupt 1 using 0
{
T0count++;
}
void t1(void) interrupt 3 using 0
{
TH1=(65536-4000)/256;
TL1=(65536-4000)%256;
timecount++;
if(timecount==250)
{
TR0=0;
timecount=0;
flag=1;
}
P0=dispcode[dispbuf[dispcount]];
P2=dispbit[dispcount];
dispcount++;
if(dispcount==8)
{
dispcount=0;
}
}
還是好好學習哈,能過關不一定能找到工作
基于單片機的正弦信號發生器?。∏敫呤指闋柿希?/h3>10KHz正弦波,要考慮D/A采樣精度(量化位數),這樣確定處理速度 , 選用速度快的片子 。
峰峰值0~5V的話,直流分量怎么會低于0呢???除非峰峰值-5~+5V
頻率穩定度就要看選的時鐘晶振的穩定度了 。
輸出相差步進90度,那么你的每個周期采樣數必須是4的倍數了 。
輸出提高到36V那你就要加放大器了 。
求基于單片機50hz正弦波信號發生器原理設計1,這個線路很容易實現
2,使用單片機發送一個50Hz的方波,然後再做一個50Hz含3次諧波的陷波的低通濾波器輸出就是正弦波了 。
基于單片機的信號發生器的設計,輸出方波,正弦波,三角波,鋸齒波,頻率可調 。原理是如何噠?怎么取點【正弦波發生器】51單片機硬件有PCA模塊的,或者是PWM發生器的型號 , 也有沒有的 , 你采用的芯片有沒有這些硬件?
正弦波:
如果有,以PCA模塊為例,可以作為DA使用,使用前根據datasheet配置好PCA 。在51頭文件中有math.h , 里面有sin(X)函數 , 可以在程序中直接使用 , 使用前在主函數重要包含math.H這個文件 。然后每個點采樣輸出即可,頻率可調可以通過不同方法實現,如果是要做信號發生器,推薦使用一個電位器,通過AD采集電壓,將采集值作為你輸出函數的系數即可 , 亦可以通過串口發送指令等方式實現,前提要在使用前將AD或者串口配置好 。
如果沒有硬件模塊,也可以用普通IO口模擬,思路如下 , 經過y=sinx函數求得的結果 , 經過算法轉化成二進制(主要是將小數轉化成二進制的算法),推薦轉化成8的整數倍位,比如8位二進制或者16位二進制 。轉化結束后將結果給IO口輸出即可,頻率也可采取上述方法設定 。
三角波:
如果有DA,將DA的輸入值按一定時間自增,到達峰值后按一定時間自減 。前文中的“一定時間”設定的足夠小 , 可以近似認為是三角波 。三角波輸出頻率就是周期,在具體到操作層面時,可以將輸出函數前加上一個時間系數,還是通過調節正弦波的頻率的方式調節 。
木有DA···還是和正弦波類似,通過算法將輸出值轉化成二進制,然后送給IO口
方波:
這個最簡單,將IO口定時切換高低電平即可,你定的時間就將成為你輸出的頻率 。
如果有PCA模塊,可配置成定時翻轉模式,比較方便~
鋸齒波是不是和方波類似?。?
