雖然現(xiàn)在有很多可以用來當(dāng)做變阻器的器件:比如場(chǎng)效應(yīng)管、X9C103數(shù)字電位器,但是由于存在非線性、寄生電容,所以在很多測(cè)量場(chǎng)合還是需要機(jī)械變阻器來完成。
■ 說明
在2020/9/18日,由于外部機(jī)械碰撞,使得BLUETOOTH接口斷裂,整個(gè)模塊就報(bào)廢掉了。
01設(shè)計(jì)原理
機(jī)械變阻器
機(jī)械變阻器的控制器是由STM32F103為核心,外部使用兩個(gè)A4950做起小型直流電機(jī)驅(qū)動(dòng)器。通過ZIGBEE串口模塊接收控制命名。
在控制上還有八個(gè)IO端口,可以通過命令任意配置成OUT,IN。
八個(gè)IO口通過左右兩個(gè)相同的六管腳插座輸出,從左到右分配定義為:

另外一個(gè)端口與畫面定義相同,只是BIT的序號(hào)從4到8.

變阻器的執(zhí)行部件是由帶有減速齒輪箱的直流電機(jī)。直流電機(jī)配有霍爾轉(zhuǎn)速嗎盤。
該電機(jī)通過軟塑料管可以與多圈電位器相連,通過轉(zhuǎn)動(dòng)帶動(dòng)電位器轉(zhuǎn)動(dòng)。
控制命令
控制命令的說明文檔:
DesignCenter\MyResearch\202\機(jī)械可變電阻
控制命令在軟件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 < nLength; i ++) {
UART2SendChar(szString[i]);
}
} else IFARG0("varistorsetbitoutin"){
int nNumber;
sscanf(SDA(1), "%x", &nNumber);
SetBitOutIn((unsigned char)nNumber);
}
在JPGA25DOP中帶有Python調(diào)用命令程序函數(shù),相應(yīng)的命令見下面的代碼:
#!/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 %x\r'%bit) def jpgagetstatus(): if ccloadSerial.inWaiting() > 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))
測(cè)試結(jié)果
通過以下代碼,使得變阻器變動(dòng),通過DM3068數(shù)字萬用表測(cè)量電阻。 變阻器的引腳三個(gè),從右到左,分別是滑動(dòng)端,固定端1,固定端2.
指令中,如果RUN的參數(shù)為正,則滑動(dòng)端與固定端2的電阻減少,與固定端1的電阻增加。 移動(dòng)總步數(shù)大約為4500。
由于使用ZIGBEE進(jìn)行命令控制,其中會(huì)出現(xiàn)丟失命令數(shù)據(jù)包的情況,所以在移動(dòng)過程中電阻的變化會(huì)出現(xiàn)暫留的情況。

下面是對(duì)于第二個(gè)電阻測(cè)試的結(jié)果。每移動(dòng)一次,測(cè)量滑動(dòng)端至固定端2 之間的電阻。

#!/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:\temp\res.gif', 50, 3000) jpgarun2(5500, 50)
編輯:hfy
-
控制器
+關(guān)注
關(guān)注
114文章
17791瀏覽量
193233 -
場(chǎng)效應(yīng)管
+關(guān)注
關(guān)注
47文章
1292瀏覽量
71361 -
數(shù)字電位器
+關(guān)注
關(guān)注
4文章
277瀏覽量
84905 -
變阻器
+關(guān)注
關(guān)注
0文章
97瀏覽量
17066
發(fā)布評(píng)論請(qǐng)先 登錄
#機(jī)井灌溉智能控制設(shè)備 #智能機(jī)井控制器 #無線遠(yuǎn)傳超聲波水表 #智能機(jī)井灌溉刷卡控制器
基于FPGA的DDR控制器設(shè)計(jì)
codesys 3.5版本控制器聯(lián)機(jī)指導(dǎo):如何進(jìn)行RS232聯(lián)機(jī)?#codesys編程控制器 #控制器
Codesys 3.5 版本控制器聯(lián)機(jī)指導(dǎo):如何進(jìn)行CAN聯(lián)機(jī)?#can總線 #codesys控制器
激光振鏡運(yùn)動(dòng)控制器在流水線激光打標(biāo)上的應(yīng)用 #正運(yùn)動(dòng)技術(shù) #運(yùn)動(dòng)控制器 #運(yùn)動(dòng)控制 #正運(yùn)動(dòng)
海默RC系列機(jī)器人控制器
車載整機(jī)控制器 工程機(jī)械主機(jī)控制器#碩博電子#國(guó)產(chǎn)控制器
運(yùn)動(dòng)控制模塊:Delta機(jī)械手柔性上下料開發(fā)零門檻! #正運(yùn)動(dòng)技術(shù) #運(yùn)動(dòng)控制器 #Delta機(jī)械手
工程機(jī)械控制器廠家 控制器國(guó)產(chǎn)替代 #國(guó)產(chǎn)控制器#控制器廠家#控制器品牌
運(yùn)動(dòng)控制器接電子尺的工作原理
工程機(jī)械控制器如何選型?控制器選型指南 #控制器 #車載控制器 #整車控制器 #控制器選型
機(jī)械變阻器的控制器設(shè)計(jì)原理及控制命令
評(píng)論