网站标志
导航菜单
当前日期时间
当前时间:
购物车
购物车中有 0 件商品 去结算 我的订单
商品搜索
商品搜索:
文章正文
DSP控制AD7606的硬件与程序经验总结
作者:管理员    发布于:2015-07-26 17:48:36    文字:【】【】【

 最近有段时间没写总结了,最近也学了一些东西,做了PID的程序,搭了TEC的MAX1968驱动电路,将温度控制在了0.05度左右的波动。但是新的控制对应来了之后,新的TEC电压较高,效果也不好了,不知道DSP产生PWM用298N驱动效果怎么样。
 
    现在想要达到更高的精度,打算采用16位的AD芯片,就申请了ADI的AD7606芯片,先是自己用普通的电烙铁把它焊在转接板上,精细活啊,还弄废了一片,罪过罪过。转接板的双排结构让电路不好焊,不得已用了一些飞线(我以前是从来不用导线接的,不过一般会把万用空板弄成双层走线的)。
 
    好了,回到正题:接好了之后接到开发板上,却不能用,因为底板的数据地址是CPLD分配好的,我直接无从下手。核心板上的引脚间距为2mm,不好接,也没有2mm间距的万用空板,我甚至想到了自己做一个DSP核心板。
    在上淘宝看看DSP核心板设计的时候(因为我对DSP核心板上的ROM和RAM的用处不理解,因为我也用不到啊),在和一个南航博士美女(她自称的)店主聊的时候,偶然说道,有2mm转2.54mm的杜邦线!!!好happy啊,省了好多事啊~!于是就淘宝买了杜邦线,嗷对了,电路板的飞线用航空导线最好了,因为它的表皮耐高温,而且线还细,比常见的那种好多了。
     OK,单独用核心板,我又摸索了DSP的IO口的引脚的数据地址,是这样的,DSP23885每32个IO给出一个地址,实际上是16个IO,也就是16位数据一个地址的;地址都是IO端口名称高的为数据的高位;使用时,配置好MUX为普通的IO,还有方向为输入或输出,最后预定义数据的地址就行了;使用的时候就直接给地址送数据就可以了。【实际上,这是把DSP当单片机那么用了,他原本的地址总线和数据总线都被我当成IO了...】
    先是调12864液晶的程序,调试的时候犯了错误,没有配置数据线的IO口,结果郁闷了半天;然后晚上睡觉的时候迷迷糊糊的就意识到这个问题了,第二天(也就是昨天)一看,果然是这个原因!!
-----------------好了,进入正题 =.=
     昨晚开始写AD7606的程序,因为ADI官网给出的程序是串行的,也没什么用处。于是就按照一个网上的作者说错误的程序开始写,按照Datasheet的时序图来写实际上,并行的程序要容易的多,还有7606的数据手册是中文的,也挺好的。
    今天早上试了一下程序,不行,读到的数据是65535,明显不对。然后开始找原因,将数据线接地,读入的数据是正确的,说明数据线没错。然后将原来没接的过采样的3个引脚都接数字地,也没影响。检查硬件电路也没错误。又开始在网上找解决办法。bbs.ednchina.com上貌似有ADI的工程师在解答,看了一些问题的解答,有一个人说他的BUSY一直为低电平呢,【应对:有两点建议 1.请对照数据手册中图2和图3的时序来检查一下,是哪个管脚的信号不正常。比如reset,convst信号等。 2.换个芯片看是否有同样现象。其实,首先核对硬件连接是否正确,包括供电,接地,参考电平,时钟等,然后您需要检查寄存器配置是否正确,再逐渐调试软件,仔细研究时序图,这才是正确方法】我又编程检查了我的BUSY(程序如下),一直没有高电平,说明AD根本就没有进行转换,于是我就测CONVST的引脚,果然不正常,检查了硬件和程序,还是编程控制不了它的高低,一上午就这么过去了。。。
-------------
 

#if 0 //条件编译,1时编译,0时不编译;此处用于调试,能不能接收到AD的BUSY信号
if(AD_BUSY == 1)
 {
 while(1); // 调试中,停止程序后如果光标停在这里,说明BUSY读取到了高电平,说明正在转换
}
 #endif
---------------
    中午继续,换了控制信号的I/O口,还是不行;又新建了一个程序,现在是一个可以控制,一个不能控制...见鬼了。这时!!发现我的引脚初始化子程序没有在mian函数里调用!!!和液晶一个错误~!!之前调试的时候在mian函数里,现在做成子函数了就忘记调用了。改正之后,还存在一个I/O可以控制,一个不能控制(我的两个CONVST是分开的),程序如下,看上去没什么问题啊~

----------------------------------------
CONVSTA = 0;
 CONVSTB = 0;
 
 DELAY_US(10);
        
 CONVSTA = 1;
 CONVSTB = 1;  

----------------------------------------------
后来,我想是不是要加延时,DSP不能过快的写I/O的数据,修改如下:
----------------------------------------------

CONVSTA = 0;
 DELAY_US(1);
 CONVSTB = 0;
 
 DELAY_US(10);
        
 CONVSTA = 1;
 DELAY_US(1);
 CONVSTB = 1;
------------------------------------------      

果然可以了,总结:如果连续控制IO写数据,中间一定要延时~!!否则在执行程序的时候只会执行最后一个....原因我也不知道
 
ok,总算是能让AD7606在DSP的控制下正常工作了~~~第一次自己原创程序,成功了,之前都是在改别人的程序....嗯,今天还是很高兴的!开启了个人的新的时代呀。好吧,只要按照时序图,一步步的来,出错了慢慢找原因,就能行的,就和前段时间吧液晶的程序仔细弄懂了一样。一味的找别人的程序是不可靠的,懂了以后还要回自己写出来才行~~加油!

浏览 (72) | 评论 (0) | 评分(0) | 支持(0) | 反对(0) | 发布人:管理员
将本文加入收藏夹
新闻详情
脚注栏目
|
脚注信息
机电工程网(C) 2015-2020 All Rights Reserved.    联系我们