1方案介紹設(shè)計思路
做一個測距儀,需要幾部分:
1. 信號采集;
2. 信號轉(zhuǎn)換成距離;
3. 將距離顯示出來;
這次在網(wǎng)上分別買了超聲測距、紅外測距、激光測距的模塊,一直放那里沒有試,等需要用的時候,發(fā)現(xiàn)就紅外測距的模塊有幾根線,可以直接插到板子上用,那么就用紅外測距模塊了。
紅外測距模塊的型號是SHARP GP2D12,輸出的信號是模擬電壓信號,電壓值跟距離有關(guān),那么用板子采集分析這個電壓,就能得到距離;分析模擬電壓,需要用到ADC。本次使用基于GD32F450VET6的小紅板,其中GD32F4系列MCU集成的ADC采樣速率可達2.6M SPS,性能非常高。
2方案框圖
信號換算成距離,ADC得到AD轉(zhuǎn)換后的數(shù)據(jù),但是跟距離還沒有關(guān)聯(lián)起來,需要用一個公式將ADC輸出數(shù)據(jù)換算成一個距離值;這個模塊的測程大概是10cm到80cm的樣子,測了4組數(shù)據(jù),分別是20cm、40cm、60cm、80cm距離時候的ADC輸出值,將這四組數(shù)據(jù)擬合一個曲線出來,就可以得到全測程的距離計算公式了;實際擬合的時候用的是指數(shù)函數(shù)。
關(guān)于距離的顯示,可以用串口顯示,也可以用LCD顯示,這里用了串口在調(diào)試的時候顯示,調(diào)好了用OLED顯示。
測試:
1. while (1)
2. {
3. static uint8_t i;
4. uint16_t adc_data;
5. float m;
6. uint8_t d;
7. uint8_t d_lcd[2] = {0};
8.// printf(" test%3d",i++);
9. bsp_led_on(LED4);
10. delay_ms(100);
11. bsp_led_off(LED4);
12. delay_ms(800);
13. adc_data = adc_regular_data_read(ADC1);
14.
15. m = 160700 * pow(adc_data,-1.097);
16. d = (uint8_t)m;
17.
18. printf(" %3d,adc:%5d,%2dcm",i++,adc_data,d);
19.
20. sprintf((char*)d_lcd,"%2d",d); // 打印到數(shù)組
21. OLED_ShowString(0,0,"D:",16);
22. OLED_ShowString(16,0,d_lcd,16);
23. OLED_ShowString(32,0,"cm",16);
24. adc_software_trigger_enable(ADC1,ADC_REGULAR_CHANNEL);
25.
26. }
用一根20cm杜邦線做參考,能測出距離,抬高一點點,也可以反應(yīng)過來。
-
傳感器
+關(guān)注
關(guān)注
2564文章
52664瀏覽量
764177 -
模擬信號
+關(guān)注
關(guān)注
8文章
1159瀏覽量
53310 -
輸出信號
+關(guān)注
關(guān)注
0文章
302瀏覽量
12156
發(fā)布評論請先 登錄
磁致伸縮位移傳感器為何使用專用DAC輸出模擬信號

位移傳感器與激光測距儀對比
基于XIAO的迷你激光數(shù)顯測距儀設(shè)計

評論