- 1、本文档共17页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
-+-–-
西 南 交 通 大 学
课程设计实习报告
水位显示与控制
(第八组)
年 级:
学 号:
姓 名: 专 业:
指导老师:
2013年7月
设计任务及要求
设计并制作一种水位显示与控制电路。其原理框图如下。
基本要求:
用10个发光二极管作为水位高低的指示
图1 系统框图
要求:
1)水位传感器由555电路构成,输出为不同频率的方波。
2)频率/水位Ⅰ实际就是一个并行比较器,这里用CPLD来实现,即粗略给出水位范围再由LED BAR显示出来。
3)频率/水位Ⅱ主要是除法运算和减法运算,即精确计算出水位,也可以由CPLD完成。
4)根据计算出的水位给出控制信号(如水已满,无水,或继续加水)
5)根据计算出的水位用7段LED动态显示出来
摘 要
用QuartusII软件Verilog语言编程,包括频率计数器、比较器、除法器、减法器、二进制转BCD码、动态扫描器、译码器、Motor驱动等模块单元,然后利用这些单元整合成功能电路,在计算机中模拟成功后下载到EPC2T114C8芯片中,以此为控制中心,对整个电路进行控制。
用漆包线和水杯做成电容型水位感应器,水位的高低可以改变电容的大小,以此作为信息采集平台。电容变化信息通过频率计数器和555构成的振荡器进行波形处理,再经过比较器电路处理后经10个LED灯的亮灭粗略显示水位高低。
提高部分则进是通过除法器,减法器,二进制转BCD码,动态扫描,译码等单元模块对信号进一步处理,以毫米为单位通过四位数码管精确显示水位高低及变化情况。
通过对采集频率信号的分析,也可采用Motor电机通过抽水、放水等操作实现对水位的控制。
关键词:QuartusII; Verilog; 并行比较计数器; Motor; 水位传感器; 555电路; 扫描驱动; 数码管等
总体方案:
传感器
自制水杯+漆包线+导线
电容效应代替555中电容而改变555输出信号频率。实物图如下:
2、555
利用555构成振荡电路对传感器传输信号进行处理,产生代表水位信息的脉冲信号,不同水位对应不同电容,从而对应不同频率。图如下:
晶振
事先内封于实验板上的50MHZ晶振
频率计数模块
总体分为分频+并行频率计数+锁存
分频器:
分频器通过调用w_count1模块,位数设置为20位,50M分频,再经过FenPin模块二分频。
频率计数器:
频率计数模块通过自编程序生成元器件实现,此处因程序所占逻辑单元过大而先对555输出频率进行1000000分频再处理,此方法会将频率百位及以下位舍去而造成误差,但在允许范围内。程序代码如下:
module W_count1(clkn,clk,W_counter);
input clkn,clk;
output[15:0] W_counter;//Dai Ce 555 signal
reg clk_2s; //1s signal output
reg[15:0] W_counter;
reg[15:0] data_out;
parameter N=100000000;
integer n=0;
always@(posedge clk)
begin
if(nN-1) n=0;
else n=n+1;
if (n(N/2)) clk_2s=1b1;
else clk_2s=1b0; //1s Fen Pin
end
always@(posedge clkn)
begin
if(clk_2s==1b1)
data_out=data_out+1;
else
begin
if(data_out!=0)
W_counter=data_out;
data_out=0;
end
end //signal Count
endmodule
⒌ LED驱动及显示模块
比较器通过编写程序实现,程序代码如下:
module led_count(data,led,cout);
input[15:0] data; //input signal
output[9:0] led; //blue LED
output cout; //red LED
reg cout;
reg[9:0] led;
always@(data)
begin
if(data16d17302)
begin
led=b0000000000;
cout=1b1;//warning empty
en
文档评论(0)