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

虽然现在有很多可以用来当做变阻器的器件:比如场效应管、x9c103数字电位器,但是由于存在非线性、寄生电容,所以在很多测量场合还是需要机械变阻器来完成。
■ 说明
在2020/9/18日,由于外部机械碰撞,使得bluetooth接口断裂,整个模块就报废掉了。
▲ 拆解前的机械变阻电位器
01设计原理
机械变阻器
机械变阻器的控制器是由stm32f103为核心,外部使用两个a4950做起小型直流电机驱动器。通过zigbee串口模块接收控制命名。
在控制上还有八个io端口,可以通过命令任意配置成out,in。
八个io口通过左右两个相同的六管脚插座输出,从左到右分配定义为:
另外一个端口与画面定义相同,只是bit的序号从4到8.
变阻器的执行部件是由带有减速齿轮箱的直流电机。直流电机配有霍尔转速吗盘。
该电机通过软塑料管可以与多圈电位器相连,通过转动带动电位器转动。
控制命令
控制命令的说明文档:
designcenter\myresearch\202\机械可变电阻
控制命令在软件serialtext.c中表示:如下面代码所示://------------------------------------------------------------------------------void serialdebugprocessbuffer(void) { serialdebugbuffer2argument(); if(g_ucsdanumber == 0) return; if(strcmp(hello, (char *)std_arg[0]) == 0) printf(%s is ready !\r\n, 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 %d\r\n, getbitvalue(), getcount1(), getcount2()); printf(%s, szstring); int nlength = strlen(szstring); int i; for(i = 0; i 0: ccloadserial.read(ccloadserial.inwaiting()) ccloadserial.write(b'varistorgetstatus\r') 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 %x\r'%bit)def jpgarun1(step, speed=20): ccloadserial.write(b'varistorcount1 %d %d\r'%(step, speed))def jpgarun2(step, speed=20): ccloadserial.write(b'varistorcount2 %d %d\r'%(step, speed)) 测试结果
通过以下代码,使得变阻器变动,通过dm3068数字万用表测量电阻。 变阻器的引脚三个,从右到左,分别是滑动端,固定端1,固定端2.
指令中,如果run的参数为正,则滑动端与固定端2的电阻减少,与固定端1的电阻增加。 移动总步数大约为4500。
由于使用zigbee进行命令控制,其中会出现丢失命令数据包的情况,所以在移动过程中电阻的变化会出现暂留的情况。
下面是对于第二个电阻测试的结果。每移动一次,测量滑动端至固定端2 之间的电阻。


如何在FLOEFD中查看风扇工作点?
贴片编程的原始资料
CAN总线通讯中终端电阻的作用
产品数据分析报告如何撰写
反激式适配器同步整流芯片U7710SG简介
机械变阻器的控制器设计原理及控制命令
OpenCV图像修复
到底什么是BRAS?
如何使用Ubuntu Linux使其物联网平台更安全更快
3D打印迷你CNC绘图机设计
对称栅极控制驱动电路
铲雪机器人的设计具有自动化、智能化的特点
嵌入式工程师去面试可能被问到的问题集锦
道路纵横断面测量的高效方法来了!
电力电容器的维护与运行管理技术
英特尔用软件优化技术来带动硬件性能的提升
中国新能源汽车市场出现40%左右的“断崖式”下滑
垃圾处理设备远程调试远程运维系统
Linux中如何开启端口
设计超酷!苹果全新Mac Pro概念图曝光:垃圾桶变盒子