久久久国产精品视频袁燕,99re久久精品国产,亚洲欧美日韩国产综合v,天天躁夜夜躁狠狠久久,激情五月婷婷激情五月婷婷

lihui710884923
認證:VIP會員
所在專題目錄 查看專題
STM32 嵌入式平臺上的語音識別系統(tǒng)
STM32F767ZI 之人工智能(AI) 應用
STM32 HAL庫中斷(繞來繞去)——剖析回調(diào)函數(shù)機制
stm32如何用虛擬地址存儲數(shù)據(jù)
500A功率采集電路原理和源碼分析
開源之RFID自動分揀系統(tǒng)
作者動態(tài) 更多
物聯(lián)網(wǎng)專題之NB-IoT項目框架(二)
2024-07-25 11:53
物聯(lián)網(wǎng)專題之介紹(一)
2024-07-11 18:37
單片機RTC的中斷剖析
2024-03-09 15:28
串口通訊的來龍去脈
2024-02-14 17:32
stm32單片機的USB燒錄程序
2023-09-08 22:48

500A功率采集電路原理和源碼分析

最大電流采樣500A,主要應用在電力上的對某個電網(wǎng)進行瞬時功率,平均功率,總功率采集

通過STM32微控制器,對電網(wǎng)信號進行采樣處理

設(shè)計參數(shù)

(1)  電壓參數(shù) 0-105V

(2)電流參數(shù) 0-500mA,0-5A,0-500A

(3)  最大頻率成分 <25kHz

(4)  AD采樣率600kHz(方便處理),功率采樣率300kHz

結(jié)果輸出:每秒通過串口將p、P、W發(fā)送到PC端

這是整體電路

我們主要分析電流采樣這塊

電流采樣這塊采用精密零漂移電流檢測放大器U3 LTC6102,VIN輸入最高為105V(電網(wǎng)的電壓經(jīng)過變壓器整流降壓的),通過外部檢測電阻RoutX和RoutX_ADJ (分流 電阻) 兩端的電壓來監(jiān)測電流(0-500ma,0-5A,0-500A)。內(nèi)部電路將輸入 電壓轉(zhuǎn)換為輸出電流,使得大共模電壓上的小檢 測信號可以轉(zhuǎn)換為以地為基準的信號。低直流失 調(diào)電壓支持使用非常小的分流電阻值和較大的 增益設(shè)置電阻。電流精度可以達到10ma,電流采樣電阻采用大功率Rsense 1mR,最大檢測電流達到電網(wǎng)的500A。下圖最右邊是對電流采樣原理和計算公式。

對電流采樣采用二階低通濾波器,這個是一個有源濾波器,用工作在線性區(qū)的集成運放和 RC 網(wǎng)絡(luò)組稱,實際上是一種具有特定頻 率響應的放大器,主要濾除電網(wǎng)負載的波動

具體原理如下:

U3的輸出經(jīng)過PR2、CC2、PR1、CC1構(gòu)成二階低通濾波電路,R1、Rf1、Rf1_ADJ構(gòu)成同相比例放大電路,Rf1_ADJ可以調(diào)節(jié)電路的放大倍數(shù),這是計算公式

在集成運放U2輸出到集成運放同相輸入之間并聯(lián)電容CC2引入一個負反饋,主要作用是,在不同的頻段,反饋的極性不相同,當信號頻率f>>f0時(f0 為截止頻率),電路的每級RC 電路的相移趨于-90º,兩級RC 電路的移相到-180º,電路的輸出電壓Vout與輸入電壓Vin的相位相反,故此時通過電容CC2引到集成運放同相端的反饋是負反饋,反饋信號將起著削弱輸入信號的作用,使電壓放大倍數(shù)減小,所以該反饋將使二階有源低通濾波器的幅頻特性高頻端迅速衰減,只允許低頻端信號通過。其特點是輸入阻抗高,輸出阻抗低。

下圖是低通濾波器的頻率特性曲線

我們對電流采樣的同時也對電網(wǎng)負載的電壓進行實時采集,就是說電壓和電流是同步采集。

具體原理如下

電網(wǎng)負載電壓LOAD_VCC經(jīng)過電阻VR2、VR1、VR1_ADJ分壓,把電網(wǎng)的高電壓變成低電壓給運放U4濾波采集,和上面的電流采樣原理一樣

下圖是電壓采樣頻率特性圖

最后是功率數(shù)據(jù)處理

我們采用DMA采樣并傳輸數(shù)據(jù)      

                         

通過調(diào)整緩沖區(qū)大小,可調(diào)整DMA中斷周期

具體的功率計算如下

瞬時功率

平均功率

總功率

源碼分析,ADC初始化

void ADC1_Mode_Config(void)
{
	DMA_InitTypeDef DMA_InitStructure;
	ADC_InitTypeDef ADC_InitStructure;

	//DMA1 通道1
	/* DMA1 channel1 configuration */
	DMA_DeInit(DMA1_Channel1);
	DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;
	DMA_InitStructure.DMA_MemoryBaseAddr = (u32)ADC_VAL;//
	DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;//從外設(shè)讀取數(shù)據(jù)
	DMA_InitStructure.DMA_BufferSize = (CHANNEL*BUFFER_SIZE);//3KB (HW)
	DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//外設(shè)地址不變
	DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;//DMA地址增加
	DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;//16bit
	DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;//16bit
	DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
	DMA_InitStructure.DMA_Priority = DMA_Priority_High;
	DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
	DMA_Init(DMA1_Channel1, &DMA_InitStructure);
	
	DMA_ClearITPendingBit(DMA1_IT_TC1);
	DMA_ITConfig(DMA1_Channel1,DMA1_IT_TC1,ENABLE);//DMA1傳輸完成中斷

	/* Enable DMA channel1 */
	DMA_Cmd(DMA1_Channel1, ENABLE);

	/* ADC1 configuration */
	ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;//ADC獨立轉(zhuǎn)換模式,相對于雙重模式
	ADC_InitStructure.ADC_ScanConvMode = ENABLE;//掃描模式
	ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;//連續(xù)轉(zhuǎn)換模式
	ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
	ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
	ADC_InitStructure.ADC_NbrOfChannel = 2;
	ADC_Init(ADC1, &ADC_InitStructure);

//	ADC_RegularChannelConfig(ADC1, ADC_Channel_10, 1, ADC_SampleTime_28Cycles5);
//	ADC_RegularChannelConfig(ADC1, ADC_Channel_11, 2, ADC_SampleTime_28Cycles5);
	
	/* ADC1 regular channel configuration */ 
	//AD采樣率為12000K/(7.5+12.5)=600K
	ADC_RegularChannelConfig(ADC1, ADC_Channel_10, 1, ADC_SampleTime_7Cycles5);
	ADC_RegularChannelConfig(ADC1, ADC_Channel_11, 2, ADC_SampleTime_7Cycles5);

	/* Enable ADC1 DMA */
	ADC_DMACmd(ADC1, ENABLE);

	/* Enable ADC1 */
	ADC_Cmd(ADC1, ENABLE);

	/* Enable ADC1 reset calibaration register */   
	ADC_ResetCalibration(ADC1);
	/* Check the end of ADC1 reset calibration register */
	while(ADC_GetResetCalibrationStatus(ADC1));

	/* Start ADC1 calibaration */
	ADC_StartCalibration(ADC1);
	/* Check the end of ADC1 calibration */
	while(ADC_GetCalibrationStatus(ADC1));
}

上面也說了我們采用DMA中斷來采集

//DMA1中斷優(yōu)先級最高(約5.3ms)
	NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel1_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
	NVIC_Init(&NVIC_InitStructure);
//DMA1 中斷服務(wù)程序 
void DMA1_Channel1_IRQHandler()
{
	if(DMA_GetITStatus(DMA1_IT_TC1))
	{
		DMA_ClearITPendingBit(DMA1_IT_TC1);
		//CALIBRATE_U_I();//校準模式
		CALCULATE_POWER();//計算功率模式
	}
}

計算功率

//瞬時功率
		INSTANT_POWER_W = (double)INSTANT_POWER*CONVERT_FACTOR_P_5_A;
		//平均功率
		AVE_POWER = INSTANT_POWER_SUM/CYCLE_COUNT;
		AVE_POWER_W = (double)AVE_POWER*CONVERT_FACTOR_P_5_A;
		SUM_OF_POWER += AVE_POWER;
		//總功率
		SUM_OF_POWER_WH = (double)SUM_OF_POWER*CONVERT_FACTOR_P_5_A*CONVERT_FACTOR_WH;
		
//		printf("INSTANT_POWER_W:  %f\r\n",INSTANT_POWER_W);
//		printf("AVE_POWER_W:      %f\r\n",AVE_POWER_W);
//		printf("SUM_OF_POWER_WH: %.10f\r\n",SUM_OF_POWER_WH);

		printf("p: %.3fw P: %.3fw W: %.3fwh\r\n",INSTANT_POWER_W,AVE_POWER_W,SUM_OF_POWER_WH);
聲明:本內(nèi)容為作者獨立觀點,不代表電子星球立場。未經(jīng)允許不得轉(zhuǎn)載。授權(quán)事宜與稿件投訴,請聯(lián)系:editor@netbroad.com
覺得內(nèi)容不錯的朋友,別忘了一鍵三連哦!
贊 16
收藏 19
關(guān)注 212
成為作者 賺取收益
全部留言
0/200
  • 小董 2021-03-06 09:41
    精彩,很多東西還沒接觸到
    回復
  • dy-blNlwnWV 2021-02-24 23:07
    講的真好!
    回復
  • liuxiaofei126 2021-01-30 19:45
    給力
    回復
  • 星球居民-YBPLIKJ1 2021-01-24 13:00
    可以
    回復
  • keyhei66 2021-01-15 11:52
    學習
    回復
  • 星球居民-YBPLIKJ1 2021-01-14 19:44
    電路可以
    回復
  • 米修兒 2021-01-14 16:54
    不錯
    回復