机械变阻器的控制器设计原理及控制命令

发布时间:2024-07-12  

虽然现在有很多可以用来当做变阻器的器件:比如场效应管、X9C103数字电位器,但是由于存在非线性、寄生电容,所以在很多测量场合还是需要机械变阻器来完成。

■ 说明


在2020/9/18日,由于外部机械碰撞,使得BLUETOOTH接口断裂,整个模块就报废掉了。


▲ 拆解前的机械变阻电位器

01设计原理

机械变阻器

机械变阻器的控制器是由STM32F103为核心,外部使用两个A4950做起小型直流电机驱动器。通过ZIGBEE串口模块接收控制命名。

在控制上还有八个IO端口,可以通过命令任意配置成OUT,IN。
八个IO口通过左右两个相同的六管脚插座输出,从左到右分配定义为:


另外一个端口与画面定义相同,只是BIT的序号从4到8.

pIYBAF_jCimAHYUQAAU-oj2aAGA816.png

变阻器的执行部件是由带有减速齿轮箱的直流电机。直流电机配有霍尔转速吗盘。

该电机通过软塑料管可以与多圈电位器相连,通过转动带动电位器转动。


控制命令

控制命令的说明文档:
DesignCenterMyResearch202机械可变电阻


控制命令在软件SerialText.C中表示:如下面代码所示:

//------------------------------------------------------------------------------

void SerialDebugProcessBuffer(void) {

SerialDebugBuffer2Argument();

if(g_ucSDANumber == 0) return;


if(strcmp("hello", (char *)STD_ARG[0]) == 0)

printf("%s is ready !rn", VERSION_STRING);

 else IFARG0("11pwm1") {

     int nNumber;

     sscanf(SDA(1), "%d", &nNumber);

     SetPWM1(nNumber);

 }else IFARG0("11pwm2") {

     int nNumber;

     sscanf(SDA(1), "%d", &nNumber);

     SetPWM2(nNumber);


 } else IFARG0("11pwm12") {

     int nNumber;

     sscanf(SDA(1), "%d", &nNumber);

     SetPWM12(nNumber);


 } else IFARG0("varistorcount1") {

     int nNumber;

     sscanf(SDA(1), "%d", &nNumber);

     int nPWM = 20;

     if(STD_NUM > 2) {

         sscanf(SDA(2), "%d", &nPWM);

         if(nPWM > 50) nPWM = 50;

     }

     SetCount1(nNumber, nPWM);

 } else IFARG0("varistorcount2") {

     int nNumber;

     sscanf(SDA(1), "%d", &nNumber);

     int nPWM = 20;

     if(STD_NUM > 2) {

         sscanf(SDA(2), "%d", &nPWM);

         if(nPWM >= 50) nPWM = 50;

     }

     SetCount2(nNumber, nPWM);

 } else IFARG0("varistorsetbit") {

     int nNumber;

     sscanf(SDA(1), "%x", &nNumber);

     SetBit((unsigned char)nNumber);

 } else IFARG0("varistorclearbit") {

     int nNumber;

     sscanf(SDA(1), "%x", &nNumber);

     ClearBit((unsigned char)nNumber);

 } else IFARG0("varistorsetbitvalue") {

     int nNumber;

     sscanf(SDA(1), "%x", &nNumber);

     SetBitValue((unsigned char)nNumber);

 } else IFARG0("varistorgetstatus") {

     char szString[32];

     sprintf(szString, "%d %d %drn", GetBitValue(), GetCount1(), GetCount2());

     printf("%s", szString);

     int nLength = strlen(szString);

     int i;

     for(i = 0; i < nLength; i ++) {

         UART2SendChar(szString[i]);

     }


 } else IFARG0("varistorsetbitoutin"){

     int nNumber;

     sscanf(SDA(1), "%x", &nNumber);

     SetBitOutIn((unsigned char)nNumber);

 }

在JPGA25DOP中带有Python调用命令程序函数,相应的命令见下面的代码:


#!/usr/local/bin/python

# -*- coding: gbk -*-

#============================================================

# JPGA25.PY                    -- by Dr. ZhuoQing 2020-01-26

#

# Note:

#============================================================


from head import *


from tsmodule.tshardware import *


def jpgasetbitoutin(bit):

    ccloadSerial.write(b'varistorsetbitoutin %xr'%bit)


def jpgagetstatus():

    if ccloadSerial.inWaiting() > 0:

        ccloadSerial.read(ccloadSerial.inWaiting())


    ccloadSerial.write(b'varistorgetstatusr')


    for i in range(100):

        if ccloadSerial.inWaiting() > 0: break

        time.sleep(0.01)


    time.sleep(0.01)


    return ccloadSerial.read(ccloadSerial.inWaiting())


def jpgasetbitvalue(bit):

    ccloadSerial.write(b'varistorsetbitvalue %xr'%bit)



def jpgarun1(step, speed=20):

    ccloadSerial.write(b'varistorcount1 %d %dr'%(step, speed))


def jpgarun2(step, speed=20):

    ccloadSerial.write(b'varistorcount2 %d %dr'%(step, speed))


测试结果

通过以下代码,使得变阻器变动,通过DM3068数字万用表测量电阻。 变阻器的引脚三个,从右到左,分别是滑动端,固定端1,固定端2.


指令中,如果RUN的参数为正,则滑动端与固定端2的电阻减少,与固定端1的电阻增加。 移动总步数大约为4500。


由于使用ZIGBEE进行命令控制,其中会出现丢失命令数据包的情况,所以在移动过程中电阻的变化会出现暂留的情况。

pIYBAF_jCneAETVtAAA5-ybzhQ0630.png

下面是对于第二个电阻测试的结果。每移动一次,测量滑动端至固定端2 之间的电阻。

o4YBAF_jCoqAa1LoAAAyZy2LZe4498.png


#!/usr/local/bin/python

# -*- coding: gbk -*-

#============================================================

# EXE1.PY                      -- by Dr. ZhuoQing 2020-01-26

#

# Note:

#============================================================

from headm import *

from tsmodule.tsvisa import *

dm3068open()

from jpga25 import *

#------------------------------------------------------------

jpgarun2(5500, 50)


#exit()

time.sleep(2)

#------------------------------------------------------------

resdim = []

pltgif = PlotGIF()

for i in range(80):

    jpgarun2(-50, 20)

    time.sleep(.5)

    res = dm3068res()


    printff(i, res)

    resdim.append(res)


    plt.clf()

    plt.plot(resdim)

    plt.xlabel('Sample')

    plt.ylabel('Resistor(ohm)')

    plt.pause(.01)


    pltgif.append(plt)


pltgif.save(r'd:tempres.gif', 50, 3000)


jpgarun2(5500, 50)


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>