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