本來這期打算給大家分享PID怎么用的,但是我想到一個問題,我們說PID小車的效果怎么樣,咱們不能僅僅通眼睛去看吧,因此我們需要一個上位機,這里我推薦一個上位機叫做VOFA+,我看很少有人去講這個上位機,那今天我來講講吧,我也在這個論壇學習了很長時間了,現在也給這個論壇做點貢獻,那么我宣布本期的分享內容就是基于STM32以及CUBEMX的VOFA+上位機曲線繪制教學,下面我們開始吧。
第一步、我們要有上位機:
在此我附上這個上位機官網的鏈接:百度vofa,去官網下載就可以了,當然我也會在文末給出一個安裝包。
第二步、我們要配置這個上位機軟件 按照串口配置進行參照就可以了,我們選用的是JUSTFLOAT這個協議,但是很多人更喜歡其他的協議,因為其他的協議不需要寫特定的代碼比較方便,但是JUSTFLOAT這個協議適合高頻的數據發送。
第三步、相關通信協議
//這個就是將浮點數轉換成4個字節的代碼,具體怎么實現大家還自行研究,我也沒深刻研究。 - /**************************************************************************
- *功 能: 將浮點數轉換成四個單字節數值
- *輸 入: f:浮點數 byte儲存空間(4個字節)
- *返回值: none
- **************************************************************************/
- //VOFA通訊協議
- void Float_to_Byte(float f,uint8_t byte[]) //參考[url]https://blog.csdn.net/ls667/article/details/50811519[/url]博客
- {
- FloatLongType fl;
- fl.fdata=f;
- byte[0]=(unsigned char)fl.ldata;
- byte[1]=(unsigned char)(fl.ldata>>8);
- byte[2]=(unsigned char)(fl.ldata>>16);
- byte[3]=(unsigned char)(fl.ldata>>24);
- }
復制代碼- typedef union //定義結構
- {
- float fdata;
- unsigned long ldata;
- }FloatLongType;
復制代碼 第四步、單片機通信協議
以下是這個協議的規則,我們需要嚴格執行。 因此我們定義一個數組進行存放幀尾- uint8_t Send_tail[4]={0x00, 0x00, 0x80, 0x7f};//幀尾
復制代碼
- JustrFloat以小端的0x7f80000,也就是{ 0x00, 0x00, 0x80, 0x7f }作為幀結束標志,所以遇到{ 0x00, 0x00, 0x80, 0x7f }才會開啟一幀的解析,判斷它是采樣數據幀、圖片前導幀還是其他數據;沒有開啟數據解析,就不會打印文本;
- 圖片前導幀加上后續圖片數據,被并稱為圖片數據包,圖片數據會縮略打印;
- 點擊字節接收區設置按鈕,可以設置是否單獨隱藏樣數據幀、圖片數據包,也可以設置隱藏包括其他數據在內的所有數據;
- 字節接收區請勾選十六進制,以十六進制方式打印字符,否則只能打印亂碼;
- 如果你發送的數據一直沒有{ 0x00, 0x00, 0x80, 0x7f },那么JustFloat無法解析消耗緩沖區內的數據,會造成緩沖區爆滿,軟件卡死;
那么我們繪制曲線的方法是什么思路呢? --->data1 data2 .... datan 幀尾 data1 data2 .... datan 幀尾 data1 data2 .... datan 幀尾 data1 data2 .... datan 幀尾這樣即可 下面附上我的代碼:
PID_Test.7z
(5.18 MB, 下載次數: 9)
2023-8-19 14:47 上傳
點擊文件名下載附件
源碼 下載積分: 黑幣 -5
|