精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

探討STM32F407+KS103超聲波模塊測距

Q4MP_gh_c472c21 ? 來源:21ic藍V作者吶咯密密 ? 作者:21ic藍V作者吶咯密 ? 2021-03-26 13:58 ? 次閱讀

本文介紹基于STM32F407的KS103超聲波模塊的使用,包含使用注意事項以及代碼配置,同時會附上本人在開發時遇到的問題以及解決方法。

KS103模塊使用串口/IIC接口與主機通信,自動響應主機的iic/串口控制指令。

包含溫度補償的距離探測,同時可以在1ms內檢測光強。

探測范圍 1cm~800cm及 1cm~1000cm(10 米)

5s 未收到 I2C 控制指令自動進入 uA 級休眠,并可隨時被主機 I2C 控制指令喚醒

TTL串口模式

在 KS103 上連線引腳上標識有:VCC、SDA/TX、SCL/RX、GND 及 MODE。模塊在上電之前,MODE 需要接 0V 地,上電后模塊將工作于 TTL 串口模式。如果KS103在上電后再將 MODE 引腳接 0V 地,模塊將仍然工作于 I2C 模式。因此,TTL 串口模式時需要 5 根線來控制,其中 VCC 用于連接+5V(3.0~5.5V 范圍均可)電源(1),GND用于連接電源地,SDA/TX 連接 MCUUSB 轉 TTL 模塊的 RXD,SCL/RX 引腳連接 MCU 或USB 轉 TTL 模塊的 TXD 。

在使用時最好使用5V標準電壓,電壓低會影響量程。

新到手的模塊默認串口地址是0xE8,可修改。

這里本人被坑了,因為我到手的模塊是別人用過的,被修改了地址但是不和我說,就是調試不出來。

當然也是我偷懶了,模塊在上電的時候背面的LED會閃爍,告訴用戶自身的地址,我沒在意。上電后快閃兩下是代表二進制的“1”,慢閃一下代表“0”,一共八位,盯著記錄就能獲得其地址。

串口模式很占用串口資源,我并沒有使用該模式進行開發,僅僅使用了官方的上位機進行測試,鑒定模組的好壞。

確認模組沒問題,選用IIC接口進行開發,這樣一條總線可以掛載多個模塊,只需要總線尋址便可。

I2C 模式

在使用iic模式時,硬件需要注意幾點:

SCL 及 SDA 線均需要由主機接一個 4.7K(阻值 1~10K 均可)電阻到 VCC ;I2C 通信速率建議不要高于 100kbit/s (因為模塊的iic最大速率只有100K)。

直接從代碼開始:

因為對速度要求不高,而且為了移植方便,采用軟件模擬iic。其實為了偷懶,模擬簡單呀。

老規矩,初始化iic。

void IIC_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);//使能GPIOB時鐘 //GPIOB8,B9初始化設置 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通輸出模式 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽輸出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉 GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化 IIC_SCL=1; IIC_SDA=1; }

寫iic控制函數,老掉牙的東西,全網都有。

//產生IIC起始信號 void IIC_Start(void){ SDA_OUT(); //sda線輸出 IIC_SDA=1; IIC_SCL=1; delay_us(10); IIC_SDA=0;//START:when CLK is high,DATA change form high to low delay_us(10); IIC_SCL=0;//鉗住I2C總線,準備發送或接收數據 } //產生IIC停止信號 void IIC_Stop(void){ SDA_OUT();//sda線輸出 IIC_SCL=0; IIC_SDA=0;//STOP:when CLK is high DATA change form low to high delay_us(10); IIC_SCL=1; IIC_SDA=1;//發送I2C總線結束信號 delay_us(10); } //等待應答信號到來 //返回值:1,接收應答失敗 // 0,接收應答成功 u8 IIC_Wait_Ack(void){ u8 ucErrTime=0; SDA_IN(); //SDA設置為輸入 IIC_SDA=1;delay_us(6); IIC_SCL=1;delay_us(6); while(READ_SDA) { ucErrTime++; if(ucErrTime>250) { IIC_Stop(); return 1; } } IIC_SCL=0;//時鐘輸出0 return 0; } //產生ACK應答 void IIC_Ack(void){ IIC_SCL=0; SDA_OUT(); IIC_SDA=0; delay_us(10); IIC_SCL=1; delay_us(10); IIC_SCL=0; } //不產生ACK應答 void IIC_NAck(void){ IIC_SCL=0; SDA_OUT(); IIC_SDA=1; delay_us(10); IIC_SCL=1; delay_us(10); IIC_SCL=0; } //IIC發送一個字節 //返回從機有無應答 //1,有應答 //0,無應答 void IIC_Send_Byte(u8 txd){ u8 t; SDA_OUT(); IIC_SCL=0;//拉低時鐘開始數據傳輸 for(t=0;t<8;t++) { IIC_SDA=(txd&0x80)>>7; txd<<=1; delay_us(10); //對TEA5767這三個延時都是必須的 IIC_SCL=1; delay_us(10); IIC_SCL=0; delay_us(10); } } //讀1個字節,ack=1時,發送ACK,ack=0,發送nACK u8 IIC_Read_Byte(unsigned char ack){ unsigned char i,receive=0; SDA_IN();//SDA設置為輸入 for(i=0;i<8;i++ ) { IIC_SCL=0; delay_us(10); IIC_SCL=1; receive<<=1; if(READ_SDA)receive++; delay_us(5); } if (!ack) IIC_NAck();//發送nACK else IIC_Ack(); //發送ACK return receive; }

寫KS103的控制函數

u8 KS103_ReadOneByte(u8 address, u8 reg) { u8 temp=0; IIC_Start(); IIC_Send_Byte(address); //發送低地址 IIC_Wait_Ack(); IIC_Send_Byte(reg); //發送低地址 IIC_Wait_Ack(); IIC_Start(); IIC_Send_Byte(address + 1); //進入接收模式 IIC_Wait_Ack(); delay_us(50); //增加此代碼通信成功?。?! temp=IIC_Read_Byte(0); //讀寄存器3 IIC_Stop();//產生一個停止條件 return temp; } void KS103_WriteOneByte(u8 address,u8 reg,u8 command) { IIC_Start(); IIC_Send_Byte(address); //發送寫命令 IIC_Wait_Ack(); IIC_Send_Byte(reg);//發送高地址 IIC_Wait_Ack(); IIC_Send_Byte(command); //發送低地址 IIC_Wait_Ack(); IIC_Stop();//產生一個停止條件 }

這里依照了模塊的指令發送流程:

pIYBAGBdeRSAPxHbAAGAvS6ph0U137.png

探測指令從 0x01 到 0x2f,數值越大,信號增益越大。

獲取距離數據

KS103_WriteOneByte(0XD2,0X02,0XB0); delay_ms(100); range1 = KS103_ReadOneByte(0xD2, 0x02); range2 = KS103_ReadOneByte(0xD2, 0x03);

每一幀的探測指令格式為:

c78d6dce-8dcb-11eb-8b86-12bb97331649.png

KS103_WriteOneByte(0XD2,0X02,0XB0);中,0xd2為模塊的地址,02為寄存器地址,0xB0為控制命令。

c7b74c7a-8dcb-11eb-8b86-12bb97331649.png


在發送探測指令后需要等待一段時間才可通過iic總線獲取數據,過早的查詢總線會獲得0XFF。在讀取總線數據時除了需要發送模塊iic的地址,還需要將模塊iic的地址加1,而且在之后必須要等待,才能獲取完整的數據。因為返回的是16位數據,所以這里我采用執行兩次KS103_ReadOneByte()函數。

在這些都處理完之后我將采集到的數據輸出到串口,發現并不能成功,range1和range2的值并不變。最后發現我是用的是0xBC探測指令,最大耗時87MS,而我只延時50ms。通過修改探測指令和延時時間均可解決問題。

編輯:jq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 超聲波測距
    +關注

    關注

    5

    文章

    246

    瀏覽量

    37860
  • STM32F407
    +關注

    關注

    15

    文章

    187

    瀏覽量

    29367
  • KS103
    +關注

    關注

    3

    文章

    2

    瀏覽量

    7935

原文標題:STM32F407+KS103超聲波模塊測距

文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    STM32最小系統板與ESP01S接入機智云教程

    本次采用STM32F103C8T6單片機、ESP-01S模塊、紅外避障模塊、蜂鳴器模塊,OLED(0.96iic)、繼電器模塊
    的頭像 發表于 09-04 08:02 ?437次閱讀
    <b class='flag-5'>STM32</b>最小系統板與ESP01S接入機智云教程

    PGA460超聲波模塊硬件和軟件優化

    電子發燒友網站提供《PGA460超聲波模塊硬件和軟件優化.pdf》資料免費下載
    發表于 08-27 11:16 ?0次下載
    PGA460<b class='flag-5'>超聲波模塊</b>硬件和軟件優化

    第七章-V1.5 STM32超聲波測距STM32F103C8t6超聲波避障小車 超聲波避障模塊 STM32超聲波測距

    5STM32超聲波測距STM32F103C8t6超聲波避障小車
    的頭像 發表于 08-15 16:25 ?598次閱讀
    第七章-V1.5 <b class='flag-5'>STM32</b><b class='flag-5'>超聲波</b><b class='flag-5'>測距</b><b class='flag-5'>STM32F103</b>C8t6<b class='flag-5'>超聲波</b>避障小車 <b class='flag-5'>超聲波</b>避障<b class='flag-5'>模塊</b> <b class='flag-5'>STM32</b><b class='flag-5'>超聲波</b><b class='flag-5'>測距</b>

    AFE5812超聲波模擬前端數據表

    電子發燒友網站提供《AFE5812超聲波模擬前端數據表.pdf》資料免費下載
    發表于 07-29 09:37 ?0次下載
    AFE5812<b class='flag-5'>超聲波模</b>擬前端數據表

    AFE5818 16通道超聲波模擬前端數據表

    電子發燒友網站提供《AFE5818 16通道超聲波模擬前端數據表.pdf》資料免費下載
    發表于 07-29 09:29 ?2次下載
    AFE5818 16通道<b class='flag-5'>超聲波模</b>擬前端數據表

    超聲波無損檢測原理及應用

    超聲波無損檢測(Ultrasonic Non-Destructive Testing,簡稱UT)是一種利用超聲波在材料內部傳播的特性,檢測材料內部缺陷和結構的無損檢測技術。本文將詳細介紹超聲波無損
    的頭像 發表于 05-24 16:48 ?4878次閱讀

    在全志H616核桃派開發板上實現超聲波傳感器測距

    實現超聲波傳感器測距。 實驗講解? 下圖是一款市面上常用的HCSR04超聲波模塊模塊參數 供電電壓 3.3V~5V (核桃派需要使用支持3.3V的) 測量距離 2cm~450c
    發表于 05-08 16:21

    51單片機制作舵機控制超聲波模塊

    我用定時器0控制舵機旋轉,定時器2控制超聲波模塊,但是二者只能實現一個功能,有沒有大神幫忙解決一下,求求了
    發表于 04-20 20:55

    基于51單片機的車輛倒車雷達報警系統,HC-SR04超聲波測距,全套資料

    設計要求 1.設計一個以51單片機為核心的超聲波倒車雷達系統; 2.超聲波測量范圍在2cm~4m,測量精度3mm; 3.擴展DS18B20溫度測量模塊,讀取環境溫度和補償超聲波
    發表于 03-19 14:17

    15K超聲波模具20K超音波模具制作

    15KHZ超聲波模具20KHZ超音波模具 15KHZ超聲波模具20KHZ超音波模具深圳市宏大電子設備有限公司都選用進口鋁鎂合金7075.頻率好硬度高,經久耐用!
    發表于 02-16 15:30

    超聲波傳感器和超聲波測距原理分析

    聲音是由振動產生的,能夠產生超聲波的裝置就是超聲波傳感器,習慣上稱為超聲換能器,或者超聲探頭。
    發表于 01-29 09:20 ?746次閱讀
    <b class='flag-5'>超聲波</b>傳感器和<b class='flag-5'>超聲波</b><b class='flag-5'>測距</b>原理分析

    超聲波測距原理 超聲波測距離傳感器接線方法

    超聲波測距是一種常用的測距方法,通過發射超聲波脈沖,利用其在空氣中傳播速度較快的特點,測量出從傳感器到目標物體的時間差,并進而計算出距離。超聲波
    的頭像 發表于 01-22 15:22 ?2193次閱讀

    超聲波傳感器的工作原理 超聲波傳感器的應用

    超聲波傳感器是一種基于超聲波的無接觸式測距傳感器,可以廣泛應用于工業、醫療、軍事等領域。本文將詳細介紹超聲波傳感器的工作原理以及其在各個領域的應用。
    的頭像 發表于 01-18 14:04 ?1565次閱讀

    用pwm去控制超聲波模塊時,自動裝載模式下,超聲波的噪音很大是為什么?

    用pwm去控制超聲波模塊時,借鑒的程序中:pwm的技術工作模式是one shot,每次去獲取超聲波模塊返回的值,都是一樣,肯定是cnt沒有變。但如果設置為自動裝載mode,能連續獲取不同的值。查看
    發表于 01-17 08:32

    超聲波傳感器測距離的原理

    超聲波傳感器測距離的原理是利用聲波在空氣中的傳播速度測量物體與傳感器之間的距離。具體而言,傳感器發送出一個超聲波信號,然后測量信號從發送到接收所需的時間,并根據
    的頭像 發表于 01-15 09:41 ?2695次閱讀