雖然現(xiàn)在有很多可以用來當(dāng)做變阻器的器件:比如場效應(yīng)管、X9C103數(shù)字電位器,但是由于存在非線性、寄生電容,所以在很多測量場合還是需要機(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))
測試結(jié)果
通過以下代碼,使得變阻器變動(dòng),通過DM3068數(shù)字萬用表測量電阻。 變阻器的引腳三個(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)暫留的情況。
下面是對于第二個(gè)電阻測試的結(jié)果。每移動(dòng)一次,測量滑動(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)注
112文章
16384瀏覽量
178345 -
場效應(yīng)管
+關(guān)注
關(guān)注
47文章
1163瀏覽量
63999 -
數(shù)字電位器
+關(guān)注
關(guān)注
4文章
267瀏覽量
83245 -
變阻器
+關(guān)注
關(guān)注
0文章
95瀏覽量
16424
發(fā)布評(píng)論請先 登錄
相關(guān)推薦
評(píng)論