基于VHDL的电子计时器的设计方法详解
本文为大家介绍电子计时器的VHDL设计方法。
设计要求
设计一个电子计时器,给定时钟信号为512HZ,要求系统达到以下功能:
(1)用6个数码管分别显示时、分、秒,计时范围为00:00:00~23:59:59。
(2)计时精度是1s。
(3)具有启/ 停开关, 复位开关。
总体方框图
内部各功能模块
本系统由六十进制计数器模块、二十四进制计数器模块、分频模块执行计时功能, 输入信号是512Hz,通过分频后为1Hz,时钟信号是1Hz作为计时器的秒输入,秒为60进制计数器,分也为60进制计数器,小时采用二十四进制计数器, 各级进位作为高位的使能控制。
六十进制计数器模块
设计一个八位的六十进制计数器模块,输入信号为en、reset、clk,分别为使能、复位和时钟信号,输出信号为qa[3„0]、qb[3„0]、rco,分别为低4位输出、高4位输出和进位位。
六十进制计数器
示波形分析
秒计数器的仿真波形图
利用60进制计数器完成00到59的循环计数功能,当秒计数至59时,再来一个时钟脉冲则产生进位输出,即enmin=1;reset作为复位信号低电平有效,即高电平时正常循环计数,低电平清零。因为这种60进制的VHDL语言是很好写的,它并不复杂,再说我们必须要学会这些基本的硬件语言的描写。
分钟计数器的仿真波形图
VHDL源程序
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_unsigned.ALL;
ENTITY count60 IS
PORT( en,Reset,clk: in STD_LOGIC;
qa: out STD_LOGIC_VECTOR(3 DOWNTO 0);
qb: out STD_LOGIC_VECTOR(3 DOWNTO 0);
rco: OUT STD_LOGIC); END count60;
ARCHITECTURE a OF count60 IS
BEGIN
process(clk)
variable tma: STD_LOGIC_VECTOR(3 DOWNTO 0);
variable tmb: STD_LOGIC_VECTOR(3 DOWNTO 0); begin
If Reset =‘0’then tma:=“0000”;
tmb:=“0000”;
elsif clk‘event and clk=’1‘ then
if en=’1‘ then
rco<=tmb(2)and tmb(0)and tma(3)and tma(0);
if tma=“1001” then
tma:=“0000”;
if tmb=“0101” then
tmb:=“0000”;
else tmb:=tmb+1;
end if;
else tma:=tma+1;
end if;
end if;
end if;
qa<=tma;qb<=tmb; end process; END a;
二十四进制计数器模块
设计一个八位的二十四进制计数器模块,输入信号为en、reset、clk,分别为使能、复位和时钟信号,输出信号为qa[3„0]、qb[3„0],分别为低4位输出、高4位输出。
二十四进制计数器示意图
波形分析
小时计数器的仿真波形图
VHDL源程序
小时计数模块利用24进制计数器,通过分钟的进位信号的输入可实现从00到23的循环计数。
该模块部分VHDL 源程序如下:
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_unsigned.ALL;
ENTITY count24 IS
PORT( en,Reset,clk: in STD_LOGIC;
qa: out STD_LOGIC_VECTOR(3 DOWNTO 0);
qb: out STD_LOGIC_VECTOR(3 DOWNTO 0));
END count24;
ARCHITECTURE a1 OF count24 IS
BEGIN
process(clk)
variable tma: STD_LOGIC_VECTOR(3 DOWNTO 0);
variable tmb: STD_LOGIC_VECTOR(3 DOWNTO 0);
begin
If Reset = ‘0’then tma:=“0000”;
tmb:=“0000”; else
if clk‘event and clk=’1‘ then
if en=’1‘ then
if tma=“1001” then
tma:=“0000”;
tmb:=tmb+1;
elsif tmb=“0010” and tma=“0011” then
tma:=“0000”;
tmb:=“0000”;
else tma:=tma+1;
end if;
end if;
end if;
end if;
qa<=tma;
qb<=tmb;
end process;
END a1;
分频器模块
设计一个分频器,要求将输入512HZ的时钟信号分频为1HZ的时钟信号作为计时器的秒输入。输入信号为clk和rst,分别为时钟信号和复位信号,输出信号为clk_out,为分频器1HZ的时钟信号输出。
分频器示意图
VHDL 源程序
该模块部分VHDL 源程序如下:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY fenpinqi IS
PORT (CLK,RST:in std_logic;
CLK_OUT:out std_logic);
END fenpinqi;
ARCHITECTURE behav OF fenpinqi IS
signal clk_data:std_logic;
SIGNAL CNT6 :
INTEGER := 0;
BEGIN
PROCESS(CLK)
BEGIN
IF RST = ‘0’ THEN CNT6<=0
ELSIF CLK‘EVENT AND CLK=’1‘ THEN
IF CNT6=255 THEN
clk_data<=NOT clk_data;
CNT6<=0;
ELSE CNT6<=CNT6+1;
END IF;
END IF;
CLK_OUT<=clk_data;
END PROCESS;
END behav;
LED显示模块
LED有着显示亮度高,响应速度快的特点,最常用的是七段式LED显示器,又称数码管。七段LED显示器内部由七个条形发光二极管和一个小圆点发光二极管组成,根据各管的亮暗组合成字符。
LED数码管的g~a七个发光二极管因加正电压而发亮,因加零电压而不能发亮,不同亮暗的组合就能形成不同的字形,这种组合称之为字形码(段码),如显示”0”,字形码为3fh。
LED数码管结构图
数码管的接口有静态接口和动态接口。动态接口采用各数码管循环轮流显示的方法,当循环显示频率较高时,利用人眼的暂留特性,看不出闪烁显示现象,这种显示需要一个接口完成字形码的输出(字形选择),另一接口完成各数码管的轮流点亮(数位选择)。
将二十四进制计数器和2个六十进制计数器的输出作为LED显示模块的输入,在时钟信号的控制下通过此模块完成6个LED数码管的显示,输出信号为WEI[2…0]和LED[6…0],分别为位选信号和段码输出。
LED显示示意图
VHDL 源程序
该模块部分VHDL 源程序如下:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY clock1 IS
PORT(CLK: IN STD_LOGIC;
S1, S2, S3, S4, S5, S6: IN STD_LOGIC_VECTOR(3 DOWNTO 0);
WEI: OUT STD_LOGIC_VECTOR(2 DOWNTO 0);
LED: OUT STD_LOGIC_VECTOR(6 DOWNTO 0));
END ENTITY;
ARCHITECTURE behave OF clock1 IS
SIGNAL CNT6 : INTEGER RANGE 0 TO 5 := 0;
SIGNAL SHUJU: STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
PRO1:PROCESS(CLK)
BEGIN
IF CLK‘EVENT AND CLK = ’1‘ THEN
CNT6 <= CNT6 + 1;
CASE CNT6 IS
WHEN 0 => WEI <= “000”; SHUJU <= S1;
WHEN 1 => WEI <= “001”; SHUJU <= S2;
WHEN 2 => WEI <= “010”; SHUJU <= S3;
WHEN 3 => WEI <= “011”; SHUJU <= S4;
WHEN 4 => WEI <= “100”; SHUJU <= S5;
WHEN 5 => WEI <= “101”; SHUJU <= S6;
CNT6<=0;
WHEN OTHERS => NULL;
END CASE;
END IF;
END PROCESS;
PRO2: PROCESS(SHUJU)
BEGIN
CASE SHUJU IS
WHEN “0000” => LED<= “1111110”
WHEN “0001” => LED<= “0110000”
WHEN “0010” => LED<= “1101101”
WHEN “0011” => LED<= “1111001”
WHEN “0100” => LED<= “0110011”
WHEN “0101” => LED<= “1011011”
WHEN “0110” => LED<= “1011111”
WHEN “0111” => LED<= “1110000”
WHEN “1000” => LED<= “1111111”
WHEN “1001” => LED<= “1111011”
WHEN others=> LED<= “0000000”
END CASE;
END PROCESS;
END
顶层系统联调
通过上面的分频器,两个60进制的计数器,一个12/24进制的计数器,6选1扫描器,7段数码显示器,设计如图所示的顶层。规定每一模块的功能和各模块之间的接口。同时整个计数器有清零。 设计思想,利用脉冲时钟产生一个1Hz的信号来实现一秒钟的控制,要产生1Hz的信号就要用到分频器,实验中用512分频器把512Hz的信号变成1Hz。然后信号进入控制秒的计数器,当第60个脉冲时钟到来时,产生一个进位信号, 送到控制分的计数器,同理,当第60个脉冲时钟到来时,产生一个进位信号,送到控制小时的计数器。当小时计数器计数到12/24时,完成一个周期,跳转到零。输出是由动态扫描器来完成的。扫描器时钟取至前面分频未结束时的一个512Hz的信号。这样就能够在7段数码显示管上,以512Hz的频率扫描显示出时钟的数字变化。
通过元件例化将各个模块连接起来,组成一个整体。
元件例化就是将预先设计好的设计实体定义为一个元件,然后利用特定的语句将此元件与当前的设计实体中的指定端口相连接,从而为当前设计实体引入一个新的低一级的设计层次。所定义的例化元件相当于一个要插在这个电路系统板上的芯片,而当前设计实体中指定的端口则相当于这块电路板上准备接受此芯片的一个插座。
自制电路板最常用的五种方法
1、描绘法
是制作电路板所需要工具最少,制作过程最简单的一种方法。但精度不是很高
2、感光板法制作较简单,特别是大面积接地线条时更能显示出优势。精度较高。但制作细线条时曝光需要经验。
3、感光干膜法这种方法比起感光板法在成本上占有一定的优势,比起热转印法在制作电路质量上有一定的优势。但她的缺点是操作上有一定的难度,不象热转印法和感光板法那样简单。因此到低选用那种方法还应该根据您自己的感觉。
4、热转印法制作较简单,特别是细线条时更能显示出优势,制作精度很大程度取决于设备,与人操作熟练程序基本上无关。初学者也能制作出精美的线路板。但需要激光打印机,对于大面积接地线条往往会有一些不足。
5、丝网印法制作相对复杂,对操作者的熟练程度有很大关系,特别是制版时的曝光控制很是关键,但对细线条和大面积接地线均能很好的表现。特别是在大批量生产时更能显示出她的优势。如果只需要制作几张线路板您会觉得这种方法很麻烦,但当您需要制作几百张几千张线路板时,那么您非选她不可。
遥控车电路板的接法
GND是地,电池负极,应该还有一个点接电池正极,可能是VDD,
F forward 和B backward 两条线接前进/後退电机,
L left 和 R right 两条线接左右转向电机,
LED + - 应该是接收板上的某个功能的指示灯。
遥控接收电路工作原理
该遥控接收电路主要以集成块IC2 (RX-2)为核心及其他元件组成,其 工作原理见图2所示。 当操作遥控器上的各功能键时, 所发出的高频信号经遥控车上的天线 接收后,由超再生接收电路解调出编 码控制脉冲信号,再经电阻R3、电 容C7耦合,送到接收集成块IC2的14 脚,经其内部放大处理后,从其相应 控制端输出控制信号,送到电机驱动 控制电路。电动机驱动电路都是采用 双端平衡方式,改变其两端工作电压 极性,就可控制电动机转动方向。当 输出的是前进信号时,集成块IC2的11 脚输出高电平控制信号,三极管VT8、 VT10、VT11随之导通,电动机M1正 转,遥控车前进。当输出后退,左右 转向控制信号时,用户可自已分析电路原理。
遥控玩具汽车电路原理图
遥控发射电路
该遥控发射电路主要以集成块IC1 (TX-2BS)为核心及其他元件组成, 其工作原理如图1所示。集成块IC1的 3、11脚为电源供应端;其1、16脚为 左右转弯控制信号输入端;4、5脚为 前进和后退控制信号输入端;6脚为 加速控制信号输入端;7、8、9脚为 空端;10、12脚为编码信号控制输出 端;13、14脚外接振荡电阻。三极管 VT2及晶体B1等构成载波振荡器,其振 荡频率为35MHz。
在接通电源后,操作遥控器中的 功能键,其集成块IC1相应控制脚接 地,内部对应的功能选通,开始进行 编码产生与操作功能键相一致的编码 信号,然后由其10脚输出控制编码脉 冲信号,同时其12脚输出高电平控制 信号,发射二极管LED 亮,三极管VT2的B极有高电平信号而导通工作,三极 管VT2与晶体振荡器B1组成的载波振荡 器工作,产生35MHz的振荡载波频率, 经电容C3耦合到三极管VT1的B极。当 集成块IC1(TX-2BS)的10脚输出高 电平控制编码脉冲信号时,三极管VT1 导通工作,其功能控制编码脉冲信号 及三极管VT2及晶体振荡器B1产生的 35MHz载波经三极管VT1调制放大后, 经电容C6、电感L3耦合发射出去。
遥控车充电电路
由于微型无线遥控车其自身较 小,没有空间安装5号电池,生产厂家就采用三节纽扣电池串联使用。当遥控车没有电时,就把遥控手柄中的插头插入遥控车的插座充电即可使用,其充电电路工作原理见图1中虚线部分。
当微型车无电,把遥控手柄中的 插头插入遥控车后,遥控器内的+6V电 压通过连接插座进入到遥控车充电电 路,该电压加到三极管VT7的C极;同 时还通过电阻R21,电阻R23加到三极 管VT4的B极和E极;通过电阻R20、电 阻R25、电容C10加到三极管VT3的B极 和C极。由于电容C10两端电压瞬间不 能突变,就给三极管VT3的B极提供一 定的偏置导通电压,三极管VT3导通, 其C极电位降低,三极管VT4的B极电位 降低而导通,+6V电压经过三极管VT4 的E、C极,电阻R18加到三极管VT7的 B极,三极管VT7导通,开始给遥控车 内电池组充电;同时,该电压经电阻R22给电容CH充电,充电指示灯LED1 亮。在电容CH充电时,又给三极管VT3 的B极提供了一定的偏压,从而加速了 三极管VT3、VT4、VT7的导通,随后电 容的充电电流越来越小,三极管VT3、 VT4、VT7相应进入截止状态,充电指 示灯LED1灭,表明给遥控车内电池组 充电结束。
相关文章
发表评论