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).内部结构:
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模式等等,故在后续的工作应当加上功能选择模块,控制模块等等
文章评论(0条评论)
登录后参与讨论