日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人文社科 > 生活经验 >内容正文

生活经验

FPGA(4)晶振与计数器 -- 实现定时器(led定时闪烁、蜂鸣器频率控制(单响)、蜂鸣器报警(频带控制,多响))

發(fā)布時(shí)間:2023/11/27 生活经验 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 FPGA(4)晶振与计数器 -- 实现定时器(led定时闪烁、蜂鸣器频率控制(单响)、蜂鸣器报警(频带控制,多响)) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

一、FPGA的晶振與定時(shí)器

二、定時(shí)器(led閃爍、蜂鳴器頻率控制)

1、時(shí)鐘上升沿、復(fù)位下降沿觸發(fā)

2、復(fù)位,計(jì)數(shù)器清零

3、計(jì)數(shù)滿(mǎn)1s時(shí),計(jì)數(shù)器清零

4-1、led閃爍(每秒)

4-2、蜂鳴器響(每毫秒)

代碼

三、蜂鳴器報(bào)警(多響)

1、初始化?

2、計(jì)數(shù)

3、蜂鳴器控制

代碼


?

一、FPGA的晶振與定時(shí)器

FPGA的晶振是50MHz,50MHz = 50_000_000Hz = 1/50_000_000s = 20ns

每次時(shí)鐘(clk)上升沿(posedge)每50Mhz(20ns)到來(lái)一次

always@(posedge clk)

基于這個(gè)原理,就可以愉快地做定時(shí)的操作了。

首先要知道:2^26 = 67_108_864 > 50_000_000,所以可以設(shè)置二進(jìn)制長(zhǎng)度2^26。(即寬26)

reg [25:0] cnt

????????這里涉及到的蜂鳴器,和單片機(jī)的又不太一樣,我自己嘗試了一下直接給電平,它是響不了的,想讓它響好像只能給控制頻率,讓它響。

注:人耳能聽(tīng)到的頻率是90hz到15khz,所以你的驅(qū)動(dòng)源頻率須在此范圍之內(nèi)才能聽(tīng)到。

二、定時(shí)器(led閃爍、蜂鳴器頻率控制)

1、時(shí)鐘上升沿、復(fù)位下降沿觸發(fā)

//led燈定時(shí)(1s)
always@ (posedge clk, negedge rst_n)

2、復(fù)位,計(jì)數(shù)器清零

//按下復(fù)位鍵if (!rst_n)cnt <= 1'b0;

3、計(jì)數(shù)滿(mǎn)1s時(shí),計(jì)數(shù)器清零

//計(jì)數(shù)滿(mǎn)1selse if(cnt != 26'd49_999_999)	//定時(shí)到1hz(即1s)cnt <= cnt + 1'b1;

4-1、led閃爍(每秒)

//led閃爍:1s計(jì)數(shù)滿(mǎn)elsebegin led <= ~led;cnt <= 1'b0;end

4-2、蜂鳴器響(每毫秒)

//蜂鳴器定頻率
always@ (posedge clk)
begin//計(jì)數(shù)滿(mǎn)if(!(cnt % 26'd49_999))			//定時(shí)到1khz(即1ms)beep <= ~beep;				
end

代碼

//定時(shí)(led燈閃爍、蜂鳴器頻率控制)
//FPGA晶振是50MHz(即20ns)
module my_and(clk, rst_n, beep, led);input clk, rst_n;
output reg beep;
output reg led;reg [25:0] cnt;//led燈定時(shí)(1s)
always@ (posedge clk, negedge rst_n)
begin//按下復(fù)位鍵if (!rst_n)cnt <= 1'b0;//計(jì)數(shù)滿(mǎn)1selse if(cnt != 26'd49_999_999)	//定時(shí)到1hz(即1s)cnt <= cnt + 1'b1;//led閃爍:1s計(jì)數(shù)滿(mǎn)elsebegin led <= ~led;cnt <= 1'b0;end
end//蜂鳴器按頻率響
always@ (posedge clk)
begin//計(jì)數(shù)滿(mǎn)if(!(cnt % 26'd49_999))			//定時(shí)到1khz(即1ms)beep <= ~beep;				
endendmodule

三、蜂鳴器報(bào)警(多響)

這里實(shí)驗(yàn)效果是:響4聲、停一會(huì)。

實(shí)驗(yàn)原理:蜂鳴器響是通過(guò)根據(jù)頻率控制的,如果想讓它斷斷續(xù)續(xù)地鳴叫,可以給它限值頻帶頻帶范圍內(nèi)控制它響,不在頻帶范圍內(nèi)就不讓它響

這里由于需要響四聲,停一下,我設(shè)置通頻帶范圍:

1、27'd0~27'd6_250_000;

2、d12_500_000~27'd18_750_000;

3、27'd25_000_000~27'd31_250_000;

4、27'd37_500_000~27'd43_750_000;

周期:100MHz(2s)

1、初始化?

//蜂鳴器報(bào)警(頻帶控制)
module my_and(clk, rst_n, beep);input clk, rst_n;
output reg beep;
reg [28:0] cnt;initial
begincnt <= 1'b0;beep <= 1'b0;
end

2、計(jì)數(shù)

周期2s(28'd99_999_999從0開(kāi)始算的,即100MHz)?

//計(jì)數(shù)
always@(posedge clk, negedge rst_n)
beginif(!rst_n)begin cnt <= 1'b0;endelse if(cnt != 28'd99_999_999)	//2scnt <= cnt + 1'b1;else cnt <= 1'b0;		//清空
end

3、蜂鳴器控制

設(shè)置了四個(gè)頻帶,在頻帶范圍就響,不在就不響。

//蜂鳴器控制
always@(posedge clk)
begin //第一個(gè)頻帶(第一聲)if(cnt < 27'd6_250_000)beginif(cnt%27'd49_999==0)beep <= ~beep;end//第二個(gè)頻帶(第二聲)else if(cnt > 27'd12_500_000 && cnt < 27'd18_750_000)beginif(cnt%27'd49_999==0)beep <= ~beep;end//第三個(gè)頻帶(第三聲)else if(cnt > 27'd25_000_000 && cnt < 27'd31_250_000)beginif(cnt%27'd49_999==0)beep <= ~beep;end//第四個(gè)頻帶(第四聲)else if(cnt > 27'd37_500_000 && cnt < 27'd43_750_000)beginif(cnt%27'd49_999==0)beep <= ~beep;endend 

代碼

//蜂鳴器報(bào)警(頻帶控制)
module my_and(clk, rst_n, beep);input clk, rst_n;
output reg beep;
reg [28:0] cnt;initial
begincnt <= 1'b0;beep <= 1'b0;
end//計(jì)數(shù)
always@(posedge clk, negedge rst_n)
beginif(!rst_n)begin cnt <= 1'b0;endelse if(cnt != 28'd99_999_999)	//2scnt <= cnt + 1'b1;else cnt <= 1'b0;		//清空
end//蜂鳴器控制
always@(posedge clk)
begin //第一個(gè)頻帶(第一聲)if(cnt < 27'd6_250_000)beginif(cnt%27'd49_999==0)beep <= ~beep;end//第二個(gè)頻帶(第二聲)else if(cnt > 27'd12_500_000 && cnt < 27'd18_750_000)beginif(cnt%27'd49_999==0)beep <= ~beep;end//第三個(gè)頻帶(第三聲)else if(cnt > 27'd25_000_000 && cnt < 27'd31_250_000)beginif(cnt%27'd49_999==0)beep <= ~beep;end//第四個(gè)頻帶(第四聲)else if(cnt > 27'd37_500_000 && cnt < 27'd43_750_000)beginif(cnt%27'd49_999==0)beep <= ~beep;endend endmodule

總結(jié)

以上是生活随笔為你收集整理的FPGA(4)晶振与计数器 -- 实现定时器(led定时闪烁、蜂鸣器频率控制(单响)、蜂鸣器报警(频带控制,多响))的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。