电气自动化技术网

DSP控制AD7606的硬件与程序经验总结

时间:2012-12-04 来源:电气自动化技术网 编辑:李亮 点击:次 字体设置:

    最近有段时间没写总结了,最近也学了一些东西,做了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的控制下正常工作了~~~第一次自己原创程序,成功了,之前都是在改别人的程序....嗯,今天还是很高兴的!开启了个人的新的时代呀。好吧,只要按照时序图,一步步的来,出错了慢慢找原因,就能行的,就和前段时间吧液晶的程序仔细弄懂了一样。一味的找别人的程序是不可靠的,懂了以后还要回自己写出来才行~~加油!

顶一下
(5)
100%
踩一下
(0)
0%
打 印】【顶 部】【关 闭】【挑 错
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
验证码:点击我更换图片
版权与免责声明:
①凡本网注明"来源:电气自动化技术网"的所有作品,版权均属于电气自动化技术网,转载请必须注明出处“电气自动化技术网http://www.dqjsw.com.cn”。违反者本网将追究相关法律责任。
②本网转载并注明自其它来源的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品来源,并自负版权等法律责任。
③如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。
栏目导航:互感器 | 智能电网 | 无功补偿 | 电容器 | 变压器 | 电源 | 避雷器 | 电抗器 | opc | 三菱PLC | 西门子PLC | 欧姆龙PLC | PLC视频教程 | 电工基础知识
© www.dqjsw.com.cn 2008-2013 版权所有 ICP网站备案:渝ICP备11003104号