最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

手寫STM32 FOC記錄-----USART連接vofa+上位機顯示波形

2023-08-31 15:06 作者:茄子土豆地三鮮  | 我要投稿

????????電機調(diào)試過程中很有必要對相關(guān)參數(shù)進行監(jiān)控,最好的方式就是將這些數(shù)據(jù)輸出出來,編程可視化的波形,正好最近看到一款很好用的上位機——vofa+,想了想可以在STM32電機調(diào)試過程中用到,將實現(xiàn)過記錄下來如下。

1、串口配置

其他基本配置跟前兩篇一樣,這里不做介紹,有疑問看看前兩篇文章。

????????根據(jù)原理圖,選擇USART2,模式選擇異步通信,配置波特率為115200。

????????選擇串口引腳,PA2 ->Tx,PA3 ->Rx

????其他不用配置,默認即可,生成代碼


2、收發(fā)數(shù)據(jù)驗證

測試文件中編寫一個串口初始化函數(shù)


主要用到以下兩個接口函數(shù)

HAL_UART_Transmit_IT(&huart2 ,(uint8_t*)StaMessages,sizeof(StaMessages));

HAL_UART_Receive_IT(&huart2,(uint8_t*)RxBuffer,1);

主函數(shù)初始化調(diào)用


uint8_t StaMessages[4] = {0x11,0x22,0x33,0x44};

uint8_t RxBuffer[20];

void test_uart_init(void)

{

?

????HAL_UART_Transmit_IT(&huart2 ,(uint8_t*)StaMessages,sizeof(StaMessages));?//初始化發(fā)送數(shù)據(jù)

HAL_UART_Receive_IT(&huart2,(uint8_t*)RxBuffer,1);//調(diào)用中斷接收函數(shù),接收長度設(shè)為1,接收一個字節(jié)進一次中斷

}

然后,重寫接收回調(diào)函數(shù)HAL_UART_RxCpltCallback,

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)

{

????UNUSED(huart);

????HAL_UART_Transmit(&huart2,(uint8_t*)RxBuffer,1,0xFFFF); ?//發(fā)送接收到的數(shù)據(jù)

????HAL_UART_Receive_IT(&huart2,(uint8_t*)RxBuffer,1); ?//再開啟接收中斷(因為里面中斷只會觸發(fā)一次,因此需要再次開啟)

?

}

????????需要說明一下的是,在調(diào)用接收中斷HAL_UART_Receive_IT時,要根據(jù)實際情況填寫接收長度,這里,我使用1個字節(jié),即串口收到一個字節(jié)就進入接收回調(diào),輸出接收到的數(shù)據(jù)。

到這里就完成了,編譯下載后,看一下實際效果。


3、FireWater協(xié)議連接vofa+輸出波形

????????這里主要給大家演示一下FireWater協(xié)議下的VOFA+使用效果和方法。FireWater協(xié)議是CSV風(fēng)格的字符串流,直觀簡潔,編程像printf簡單。但由于字符串解析消耗更多的運算資源(無論在上位機還是下位機),建議僅在通道數(shù)量不多、發(fā)送頻率不高的時候使用。將鼠標放到FireWater協(xié)議上,可以很貼心的得到使用格式幫助。如上圖所示,我們使用printf("simples:%f, %f\n", sin(t1), sin(t2)")函數(shù)進行打印測試。

由于需要使用printf打印輸出數(shù)據(jù),首先要保證printf可以正常輸出,需要重寫fputc

主函數(shù)調(diào)用printf輸出測試

測試效果:

編寫測試函數(shù),輸出三條正弦波

主函數(shù)中調(diào)用

打開vofa+,做好串口相關(guān)配置,拖出波形控件

這里有個小細節(jié),如果下方顯示數(shù)據(jù)正常,右側(cè)通道數(shù)據(jù)也正常,但是沒有波形出現(xiàn),可以嘗試拖動下方彩色球球,試試看波形能否正常顯示,具體原因還沒有研究明白

4、JustFloat協(xié)議連接vofa+輸出波形

????????FireWater協(xié)議僅在通道數(shù)量不多、發(fā)送頻率不高的時候使用,而JustFloat協(xié)議是小端浮點數(shù)組形式的字節(jié)流協(xié)議,純十六進制浮點傳輸,節(jié)省帶寬。此協(xié)議非常適合用在通道數(shù)量多、發(fā)送頻率高的時候。

編寫JustFloat協(xié)議測試代碼

void vofa_JustFloat_output(void)

{

static float t = 0;

uint8_t tail[4] ?= {0x00, 0x00, 0x80, 0x7f};

???

????// 發(fā)送數(shù)據(jù)

????float data[4]; ?

????data[0] = sin(t);

????data[1] = sin(2*t);

????data[2] = sin(3*t);

????data[3] = sin(4*t);

??HAL_UART_Transmit(&huart2,(uint8_t*)data,sizeof(float) * 4,100); ?//發(fā)送數(shù)據(jù)

????// 發(fā)送幀尾

HAL_UART_Transmit(&huart2,tail,4,100);

????HAL_Delay(100);

??t += 0.1;

?

}

在主函數(shù)中調(diào)用

選擇JustFloat協(xié)議,其他配置與FireWater協(xié)議一致。

下方數(shù)據(jù)顯示選擇Hex,然后可以看到每包數(shù)據(jù)都會以00?00 80 7f結(jié)束。

這時配置下波形控件,顯示4個數(shù)據(jù),就可以看到4條曲線了。


手寫STM32 FOC記錄-----USART連接vofa+上位機顯示波形的評論 (共 條)

分享到微博請遵守國家法律
怀仁县| 灵丘县| 礼泉县| 和顺县| 措美县| 南江县| 平邑县| 云霄县| 望都县| 石景山区| 修文县| 南宫市| 电白县| 密山市| 东乡族自治县| 镇巴县| 万盛区| 定安县| 阿拉善盟| 洮南市| 唐海县| 濉溪县| 筠连县| 哈密市| 平遥县| 长寿区| 永康市| 红河县| 阿鲁科尔沁旗| 博湖县| 观塘区| 老河口市| 阿克| 牟定县| 彭阳县| 天长市| 历史| 齐齐哈尔市| 合水县| 承德县| 左贡县|