搜索
bottom↓
回复: 5

开源了:直升机“反CCPM”舵机控制芯片的 VHDL 源码!请教:最小烧写!?

[复制链接]

出0入0汤圆

发表于 2009-10-6 21:00:48 | 显示全部楼层 |阅读模式
最近一直在做 "简易的低成本的:大共轴直升机",做了个初步试验,,现在在着手做第三步的试验。

需要做一个把:直升机尾舵信号转换成 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 ;

出0入0汤圆

发表于 2009-10-6 23:03:30 | 显示全部楼层
好大的马赛克。
以前学校的航模协会用30级油直做过这样的共轴。飞起来一样,飘~,不过我们的那个飘起来比较恐怖,所以飞的时间没你长。
这东西还是稳定性的问题,这里面有不少气动理论的成份,光靠设备去稳定,会有点难度。


(原文件名:09062916163b46b91d62666b52.jpg)

出0入0汤圆

发表于 2009-10-6 23:12:49 | 显示全部楼层
自己做ccpm的不好弄。机械部分要求太高。

出0入0汤圆

 楼主| 发表于 2009-10-7 17:19:29 | 显示全部楼层
谢谢,楼上的几位-------现在CCPM 已经是现成的东西了啊!!____楼上所示的"全对称"的双桨,,由于重心的缘故,,再加上燃油动力的延迟较大,
可能不稳定,,其实录像中的飞行2分30秒附近,还是很稳定的,,是我操控技术不好...我这个也是重心偏高啊!!非常的灵敏,,容易翻身!!

我们现在是要把 CH4 的尾舵信号,,转换成 O1,O2,O6 的螺矩信号...

芯片的仿真已经初步OK,,,我就是不知道能不能精减!!!!___或者精减到ALTERA 的哪一个便宜,引脚少的单芯片上烧写出来!!
芯片的仿真已经初步OK,,,我就是不知道能不能精减!!!!___或者精减到ALTERA 的哪一个便宜,引脚少的单芯片上烧写出来!!
芯片的仿真已经初步OK,,,我就是不知道能不能精减!!!!___或者精减到ALTERA 的哪一个便宜,引脚少的单芯片上烧写出来!!

出0入0汤圆

发表于 2009-10-7 19:53:47 | 显示全部楼层
燃油机用变距的方式控制是可以非常灵敏的
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-2 18:00

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表