|
最近一直在做 "简易的低成本的:大共轴直升机",做了个初步试验,,现在在着手做第三步的试验。
需要做一个把:直升机尾舵信号转换成 CCPM 控制盘上的三个信号,并且附带微调油门。
I1,I2,I6——为CCPM控制盘原信号,I4为尾舵操作信号,I3为油门原信号。O1,O2,O6;O3为经过“I4”修正之后的输出。
现在逻辑仿真已经初步过关!!————但是我感觉,是不是我的整个设计不够精巧??——有没有什么办法精简,精简!?
我十年没有:做CPLD了,最近这一周重新复习,但是还是很陌生:不知道能精简到哪个最便宜的芯片里烧写??EPM7064太小!?
原名mpg格式的录像ourdev_488133.avi视频文件大小:38.40M) (原文件名:1003_2.avi) 初步试飞(1、2)飞行录像!
http://download.ourdev.cn/bbs_upload186494/files_19/ourdev_488133.avi
初步(1、2步)试验可行 (原文件名:100_7242.jpg)
这个芯片的方案 (原文件名:E016改到底3.jpg)
这个程序的仿真结果::正确! (原文件名:共轴控制芯片.jpg)
LIBRARY IEEE;
USE IEEE.Std_Logic_1164.ALL;
USE IEEE.Std_Logic_Arith.ALL;
USE IEEE.Std_Logic_Unsigned.ALL;
entity datadelay is
port (clk_1M,I1,I2,I6,I4,I3:IN Std_Logic;
O1,O2,O6,OT4,O3:Out Std_Logic);
end datadelay;
architecture inference of datadelay is
signal Tcon:Std_Logic_Vector(14 Downto 0);
signal C1:Std_Logic_Vector(11 Downto 0);
signal C2:Std_Logic_Vector(11 Downto 0);
signal C6:Std_Logic_Vector(11 Downto 0);
signal C4:Std_Logic_Vector(11 Downto 0);
signal C3:Std_Logic_Vector(11 Downto 0);
signal T1:Std_Logic_Vector(7 Downto 0);
signal T2:Std_Logic_Vector(7 Downto 0);
signal T6:Std_Logic_Vector(7 Downto 0);
signal T4:Std_Logic_Vector(7 Downto 0);
signal T3:Std_Logic_Vector(7 Downto 0);
signal R1:Std_Logic_Vector(11 Downto 0);
signal R2:Std_Logic_Vector(11 Downto 0);
signal R6:Std_Logic_Vector(11 Downto 0);
signal R4:Std_Logic_Vector(11 Downto 0);
signal R3:Std_Logic_Vector(11 Downto 0);
signal J1:Std_Logic_Vector(11 Downto 0);
signal J2:Std_Logic_Vector(11 Downto 0);
signal J6:Std_Logic_Vector(11 Downto 0);
signal J3:Std_Logic_Vector(11 Downto 0);
signal clkT20,Twr1,Twr2,Twr6,Twr4,Twr3:Std_Logic;
begin
OT4 <= R4(4);
process (clk_1M)
begin
if (clk_1M'EVENT and clk_1M='1') then
if (Tcon = Conv_Std_Logic_Vector(19999,15)) then -- Conv 19999 to S_L_V
Tcon <= "000000000000000";
clkT20 <= '1';
else
Tcon <= Tcon + '1';
clkT20 <= '0';
end if; -- 20 mS Timer END
if (I1 = '0') then
T1 <= T1 + '1';
if (T1 = Conv_Std_Logic_Vector(252,8) and C1 >= Conv_Std_Logic_Vector(575,12)) then
Twr1 <= '1';
else
Twr1 <= '0';
end if;
if (T1 >= Conv_Std_Logic_Vector(254,8)) then
C1 <= "000000000000";
end if;
else
C1 <= C1 + '1';
T1 <= "00000000";
Twr1 <= '0';
end if; -- END Part Input 1#
if (I2 = '0') then
T2 <= T2 + '1';
if (T2 = Conv_Std_Logic_Vector(252,8) and C2 >= Conv_Std_Logic_Vector(575,12)) then
Twr2 <= '1';
else
Twr2 <= '0';
end if;
if (T2 >= Conv_Std_Logic_Vector(254,8)) then
C2 <= "000000000000";
end if;
else
C2 <= C2 + '1';
T2 <= "00000000";
Twr2 <= '0';
end if; -- END Part Input 2#
if (I6 = '0') then
T6 <= T6 + '1';
if (T6 = Conv_Std_Logic_Vector(252,8) and C6 >= Conv_Std_Logic_Vector(575,12)) then
Twr6 <= '1';
else
Twr6 <= '0';
end if;
if (T6 >= Conv_Std_Logic_Vector(254,8)) then
C6 <= "000000000000";
end if;
else
C6 <= C6 + '1';
T6 <= "00000000";
Twr6 <= '0';
end if; -- END Part Input 6#
if (I4 = '0') then
T4 <= T4 + '1';
if (T4 = Conv_Std_Logic_Vector(252,8) and C4 >= Conv_Std_Logic_Vector(575,12)) then
Twr4 <= '1';
else
Twr4 <= '0';
end if;
if (T4 >= Conv_Std_Logic_Vector(254,8)) then
C4 <= "000000000000";
end if;
else
C4 <= C4 + '1';
T4 <= "00000000";
Twr4 <= '0';
end if; -- END Part Input 4#
if (I3 = '0') then
T3 <= T3 + '1';
if (T3 = Conv_Std_Logic_Vector(252,8) and C3 >= Conv_Std_Logic_Vector(575,12)) then
Twr3 <= '1';
else
Twr3 <= '0';
end if;
if (T3 >= Conv_Std_Logic_Vector(254,8)) then
C3 <= "000000000000";
end if;
else
C3 <= C3 + '1';
T3 <= "00000000";
Twr3 <= '0';
end if; -- END Part Input 3#
end if;
end process;
process (Twr1)
begin
if (Twr1'EVENT and Twr1='1') then
R1 <= C1;
end if;
end process;
process (Twr2)
begin
if (Twr2'EVENT and Twr2='1') then
R2 <= C2;
end if;
end process;
process (Twr6)
begin
if (Twr6'EVENT and Twr6='1') then
R6 <= C6;
end if;
end process;
process (Twr4)
begin
if (Twr4'EVENT and Twr4='1') then
R4 <= C4 - Conv_Std_Logic_Vector(1500,12);
end if;
end process;
process (Twr3)
begin
if (Twr3'EVENT and Twr3='1') then
R3 <= C3;
end if;
end process;
process (clkT20,clk_1M) -- OUtput every 20 mS clock
begin
if (clkT20='1') then
J1 <= R1 + R4;
J2 <= R2 - R4;
J6 <= R6 - R4;
J3 <= R3;
elsif (clk_1M'EVENT and clk_1M='1') then
if (J1 = "000000000000") then
O1 <= '0';
else
O1 <= '1';
J1 <= J1 - '1';
end if;
if (J2 = "000000000000") then
O2 <= '0';
else
O2 <= '1';
J2 <= J2 - '1';
end if;
if (J6 = "000000000000") then
O6 <= '0';
else
O6 <= '1';
J6 <= J6 - '1';
end if;
if (J3 = "000000000000") then
O3 <= '0';
else
O3 <= '1';
J3 <= J3 - '1';
end if;
end if;
end process;
end inference ; |
阿莫论坛20周年了!感谢大家的支持与爱护!!
你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。
|