51微控制器控制DAC0832產生正弦波,如何用定時器改變頻率

時間 2021-09-14 19:01:53

1樓:匿名使用者

可以用一個定時器中斷,在中斷服務程式裡面,直接把對應的正弦取樣資料置入p1口,通過修改定時器的中斷間隔,達到調整輸出頻率的目的;

假設你的取樣資料的原始取樣率為1khz, 被取樣正弦波頻率為100hz,當timer中斷間隔為1ms時,dac那裡輸出處理後輸出即為100hz, 如果中斷間隔為500us,輸出就是200hz

static unsigned char byindex=0;

中斷函式裡面包含如下兩句

p1 = sin[byindex++];

byindex &= 0x7f;

2樓:

dac0832轉換時間為1us,一個正弦週期輸出32個點的話,最高輸出訊號頻率可達31.25khz。

如果採用微控制器產生,具體還與微控制器的速度有關。採用risc指令集的微控制器,指令週期與晶振週期相同,採用16mhz晶振的話,可以達到上述要求。

先確定每個週期輸出的點數,假設是32個點。

dac0832輸出解析度為8位,dac0832輸出以半電壓上下對稱的正弦波,峰值對應±128,那麼,分別計算出32個點的正弦值,製作一個**儲存在微控制器的程式空間或eeprom空間。

根據訊號頻率設定定時器的溢位週期,定時器溢位週期為訊號週期的1/32,定時器溢位時,依次輸出32個點的正弦值至dac0832的數字量輸入埠。

最後,dac0832的輸出經運放電路轉變為正負對稱的正弦波,再經一個積分器或低通濾波器可輸出平滑的正弦波。

#include

unsigned char i;

unsigned char code sin_tab = //正弦波輸出表

;sbit w=p2^0;

sbit cs=p2^1;

void delay(x)

void main()

*/p1=0xff;

while(1);

//delay(10);

//p1=0x00;

//delay(10);} }

如何用51微控制器控制dac0832產生不同頻率正弦波,鍵盤改變頻率,求具體的c語言程式

3樓:匿名使用者

我就不寫程式了,費事,說說思路吧

假設你把一個正弦波的一週期分成180個點,那麼每個點相差是2度,那麼每個點是有一個對應的sin值的,比如sin0 sin2 sin4等。假設1ms傳送一個點(即微控制器向da寫一個該sin值所對應的電壓大小), 那麼寫完一個正弦波,要180ms。如果2ms寫一個點,這就改變了正弦波的頻率了。

一週期所分的點越多,則正弦波越規則,波形效果越好其實不但頻率能改,正弦波的幅度同時也能改的。

4樓:匿名使用者

利用定時器來控制查錶速度,

定時器中斷時查表輸出到da形成正弦波,

所以修改定時器的填充值就可以控制正弦波的頻率。

DAC0832 微控制器輸出正弦波頻率最大值問題

c51微控制器和dac0832能輸出正弦波,微控制器要不斷的給dac0832數值,dac轉換層模擬量輸出正弦波 51微控制器是對所有相容intel 8031指令系統的微控制器的統稱。該系列微控制器的始祖是intel的8004微控制器,後來隨著flash rom技術的發展,8004微控制器取得了長足的...

51微控制器C語言控制頻率原理,51微控制器改變頻率怎麼實現,最好是用C語言程式

1全部假設你的51微控制器用的晶振是12mhz的,那麼可以得到如下結論 51執行一個指令的時間週期是1us,這個是51的基礎知識,就不深入講解了。然後,如果用定時器0確定輸出頻率,假設定時器0的tl0初始值是0x01,那麼當tl0變為0x02時,就是經過了1us時間 這個懂吧?那麼,設定定時器0為工...

51微控制器三極體如何控制繼電器,51微控制器如何驅動12V繼電器 用三極體實現的電路引數怎麼求?

12v的繼電器這樣控制不對,實際中,如此接,微控制器就燒了。p20口至少接個電阻出來才不會燒,但高低都控制不了繼電器。用個npn,繼電器接12v與c之間,網上有很多圖。 雲蹤奇影 電路錯誤,繼電器不受控.應該選用npn三極體,12v接繼電器一腳,繼電器另一腳接npn三極體c極,三極體e極接地. 微控...