在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

深度講解模擬量的硬件和程序的設計

GReq_mcu168 ? 來源:今日頭條 ? 作者:電鹵藥丸 ? 2021-04-28 17:28 ? 次閱讀

單片機系統里對模擬量的處理要比數字量稍顯復雜,但是只要掌握了使用技巧,使用起來也很簡單,很多朋友一開始比較糾結于單片機的底層語言,非要先弄個明白才罷休,其實大可不必,重要的是我們要先學會怎么應用。

現以鉛酸電池電壓檢測及充電電流檢測為例講解模擬量的硬件和程序的設計。

如圖1為28節鉛酸電池的電壓檢測電路,1--14節組成電池組1,15--28節組成電池組2;第1節正極為BAT+,14與15節之間為BATM,第28節負極為BAT-。輸入端的8個二極管的作用是鉗位作用;電路計算如圖所示。

4e7efe86-a7ff-11eb-9728-12bb97331649.png

圖1:電池組電壓檢測電路

如圖2為鉛酸電池的充電電流檢測電路,TA1為工頻電流互感器,輸入的4個二極管為整流二極管,電流流過R37(510Ω)形成壓差△V。電路計算如圖所示。

4f3fc878-a7ff-11eb-9728-12bb97331649.png

圖2:電池組充電電流檢測電路

如圖3為單片機STM32F103CBT6,圖1和圖2的模擬信號輸入至單片機的PA5、PA6、PA7。

4f6098e6-a7ff-11eb-9728-12bb97331649.png

圖3:STM32F103CBT6單片機

由于代碼較多,為便于瀏覽,我就把其中一部分以截圖的形式展示

如圖4為單片機adc.c文件的底層配置,把PA5、PA6、PA7端口配置成模擬輸入模式。

4f760262-a7ff-11eb-9728-12bb97331649.png

圖4:配置端口模式

如圖5對以上三個模擬量進行模數轉換并緩存入數組ADC_ConvertedValue[3],得到的AD值的范圍是0~4096。

4f86db78-a7ff-11eb-9728-12bb97331649.png

圖5:模數轉換并緩存

如圖6把以上兩個配置函數整合在一起,定義成模擬量的初始化函數void ADC1_Init(void)。

4fc06fc8-a7ff-11eb-9728-12bb97331649.png

圖6:初始化

如圖7在adc.h文件里聲明函數void ADC1_Init(void),另外幾個函數也在adc的c文件里定義的,后面附上源程序(非截圖)。

4fd31f92-a7ff-11eb-9728-12bb97331649.png

圖7:聲明函數

如圖8在main()主函數里調用ADC1_Init()初始化函數(要去掉void),初始化函數一定要放在while(1)的前面,表示在進入while(1)無限循環前只執行一次。Analog_Processing()為模擬量處理函數,要放在while(1)無限循環里面(該函數在下面講)。

4ffcf466-a7ff-11eb-9728-12bb97331649.png

圖8,函數調用

以下為模擬量在main.c文件里的定義。

s16 Charging_Current; //充電電流實際值

s16 Battery1_Voltage; //電池組1電壓實際值

s16 Battery2_Voltage; //電池組2電壓實際值

s16 Battery_Voltage; //電池組總電壓值

下面三個函數的定義都在adc.c文件里面定義的。

以下代碼為模擬量處理函數:①對數組ADC_ConvertedValue[3]緩存值進行濾波處理;②對濾波后的AD值轉換為實際值。

/******************************

模擬量處理函數

******************************/

void Analog_Processing(void)

{

//對AD值進行濾波

ADC_Charging_Current=Filter(ADC_ConvertedValue[0],ADC_Charging_Current,1,10);

ADC_Battery1_Voltage=Filter(ADC_ConvertedValue[1],ADC_Battery1_Voltage,1,10);

ADC_Battery2_Voltage=Filter(ADC_ConvertedValue[2],ADC_Battery2_Voltage,1,10);

//AD值轉換為實際值

Charging_Current = Adc_To_Act(ADC_Charging_Current, 10, 4096, 0, 220);//22.0A

Battery1_Voltage = Adc_To_Act(ADC_Battery1_Voltage, 10, 4096, 0, 267);//267V

Battery2_Voltage = Adc_To_Act(ADC_Battery2_Voltage, 10, 4096, 0, 267);//267V

//兩組電壓相加得到總電壓

Battery_Voltage = Battery1_Voltage + Battery2_Voltage;

}

以下代碼為濾波函數,濾波函數有很多,采用合適的才是最實用的(該函數濾波后的值是連續變化的,有些濾波函數濾波后的值是跳變的)。

/******************************

濾波函數(base/k越大,容性越大)

該函數相當于是一個電容,通常取值k=1,base=10

******************************/

u16 Filter(u16 NewData, u16 OldData, u8 k, u8 base)

{

u16 uiResult;

if (NewData 》 OldData)

{

uiResult = NewData - OldData;

uiResult *= k;

uiResult += base 》》 2;

uiResult /= base;

uiResult = OldData + uiResult;

}

else if (OldData 》 NewData)

{

uiResult = OldData - NewData;

uiResult *= k;

uiResult += base 》》 2;

uiResult /= base;

uiResult = OldData - uiResult;

}

else

{

uiResult = NewData;

}

return(uiResult);

}

使用方法如下:NewData表示最新采用的模擬量;OldData表示濾波后的模擬量。

ADC_Battery1_Voltage=Filter(ADC_ConvertedValue[1],ADC_Battery1_Voltage,1,10);

為便于邏輯計算、控制及顯示,以下代碼是把AD值轉換為實際值,

/******************************

AD值轉換實際值函數

******************************/

s16 Adc_To_Act(s16 Adc_Value, s16 Pre_Adc_Min, s16 Pre_Adc_Max, s16 Pre_Act_Min, s16 Pre_Act_Max)

{

s32 _temp;

s32 _range;

_temp = (s32)((Adc_Value - Pre_Adc_Min) * (Pre_Act_Max - Pre_Act_Min) / (Pre_Adc_Max-Pre_Adc_Min)) + Pre_Act_Min;

_temp = Adc_Value - Pre_Adc_Min;

_range = Pre_Act_Max - Pre_Act_Min;

_temp = _temp * _range;

_range = Pre_Adc_Max - Pre_Adc_Min;

_temp = _temp + _range / 2;

_temp = _temp / _range;

_temp = _temp + Pre_Act_Min;

return(_temp);

}

使用方法如下:Adc_Value表示要轉換的模擬量;Pre_Adc_Min表示模擬量AD值的最小值;Pre_Adc_Max表示模擬量AD值的最大值;Pre_Act_Min表示轉換后實際值的最小值;Pre_Act_Max表示轉換后實際值的最大值;(以下最大實際值220表示22.0A,是因為數碼管顯示需要小數表示)。

Charging_Current = Adc_To_Act(ADC_Charging_Current, 10, 4096, 0, 220);//22.0A

要點:

①模擬量的采樣電路,我多采用運放的差分放大電路,原因是被測電壓可以和運放不用共地,且可有效抑制共模噪聲,可達到較高的精確線性測量,比如以上電池組的被測電壓的誤差與實際相差在0.3V左右;

②電池組輸入至運放的8個1M的電阻是兩個為一組的,且功率至少1/4W以上,因為在高壓下的電阻容易老化,為保險起見,通常一個電阻的最大壓差在100V以下為宜;

③電池組分為兩組檢測,一是為了降低元件所承受的電壓,二是為了監視兩組電池電壓之間是否平衡,達到保護電池目的。

③函數應功能模塊化,且具備通用性質,便于移植和調用,對于很多朋友應先學會如何使用,底層代碼只要會配置就完全足夠了。

當然,以上提供的設計是我通常的做法,能滿足大多數的常規應用。
編輯:lyn

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 鉛酸電池
    +關注

    關注

    8

    文章

    275

    瀏覽量

    25822
  • 模擬量
    +關注

    關注

    5

    文章

    498

    瀏覽量

    25654
  • 硬件
    +關注

    關注

    11

    文章

    3391

    瀏覽量

    66473

原文標題:模擬量采集從硬件到程序,從濾波到實際值轉換,多少人懂了

文章出處:【微信號:mcu168,微信公眾號:硬件攻城獅】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Lora模擬量對傳模塊

    Lora模擬量對傳模塊是一種集成了Lora通信技術和模擬信號傳輸功能的設備。通過Lora技術實現遠距離、低功耗的無線通信,同時支持模擬量的采集和傳輸,使得該模塊在物聯網、工業自動化、環境監測等領域
    的頭像 發表于 02-06 16:07 ?51次閱讀

    模擬量信號的應用和優缺點

    在現代工業自動化、環境監測、科學研究等領域,模擬量信號作為一種基本且重要的信號形式,扮演著不可或缺的角色。本文將對模擬量信號進行深度解析,探討其定義、工作原理、傳輸方式、應用以及優缺點,以期為相關領域的研究者和工程師提供參考。
    的頭像 發表于 02-03 11:26 ?87次閱讀

    模擬量采集模塊是什么

    模擬量采集模塊是一種廣泛應用于工業采集控制領域的信息設備,采用特定的通訊協議和技術手段,將分散的現場數據點的模擬量信號轉換為數字信號,進而傳輸到主機或由PC控制的遠程主站點。這一技術在工業自動化
    的頭像 發表于 01-23 17:10 ?112次閱讀

    plc模擬量的計算與優勢

    模擬量是指那些連續變化的物理,它們可以在一定范圍內取任意值。這些物理包括但不限于電壓、電流、壓力、溫度、速度和流量等。在PLC系統中,模擬量需要通過傳感器將其轉換為電信號,然后再通
    的頭像 發表于 09-16 10:16 ?524次閱讀

    開關模擬量如何編程

    將開關(也稱為數字量或離散,通常是0或1的狀態)轉換為模擬量(連續變化的電壓、電流或其他物理)的過程,在編程中通常不直接進行硬件層面的
    的頭像 發表于 08-30 14:13 ?608次閱讀

    三菱plc模擬量輸出怎么寫

    編寫三菱PLC模擬量輸出程序是一個涉及多個步驟的過程,主要包括確定輸入輸出類型、選擇合適的模塊、配置PLC、編寫程序以及調試測試等。 一、引言 三菱PLC(可編程邏輯控制器)在工業自動化控制領域具有
    的頭像 發表于 08-30 11:00 ?1999次閱讀

    plc模擬量和數字量之間的轉換方法

    PLC(Programmable Logic Controller,可編程邏輯控制器)是工業自動化領域中常用的一種控制設備。在PLC系統中,模擬量和數字量是兩種基本的數據類型。模擬量是指連續變化
    的頭像 發表于 08-30 10:51 ?3665次閱讀

    數字量與模擬量的關系如何算

    數字量與模擬量之間的關系主要體現在它們之間的轉換上,這種轉換通常通過模數轉換器(ADC)和數模轉換器(DAC)來實現。以下是對兩者關系的介紹: 一、定義與基本關系 模擬量模擬量是隨時間連續變化
    的頭像 發表于 08-30 09:16 ?939次閱讀

    什么是IO模擬量模塊?

    IO模擬量模塊是工業自動化領域中常用的一種設備,用于處理模擬信號。在工業控制系統中,模擬信號通常指的是連續變化的信號,如溫度、壓力、流量等,這些信號可以用無限精細的數值表示。與之相對的是數字信號,它只有有限的數值狀態(通常是0和
    的頭像 發表于 08-02 09:00 ?592次閱讀
    什么是IO<b class='flag-5'>模擬量</b>模塊?

    4到20ma模擬量信號怎么測?及原理介紹

    ? ? ? 4到20mA模擬量信號是一種常見的工業信號,用于傳輸模擬量數據。在工業自動化、過程控制等領域中,4到20mA信號被廣泛應用于傳感器、變送器等設備的數據傳輸。本文將詳細介紹4到20mA
    的頭像 發表于 06-23 08:38 ?5715次閱讀
    4到20ma<b class='flag-5'>模擬量</b>信號怎么測?及原理介紹

    4到20ma模擬量信號怎么測

    4到20mA模擬量信號是一種常見的工業信號,用于傳輸模擬量數據。在工業自動化、過程控制等領域中,4到20mA信號被廣泛應用于傳感器、變送器等設備的數據傳輸。本文將詳細介紹4到20mA模擬量信號
    的頭像 發表于 06-20 11:37 ?2017次閱讀

    PLC獲取模擬量的方法

    、壓力、流量等,它們經過傳感器轉換為電信號后,需要被PLC準確讀取和處理。本文將詳細闡述PLC獲取模擬量的方法,包括硬件結構、信號轉換、編程配置等方面,旨在為讀者提供全面而深入的指導。
    的頭像 發表于 06-18 10:58 ?912次閱讀

    星儀小課堂:開關模擬量詳解

    在現場儀表使用中,開關模擬量是使用最多的兩種輸入輸出方式。今天我們就用圖文結合的方式,詳細講解一下開關模擬量的原理是怎樣的。開關
    的頭像 發表于 06-18 09:47 ?679次閱讀
    星儀小課堂:開關<b class='flag-5'>量</b>與<b class='flag-5'>模擬量</b>詳解

    模擬量光端機/模擬量光纖轉換器的功能特性、選擇時需要考慮哪些因素?

    模擬量光端機是一種通過光纖遠距離傳輸4~20mA電流模擬量信號的設備,它通過光纖將4~20mA電流模擬量信號進行電-光轉換和光-電轉換,從而實現在光纖中的傳輸。這類光端機通常被設計為支持多種
    的頭像 發表于 05-27 14:53 ?655次閱讀
    <b class='flag-5'>模擬量</b>光端機/<b class='flag-5'>模擬量</b>光纖轉換器的功能特性、選擇時需要考慮哪些因素?

    模擬量PLC有哪些具體種類呢?

    模擬量PLC主要處理連續的模擬量信號,與主要處理開關信號的PLC形成對比。模擬量PLC的種類可以從多個維度進行劃分
    的頭像 發表于 04-08 10:05 ?637次閱讀
    主站蜘蛛池模板: 免费高清成人啪啪网站 | 日本三级网站在线线观看 | 婷婷在线五月 | 瑟瑟网站免费 | 97久久精品国产精品青草 | 人人做人人爽 | 欧美黄色片免费看 | 九九午夜 | 日本www在线观看 | 九九热在线精品 | 最新福利网站 | 新天堂在线 | 视频一区二区中文字幕 | 久久人人干 | 艹久久 | 亚洲第八页| 51久久| 欧美精品四虎在线观看 | 午夜久久精品 | 亚洲电影免费 | 亚洲国产精品久久久久婷婷软件 | 亚洲一级毛片在线观播放 | 亚洲春色www | 国产精品99r8在线观看 | 8050网午夜一级毛片免费不卡 | 黄色高清视频网站 | 性刺激的欧美三级视频 | 欧美色欧美亚洲高清在线视频 | 欧美一级高清免费a | 一区二区三区视频网站 | h黄视频在线观看 | 久久久国产在线 | 天天插天天摸 | 丁香五月缴情在线 | 新激情五月| 亚洲色图22p | 日一日操一操 | 欧美成人免费网站 | 爱看精品福利视频观看 | www在线视频在线播放 | 二级黄绝大片中国免费视频 |