简介

本文记录了基于 D5272 三组电子变阻器电路模块的设计。该模块可以用于基于面包板搭建的各种实验电路的测试功能。相比于“机械变阻器[1]”,该模块更加小巧,通道多,设计比较方便。可以直接精确设置各通道的电阻值。

 

确定是,电子变阻器的频率响应比起机械变阻器要小。这部分详细参见“AD5272 数字变阻器[2]”中的内容。

 

电路设计

工程文件:

❝D:\zhuoqing\AltiumDesigner\Tools\2020\DigitRheostat\DigitRheostat.PcbDoc❞
 

1. 原理图设计

▲ 电路原理图

 

2. PCB 设计

设计电路板,使其适合快速制版。获得快速制版后的电路板,经过焊接形成测试电路板圆形。

 

PCB 设计

下面是安装有蓝牙通信模块后的测试电路:

▲ 安装有蓝牙通信模块后的电路板及其外部接口

 

三个电子变阻器的量程分别为:

通道号 变阻器的量程
1 20kΩ
2 20kΩ
3 50kΩ

 

 

软件设计

❝D:\zhuoqing\window\C51\STC\Tools\DigitRheostat\DigitRheostat.uvproj❞
 
//***************************************
//                    PROCESS THE DEBUG BUFFER
//------------------------------------------------------------------------------
void SerialDebugProcessBuffer(void) {
    unsigned int nNumber;
    unsigned int nAddress;
            
    SerialDebugBuffer2Argument();
    if(g_ucSDANumber * 0) return;

    if(strcmp("hello",                (char *)STD_ARG[0]) * 0)
        printf("%s is ready !\r\n", VERSION_STRING);
    
    else IFARG0("ad5272set") {
        sscanf(SDA(1), "%d", &nNumber);
        sscanf(SDA(2), "%d", &nAddress);
        AD5272SetAddress(nAddress);
        AD5272WriteRDAC(nNumber);
    }
    else printf("Error command : %s !\r\n", STD_ARG[0]);
}

 

控制软件说明:

发送命令的格式为:

❝ad5272 number address❞
 

number:0~1023 :设置电阻从最小增加到最大量程。address: 0,1,2 :分别对应着三个变阻器。从左到右分别是 CH0,CH2,CH1

 

特性测试

1. 电子变阻器应用电压范围

 

使用一个电阻与 AD5272 串联,接入测试交流信号,测量分压在 AD5272 上的输出电压波形。具体实验电路如下图所示:

 

▲ 实验电路

 

通过分压输出的波形可以看到 AD5272 的端口电压大体上不能够小于 0V,不能够大于其工作电压(5V)。如果超出了这个范围,信号就被钳位在 0~5V 之间。

 

因此在实际应用中,一方面需要避免电子变阻器工作电压超出这个范围,另外在电子变阻器上需要加上保护串联电阻,以免超出电压范围之后出现过大的输入电流或者输出电压。

 

▲ 分压电阻实验波形

 

下图显示了 AD5272 电阻变化过程中,其上的分压信号开始饱和过程。

 

▲ 逐步增加电子变阻器的值,输出波形变化情况

 

绘制上述动图的 PYTHON 程序为:

#!/usr/local/bin/python
# -*- coding: gbk -*-
#******************************
# TEST2.PY                     -- by Dr. ZhuoQing 2020-04-25
#
# Note:
#******************************

from headm import *
from tsmodule.tshardware    import *
from tsmodule.tsdraw        import *

gifid = 5

tsgifff()

for i in range(17):
    data = int(1024 / 16 * i / 10)
    if data >= 1024: data = 1023

    zbcmd(b'ad5272set %d 1'%data)

    time.sleep(.2)

    tsgifaa()


dop2gif(gifid = gifid)
printf('\a')

#------------------------------------------------------------
#        END OF FILE : TEST2.PY
#******************************

 

参考文献:

AD5272 数字变阻器[3]

机械变阻器[4]

 

Reference

[1]机械变阻器: https://zhuoqing.blog.csdn.net/article/details/104089780

[2]AD5272 数字变阻器: https://zhuoqing.blog.csdn.net/article/details/105605305