习题6 数控式可逆步进调压直流稳压电源
6.1数控式可逆步进调压直流稳压电源设计要求
1.分十档位控制输出电压;
2.输出直流电压1.5V~15V。步进值1.5V。即如表6.1所示 表6.1  档位与输出直流电压 档位
1
2
3
4    5    6 7 8 9
10
输出电压(V)
1.5    3.0    4.5
6.0
7.5
9.0
10.5
12.0
13.5 15.0
3.十个档位用数码管显示
6.2数控式可逆步进调压直流稳压电源的原理及硬件电路
LM317是正电压可调式三端稳压器、LM337是负电压可调式三端稳压器其管脚图如图6.1
所示。由LM317正电压可调式三端稳压器组成的典型可调直流稳压电源电路如图6.2所示。                输出电压V R
R U W
O 25.1)1(×+
=,调节W R 就可调节输出电压。
图6.1  LM317是正电压可调式三端稳压器和LM337是负电压可调式三端稳压器管脚图 特别提示:LM317、LM337,一个是正电压可调、一个是负电压可调,输入、输出管脚定义不同。
图6.2  典型可调直流稳压电源电路
档位控制单元电路设计是根据图6.2输出电压V R
R U W
O 25.1)1(×+
=中的W R 分档进行设计。如图6.3所示。W R 为1R ~10R ,R 取240Ω,1R 取48Ω。2R ~10R 取288Ω,W R 数值变化就使输出电压变化。输出直流电压变化范围1.5V~15V,步进值1.5V。输出直流电
压档位与电阻的关系如表6.2所示
表6.2  输出直流电压档位与电阻的关系
三极管导通 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10
接入电阻 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10
档位    1    2    3    4    5    6 7 8 9 10
输出电压(V)    1.5    3.0    4.5  6.07.59.010.512.013.5 15.0
图6.3  数控式可逆步进调压直流稳压电源硬件电路
6.3数控式可逆步进调压直流稳压电源的软件设计思想及源程序
6.3.1软件设计思想
数控式可逆步进调压直流稳压电源程序设计由三部分组成:十进制计数器(LS192);二-十进制译码器(DECODER_410);数码显示译码器(DISP)。如图6.4所示。
十进制计数器(LS192):实现清零、加、减、置数。RES高电位清零;ADD是计数脉冲,A=1时ADD是加计数脉冲,A=0时ADD是减计数脉冲;SET是置数控制端,SET=1时置数将输入CIN[3..0]送到输出COUT[3..0]。因此,ADD计数脉冲可以控制档位的增减,CIN[3..0]可以直接控制档位,CIN[3..0]是几,档位就是几。
二-十进制译码器(DECODER_410):是将输入BCD码的10个代码译成10个高、低电平,控制三极管的导通,得到10个档的直流电压。
数码显示译码器(DISP):实现十个档位用数码管显示。
图6.4  数控式可逆步进调压直流稳压电源由程序生成的电路 6.3.2数控式可逆步进调压直流稳压电源源程序
1.十进制计数器(LS192)源程序及其模块
十进制计数器(LS192)模块如图6.5所示。
图6.5  十进制计数器(LS192)模块
十进制计数器(LS192)源程序
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity ls192  is
port(res,add,set,a:in std_logic;
cin:in std_logic_vector(3 downto 0);
cout:out std_logic_vector(3 downto 0));
end ls192;
architecture rtl of ls192 is
signal q: std_logic_vector(3 downto 0);
begin
process(res,add)
decoderbegin
if res='0' then
q<="0000";
elsif  set='1'  then
q<=cin;
elsif  (add'event and add='1') then
if a='1' then
if(q=9)then
q<="1001";
else
q<=q+1;
end if;
elsif a='0'then
if (q=0) then
q<="0000";
else
q<=q-1;
end if;
end if;
end if;
end process;
cout<=q;
end rtl;
2.二-十进制译码器(DECODER_410) 源程序及其模块
二-十进制译码器(DECODER_410) 模块如图6.6所示。
图6.6  二-十进制译码器(DECODER_410) 模块 二-十进制译码器(DECODER_410) 源程序
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity decoder_410 is
port(d:in std_logic_vector(3 downto 0);
q: out std_logic_vector(9 downto 0));
end decoder_410;
architecture rtl of decoder_410 is
begin
process(d)
begin
case d is
when"0000"=>q<="0000000001";
when"0001"=>q<="0000000010";
when"0010"=>q<="0000000100";
when"0011"=>q<="0000001000";
when"0100"=>q<="0000010000";
when"0101"=>q<="0000100000";
when"0110"=>q<="0001000000";
when"0111"=>q<="0010000000";
when"1000"=>q<="010*******";
when"1001"=>q<="1000000000";
when others=>q<="0000000000";
end case;
end process;
end rtl;
3.数码显示译码器(DISP) 源程序及其模块
数码显示译码器(DISP) 模块如图6.7所示。
图6.7  数码显示译码器(DISP) 模块 数码显示译码器(DISP) 源程序
library ieee;
use ieee.std_logic_1164.all;
entity disp is
port(d:in std_logic_vector(3 downto 0);
o:out std_logic_vector(6 downto 0));
end disp;
architecture rtl of disp is
begin
process (d)
begin
case d is
when"0000"=>o<="0111111";
when"0001"=>o<="0000110";
when"0010"=>o<="1011011";
when"0011"=>o<="1001111";
when"0100"=>o<="1100110";
when"0101"=>o<="1101101";
when"0110"=>o<="1111101";
when"0111"=>o<="0000111";
when"1000"=>o<="1111111";
when others=>o<="1101111";
end case;
end process;
end rtl;
特别提示:图6.4是在图形输入方式下画出来的。
图6.4的输出分别接到图6.3的三极管和数码管上。