搜索
bottom↓
回复: 5

又谁能帮我看看这个光电编码模块问题在哪?问什么只知道加计数而不知道减计数?

[复制链接]

出0入0汤圆

发表于 2010-8-19 22:53:09 | 显示全部楼层 |阅读模式
又谁能帮我看看这个光电编码模块问题在哪?问什么只知道加计数而不知道减计数?

(原文件名:GD.jpg)
两个模块的代码分别如下:
library ieee;
use ieee.std_logic_1164.all;
entity deepdirect is
  port(
      A,B :in std_logic;
      direct:out bit
      );
end deepdirect;
architecture behav of deepdirect is
begin
   process(A,B)
   begin
   if (A 'event and A ='1') then
       --wait for 20 ns;
       if (B='1') then
       direct<='1';
       else
       direct<='0';
       end if;
   end if;
   end process;  
end behav;




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

entity deepcount is
  port(
       direct :in bit;
       A:in std_logic;
       q:out std_logic_vector(31 downto 0)
      
       );
end deepcount;

architecture behave of deepcount is
begin
process(A,direct)
variable cou:std_logic_vector(31 downto 0);
variable sel:std_logic_vector(2 downto 0);
variable zhongduan:std_logic;
variable ql: std_logic_vector(7 downto 0);--计数值或初始值
variable qm: std_logic_vector(7 downto 0);
variable qh: std_logic_vector(7 downto 0);
variable qhh: std_logic_vector(7 downto 0);

begin

  if (A 'event and A='1') then
     if (direct='1' ) then
        if (cou="11111111111111111111111111111111") then
            cou:="00000000000000000000000000000000" ;
        else
            cou:=cou+1;
        end if;
        q<=cou;
      
    else  --上提
        if (cou="00000000000000000000000000000000") then
            cou:="11111111111111111111111111111111" ;
        else
            cou:=cou-1;
        end if;
        q<=cou;
      
   end if;
end if;


end process;

end behave;
当A超前B90°时加计数,当A滞后B90°时,减计数,计数值传到q输出
实际效果只有加,没法减。不知何故。

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2010-8-20 01:13:44 | 显示全部楼层
看看这个帖子:
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4167686&bbs_page_no=1&search_mode=3&search_text=281229961&bbs_id=9999

出0入0汤圆

 楼主| 发表于 2010-8-20 01:42:33 | 显示全部楼层

出0入0汤圆

 楼主| 发表于 2010-8-20 22:24:22 | 显示全部楼层
关于前面的那个deepdirect部分我做过波形仿真,是正确的。
我又在电路板上面分配管脚,不同的信号,结果就与波形仿真不一致。及direct输出管脚始终是高电平,不受a,b相位差的影响。
我怀疑是硬件接口的问题。因为a,b两路信号是由51单片机产生(5v),然后与fpga的管脚直接进行接口。问题可能处在这.

出0入0汤圆

 楼主| 发表于 2010-8-20 22:39:34 | 显示全部楼层
进过反复测试,发现确实是接口的问题。
软件方面是正确的!

出0入0汤圆

发表于 2010-8-20 23:02:34 | 显示全部楼层
哥哥,能说明下这接口存在说明问题吗。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-7-24 17:26

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

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