您的位置:首页 > 编程语言

AVR+FPGA实现六路闭环电流控制程序

2011-07-07 00:48 337 查看
此程序作为我的网络存档之用,看的懂的话也欢迎参考。
--2011.7.7凌晨版本
--加入闭环控制
--原有程序大幅改写,去掉了部分编译警告

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;

entity XTKZQ is
port(
rst,clk : in std_logic; --时钟和复位信号,复位信号由AVR初始化手动给出
--avr 读写相关信号线
ale,rd,wr : in std_logic; --地址锁存、读、写信号
ad : inout std_logic_vector(7 downto 0); --地址数据复用信号线

--LED指示灯
led1,led2 : out std_logic;

--pwm
pwm1,pwm2,pwm3,pwm4,pwm5,pwm6 : out std_logic;

--ad8364信号线
adc_d: in std_logic_vector(15 downto 0);
adc_a0,adc_a1,adc_a2: out std_logic;
adc_reset: out std_logic;
adc_cs: out std_logic;
adc_wr: out std_logic;
adc_rd: out std_logic;
adc_holda,adc_holdb,adc_holdc: out std_logic;
adc_eoc: in std_logic;
adcclk_out: out std_logic;
--放大增益控制,此处每一路AD设置了两级放大增益
sw11: out std_logic;--控制模拟开关,调节放大增益
sw12: out std_logic;
sw21: out std_logic;
sw22: out std_logic;
sw31: out std_logic;
sw32: out std_logic;
sw41: out std_logic;
sw42: out std_logic;
sw51: out std_logic;
sw52: out std_logic;
sw61: out std_logic;
sw62: out std_logic
);
end XTKZQ;

architecture art of XTKZQ is
------------------------------------------------全局信号定义-------------------------------------------------------------------
--avr访问操作相关信号
signal adr : std_logic_vector(7 downto 0); --地址寄存器
signal data_buf : std_logic_vector(7 downto 0);
signal data_outctl : std_logic;
--pwm控制部分有三组变量,第一组是由avr写入,控制相应的占空比,这个是供调试使用
--第二组是自动pid控制使用的
--第三组是pwm计数使用的,根据pid_sw开关的设置决定读入第一组还是第二组的值
--pwm部分相关寄存器定义 寄存器暂时定义为8位
signal pwmfreq_reg : std_logic_vector(7 downto 0);
signal pwmocr1_reg : std_logic_vector(7 downto 0);
signal pwmocr2_reg : std_logic_vector(7 downto 0);
signal pwmocr3_reg : std_logic_vector(7 downto 0);
signal pwmocr4_reg : std_logic_vector(7 downto 0);
signal pwmocr5_reg : std_logic_vector(7 downto 0);
signal pwmocr6_reg : std_logic_vector(7 downto 0);

--pwm部分PID调节中用到的相关变量
signal pwmfreq_pid : std_logic_vector(7 downto 0);
signal pwmocr1_pid : std_logic_vector(7 downto 0);
signal pwmocr2_pid : std_logic_vector(7 downto 0);
signal pwmocr3_pid : std_logic_vector(7 downto 0);
signal pwmocr4_pid : std_logic_vector(7 downto 0);
signal pwmocr5_pid : std_logic_vector(7 downto 0);
signal pwmocr6_pid : std_logic_vector(7 downto 0);

--PWM计数用到的相关变量,这里定义为8位
signal pwm_cnt : std_logic_vector(7 downto 0);
signal pwmfreq : std_logic_vector(7 downto 0);
signal pwmocr1 : std_logic_vector(7 downto 0);
signal pwmocr2 : std_logic_vector(7 downto 0);
signal pwmocr3 : std_logic_vector(7 downto 0);
signal pwmocr4 : std_logic_vector(7 downto 0);
signal pwmocr5 : std_logic_vector(7 downto 0);
signal pwmocr6 : std_logic_vector(7 downto 0);

--自动闭环控制相关寄存器定义
signal pid_sw : std_logic_vector(7 downto 0); --闭环控制开关,此寄存器为0x01时开启自动闭环控制

--六个AD寄存器位,用于存放设定的AD值
signal adcset1h_reg,adcset1l_reg,adcset2h_reg,adcset2l_reg : std_logic_vector(7 downto 0);
signal adcset3h_reg,adcset3l_reg,adcset4h_reg,adcset4l_reg : std_logic_vector(7 downto 0);
signal adcset5h_reg,adcset5l_reg,adcset6h_reg,adcset6l_reg : std_logic_vector(7 downto 0);
--时钟分频相关变量
signal clkcnt : std_logic_vector(16 downto 0);
signal adc_clk : std_logic; --adc时钟信号
signal pwm_clk : std_logic; --pwm时钟信号
signal pid_clk : std_logic; --pid时钟信号,用于调节pid的反应速度

--led指示相关变量
signal led_clk : std_logic; --led时钟信
signal led1_cnt : std_logic_vector(7 downto 0);
signal led2_cnt : std_logic_vector(7 downto 0);
signal led1s : std_logic;
signal led2s : std_logic;

--ads8364信号
signal adcdata1h_reg,adcdata1l_reg,adcdata2h_reg,adcdata2l_reg : std_logic_vector(7 downto 0);
signal adcdata3h_reg,adcdata3l_reg,adcdata4h_reg,adcdata4l_reg : std_logic_vector(7 downto 0);
signal adcdata5h_reg,adcdata5l_reg,adcdata6h_reg,adcdata6l_reg : std_logic_vector(7 downto 0);
signal adc_data_buf : std_logic_vector(15 downto 0);

--定义读取过程的各个状态
--13位控制分别为 hold adc_a rd 状态机状态5位 hhhabcr
---------------------------------------------------98365
constant st0 :std_logic_vector(11 downto 0):="000000100000";--启动转换
constant st1 :std_logic_vector(11 downto 0):="111000100001";--进入17个周期等待转换结束,不检测EOC
constant st2 :std_logic_vector(11 downto 0):="111000100010";
constant st3 :std_logic_vector(11 downto 0):="111000100011";
constant st4 :std_logic_vector(11 downto 0):="111000100100";
constant st5 :std_logic_vector(11 downto 0):="111000100101";
constant st6 :std_logic_vector(11 downto 0):="111000100110";
constant st7 :std_logic_vector(11 downto 0):="111000100111";
constant st8 :std_logic_vector(11 downto 0):="111000101000";
constant st9 :std_logic_vector(11 downto 0):="111000101001";
constant st10 :std_logic_vector(11 downto 0):="111000101010";
constant st11 :std_logic_vector(11 downto 0):="111000101011";
constant st12 :std_logic_vector(11 downto 0):="111000101100";
constant st13 :std_logic_vector(11 downto 0):="111000101101";
constant st14 :std_logic_vector(11 downto 0):="111000101110";
constant st15 :std_logic_vector(11 downto 0):="111000101111";
constant st16 :std_logic_vector(11 downto 0):="111000110000";
constant st17 :std_logic_vector(11 downto 0):="111000110001";
constant st18 :std_logic_vector(11 downto 0):="111000110010";
constant st19 :std_logic_vector(11 downto 0):="111000010011";--读ch1数据
constant st20 :std_logic_vector(11 downto 0):="111001110100";
constant st21 :std_logic_vector(11 downto 0):="111001010101";--读ch2数据
constant st22 :std_logic_vector(11 downto 0):="111010110110";
constant st23 :std_logic_vector(11 downto 0):="111010010111";--读ch3数据
constant st24 :std_logic_vector(11 downto 0):="111011111000";
constant st25 :std_logic_vector(11 downto 0):="111011011001";--读ch4数据
constant st26 :std_logic_vector(11 downto 0):="111100111010";
constant st27 :std_logic_vector(11 downto 0):="111100011011";--读ch5数据
constant st28 :std_logic_vector(11 downto 0):="111101111100";
constant st29 :std_logic_vector(11 downto 0):="111101011101";--读ch6数据
constant st30 :std_logic_vector(11 downto 0):="111000111110";

signal adc1_datasum :std_logic_vector(22 downto 0);--对采样数据进行累加存储
signal adc2_datasum :std_logic_vector(22 downto 0);
signal adc3_datasum :std_logic_vector(22 downto 0);
signal adc4_datasum :std_logic_vector(22 downto 0);
signal adc5_datasum :std_logic_vector(22 downto 0);
signal adc6_datasum :std_logic_vector(22 downto 0);

signal adcadd_cnt :std_logic_vector(7 downto 0);--累加次数统计
signal state :std_logic_vector(11 downto 0);--用于状态跳转
signal readst :std_logic_vector(3 downto 0);--adc_a,在另一个进程中根据此信号 选择输出的数据

begin

------------------------------------------------时钟分频-------------------------------------------------------------------
process(rst,clk) is
begin
if rst='0' then
clkcnt <= "00000000000000000";
elsif(clk'event and clk = '1') then
if(clkcnt = "11111111111111111") then
clkcnt<= "00000000000000000";
else
clkcnt <= clkcnt+1;
end if;
end if;
end process;

pwm_clk <= clkcnt(2); --2 8分频,8位计数的话PWM波频率为12KHZ
led_clk <= clkcnt(15); --15 分频led时钟
adc_clk <= clkcnt(2);
pid_clk <= clkcnt(13); --13 2^14=16384,频率为1525hz
adcclk_out <= clkcnt(2);--2 8分频,ADC时钟速率为3.125MHz,22个ADC时钟采样一次数据则采样速度为142K

------------------------------------------------avr访问操作----------------------------------------------------------------
data_outctl <= (not ale) and (not rd) and (wr);
ad <= data_buf when (data_outctl='1') else "ZZZZZZZZ";

--锁存avr地址数据
process(rst,ale) is
begin
if rst='0' then
adr <= "00000000";
elsif(ale'event and ale='0') then --在ale信号的下降沿锁存地址数据
adr <= ad;
end if;
end process;

-------------------------------------avr写数据-----------------------------------
process(rst,wr,ale) is
begin
if rst='0' then --对各寄存器给定初值
pwmfreq_reg <= "11111111";
pwmocr1_reg <= "00000000";
pwmocr2_reg <= "00000000";
pwmocr3_reg <= "00000000";
pwmocr4_reg <= "00000000";
pwmocr5_reg <= "00000000";
pwmocr6_reg <= "00000000";
--自动控制设定寄存器初值
adcset1h_reg <= "10000000";-----------------------------------fangz
adcset1l_reg <= "00000000";
adcset2h_reg <= "00000000";
adcset2l_reg <= "00000000";
adcset3h_reg <= "00000000";
adcset3l_reg <= "00000000";
adcset4h_reg <= "00000000";
adcset4l_reg <= "00000000";
adcset5h_reg <= "00000000";
adcset5l_reg <= "00000000";
adcset6h_reg <= "00000000";
adcset6l_reg <= "00000000";

pid_sw <= "00000000";

elsif (wr='1' and wr'event) then --在wr信号上升沿进行写操作
if ale = '0' then
case adr is
when "00010000" => pwmfreq_reg <= ad;--10
when "00010001" => pwmocr1_reg <= ad;--11
when "00010010" => pwmocr2_reg <= ad;
when "00010011" => pwmocr3_reg <= ad;
when "00010100" => pwmocr4_reg <= ad;
when "00010101" => pwmocr5_reg <= ad;
when "00010110" => pwmocr6_reg <= ad;--16

when "00100001" => adcset1h_reg <= ad;--21
when "00100010" => adcset1l_reg <= ad;
when "00100011" => adcset2h_reg <= ad;
when "00100100" => adcset2l_reg <= ad;
when "00100101" => adcset3h_reg <= ad;
when "00100110" => adcset3l_reg <= ad;--26
when "00100111" => adcset4h_reg <= ad;--27
when "00101000" => adcset4l_reg <= ad;
when "00101001" => adcset5h_reg <= ad;
when "00101010" => adcset5l_reg <= ad;
when "00101011" => adcset6h_reg <= ad;
when "00101100" => adcset6l_reg <= ad;--2C

when "00101101" => pid_sw <= ad;--2D

when others =>
pwmfreq_reg <= pwmfreq_reg;
pwmocr1_reg <= pwmocr1_reg;
pwmocr2_reg <= pwmocr2_reg;
pwmocr3_reg <= pwmocr3_reg;
pwmocr4_reg <= pwmocr4_reg;
pwmocr5_reg <= pwmocr5_reg;
pwmocr6_reg <= pwmocr6_reg;

adcset1h_reg<= adcset1h_reg;
adcset1l_reg<= adcset1l_reg;
adcset2h_reg<= adcset2h_reg;
adcset2l_reg<= adcset2l_reg;
adcset3h_reg<= adcset3h_reg;
adcset3l_reg<= adcset3l_reg;
adcset4h_reg<= adcset4h_reg;
adcset4l_reg<= adcset4l_reg;
adcset5h_reg<= adcset5h_reg;
adcset5l_reg<= adcset5l_reg;
adcset6h_reg<= adcset6h_reg;
adcset6l_reg<= adcset6l_reg;
pid_sw <= pid_sw;
end case;
end if;
end if;
end process;

------------------------------------avr读数据-------------------------------------
process(rst,rd,ale) is
begin
if rst='0' then
data_buf<="00000000";
elsif (rd='0'and rd'event) then
case adr is
when "00000001" => data_buf <= adcdata1h_reg;--1
when "00000010" => data_buf <= adcdata1l_reg;--2
when "00000011" => data_buf <= adcdata2h_reg;--3
when "00000100" => data_buf <= adcdata2l_reg;--4
when "00000101" => data_buf <= adcdata3h_reg;--5
when "00000110" => data_buf <= adcdata3l_reg;--6
when "00000111" => data_buf <= adcdata4h_reg;--7
when "00001000" => data_buf <= adcdata4l_reg;--8
when "00001001" => data_buf <= adcdata5h_reg;--9
when "00001010" => data_buf <= adcdata5l_reg;--A
when "00001011" => data_buf <= adcdata6h_reg;--B
when "00001100" => data_buf <= adcdata6l_reg;--C

when "00010000" => data_buf <= adcset1h_reg;
when "00010001" => data_buf <= adcset1l_reg;
when others =>
data_buf <= "ZZZZZZZZ";
end case;
end if;
end process;
------------------------------------led指示-------------------------------------
process(led_clk)is
begin
if(led_clk'event and led_clk='1') then
led1_cnt <= led1_cnt+1;
if (led1_cnt >= pwmocr1) then
led1s <= not led1s;
led1_cnt <="00000000";
end if;
end if;
end process;
led1<=led1s;
process(led_clk)is
begin
if(led_clk'event and led_clk='1') then
led2_cnt <= led2_cnt+1;
if (led2_cnt >= pwmocr2) then
led2s <= not led2s;
led2_cnt <="00000000";
end if;
end if;
end process;
led2<=led2s;

--------------------------------------pwm---------------------------------------
process(pwm_clk,rst) is
begin
if rst='0' then
pwm_cnt<="00000000";
sw11<= '0';
sw12<= '0';
sw21<= '0';
sw22<= '0';
sw31<= '0';
sw32<= '0';
sw41<= '0';
sw42<= '0';
sw51<= '0';
sw52<= '0';
sw61<= '0';
sw62<= '0';
elsif(pwm_clk'event and pwm_clk='1') then
if(pid_sw="00000001") then--如果pid控制寄存器开启,则pwm计数使用pid的调节量
pwmocr1<=pwmocr1_pid;
pwmocr2<=pwmocr2_pid;
pwmocr3<=pwmocr3_pid;
pwmocr4<=pwmocr4_pid;
pwmocr5<=pwmocr5_pid;
pwmocr6<=pwmocr6_pid;
else--否则使用外部给定的量
pwmocr1<=pwmocr1_reg;
pwmocr2<=pwmocr2_reg;
pwmocr3<=pwmocr3_reg;
pwmocr4<=pwmocr4_reg;
pwmocr5<=pwmocr5_reg;
pwmocr6<=pwmocr6_reg;
end if;

if(pwm_cnt >=pwmfreq_reg) then
pwm_cnt <= "00000000";
else
pwm_cnt<=pwm_cnt+1;
end if;

--数据比较模块 这里设计的所有通道频率一致
--第一通道
if(pwm_cnt>= pwmocr1) then
pwm1<= '1';
else
pwm1<= '0';
end if;
--第二通道
if(pwm_cnt>= pwmocr2) then
pwm2<= '1';
else
pwm2<= '0';
end if;
--第三通道
if(pwm_cnt>= pwmocr3) then
pwm3<= '1';
else
pwm3<= '0';
end if;
--第四通道
if(pwm_cnt>= pwmocr4) then
pwm4<= '1';
else
pwm4<= '0';
end if;
--第五通道
if(pwm_cnt>= pwmocr5) then
pwm5<= '1';
else
pwm5<= '0';
end if;
--第六通道
if(pwm_cnt>= pwmocr6) then
pwm6<= '1';
else
pwm6<= '0';
end if;
--可编程增益放大
--此处是根据占空比自动调节放大增益,可以根据实际测量参数改变临界点的值
sw11<= '1';
sw12<= '0';
sw21<= '1';
sw22<= '0';
sw31<= '1';
sw32<= '0';
sw41<= '1';
sw42<= '0';
sw51<= '1';
sw52<= '0';
sw61<= '1';
sw62<= '0';
end if;
end process;
--------------------------------------ads8364------------------------------------
--ads8364控制,默认byte=0,add=0
adc_cs <= '0'; --片选一直选中
adc_wr <= '1';
--ads状态转移
process(adc_clk,rst,state)
begin
if(rst='0') then
state<=st0;
adc_reset<='0';
adc_holda<='1';
adc_holdb<='1';
adc_holdc<='1';
elsif(adc_clk'event and adc_clk='1') then
adc_reset<='1';
case state is
when st0=> state<=st1;
when st1=> state<=st2;
when st2=> state<=st3;
when st3=> state<=st4;
when st4=> state<=st5;
when st5=> state<=st6;
when st6=> state<=st7;
when st7=> state<=st8;
when st8=> state<=st9;
when st9=> state<=st10;
when st10=> state<=st11;
when st11=> state<=st12;
when st12=> state<=st13;
when st13=> state<=st14;
when st14=> state<=st15;
when st15=> state<=st16;
when st16=> state<=st17;
when st17=> state<=st18;
when st18=> state<=st19;
when st19=> state<=st20;
when st20=> state<=st21;
when st21=> state<=st22;
when st22=> state<=st23;
when st23=> state<=st24;
when st24=> state<=st25;
when st25=> state<=st26;
when st26=> state<=st27;
when st27=> state<=st28;
when st28=> state<=st29;
when st29=> state<=st30;
when st30=> state<=st0;
when others=> state<=st0;
end case;
end if;
readst<=state(8 downto 5);
adc_holdc<=state(11);
adc_holdb<=state(10);
adc_holda<=state(9);
adc_a2<=state(8);
adc_a1<=state(7);
adc_a0<=state(6);
adc_rd<=state(5);
end process;
adc_data_buf(14 downto 0) <= adc_d(14 downto 0);--ADC输出为补码形式,转换为单端输入的原码
adc_data_buf(15) <= not adc_d(15);
--------------------------------------求平均------------------------------------
process(rst,adc_clk,pwm_clk,adc_d,pwm_cnt)
begin
if(rst='0')then
adc1_datasum<="00000000000000000000000";
adc2_datasum<="00000000000000000000000";
adc3_datasum<="00000000000000000000000";
adc4_datasum<="00000000000000000000000";
adc5_datasum<="00000000000000000000000";
adc6_datasum<="00000000000000000000000";
adcadd_cnt<="00000000";
elsif(adc_clk'event and adc_clk='0')then
if readst="0000" then
adc1_datasum <= adc1_datasum + adc_data_buf;
adcadd_cnt <= adcadd_cnt + '1';--一次读取状态只需要计数一次
elsif readst="0010" then
adc2_datasum <= adc2_datasum + adc_data_buf;
elsif readst="0100" then
adc3_datasum <= adc3_datasum + adc_data_buf;
elsif readst="0110" then
adc4_datasum <= adc4_datasum + adc_data_buf;
elsif readst="1000" then
adc5_datasum <= adc5_datasum + adc_data_buf;
elsif readst="1010" then
adc6_datasum <= adc6_datasum + adc_data_buf;
end if;
if(adcadd_cnt >= "01111111") then

adcdata1h_reg <= adc1_datasum(22 downto 15);
adcdata1l_reg <= adc1_datasum(14 downto 7);
adcdata2h_reg <= adc2_datasum(22 downto 15);
adcdata2l_reg <= adc2_datasum(14 downto 7);

adcdata3h_reg <= adc3_datasum(22 downto 15);
adcdata3l_reg <= adc3_datasum(14 downto 7);
adcdata4h_reg <= adc4_datasum(22 downto 15);
adcdata4l_reg <= adc4_datasum(14 downto 7);

adcdata5h_reg <= adc5_datasum(22 downto 15);
adcdata5l_reg <= adc5_datasum(14 downto 7);
adcdata6h_reg <= adc6_datasum(22 downto 15);
adcdata6l_reg <= adc6_datasum(14 downto 7);

adc1_datasum<="00000000000000000000000";
adc2_datasum<="00000000000000000000000";
adc3_datasum<="00000000000000000000000";
adc4_datasum<="00000000000000000000000";
adc5_datasum<="00000000000000000000000";
adc6_datasum<="00000000000000000000000";
adcadd_cnt <= "00000000";
end if;
end if;
end process;
--------------------------------------闭环控制------------------------------------
process(rst,pid_clk,pid_sw,adcset1h_reg,adcset1l_reg,adcset2h_reg,adcset2l_reg,adcset3h_reg,adcset3l_reg,
adcset4h_reg,adcset4l_reg,adcset5h_reg,adcset5l_reg,adcset6h_reg,adcset6l_reg)
begin
if(rst='0')then
pwmocr1_pid<="00000000";
pwmocr2_pid<="00000000";
pwmocr3_pid<="00000000";
pwmocr4_pid<="00000000";
pwmocr5_pid<="00000000";
pwmocr6_pid<="00000000";
elsif(pid_clk'event and pid_clk='0')then
if(pid_sw="00000001")then--如果PID自动控制标志位开启
--第1通道闭环控制
if(adcset1h_reg>adcdata1h_reg) then --这里只比较高八位,留有一定的死区,避免频繁调节
pwmocr1_pid <= pwmocr1_pid + '1'; --采样值小于设定值,增加占空比
elsif(adcset1h_reg<adcdata1h_reg) then
pwmocr1_pid <= pwmocr1_pid - '1'; --否则减小占空比
end if;
--第2通道闭环控制
if(adcset2h_reg>adcdata2h_reg) then
pwmocr2_pid <= pwmocr2_pid + '1';
elsif(adcset2h_reg<adcdata2h_reg) then
pwmocr2_pid <= pwmocr2_pid - '1';
end if;
--第3通道闭环控制
if(adcset3h_reg>adcdata3h_reg) then
pwmocr3_pid <= pwmocr3_pid + '1';
elsif(adcset3h_reg<adcdata3h_reg) then
pwmocr3_pid <= pwmocr3_pid - '1';
end if;
--第4通道闭环控制
if(adcset4h_reg>adcdata4h_reg) then
pwmocr4_pid <= pwmocr4_pid + '1';
elsif(adcset4h_reg<adcdata4h_reg) then
pwmocr4_pid <= pwmocr4_pid - '1';
end if;
--第5通道闭环控制
if(adcset5h_reg>adcdata5h_reg) then
pwmocr5_pid <= pwmocr5_pid + '1';
elsif(adcset5h_reg<adcdata5h_reg) then
pwmocr5_pid <= pwmocr5_pid - '1';
end if;
--第6通道闭环控制
if(adcset6h_reg>adcdata6h_reg) then
pwmocr6_pid <= pwmocr6_pid + '1';
elsif(adcset6h_reg<adcdata6h_reg) then
pwmocr6_pid <= pwmocr6_pid - '1';
end if;

--加入一个比较,防止在自动调整的时候数据溢出
if(pwmocr1_pid>"11111110") then
pwmocr1_pid <="11111110";
elsif(pwmocr1_pid<"00000001") then
pwmocr1_pid <="00000001";
end if;

if(pwmocr2_pid>"11111110") then
pwmocr2_pid <="11111110";
elsif(pwmocr2_pid<"00000001") then
pwmocr2_pid <="00000001";
end if;

if(pwmocr3_pid>"11111110") then
pwmocr3_pid <="11111110";
elsif(pwmocr3_pid<"00000001") then
pwmocr3_pid <="00000001";
end if;

if(pwmocr4_pid>"11111110") then
pwmocr4_pid <="11111110";
elsif(pwmocr4_pid<"00000001") then
pwmocr4_pid <="00000001";
end if;

if(pwmocr5_pid>"11111110") then
pwmocr5_pid <="11111110";
elsif(pwmocr5_pid<"00000001") then
pwmocr5_pid <="00000001";
end if;

if(pwmocr6_pid>"11111110") then
pwmocr6_pid <="11111110";
elsif(pwmocr6_pid<"00000001") then
pwmocr6_pid <="00000001";
end if;

end if;
end if;
end process;

end;

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息