国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

基于STM32電壓檢測和電流檢測

這篇具有很好參考價值的文章主要介紹了基于STM32電壓檢測和電流檢測。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

基于STM32電壓檢測和電流檢測

1.硬件平臺

  • CPU:STM32F103C8
  • 屏幕:0.96寸OLED屏幕(SPI接口)
  • 電壓測量模塊: INA226(IIC接口)
  • 點流測量模塊:ACS712(ADC采集)

2.功能實現(xiàn)

1.可測量直流電壓0~36V,適用于低電壓電子電路中。
2.可測量直流電0~5A范圍內(nèi),目前采用的ACS712測量量程為5A,該模塊有多個量程,可測量到20A
3.實時功率監(jiān)測
4.電池電量監(jiān)測(采用電壓壓降方式計算)

3.硬件介紹

3.1 INA226模塊

??INA226是具有I2C?或SMBUS兼容接口的電流分流器和功率監(jiān)控器。該設(shè)備同時監(jiān)視并聯(lián)電壓降和總線電源電壓??删幊痰男?zhǔn)值,轉(zhuǎn)換時間和平均值與內(nèi)部乘法器結(jié)合使用,可以直接讀取以安培為單位的電流和以瓦特為單位的功率。INA226感應(yīng)共??偩€電壓上的電流,該電壓可在0 V至36 V之間變化,與電源電壓無關(guān)。該器件采用2.7V至5.5V單電源供電,典型功耗為330 μA。該器件的額定工作溫度范圍為–40°C至125 \ xC2°C,并且在I 2 C兼容接口上具有多達(dá)16個可編程地址。

acs712stm32,STM32,stm32,INA226,霍爾傳感器,ACS712
??根據(jù)實物和原理圖可看出IN和OUT 之間進(jìn)接了一個0.002R電阻。在官方提供說明文檔介紹改模塊是可以測量直流電壓0~36V,可測量總線共模電流,測量電流范圍為-20A ~ 20A之間。測量精度為±1%。但在實際使用過程中發(fā)現(xiàn)僅能測量測量到電壓值。測量電壓時接線方式為:
??INPUT接電源正極,GND接電源負(fù)極。
??按照模塊使用說明提示在將模塊串聯(lián)接入電路(即OUPUT接入到負(fù)載),實際測量發(fā)現(xiàn)無法獲取到正常電流值,因此采用ACS712模塊通過ADC方式完成電流測量。

3.2 INA226模塊相關(guān)寄存器和設(shè)備地址

?? 1.INA226一共有6個寄存器(0x0~0x5),關(guān)于各個寄存器詳細(xì)介紹這里則不展開介紹,可自行下載相關(guān)資料。
acs712stm32,STM32,stm32,INA226,霍爾傳感器,ACS712
?? 2.INA226模塊采用IIC通訊,根據(jù)原理圖可知地址A1 A0 ==00,再參考官方技術(shù)文檔可知模塊設(shè)備地址為:0x40
acs712stm32,STM32,stm32,INA226,霍爾傳感器,ACS712
從時序可以看出,第8位為讀寫使能位,則地址和讀寫為組合則為:讀0x81,寫0x80
acs712stm32,STM32,stm32,INA226,霍爾傳感器,ACS712

3.3 INA226模塊時序圖

?? 在時鐘下降沿沿時發(fā)送數(shù)據(jù),上升沿讀取數(shù)據(jù)。
acs712stm32,STM32,stm32,INA226,霍爾傳感器,ACS712 ??3.3 INA226模塊驅(qū)動

#include "sys.h"
#include "myiic.h"
#define 	CFG_REG	 		0x00		//
#define 	SV_REG 			0x01		//分流電壓
#define 	BV_REG 			0x02		//總線電壓
#define 	PWR_REG 		0x03		//電源功率
#define 	CUR_REG 		0x04		//電流
#define 	CAL_REG 		0x05		//校準(zhǔn),設(shè)定滿量程范圍以及電流和功率測數(shù)的 
#define 	ONFF_REG 		0x06		//屏蔽 使能 警報配置和轉(zhuǎn)換準(zhǔn)備就緒
#define 	AL_REG 			0x07		//包含與所選警報功能相比較的限定值
#define 	INA226_GET_ADDR 0XFF		/
//初始化INA226
void INA226_Init(void)
{	

	IIC_Init();
	INA226_SendData(INA226_ADDR1,CFG_REG,0x8000);	//重新啟動
	
	INA226_SendData(INA226_ADDR1,CFG_REG,0x484f);	//設(shè)置轉(zhuǎn)換時間204us,求平均值次數(shù)128,采樣時間為204*128,設(shè)置模式為分流和總線連續(xù)模式
	INA226_SendData(INA226_ADDR1,CAL_REG,CAL);	//設(shè)置分辨率
	//INA226_SendData(INA226_ADDR1,CAL_REG,0x0012);//設(shè)置分流電壓轉(zhuǎn)電流轉(zhuǎn)換參數(shù)	
	INA226_Get_ID(INA226_ADDR1);					//獲取ina226的id
}
//設(shè)置寄存器指針
void INA226_SetRegPointer(u8 addr,u8 reg)
{
	IIC_Start();

	IIC_Send_Byte(addr);
	IIC_Wait_Ack();

	IIC_Send_Byte(reg);
	IIC_Wait_Ack();

	IIC_Stop();
}

//發(fā)送,寫入數(shù)據(jù)
void INA226_SendData(u8 addr,u8 reg,u16 data)
{
	u8 temp=0;
	IIC_Start();

	IIC_Send_Byte(addr);
	IIC_Wait_Ack();

	IIC_Send_Byte(reg);
	IIC_Wait_Ack();
	
	temp = (u8)(data>>8);
	IIC_Send_Byte(temp);
	IIC_Wait_Ack();

	temp = (u8)(data&0x00FF);
	IIC_Send_Byte(temp);
	IIC_Wait_Ack();
	
	IIC_Stop();
}

//讀取數(shù)據(jù)
u16 INA226_ReadData(u8 addr)
{
	u16 temp=0;
	IIC_Start();

	IIC_Send_Byte(addr+1);
	IIC_Wait_Ack();
	
	temp = IIC_Read_Byte(1);
	temp<<=8;	
	temp |= IIC_Read_Byte(0);
	
	IIC_Stop();
	return temp;
}
//1mA/bit
u16 INA226_GetShunt_Current(u8 addr)
{
	u16 temp=0;	
	INA226_SetRegPointer(addr,CUR_REG);
	temp = INA226_ReadData(addr);
	if(temp&0x8000)	temp = ~(temp - 1);	
	return temp;
}

//獲取id
void INA226_Get_ID(u8 addr)
{
	u32 temp=0;
	INA226_SetRegPointer(addr,INA226_GET_ADDR);
	temp = INA226_ReadData(addr);
	ina226_data.ina226_id = temp;
}

//獲取校準(zhǔn)值
u16 INA226_GET_CAL_REG(u8 addr)
{	
	u32 temp=0;
	INA226_SetRegPointer(addr,CAL_REG);
	temp = INA226_ReadData(addr);
	return (u16)temp;
}

//1.25mV/bit
u16 INA226_GetVoltage(u8 addr)
{
	u32 temp = 0;
	INA226_SetRegPointer(addr,BV_REG);
	temp = INA226_ReadData(addr);
	return (u16)temp;	
}

//2.5uV/bit
u16 INA226_GetShuntVoltage(u8 addr)
{
	int16_t temp = 0;
	INA226_SetRegPointer(addr,SV_REG);
	temp = INA226_ReadData(addr);
	if(temp&0x8000)	temp = ~(temp - 1);	
	return (u16)temp;	
}

//獲取電壓
void GetVoltage(float *Voltage)//mV
{
	*Voltage = INA226_GetVoltage(INA226_ADDR1)*Voltage_LSB;
}

3.4 ACS712模塊

??ACS712基于霍爾感應(yīng)的原理設(shè)計,由一個精確的低偏移線性霍爾傳感器電路與位于接近IC表面的銅箔組成(如下圖所示),電流流過銅箔時,產(chǎn)生一個磁場, 霍爾元件根據(jù)磁場感應(yīng)出一個線性的電壓信號,經(jīng)過內(nèi)部的放大、濾波、斬波與修正電路,輸出一個電壓信號,該信號從芯片的第七腳輸出,直接反應(yīng)出流經(jīng)銅箔電流的大小。ACS712根據(jù)尾綴的不一樣,量程分為三個規(guī)格:±5A、±20A、±30A 。輸入與輸出在量程范圍內(nèi)為良好的線性關(guān)系,其系數(shù)Sensitivity分別為,185 mV/A、100 mV/A、66mV/A。因為斬波電路的原因,其輸出將加載于0.5Vcc上。ACS712的Vcc電源 一般建議采用5V。輸出與輸入的關(guān)系為Vout=0.5Vcc+IpSensitivity。一般輸出的電壓信號介于0.5V~4.5V之間。
??典型的應(yīng)用:電機領(lǐng)域,載荷檢測和管理,開關(guān)電源領(lǐng)域,和各種電子產(chǎn)品過電流故障保護。
?? 器件特點

  • 80KHZ帶寬
  • 總輸出誤差為1.5%
  • 采用小型貼片SOIC8封裝
  • 1.2mΩ內(nèi)部電阻
  • 左側(cè)大電流引腳(PIN1-4)與右側(cè)低電壓引腳(PIN5-8)最小絕緣電壓為2100V
  • 5V單電壓工作
  • 該器件不可應(yīng)用于汽車領(lǐng)域

acs712stm32,STM32,stm32,INA226,霍爾傳感器,ACS712
??ACS712模塊為霍爾傳感器,通過ADC采集電壓值,載根據(jù)電壓與電流的線性關(guān)系時序電流轉(zhuǎn)換,輸入電流與輸出電壓對應(yīng)曲線及計算公式:
??ACS712ELCTR-05B電流電壓對應(yīng)關(guān)系如下圖,Ip=0A即沒有輸入電流的時候,對應(yīng)輸出電壓為2.5V.精確度為185mV/A即為圖中斜線的斜率。取VCC=5V,計算公式為:
Vout = 2.5 + 0.185*Ip
acs712stm32,STM32,stm32,INA226,霍爾傳感器,ACS712

3.5 ACS712驅(qū)動

#include "adc.h"
/***************ADC規(guī)則通道初始化*************
**硬件接口:PB0 -- ADC1_CH8(模擬)
**
*注:ADC的工作頻頻率不能超過14MHZ
********************************************/
void ADC1_RegularChannel_Init(void)
{
	//1.開時鐘
	RCC->APB2ENR|=1<<9;//ADC1時鐘
	RCC->APB2ENR|=1<<3;//PB0時鐘
	RCC->APB2RSTR|=1<<9;//ADC復(fù)位時鐘
	RCC->APB2RSTR&=~(1<<9);//關(guān)復(fù)位
	/*2.GPIO配置*/
	GPIOB->CRL&=0xFFFFFFF0;//模式輸入方式
	/*3.ADC時鐘頻率配置*/
	RCC->CFGR&=~(0x3<<14);//清除原來配置
	RCC->CFGR|=0x2<<14;//ADC工作頻率72MHZ/6=12MZH
	/*4.配置ADC核心寄存器*/
//	ADC1->CR1&=~(0xF<<16);//獨立模式
	ADC1->CR2|=1<<23;//啟動溫度傳感器(測量CPU溫度)
	ADC1->CR2|=1<<20;//規(guī)則通道外部觸發(fā)轉(zhuǎn)換模式
	ADC1->CR2|=0x7<<17;//外部事件通過開關(guān)事件觸發(fā)
//	ADC1->CR2&=~(1<<11);//右對齊(地位對齊,高位補0)
	ADC1->SMPR1|=0x7<<18;//溫度傳感器采樣時間通道16
	ADC1->SMPR2|=0x7<<24;//通道8采用時間
	ADC1->SQR1&=~(0xF<<20);//規(guī)則通道轉(zhuǎn)換的通道數(shù)目為1個轉(zhuǎn)換
//	ADC1->CR2&=~(1<<1);//單次轉(zhuǎn)換模式
	ADC1->CR2|=1<<0;//開啟ADC
	ADC1->CR2|=1<<3;//初始化校準(zhǔn)
	while(ADC1->CR2&1<<3);//等待初始化校準(zhǔn)完成
	ADC1->CR2|=1<<2;//開始校準(zhǔn)
	while(ADC1->CR2&1<<2){}//等待校準(zhǔn)完成
}
/****************ADC1規(guī)則通道獲取數(shù)值***************/
u16 ADC1_GetRegularCHx(u8 chx)
{
	ADC1->SQR3&=~(0x1F<<0);//清除原來寄存器中的值
	ADC1->SQR3|=chx;//要轉(zhuǎn)的通道號
	ADC1->CR2|=1<<22;//開啟轉(zhuǎn)換規(guī)則通過
	while(!(ADC1->SR&1<<1)){}//等待轉(zhuǎn)換完成
	return ADC1->DR;
}

4.實物測量效果

acs712stm32,STM32,stm32,INA226,霍爾傳感器,ACS712
示例地址:https://download.csdn.net/download/weixin_44453694/85520132文章來源地址http://www.zghlxwxcb.cn/news/detail-785865.html

到了這里,關(guān)于基于STM32電壓檢測和電流檢測的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 基于STM32的單相可調(diào)逆變電源設(shè)計(能輸出穩(wěn)定的電壓電流,也可擴展為三相輸出)

    基于STM32的單相可調(diào)逆變電源設(shè)計(能輸出穩(wěn)定的電壓電流,也可擴展為三相輸出)

    本篇文章主要介紹的是我前段時間做的一個基于STM32H750VB為主控芯片的單相可調(diào)逆變電源,額定輸入為10V-80V,額定輸出電壓為220V,額定輸出電流為5A。做這個逆變電源的時候還是遇到了很多困難,首先是網(wǎng)上這方面的資料并不多,ACDC的資料不少,但是DCAC的資料少得可憐,在

    2024年02月14日
    瀏覽(94)
  • STM32F103C8T6 ADC輸入電流電壓特性

    STM32F103C8T6 ADC輸入電流電壓特性

    ADC 輸入電壓范圍:0-VDDA(0-3.3V) 輸入電流范圍:0-220μA 輸入電阻:50kΩ 采樣頻率:0.6-14MHz? ?官方STM32C103C8系列數(shù)據(jù)手冊: https://www.st.com/en/microcontrollers-microprocessors/stm32f103c8.html

    2024年02月13日
    瀏覽(25)
  • 基于STM32F103C8T6ADC檢測交流電壓

    基于STM32F103C8T6ADC檢測交流電壓

    上篇文章寫了硬件部分的實現(xiàn)思路,通過采樣電阻的到小電壓后經(jīng)過二級放大電路得到單片機可處理的交流電壓,此文介紹了如何采用單片機采集交流電壓以及stm32ADC外設(shè)的使用。首先是硬件電路部分。 ?電路沒有采用核心板,而是直接將芯片焊接到主板上,采用type-c接口供

    2024年02月12日
    瀏覽(35)
  • STM32—ADC和DMA的應(yīng)用之電流檢測(第二部分:電流檢測電路與數(shù)據(jù)處理)

    STM32—ADC和DMA的應(yīng)用之電流檢測(第二部分:電流檢測電路與數(shù)據(jù)處理)

    前一部分介紹了如何配置ADC和DMA,這一部分介紹在硬件部分如何實現(xiàn)電流檢測以及檢測到電流后的數(shù)據(jù)處理。 在半導(dǎo)體上外加與電流方向垂直的磁場,會使得半導(dǎo)體中的電子與空穴受到不同方向的洛倫茲力而在不同方向上聚集,在聚集起來的電子與空穴之間會產(chǎn)生電場,電場

    2024年01月20日
    瀏覽(21)
  • AC電壓正弦畸變的電流跟蹤

    AC電壓正弦畸變的電流跟蹤

    AC畸變情況 對于輸入電壓畸變的情況,為了能夠較好的跟蹤輸入電壓。 優(yōu)化思路 減小補償器帶寬(降低低頻段增益),提高補償器中頻濾波特性。 優(yōu)化算法前 通道1:AC電壓 通道2:AC電流 通道3:驅(qū)動管 通道4:續(xù)流管 優(yōu)化算法后: 通道1:AC電壓 通道2:電感電流 通道3:

    2024年02月04日
    瀏覽(18)
  • 基于STM32的簡易數(shù)字電壓表仿真設(shè)計

    基于STM32的簡易數(shù)字電壓表仿真設(shè)計

    本設(shè)計 基于STM32的數(shù)字電壓表仿真設(shè)計(仿真+程序+設(shè)計報告+講解) 仿真圖proteus 8.9 程序編譯器:keil 5 編程語言:C語言 設(shè)計編號:C0080 結(jié)合實際情況,基于STM32F103單片機設(shè)計一個數(shù)字電壓表仿真設(shè)計。該設(shè)計應(yīng)滿足的功能要求為: 1、以STM32單片機為控制核心設(shè)計數(shù)字電壓表

    2024年02月07日
    瀏覽(15)
  • 基于stm32+HAL庫的ADC電壓采集實驗

    基于stm32+HAL庫的ADC電壓采集實驗

    提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 只會用if的大神提醒您,敵軍還有30秒到達(dá)戰(zhàn)場,碾碎他們!白銀局不要怕! 軟件:keil5、stm32cubemx、串口調(diào)試助手 硬件:stm32f103系列的開發(fā)板、杜邦線*1、串口工具 僅此而已?。。≌?神 1、打開cube

    2023年04月15日
    瀏覽(25)
  • 【STM32】BLDC驅(qū)動&控制開發(fā)筆記 | 10_基于STM32F407+DRV8323的ADC電流采集

    【STM32】BLDC驅(qū)動&控制開發(fā)筆記 | 10_基于STM32F407+DRV8323的ADC電流采集

    在上一篇文章的基礎(chǔ)上繼續(xù)努力!?? ??【STM32】BLDC驅(qū)動控制開發(fā)筆記 | 09_基于STM32F407的ADC電壓采集,多通道ADC+DMA+USART_CSDN博客@F菌的進(jìn)階之路 在實現(xiàn)電機閉環(huán)控制的實驗程序中,通過ADC功能來實現(xiàn)電壓或電流的采集十分重要。一般來說,為了獲得更高的精度,會在直接通過

    2024年04月17日
    瀏覽(33)
  • 高精度電流檢測電路INA199可用于過流保護應(yīng)用

    高精度電流檢測電路INA199可用于過流保護應(yīng)用

    INA199是一款適用小于24V直流供電的類的數(shù)碼產(chǎn)品,如便攜式儲能箱。其具有較寬泛的共模輸入范圍,可在0V至26V的共模電壓下來檢測分流器的壓降,與電源電壓無關(guān)。寬泛的共模輸入范圍可使用戶有更多的選擇性,便與產(chǎn)品設(shè)計。INA199雙向電流檢測芯片具有較高的設(shè)定增益,

    2024年01月20日
    瀏覽(84)
  • STM32G070RBT6基于STM32CubeMX自動生成ADC輸入電壓采樣工程全過程講解

    STM32G070RBT6基于STM32CubeMX自動生成ADC輸入電壓采樣工程全過程講解

    ??相關(guān)篇《【硬件開源電路】STM32G070RBT6開發(fā)板》 ??STM32CubeMX工程配置過程演示 ??Keil工程完成業(yè)務(wù)代碼以及燒錄演示放在資源中,gif文件過大無法上傳。 ??工程概要 本工程是基于STM32CubeMX工具來配置項目,功能需求:在PA0引腳接入一個外部模擬量信號(單片機能承受的電

    2024年02月01日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包