历史上的今天
今天是:2025年03月05日(星期三)
2018年03月05日 | 数字电位器与单片机接口及程序设计
2018-03-05 来源:eefocus
随着集成芯片技术与计算机技术的发展,仪器仪表的智能化程度不断提高,许多原先采用手工调节的操作,已由计算机取而代之。数字电位器便是其中一例,它不仅在一定程度上取代了机械电位器,而且具有无噪声,抗振动.尺寸小,寿命长等优点。最重要的是它由计算机控制,调节由编程实现,从而实现操作的自动化及智能化。
一、AD8402与8031的接口电路设计及注意事项
AD8402是一种2通道256个分支节点的数字电位器,也称数控可变电阻器。它实质上是一种特殊形式的数/模转换器,但其模拟量输出不是电压或电流,而是电阻或电阻比率,所以又称RDAC。它含有一个标准三线串行控制接口,输入时序如图1所示。

AD8402可根据地址位A1、A0的值选择相应的RDAC,并将8位数据存人锁存器,根据锁存器的值改变RDAC的滑壁位置。
8031串行接口的四种工作方式(方式0~3)中,无一种时序与之相匹配。因此,必须使用8031的Pl口中的任意三根位线(如P1.0~P1.2)与之接口,电路如图2所示。

由于AD8402的CLK端可使用50 MHz的时钟,而8031的晶振最高只有12 MHz,这个时钟脉冲对AD8402来讲显得太宽了。这不但要求时钟的前沿十分干净,而且方波不应有尖峰,否则会使误码数据传人寄存器。这种错误不易察觉,我们曾深受其害。解决的办法是进行滤波,滤掉干扰。电容的容量要合适,电容值太大,暂态时间过长,得不到应有高度的上升沿;电容值太小,干扰不能滤除。由8031的Pl口内部结构(如图3所示)可知,内部有上拉电阻R,设其值为1 kΩ,滤波的截止频率fo=l/RC≤50 MHz,可得C≥0.02nF。又由8031的PI口发出脉冲最小宽度为2μs,即C≤2 nF,C值为0.02~2 nF(晶振为6MHz)。我们在晶振为6 MHz的8031系统中,采用1 nF的滤波电容,收到了很好的效果。
另外,在使用AD8402时还应注意的是,其RDAC各端不能使用负电压。例如用作分压器时,不能按图4(a)所示,将负电压Vss直接接在B端或A端或W端上,那样数字电位器不能正常工作。可按照图3 -67(b)或3-67(c)的方式连接,虽然在vP上不会得到V ss~VDD的全范围分压,但适当选取R.、Rz的值便可得到可正可负的分压值。
此外,AD8402固定端A与B之间的电阻分为3种类型:10kΩ、50 kΩ,和100 kΩ。如有其他需要可与厂家联系,但这样十分不方便。可以通过一些电阻网络来实现,如一个10 kΩ的电阻与一个10 kΩ的电阻的RDAC并联,可以得到有256个分支节点的5kΩ的电位器,只是线性度差一些。

二、AD8402的编程
下面一段简短的程序可以实现AD8402的基本操作。它可作为一个子程序供系统调用。
程序中位RDAC一01置0时,对RDAC1操作;置1时,对RDAC2操作。位RDAC_*=O时,按照RDAC_ AVLUE的值调节AD8402中的RDAC; RDAC_*-1时,将根据位RDAC_十-的值移动电位器的滑臂。程序如下:

下一篇:单片机发音电路及程序设计方案
史海拾趣
|
完整版UCOS-II V2.52源代码,需要的朋友赶快下 这个系统包无需改动,嵌入系统即可使用,主要是方便新伙计少走弯路,内容是原版邵贝贝光盘中的系统代码,放心使用! … 查看全部问答> |
|
有一个项目,供电电压是1000V直流的,需要转为5V,功率在2W左右.由于电压较高,如用PWM降压常规的器件耐压达不到,不知大家有没有好的方案,不甚感激!… 查看全部问答> |
|
我在2440上移植了DM9000A的网卡,系统运行后能够被PING通。可是一运行IE就报如下错误: Data Abort: Thread=97d9aab4 Proc=81d96340 \'device.exe\' AKY=ffffffff PC=02b52178(dm9isa.dll+0x00002178) RA=02b52174(dm9isa.dll+0x00002174) BVA=06 ...… 查看全部问答> |
|
代码如下: pmeidacontrol->pause() 视频已经暂停了 m_Graphs->pMC->GetState(2000,(OAFilterState*)&pfs); pfs为State_Paused 暂停状态 hr=m_Graphs->pBV->GetCurrentImage(&bitmapSize,NULL); hr的值为E_INVALIDARG 查了好多资料 还是没找到 ...… 查看全部问答> |
|
java 调用DLL 读串口,不久就死了,请帮忙看看什么原因? 经过仔细分析问题出这dll这里,但始终找不到解决办法,请大家帮忙看看,谢谢! dll代码如下: JNIEXPORT jstring JNICALL Java_getGPS (JNIEnv * env, jobject obj) { char * cIpAddress =compressWideChar((LPCWSTR)L\"empty value! ...… 查看全部问答> |
|
关于格式转换函数sprintf(): 我想用sprintf()函数将一个usigned int型变量转换为字符串从串口发送出去 结果调用的时候发现不对 我先定义DeocdeNum=2000;UCHAR *CH 保存转换后的字符串 printf(ch,\"%d\",DeocdeNum); 结果我发现在程序中 Deoc ...… 查看全部问答> |
|
源例程,寻求帮助!!!谢谢 GPIO管脚能否配置采样速率? [ 本帖最后由 bjmonsoon 于 2011-1-13 19:35 编辑 ]… 查看全部问答> |




