STM32G4 電機外設篇(二) VOFA + ADC + OPAMP

目錄

  • 一、STM32G4 電機外設篇(二) VOFA + ADC + OPAMP
      • 1 VOFA
        • 1.1 VOFA上位機顯示波形
      • 2 ADC
        • 2.1 用ADC規則組對板載電壓和電位器進行采樣
      • 3 OPAMP(運放)
        • 3.1 結合STM32內部運放和ADC來完成對三相電流的采樣
        • 3.2 運放電路分析
    • 附學習參考網址
      • 歡迎大家有問題評論交流 (* ^ ω ^)

一、STM32G4 電機外設篇(二) VOFA + ADC + OPAMP

1 VOFA

1.1 VOFA上位機顯示波形
  • 通訊協議
    1. JustFoat 只上傳浮點數,0000807f結尾
      因為用DMA傳輸數據,更快
    2. FireWater 只用printf實現,比較慢
      在這里插入圖片描述
  • 這里選用第一種方式來實現
  • 打開之前文章生成的Keil
    在/* USER CODE BEGIN PV */中添加如下代碼
extern DMA_HandleTypeDef hdma_usart3_tx;
uint8_t DataB1[32] = "LED1 Toggle\r\n";
uint8_t DataB2[32] = "LED2 Toggle\r\n";
uint8_t DataB3[32] = "LED1 and LED2 open\r\n";#define RXBUFFERSIZE 256
char RxBuffer[RXBUFFERSIZE];
uint8_t aRxBuffer;
uint8_t Uart1_Rx_Cnt;float temp[1];
static uint8_t tempData[8] = {0, 0, 0, 0, 0, 0, 0x80, 0x7F};

在 /* USER CODE BEGIN WHILE */中添加如下代碼

while(1)
{temp[0] += 0.01f;if(temp[0] > 6.28f){temp[0] = 0;}// printf("%f\r\n",temp[0]);memcpy(tempData, (uint8_t *)&temp, sizeof(temp));HAL_UART_Transmit_DMA(&huart3, (uint8_t *)tempData, 8);HAL_Delay(1);
}
  • 按照之前的文章進行接線,然后編譯下載程序
  • 打開vofa+,按照圖片操作連接串口,點擊控件按鈕,拖入左側表格控件,右鍵添加Y軸數據,滾輪調整圖標,就可以獲得如圖所示波形
    在這里插入圖片描述
  • 可以用這個軟件的一些其它控件來調整電機的Kp Ki,做出一個電機的控制窗口

2 ADC

2.1 用ADC規則組對板載電壓和電位器進行采樣
  • ADC是整個電機控制中非常重要的外設,涉及到母線電壓(VBUS)和三相電流的采樣,這兩者直接作用于電機控制的FOC環路,直接影響電機的運行穩定
  • ADC的分類
    1. SAR ADC
    2. sigma delta ADC
    • 前者是逐次逼近的方法測值的,更快;后者是多次疊加的方法測量的,更加精準
  • ADC有單端輸入和差分輸入模式,差分輸入模式在sigma delta ADC使用的更多,此處選擇單端輸入
  • 配置ADC1和ADC2時鐘四分屏,12bit精度和右對齊
  • ADC1和ADC2使能規則組轉換
    在這里插入圖片描述
    在這里插入圖片描述
  • 點擊生成代碼,打開Keil工程
    在/* USER CODE BEGIN 2 */中添加如下代碼
 /* USER CODE BEGIN 2 */
HAL_UART_Receive_IT(&huart3, (uint8_t *)&aRxBuffer, 1);
HAL_ADCEx_Calibration_Start(&hadc1,ADC_SINGLE_ENDED);//自校驗,減少采樣誤差
HAL_ADCEx_Calibration_Start(&hadc2,ADC_SINGLE_ENDED);/* USER CODE END 2 */
  • 在/* USER CODE BEGIN PV */中修改
float temp[2];
static uint8_t tempData[12] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x80, 0x7F};
/* USER CODE END PV */
  • 在/* USER CODE BEGIN WHILE */中修改
while(1)
{HAL_ADC_Start(&hadc1);HAL_ADC_Start(&hadc2);temp[0] = HAL_ADC_GetValue(&hadc1);temp[1] = HAL_ADC_GetValue(&hadc2) * 0.02094726f; //根據分壓電阻計算memcpy(tempData, (uint8_t *)&temp, sizeof(temp));HAL_UART_Transmit_DMA(&huart3, (uint8_t *)tempData, 12);HAL_Delay(1);}/* USER CODE END WHILE */
  • VBUS在采樣的時候一般要增加低通濾波器,電機在旋轉的時候,母線電容一直處于充放電狀態,大負載啟動的時候,會有瞬時的母線電壓補到母線電容中會導致波動,后面的實驗會增加這個濾波器
  • 編譯下載程序
  • 打開vofa上位機,復位開發板,連接上位機,實際效果如圖所示
    在這里插入圖片描述

3 OPAMP(運放)

3.1 結合STM32內部運放和ADC來完成對三相電流的采樣
  • 打開之前的stm32cubemx項目

  • 使能三個運放

    1. standalone模式,增益是外置的(選這個)
    2. follower 跟隨模式
    3. PGA 可編程增益模式,增益可以用軟件更改
      在這里插入圖片描述
  • 使能兩個ADC中斷
    在這里插入圖片描述

  • ADC配置,使能采樣通道,使能注入組
    在這里插入圖片描述
    在這里插入圖片描述

  • 點擊生成代碼,打開Keil軟件

  • 使能運放,在112行左右插入代碼

  /* USER CODE BEGIN 2 */HAL_OPAMP_Start(&hopamp1);HAL_OPAMP_Start(&hopamp2);HAL_OPAMP_Start(&hopamp3);
  • 在 /* USER CODE BEGIN WHILE */的while循環中插入如下代碼
HAL_ADCEx_InjectedStart_IT(&hadc1);
HAL_ADCEx_InjectedStart_IT(&hadc2);//使能規則組轉換,并產生注入組中斷
  • 在USER CODE 4中添加如下代碼
//注入中斷處理程序
void HAL_ADCEx_InjectedConvCpltCallback(ADC_HandleTypeDef *hadc)
{/*Prevent unused argument(s)compilation warning */UNUSED (hadc);if(hadc == &hadc1){temp[2] = hadc1.Instance->JDR1;temp[2] = (temp[2]-0x7ef)*0.193359375f;temp[3] = hadc1.Instance->JDR2;temp[3] = (temp[3]-0x7ef)*0.193359375f;}if(hadc == &hadc2){temp[4] = hadc1.Instance->JDR1;temp[4] = (temp[4]-0x7ef)*0.193359375f;}
}
3.2 運放電路分析

在這里插入圖片描述

  • R58,R59 作用是為了輸入的正向端和負向端輸入阻抗匹配
  • R52,R53 為分壓電阻,作用是將輸入正向端電壓正向偏置1.65V
  • R56與 R59 形成負反饋增益,運放整體增益計算如下
  • 虛斷:OP1_VINP 輸入電壓為 Vin;
  • 虛短:
    V i n R 59 = V o u t R 59 + R 56 \frac{Vin}{R59} = \frac{Vout}{R59 + R56} R59Vin?=R59+R56Vout?
    增益 G a i n = V o u t V i n = 1 + R 56 R 59 增益Gain = \frac{Vout}{Vin} = 1 + \frac{R56}{R59} 增益Gain=VinVout?=1+R59R56?
    在這里插入圖片描述
    在這里插入圖片描述
  • 修改Temp數組為5大小,修改DMA傳輸24bit
  • 編譯下載程序,實驗結果如下
    在這里插入圖片描述

附學習參考網址

  1. STM32G4 FOC開發實戰
  2. SAR ADC和sigma delta ADC的區別-CSDN博客
  3. 【運放2】如何理解運放的虛短虛斷,他們有啥用?_嗶哩嗶哩_bilibili

歡迎大家有問題評論交流 (* ^ ω ^)

  • 如果板子有時候沒反應就把電源都拔了重新接線上電,說不定就好了QAQ

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/83155.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/83155.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/83155.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

再見Notepad++,你好Notepad--

Notepad-- 是一款國產開源的輕量級、跨平臺文本編輯器,支持 Window、Linux、macOS 以及國產 UOS、麒麟等操作系統。 除了具有常用編輯器的功能之外,Notepad-- 還內置了專業級的代碼對比功能,支持文件、文件夾、二進制文件的比對,支…

跳動的愛心

跳動的心形圖案&#xff0c;通過字符打印和延時效果模擬跳動&#xff0c;心形在兩種大小間交替跳動。 通過數學公式生成心形曲線 #include <stdio.h> #include <windows.h> // Windows 系統頭文件&#xff08;用于延時和清屏&#xff09; void printHeart(int …

2.2HarmonyOS NEXT高性能開發技術:編譯優化、內存管理與并發編程實踐

HarmonyOS NEXT高性能開發技術&#xff1a;編譯優化、內存管理與并發編程實踐 在HarmonyOS NEXT全場景設備開發中&#xff0c;高性能是跨端應用體驗的核心保障。本章節聚焦ArkCompiler編譯優化、內存管理工具及多線程并發編程三大技術模塊&#xff0c;結合實戰案例解析底層實現…

C# 類和繼承(使用基類的引用)

使用基類的引用 派生類的實例由基類的實例和派生類新增的成員組成。派生類的引用指向整個類對象&#xff0c;包括 基類部分。 如果有一個派生類對象的引用&#xff0c;就可以獲取該對象基類部分的引用&#xff08;使用類型轉換運算符把 該引用轉換為基類類型&#xff09;。類…

如何在騰訊云 OpenCloudOS 上安裝 Docker 和 Docker Compose

從你提供的 /etc/os-release 文件內容來看&#xff0c;你的服務器運行的是 OpenCloudOS 9.2。這是一個基于 CentOS 和 RHEL 的開源操作系統&#xff0c;因此它屬于 CentOS/RHEL 系列。 關鍵信息總結 操作系統名稱&#xff1a;OpenCloudOS版本&#xff1a;9.2ID&#xff1a;op…

趨勢直線指標

趨勢直線副圖和主圖指標&#xff0c;旨在通過技術分析工具幫助交易者識別市場趨勢和潛在的買賣點。 副圖指標&#xff1a;基于KDJ指標的交易策略 1. RSV值計算&#xff1a; - RSV&#xff08;未成熟隨機值&#xff09;反映了當前收盤價在過去一段時間內的相對位置。通過計算當前…

FEMFAT許可分析的數據可視化方法

隨著企業對FEMFAT軟件使用的增加&#xff0c;如何有效地管理和分析許可數據成為了關鍵。數據可視化作為一種強大的工具&#xff0c;能夠幫助企業直觀地理解FEMFAT許可的使用情況&#xff0c;從而做出更明智的決策。本文將介紹FEMFAT許可分析的數據可視化方法&#xff0c;并探討…

AMBER軟件介紹

AMBER軟件介紹 AMBER&#xff08;Assisted Model Building with Energy Refinement&#xff09;是一套廣泛應用于分子動力學&#xff08;MD&#xff09;模擬和生物分子結構分析的軟件工具集&#xff0c;尤其在蛋白質、核酸、多糖等生物大分子的模擬中表現突出。以下是關于AMBE…

GoogLeNet網絡模型

GoogLeNet網絡模型 誕生背景 在2014年的ImageNet圖像識別挑戰賽中&#xff0c;一個GoogLeNet的網絡架構大放異彩&#xff0c;與VGG不同的是&#xff0c;VGG用的是3*3的卷積&#xff0c;而GoogLeNet從1*1到7*7的卷積核都用&#xff0c;也就是使用不同大小的卷積核組合。 網絡…

Free2AI:企業智能化轉型的加速器

隨著數字化與智能化的深度交融&#xff0c;企業的競爭舞臺已悄然轉變為數據處理能力和智能服務水平的競技場。Free2AI以其三大核心功能——智能數據采集、多格式文檔解析、智能FAQ構建&#xff0c;為企業鋪設了一條從數據洞察到智能服務的全鏈路升級之路&#xff0c;成為推動企…

Vue 核心技術與實戰day07

1. vuex概述 2. 構建 vuex [多組件數據共享] 環境 <template><div id"app"><h1>根組件- {{ title }}- {{ count }}</h1><input :value"count" input"handleInput" type"text"><Son1></Son1>…

【原神 × 插入排序】刷圣遺物也講算法:圣遺物評分系統背后的排序邏輯你真的懂嗎?

?? 改編自:王爭《數據結構與算法之美》 ?? 游戲演繹:米哈游《原神》 ?? 核心關鍵詞:插入排序、排序算法、評分系統、屬性評價、強化圣遺物、冒泡排序對比 ?? 引言:原神刷本=刷排序? 玩《原神》的玩家每天日常是啥?體力用來刷圣遺物、精通頭、暴擊頭、攻充沙………

quasar electron mode如何打包無邊框桌面應用程序

預覽 開源項目Tokei Kun 一款簡潔的周年紀念app&#xff0c;現已發布APK&#xff08;安卓&#xff09;和 EXE&#xff08;Windows&#xff09; 項目倉庫地址&#xff1a;Github Repo 應用下載鏈接&#xff1a;Github Releases Preparation for Electron quasar dev -m elect…

微信小程序真機調試時如何實現與本地開發環境服務器交互

最近在開發微信小程序項目,真機調試時需要在手機上運行小程序,為了實現本地開發服務器與手機小程序的交互,需要以下步驟 1.將手機連到和本地一樣的局域網 2.Visual Studio中將IIS Express服務器的localhost端口地址修改為本機的IP自定義的端口: 1&#xff09;找到web api項目…

Scratch節日 | 拯救屈原 | 端午節

端午節快樂&#xff01; 這款特別為端午節打造的Scratch游戲 《拯救屈原》&#xff0c;將帶你走進古代中國&#xff0c;感受歷史與文化的魅力&#xff01; &#x1f3ee; 游戲介紹 扮演勇敢的探險者&#xff0c;穿越時空回到古代&#xff0c;解鎖謎題&#xff0c;完成任務&…

PHP下實現RSA的加密,解密,加簽和驗簽

前言&#xff1a; RSA下加密&#xff0c;解密&#xff0c;加簽和驗簽是四種不同的操作&#xff0c;有時候會搞錯&#xff0c;記錄一下。 1.公鑰加密&#xff0c;私鑰解密 發送方通過公鑰將原數據加密成一個sign參數&#xff0c;相當于就是信息的載體&#xff0c;接收方能通過si…

Win10秘笈:兩種方式修改網卡物理地址(MAC)

Win10秘笈&#xff1a;兩種方式修改網卡物理地址&#xff08;MAC&#xff09; 在修改之前&#xff0c;可以先確定一下要修改的網卡MAC地址&#xff0c;查詢方法有很多種&#xff0c;比如&#xff1a; 1、在設置→網絡和Internet→WLAN/以太網&#xff0c;如下圖所示。 2、在控…

C++中IO文件輸入輸出知識詳解和注意事項

以下內容將從文件流類體系、打開模式、文本與二進制 I/O、隨機訪問、錯誤處理、性能優化等方面&#xff0c;詳解 C 中文件輸入輸出的使用要點&#xff0c;并配以示例。 一、文件流類體系 C 標準庫提供三種文件流類型&#xff0c;均定義在 <fstream> 中&#xff1a; std…

Unity3D仿星露谷物語開發56之保存角色位置到文件

1、目標 游戲中通過Save Game保存角色位置&#xff0c;當重啟游戲后&#xff0c;通過Load Game可以恢復角色的位置。 2、Player對象操作 &#xff08;1&#xff09;組件添加 給Hierarchy下的Player組件添加Generate GUID組件。 &#xff08;2&#xff09;修改SceneSave.cs腳…

TKernel模塊--雜項

TKernel模塊–雜項 1.DEFINE_HARRAY1 #define DEFINE_HARRAY1(HClassName, _Array1Type_) \ class HClassName : public _Array1Type_, public Standard_Transient { \public: …