找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 15948|回復(fù): 7
收起左側(cè)

用arduino作為方波發(fā)生器,非常精準(zhǔn),頻率任意可調(diào)

  [復(fù)制鏈接]
ID:412533 發(fā)表于 2018-10-19 23:40 | 顯示全部樓層 |閱讀模式
最近研究了arduino的定時器,可以用pwm作為方波發(fā)生器,在9腳上輸出方波。代碼如下:
void setup()
{
  // 下面的等值于 OC1A = 輸出用于定時器1的CTC模式
  pinMode(9, OUTPUT);  // 設(shè)置默認(rèn)關(guān)聯(lián)了D9(查表得知)為輸出
  TCCR1B=0; // 只是個復(fù)位的習(xí)慣可以不要
  TCCR1A=_BV(COM1A0); // 要是困擾的話你也可以寫成 TCCR1A = 0b01000000;
  //這里和上一個表示了 = CTC 模式, 開啟比較器(默認(rèn)輸出), prescaler = 1
  TCCR1B = _BV(WGM12)|_BV(CS10) ; //  這里等值于 TCCR1B = 0b00001001;

  // 最有意思的了,16位的玩意來確定要一個怎樣的頻率
  OCR1A = 0; // 計算為:F_CPU/2/Need_HZ-1 來得到你想要的,遺憾的是四舍五入來截取頻率
  
}

void loop(){
  //這次啥也沒做
}

通過設(shè)置OCR1A來改變頻率大小,例子上輸出方波頻率為8M,夠高吧!由于OCR1A是16為寄存器,最大也只能設(shè)為65535,故頻率最低可達(dá)到122HZ,arduino晶振為16M,因此這個例子能輸出的頻率范圍為f/(2*65536)  到f/2, 其中f為arduino時鐘頻率,即16M

下面是生成8M方波的圖形,非常精準(zhǔn)
1.png
回復(fù)

使用道具 舉報

ID:85865 發(fā)表于 2018-10-23 10:53 | 顯示全部樓層
還不太明白
回復(fù)

使用道具 舉報

ID:162514 發(fā)表于 2018-10-25 19:26 | 顯示全部樓層
不明白!
回復(fù)

使用道具 舉報

ID:272625 發(fā)表于 2019-2-14 20:56 來自觸屏版 | 顯示全部樓層
自娛自樂,自說自話吧!
回復(fù)

使用道具 舉報

ID:469313 發(fā)表于 2019-3-2 09:50 | 顯示全部樓層
不明白! void loop()這里什么也沒有,怎么會有方波輸出?
回復(fù)

使用道具 舉報

ID:563758 發(fā)表于 2019-12-4 15:00 來自觸屏版 | 顯示全部樓層
用pro mini試的。還可以。學(xué)習(xí)了
2019-12-04_14.57.56.jpg
2019-12-04_14.58.26.jpg
2019-12-04_14.59.41.jpg
回復(fù)

使用道具 舉報

ID:428400 發(fā)表于 2019-12-7 18:19 | 顯示全部樓層
占空比也可調(diào)才好
回復(fù)

使用道具 舉報

ID:718483 發(fā)表于 2020-3-29 23:10 | 顯示全部樓層
直接操作寄存器?
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表