產品實物:
一、產品概述
數字電壓電流表,又稱為數顯電流電壓表,是以數字形式顯示,能夠同時檢測電流和電壓兩種電參量的儀表。隨著數字技術和微電腦技術的不斷發展,這類儀表以芯片為核心,廣泛應用于工業自動化和工控領域。
數字電壓電流表通常與各種傳感器、變送器配合使用,用于測量電量、壓力、物位、液位、流量、溫度等參數,并直接以數字形式顯示測量結果。例如,它可以用于測量各種電路元件的電壓,如電源電壓、電容電壓、電感電壓等。此外,在電子設備的維修與調試中,數字電壓電流表也發揮著重要作用,通過測量電路中的電壓,技術人員可以判斷電子元件、電路板的工作狀態,快速定位故障點,提高維修效率。
與指針式儀表相比,數字電壓電流表具有很高的輸入阻抗,使得其自身損耗很小,無需對其損耗誤差進行修正。然而,數字儀表也存在一些不足之處,如在某些特定應用場景下可能不如指針式儀表直觀。
總的來說,數字電壓電流表以其高準確度、直觀性、自動化和多功能性等特點,在電力、電子、通信、自動化控制等領域得到了廣泛的應用,并為相關行業的技術人員提供了強大的工具,幫助他們更高效地進行設備的測量、調試和維修工作。
二、主控MCU選擇
本方案采用CW32F003E4P7芯片片作為核心控制單元,負責整個系統的數據處理和控制。
CW32003E4P7的產品特性如下:
? 內核:ARM? Cortex?-M0+
- 最高主頻 48MHz
? 工作溫度:-40℃至 105℃;工作電壓:1.65V 至 5.5V
? 存儲容量
- 最大 20K 字節 FLASH,數據保持 25 年 @85℃
- 最大 3K 字節 RAM,支持奇偶校驗
-22 字節 OTP 存儲器
? CRC 硬件計算單元
l 復位和電源管理
- 低功耗模式(Sleep,DeepSleep)
- 上電和掉電復位(POR/BOR)
- 可編程低電壓檢測器(LVD)
? 時鐘管理
- 內置 48MHz RC 振蕩器
- 內置 32kHz RC 振蕩器
- 內置 10kHz RC 振蕩器
- 內置 150kHz RC 振蕩器
- 外部引腳輸入時鐘
- 允許獨立關斷各外設時鐘
? 支持最多 21 路 I/O 接口
- 所有 I/O 口支持中斷功能
- 所有 I/O 支持中斷輸入濾波功能
? 模數轉換器
- 12 位精度,±1 LSB
- 最高 1M SPS 轉換速度
- 內置電壓參考
- 內置溫度傳感器
? 雙路電壓比較器
? 定時器
- 16 位高級控制定時器,支持 6 路捕獲 / 比較通道和 3 對互補 PWM 輸出,死區時間和靈活的同步功能
- 一組 16 位通用定時器
- 三組 16 位基本定時器
- 窗口看門狗定時器
- 獨立看門狗定時器
? 通信接口
- 兩路低功耗 UART,支持小數波特率
- 一路 SPI 接口 12Mbit/s
- 一路 I2C 接口 1Mbit/s
- IR 調制器
? 串行調試接口 (SWD)
三、方案組成框圖設計
四、參數功能列表
(1) 電壓測量范圍:0-33V。(2) 電流測量范圍:0-3A。(3) 顯示分辨率:電壓0.01V,電流0.01A。 (4) 測量精度:電壓±0.02V,電流±0.02A。(5) 工作溫度:-20℃~100℃。(6) 顯示方式:雙排3位數碼管顯示,實時顯示當前電壓和電流。(響應時間≤0.2秒)(7) 顯示分辨率:3位數字顯示。根據輸入量程,自動換檔,以盡量兼顧顯示分辨率及測量精度。(8) 有儀表的標定和校準功能。(利用按鍵或藍牙)五
方案主要硬件設計
1.電壓檢測:
通過適當的分壓電路,將待測電壓降低到CW32芯片可接受的范圍內,然后接入CW32的ADC(模數轉換器)進行數字化處理。數字電壓電流表的采樣電路原理圖如下圖所示,
分壓電阻為220K+10K,因此分壓比例為22:1。
如果使用1.5V作為參考電壓,根據R8和R7的阻值配比可以得到最高采樣電壓為:
1.5 / 10 * (220 + 10)= 34.5V因此可以滿足33V的輸入范圍要求。如果在實際使用中,需要測量的電壓或高于模塊33V的設計電壓,可以選擇更換分壓電阻或通過修改基準電壓來實現更大量程的電壓測量范圍。考慮到被測電源可能存在波動,在電路設計時,在低側分壓電阻上并聯了0.1uF的濾波電容提高測量穩定性。另外,在產品設計中,考慮精度問題,電阻選擇千分之一精度。
2. 電流檢測:
采用低側電流采樣電路進行電流檢測,采樣電路的低側與表頭供地。
本項目設計的采樣電流為3A,選擇的采樣電阻為100mΩ。
采樣選型主要需要參考以下幾個方面:
設計測量電流的最大值,本項目中為3A;
(1) 檢流電阻帶來的壓差,一般不建議超過0.5V;
(2) 檢流電阻的功耗,應當根據該參數選擇合適的封裝,本項目考慮到PCB尺寸,選擇了2512封裝;
(3) 檢流電阻上電壓的放大倍數:本項目中沒有使用放大電路,因此倍率為1。
隨后便可以通過以上參數計算出檢流的阻值選擇:
(1) 由于本項目沒有使用放大電路,因此需要選擇更大的采樣電阻獲得更高的被測電壓以便于進行測量;
(2) 考慮到更大的電阻會帶來更大的壓差、更高的功耗,因此也不能無限制的選擇更大的電阻;
(3) 本項目選用了2512封裝的電阻,對應的溫升功率為1W。
綜合以上數據,本項目選擇了100mΩ的檢流電阻,根據公式可以計算出3A*100mΩ=300mV,900mW。表頭在設計時考慮到了貼片采樣電阻不能夠應對不同的使用環境,尤其是電流較大的場景,因此預留了10mm間距的康銅絲直插焊盤,可以更具實際使用場景,使用康銅絲替換貼片采樣電阻。下圖中紅色方框框選出的即是康銅絲焊接焊盤。
3. 藍牙通訊電路:
使用KT6368A作為藍牙主控芯片。
只需要通過藍牙進行數據透傳,也就是通過藍牙把數據發送出去,便于用戶通過手機或電腦對被測電壓電流進行無線監控,不需要其他復雜功能,因此本項目中選擇了外圍電路極其簡單的KT6368A,只需要使用單芯片+晶振便可實現BLE通信,同時該芯片為雙模芯片,還可以支持SPP通信。
為了降低項目成本,模塊采用了PCB板載天線替代外接天線或陶瓷天線,在室內環境依舊可以保持良好的通信效果,若實際使用場景對通信距離有要求,可根據實際情況改為不同的天線類型。
4. 另外還有數碼管顯示電路、電源設計電路、按鍵電路、最小系統電路等。這里不再一一描述。
六、軟件重點編輯思想
1. 數碼管動態掃描:
數碼管顯示的動態掃描原理如下:顯示器中所有數碼管在系統控制下有序逐位點亮,每位數碼管的點亮時間為1到2微秒。利用人體視覺暫留現象及發光二極管余輝效應,各位數碼管并非同時點亮,但掃描速度足夠快,從而一組穩定不閃爍顯示數據。
在程序中,使用定時器定時掃描每位數碼管。
定時時中斷定時執行如下代碼,以實現數碼管的動態掃描。注意定時器定時時間要足夠短,比如1MS.
Close_Com(); //先關閉公共端,防止重影 Seg_Dis(num,Seg_Reg[num]); //開斷碼,然后開位碼。 num++; //切換數碼管位數 if(num > 6) { num = 0; }
2. 數據采集處理 :
CW32F003 內部集成一個 12 位精度、最高 1M SPS 轉換速度的逐次逼近型模數轉換器 (SAR ADC),最多可將 16 路模擬信號轉換為數字信號。現實世界中的絕大多數信號都是模擬量,如光、電、聲、圖像信號等,都要由 ADC 轉換成數字信號,才能由 MCU 進行數字化處理。
在本系統中,需要采信2路AD,電壓及電流。因此,選用ADC的序列采樣連續轉換模式。序列連續轉換模式可對最多四個序列的通道進行輪流轉換。更多轉換原理,可參考芯片用戶手冊。
ADC初始化代碼如下 :
void ADC_init(void) { ADC_InitTypeDef ADC_InitStructure; //ADC配置結構體 ADC_SerialChTypeDef ADC_SerialChStructure; //ADC序列通道結構體 GPIO_InitTypeDef GPIO_Init_Struct; __RCC_GPIOB_CLK_ENABLE(); //打開ADC對應引腳時鐘 __RCC_ADC_CLK_ENABLE(); // 打開ADC時鐘 GPIO_Init_Struct.IT = GPIO_IT_NONE; GPIO_Init_Struct.Mode = GPIO_MODE_ANALOG;//將GPIO的模式配置成模擬功能 GPIO_Init_Struct.Pins = GPIO_PIN_1; // PB01是電壓采集引腳 GPIO_Init(CW_GPIOB, &GPIO_Init_Struct); PB01_ANALOG_ENABLE(); //使能模擬引腳 PB05_ANALOG_ENABLE(); ADC_StructInit(&ADC_InitStructure); // ADC默認值初始化 ADC_InitStructure.ADC_ClkDiv = ADC_Clk_Div128; //ADC工作時鐘配置 PCLK/4 = 6/4 = 1.5Mhz /*信號電壓較低時,可以降低參考電壓來提高分辨率。改變參考電壓后,同樣二進制表示的電壓值就會不一樣, 最大的二進制(全1)表示的就是你的參考電壓,在計算實際電壓時,就需要將參考電壓考慮進去。*/ ADC_InitStructure.ADC_VrefSel = ADC_Vref_BGR1p5; //參考電壓設置為1.5V ADC_InitStructure.ADC_SampleTime = ADC_SampTime10Clk; //由于電壓信號為慢速信號,ADC采樣時間為十個ADC采樣周期以確保準確 ADC_SerialChStructure.ADC_Sqr0Chmux = ADC_SqrCh9; //配置ADC序列,PB01是ADC的第9通道 ADC_SerialChStructure.ADC_Sqr1Chmux = ADC_SqrCh11; ADC_SerialChStructure.ADC_SqrEns = ADC_SqrEns01; ADC_SerialChStructure.ADC_InitStruct = ADC_InitStructure; //ADC初始化 ADC_SerialChContinuousModeCfg(&ADC_SerialChStructure); //ADC序列連續轉換模式配置 ADC_ClearITPendingAll(); //清除ADC所有中斷狀態 ADC_Enable(); // ADC使能 ADC_SoftwareStartConvCmd(ENABLE); //ADC轉換軟件啟動命令 }
3. 數據濾波處理:由于采集到的原始數據有一定的波動,因此在顯示更新速度較快時,數字有跳動現象。
在數據處理前,可以增加常見的均值濾波算法。
均值濾波也稱為線性濾波,其采用的主要方法為鄰域平均法。線性濾波的基本原理是用均值代替原圖像中的各個像素值,即對待處理的當前像素點(x,y),選擇一個模板,該模板由其近鄰的若干像素組成,求模板中所有像素的均值,再把該均值賦予當前像素點(x,y),作為處理后圖像在該點上的灰度g(x,y),即g(x,y)=∑f(x,y)/m,m為該模板中包含當前像素在內的像素總個數。
這本是數字圖像處理的一種方法,但也可以用在我們數字電壓電流表的ADC采樣數據上。我們選取一定次數的ADC采樣值存儲在數組 Volt_Buffer 中,然后去除掉數組中的最大值和最小值后再取平均,得到的值作為結果顯示在數碼管上,這樣可以較大程度獲得準確的、不易波動的數據。
均值濾波代碼如下:
uint32_t Mean_Value_Filter(uint16_t *value, uint32_t size) //均值濾波 { uint32_t sum = 0; //ADC采樣數據和 uint16_t max = 0; uint16_t min = 0xffff; //min初值取最大是為了將第一個數據記錄 int i; for(i = 0; i < size; i++) { sum += value[i]; if(value[i] > max) { max = value[i]; } if(value[i] < min) { min = value[i]; } } sum -= max + min; //去除最大最小值 sum = sum / (size - 2); return sum; }
4. 數據標定:
標定是通過測量標準器的偏差來補償儀器系統誤差,從而改善儀器或系統準確度、精度的操作。為了提高電壓電流表在測量時的測量精度和準確度,需要對電壓電流進行標定校準。
常見的標定原理如下:
假設一個采樣系統,AD部分可以得到數字量,對應的物理量為電壓(或電流);
① 若在“零點”標定一個AD值點Xmin,在“最大處”標定一個AD值點Xmax,根據“兩點成一條直線”的原理,可以得到一條由零點和最大點連起來的一條直線,這條直線的斜率k很容易求得,然后套如直線方程求解每一個點X(AD采樣值),可以得到該AD值對應的物理量(電壓值):
上圖中的斜率k:
k =(Ymax-Ymin)/(Xmax-Xmin)
(因為第一點為“零點”,故上面的Ymin = 0)所以,上圖中任一點的AD值對應的物理量:
y = k×(Xad- Xmin)+0
② 上面的算法只是在“零點”和“最大點”之間做了標定,如果使用中間的AD采樣值會帶來很大的對應物理量的誤差,解決的辦法是多插入一些標定點。
如下圖,分別插入了標定點(x1,y1)、(x2,y2)、(x3,y3)、(x4,y4) 四個點:
這樣將獲得不再是一條直線,而是一條“折現”(相當于分段處理),若欲求解落在x1和x2之間一點Xad值對應的電壓值:y = k×(Xad– X1)+ y1由上看出,中間插入的“標定點”越多,得到物理值“精度”越高。在電壓電流表測量可以使用“電壓電流標定板”“萬用表”等配合適合,對采集的電壓電流進行標定處理。標定點越多,測量越精確。參考例程中,使用了3點標定。其中,電壓標定點為0V、5V、15V。電流標定點為0A、0.5A、1.5A。
標定代碼如下:
void Volt_Cal(void) { float t,KT1; V_Buffer = Mean_Value_Filter(Volt_Buffer,ADC_SAMPLE_SIZE);//使用均值濾波 I_Buffer = Mean_Value_Filter(Curr_Buffer,ADC_SAMPLE_SIZE); //使用均值濾波 if(V_Buffer>=X05) // { t=V_Buffer-X05; V_Buffer=(K*t+Y05)*1000;} else { KT1=5000; KT1=KT1/X05; V_Buffer=KT1*V_Buffer; } // 四舍五入 if(V_Buffer % 10 >= 5) { V_Buffer = V_Buffer / 10 + 1; } else { V_Buffer = V_Buffer / 10; } if(I_Buffer>=IX05) { t=I_Buffer-IX05; I_Buffer=(KI*t+IY05)*10; } else { KT1=500; KT1=KT1/IX05; I_Buffer=KT1*I_Buffer; } if(I_Buffer % 10 >= 5) { I_Buffer = I_Buffer / 10 + 1; } else { I_Buffer = I_Buffer / 10; } // I_Buffer=I_Buffer * ADC_REF_VALUE >> 12; /** mv =I_Buffer * ADC_REF_VALUE >> 12, R = 100mr, 10ma = mv/R/10=mv/0.1/10 = mv */ }
5. 標定操作實現:
具體操作方法如下:
定義5個工作模式,點按按鍵切換工作模式,長按3S設置對應模式下的參數值,并保存到FLASH:
模式0:顯示正常的電壓電流值(上一排數碼管顯示電壓值*.**V或**.*V自動切換,下一排顯示電流值,*.**A)
模式1:電壓5V標定值設置。上一排數碼管顯示S.05. 。下一排顯示當前電壓值*.**V或**.*V。當長按3S 按鍵時,將當前值標定為5V電壓值。
模式2:電壓15V標定值設置。上一排數碼管顯示S.15. 。下一排顯示當前電壓值*.**V或**.*V。當長按3S 按鍵時,將當前值標定為15V電壓值。
模式3:電流0.5A標定值設置。上一排數碼管顯示A.0.5。下一排顯示當前電流值*.**A。當長按3S 按鍵時,將當前值標定為0.5A電流值。
模式4:電流1.5A標定值設置。上一排數碼管顯示A.1.5。下一排顯示當前電流值*.**A。當長按3S 按鍵時,將當前值標定為1.5A電流值
七、優化與調試
1. 精度優化:可選擇合適的電阻、電容等元件,以及優化ADC的采樣率和分辨率,來提高電壓和電流的測量精度。
2. 穩定性優化:可對電源管理電路和防反接電路進行優化設計,確保系統在各種工作環境下都能穩定運行。
3. 軟件調試:通過調試工具對軟件進行調試和優化,確保數據采集、處理和顯示等功能的正確性和穩定性。
4. 數據分析:在特殊應用場合,可根據實際信號的干擾情況進行算法的改過或選擇。
審核編輯 黃宇
-
電流表
+關注
關注
2文章
232瀏覽量
26269 -
數字電壓
+關注
關注
0文章
9瀏覽量
9833 -
ADC
+關注
關注
0文章
112瀏覽量
16845 -
CW32
+關注
關注
1文章
218瀏覽量
735
發布評論請先 登錄
相關推薦
電流表電壓表無示數的原因
TPD4F003.TPD6F003.TPD8F003八通道EMI濾波器數據表
![TPD<b class='flag-5'>4F003.TPD6F003.TPD8F003</b>八通道EMI濾波器數據<b class='flag-5'>表</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
CW32數字電壓電流表軟件進階教程-3.電壓電流標定
![<b class='flag-5'>CW</b>32<b class='flag-5'>數字</b><b class='flag-5'>電壓電流表</b>軟件進階教程-3.<b class='flag-5'>電壓電流</b>標定](https://file1.elecfans.com//web2/M00/EA/A6/wKgZomZZiGGATNseAAAMZi3WpOk52.webp)
CW32數字電壓電流表軟件進階教程-2.電壓電流值做均值濾波
CW32數字電壓電流表軟件教程-實驗七:基本數據處理算法(均值濾波)
CW32數字電壓電流表軟件教程-實驗五:ADC采樣及顯示
![<b class='flag-5'>CW</b>32<b class='flag-5'>數字</b><b class='flag-5'>電壓電流表</b>軟件教程-實驗五:ADC采樣及顯示](https://file1.elecfans.com//web2/M00/EA/A2/wKgZomZZfBKAEBhPAAAwmCXNLXg48.webp)
CW32數字電壓電流表軟件教程-實驗四:數碼管動態顯示
![<b class='flag-5'>CW</b>32<b class='flag-5'>數字</b><b class='flag-5'>電壓電流表</b>軟件教程-實驗四:數碼管動態顯示](https://file1.elecfans.com//web2/M00/EA/A2/wKgZomZZeweAfBHCAAAWnqqL7aI96.webp)
電流表和電壓表的區別
CW32數字電壓電流表-產品硬件設計要點
![<b class='flag-5'>CW</b>32<b class='flag-5'>數字</b><b class='flag-5'>電壓電流表</b>-<b class='flag-5'>產品</b>硬件設計要點](https://file1.elecfans.com/web2/M00/D9/6F/wKgZomYqBCCAM04iAACwV739oUA312.png)
CW32數字電壓電流表-產品制作注意事項
![<b class='flag-5'>CW</b>32<b class='flag-5'>數字</b><b class='flag-5'>電壓電流表</b>-<b class='flag-5'>產品</b>制作注意事項](https://file1.elecfans.com//web2/M00/D8/B2/wKgaomYo0NyAEQlOAABXkKcnY9g58.webp)
CW32F003E4芯片入門學習:4.工程模板創建(使用例程或模板)
![<b class='flag-5'>CW32F003E4</b>芯片入門學習:<b class='flag-5'>4</b>.工程模板創建(使用例程或模板)](https://file1.elecfans.com/web2/M00/C5/E1/wKgZomYDeIuAHSLzAABPS9RmuM4659.jpg)
CW32F003E4芯片入門學習:3.工程模板的創建(不使用例程或模板)
![<b class='flag-5'>CW32F003E4</b>芯片入門學習:3.工程模板的創建(不使用例程或模板)](https://file1.elecfans.com/web2/M00/C5/E1/wKgZomYDd3qATByVAACBKDW-j1c113.jpg)
評論