⑴ 基於單片機信號發生器設計重點研究問題是什麼
利用單片機做信號發生器,其重點就是單片機的主頻啦
因為主頻代表著程序運行的時間,這個時間是完成一次程序的從頭到尾單片機內部所需的時間,而運行一次只能輸出一種埠狀態,那麼需要方波輸出,則需要單片機運行兩次才能真正輸出一個方波信號,所以主頻才是重中之重。
另外還有程序的整體步數,就是程序的長度或多少,程序語句越多,運行速度也越慢,輸出的信號頻率也越低
例如想做一個1MHz的方波發生器,那麼51單片機的最高主頻是12MHz,然而真正輸出的最高只能達到12分之一,那就是1MHz,勉勉強強算是可以
如果超過1MHz的波形,51類單片機是達不到效果了,只能選擇其它單片機
下面是本人曾經利用單片機做的PMW信號發生器程序,僅供參考
/***************************************************************************/
#include<reg51.h>//頻率約為 2.37 KHz
//根據按鍵來控制輸出波形
sbit D=P2^0 ; //埠定義
int h,m,s,f;
/***************************************************************************/
void main(void)
{
TMOD=0x22; EA=1; ET0=1; ET1=1; TR0=1;//定時器初始化
while(1)
{
switch(P0)
{
case 0xfe : h=1; break;
case 0xfd : h=2; break;
case 0xfb : h=3; break;
case 0xf7 : h=4; break;
case 0xef : h=5; break;
case 0xdf : h=6; break;
case 0xbf : h=7; break;
case 0x7f : h=8; break;
default : h=9; break;
}
m=10-h;
}
}
/***************************************************************************/
void int0() interrupt 1 //定時器 0 中斷
{
TH0=0xff; s++;
if(s>=h){ TR0=0; TR1=1; D=0; s=0; }//開始時間
}
/***************************************************************************
/void int1() interrupt 3 //定時器 1 中斷
{
TH1=0xff; s++;
if(s>=m){ TR1=0; TR0=1; D=1; s=0; }//休止時間
}
/***************************************************************************/
⑵ 急求!!!在c51單片機上的三角波信號發生器,求原理圖與c程序代碼.
**************************************/
/* 信號發生器 (正弦波,方波,三角波)
*/
/*************************************/ #include<reg52.h> #include <intrins.h> #define uchar unsigned char #define uint unsigned int
sbit cs=P2^0; //tlc5615片選埠 sbit clk=P2^1; //tlc5615時鍾線 sbit din=P2^2;
//tlc5615傳輸埠
sbit key1=P1^0; sbit key2=P1^1;
//按鍵的單片機介面
uchar keydat;
uchar flag;
//波形發生終止信號的標志位 一旦
被置零立馬停止發信號
uchar flagsqu; //方波高低電平控制為(運用定時器1
中斷控制)
uchar m,num; uchar dat=0xff;
uchar code tosin[141]={ //正弦波的編碼
0x00,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08, 0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x15,0x16,<a href="http://www.jsykyy.com/" target="_blank">塗料加盟</a>0x18,0x1a,0x1c,0x1e,0x20,0x22,0x25,0x27,0x29,0x2b, 0x2e,0x30,0x33,0x35,0x38,0x3a,0x3d,0x40,0x43,0x45, 0x48,0x4c,0x4e,0x51,0x55,0x57,0x5a,0x5d,0x60,0x63, 0x66,0x69,0x6c,0x6f,0x70,0x71,0x72,0x73,0x74,0x75, 0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7e, 0x7f,0x80,0x7f,0x7e,0x7e,0x7d,0x7c,0x7b,0x7a,0x79, 0x78,0x77,0x76,0x75,0x74,0x73,0x72,0x6f,0x6c,0x69, 0x66,0x63,0x60,0x5d,0x5a,0x57,0x55,0x51,0x4e,0x4c, 0x48,0x45,0x43,0x40,0x3d,0x3a,0x38,0x35,0x33,0x30, 0x2e,0x2b,0x29,0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a, 0x18,0x16,0x15,0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a, 0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,
0x00};
⑶ 基於單片機的信號發生器怎麼實現調幅
一般情況下單片機模擬信號告帶發生器緩鉛時需要用到數模轉換模塊,即將數字信號轉換為模擬信號。在得到原始載波信號後你可以將需要裝載的信號通過一襪哪蘆個三極體之類的器件載入到信號中,如圖所示,這樣即可以可以將信號發送出去了。
⑷ 基於單片機的信號發生器的設計,輸出方波,正弦波,三角波,鋸齒波,頻率可調。原理是如何噠怎麼取點
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模塊,可配置成定時翻轉模式,比較方便~
鋸齒波是不是和方波類似啊?
⑸ 51單片機做的信號發生器能達最高頻率事多少
51單片機的信號發生器最高頻率與晶振頻率緊密相關。在理想狀態下,當晶振頻率設置為12MHz時,信號發生器的最高頻率理論上可達12MHz。然而,實際操作中會受到各種因素的影響,因此實際能達到的頻率會略低於12MHz。
影響信號發生器頻率的因素包括但不限於信號處理的延遲、模擬電路的響應速度以及環境溫度等。信號處理中的延遲會導致信號發生器的頻率不能達到理想狀態下的最大值。同時,模擬電路的響應速度也會影響信號發生器的實際頻率。這些因素共同作用,使得在實際應用中,51單片機信號發生器的最高頻率通常會低於理論上的12MHz。
此外,環境溫度的變化也會對信號發生器的頻率產生影響。溫度的升高或降低都會導致晶振頻率的變化,從而影響信號發生器的輸出頻率。因此,在實際使用時,需要考慮環境溫度對信號發生器頻率的影響,並採取相應的補償措施。
綜上所述,雖然51單片機信號發生器在理想狀態下可以達到12MHz的最高頻率,但在實際應用中,由於各種因素的影響,實際能達到的最高頻率會有所降低。