原创 max197数据采集与传输设计(EZUSB)

2008-11-7 22:11 3887 4 4 分类: 通信

https://static.assets-stash.eet-china.com/album/old-resources/2008/11/7/5dd377f5-b933-4806-9e91-959ef426b36f.rar              


    



Max197数据采样<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />



1.系统框图



2.Cy7c98013 slave fifo模式及相关配置


    异步方式传输,8位模式,48M时钟


    ifconfig配置:


IFCONFIG = 0xEB;


// IFCLKSRC=1   , FIFOs executes on internal clk source


// xMHz=1       , 48MHz internal clk rate


// IFCLKOE=1    , drive IFCLK pin signal at 48MHz


// IFCLKPOL=0   , Don't invert IFCLK pin signal from internal clk


// ASYNC=1      , master samples asynchronous


// GSTATE=0     , Don't drive GPIF states out on PORTE[2:0], debug WF


// IFCFG[1:0]=11, FX2 in slave FIFO mode


Ifclk输出48M时钟给cpld提供时钟


EP6FIFOCFG = 0x0C;            // AUTOIN=1, ZEROLENIN=1, WORDWIDE=0



另外由于配置了pd0作为max197sdh管脚的控制,所以pd0可以看作是一个复位的管脚,因此应先置0后后置1:PD0 = 0;PD0=0;PD0=1;



3.cpld相关配置:max197test0


  1).内部结构:


   


  2).具体包括两个模块:


MAX197TEST模块和BIDIO模块


总体模块信号:


Slave fifo模式传输cpld外围配置:


输入:Clock:48M时钟


输出:sloe--------------------------------读使能,总线只写,所以置1;


      Slrd--------------------------------读时钟,总线只写,所以置1;


      Slwr--------------------------------写时钟,12M时钟


      Clkout-----------------------------输出使能时钟,12M


Max197外围配置


输入:int----------------------------------max197数据采样转换完毕中断


输出:hben-------------------------------max197采样数据高/低位


      Cs----------------------------------max197片选信号


      Wr---------------------------------max197写信号


      Rd---------------------------------max197读信号


      Fd[7:0]----------------------------max197采样输出数据到数据总线


      Data[7:0]-------------------------双向口,读/写数据


3).MAX197TEST模块状态机:







 根据上面的采样时序要求,我们采用了12M时钟的状态机,(1/12M=83us,按照,正好满足min要求,同时与max相符),cpld程序如下:


coma:process(clock)


     begin


     if(clock'event and clock='1')  then


     clkcnt<=clkcnt+1;


      if(clkcnt=4) then 


      clk<=not clk;


      clkcnt<=0;


   end if;


   end if;


     


end process coma;


comb:process(state)       


     begin


  


     case state is


     when st0=>cs<='1';wr <= '1';rd <= '1';hben <= '0';


     when st1=>cs<='0';wr <= '0';rd <= '1';hben <= '0';


     when st2=>cs<='1';wr <= '1';rd <= '1';hben <= '0';


     when st3=>cs<='1';wr <= '1';rd <= '1';hben <= '0';


         


     when st4=>cs<='0';wr <= '1';rd<= '0';hben <= '0';


         


     when st5=>cs<='0';wr <= '1';rd<= '0';hben <= '0';


     when st6=>cs<='0';wr <= '1';rd<= '0';hben <= '1'; 


     when st7=>cs<='1';wr <= '1';rd<= '1';hben <= '0'; 


     when others => cs<='0';wr <= '1';rd <= '1';hben <= '1';


    end case;


  


    end process comb;


comc:process(clk,pd0,int)


     begin


     if(pd0='0') then state<=st0;


     elsif(clk'event and clk = '1') then


       case state is


        when st0=>state <= st1;


        when st1=>st1cnt<= st1cnt+1;


                  if(st1cnt=2) then st1cnt<=0;state <= st2;


                  else state <= st1;end if;


        when st2=>state <= st3;


                  if( int = '0') then state <= st3;


                  else state <= st2;end if;


        when st3=>state <= st4;


        when st4=>state <= st5;


                  if( int = '1') then state <= st5;


                  else state <= st4;end if; 


         when st5=>state <= st6;


        when st6=>st6cnt<= st6cnt+1;


                  if(st6cnt=3) then st6cnt<=0;state <= st7;


                  else state <= st6;end if;


        when st7=>state <= st0;


      end case;


     end if;


     end process comc;


    


   Coma:分频模块,48M TO 12M


   Comb:状态机状态模块


   Comc:状态转换模块


   均按照采样时序要求完成程序的编写



4).双向口模块:




   由于用vhdl仿真出现的种种问题,双向口模块采样电路图输入方式描述


   输入:wr:-----------------------------------------双向口写信号


         Dout[7:0]---------------------------------双向口写命令d7~d0


   输出:din[7:0]-----------------------------------双向口输出数据到总线PB[7:0]


   双向数据:data[7:0]-----------------------------双向口数据,wr=0时写数据dout[7:0]到max197     


                                       控制字节,wr=1时读数据到din[7:0上]  


4.调试过程


  max197out <= "01010000";对应的控制字节为输入10V电压档,采用ch0测电压


  10V电压:


            


            


            


  暂时只用了ch0测了10V电压,要注意的是,数据刚开始是以写控制命令即“01010000”,开始的,所以一个采样周期以“50”开始,或者是数据完了即“50”开始。


  从上的图片可以看出,08 0F,0A 0F,10 0F均为12bit采集的电压,其中后面的譬如0F 0E,为数据高4位dataH, 08 0A 10为数据低8位满dataL,满值为"FF 0F",故可看清所测得的电压均接近10V


  10V档电压计算方法:(256*dataH + dataL)*10 /4096



5.不足及展望


  根据传感器实验装置要求,应该根据电脑发命令的方式来选择模块的工作状态(即哪一个的采样数据传到数据总线上),还有发命令来控制max197的相关数据采样,例如控制字节,pull-down模式等等,故在后续的工作应当加上功能选择模块,控制模块等等


 


PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
4
关闭 站长推荐上一条 /3 下一条