DS18B20是一款精度比較好的溫度傳感器,最重要的是它通過一根導(dǎo)線,既完成通訊,又給芯片供電,在MCU引腳數(shù)量比較緊張的時候,確實(shí)是個不錯的選擇。這顆芯片看起來簡單,但真正讓它跑起來,從里面讀出溫度數(shù)據(jù)可沒有想象的那么容易。這不,群里的Ryan Wang同學(xué)就被折磨得不行。難能可貴的是,在王同學(xué)終于搞定它之后,無私地分享出心得和代碼。如果你覺得這篇文章能幫到更多的同學(xué),就幫忙轉(zhuǎn)發(fā),或點(diǎn)個在看吧。
通過CUBE使能TIM2定時器,Clock Source使用internal Clock,MCU主頻為32Mhz,故Prescaler=32-1=31,Counter Mode為UP,這里注意Counter Period 官方手冊要求最低為1,經(jīng)測試設(shè)置為2時,定時器更為準(zhǔn)確。
完成以上配置后,需要在程序手動調(diào)整和增加功能代碼:
1. Cube配置TIM2定時器的基礎(chǔ)上,在程序編寫delay_us(uint16_t us)函數(shù),delay_us的精確度將直接影響DS18B20溫度數(shù)據(jù)的讀取結(jié)果。本程序使用了HAL庫(CUBE勾選配置)
voiddelay_us(uint16_tus)
{
/*中斷會打斷微秒延時函數(shù),
*但計數(shù)器計數(shù)不會停
*防止計數(shù)器增加到65535之后重新開始計數(shù)
*/
uint16_tdiffer=50000-us;
HAL_TIM_Base_Start(&htim2);
__HAL_TIM_SET_COUNTER(&htim2,differ);
while(differ<50000)
????{
????????differ=__HAL_TIM_GET_COUNTER(&htim2);
????}
????HAL_TIM_Base_Stop(&htim2);
}
2. 注意程序工程中DS18B20.H的定義,及DS18B20.C文件,(同文件夾下附件)其內(nèi)部函數(shù)定義根據(jù)DS18B20官方手冊進(jìn)行操作,DS18B20為one wire 通訊,對時序的要求相對嚴(yán)格,DS18B20的數(shù)據(jù)通訊通過DS18B20的data管腳進(jìn)行單片機(jī)通訊,主要流程為:
1.DS18B20初始化
2.DS18B20接入自檢
3.DS18B20寫0xcc(SKIP ROM)
4.寫0x44(通知傳感器進(jìn)行溫度數(shù)據(jù)采集與轉(zhuǎn)換)
5.DS18B2再次初始化
6.DS18B20再次接入自檢
7.DS18B20寫0xcc(SKIP ROM)(倒序即0011 0011,如下圖左)
8.DS18B20寫0xbe(通知傳感器進(jìn)行數(shù)傳)(倒序0111 1101,下圖右)
9.DS18B20讀一個字節(jié)
10.DS18B20再讀一個字節(jié)
11.數(shù)據(jù)的預(yù)處理
3. 以上每步操作都需要微秒級延時等待,參考DS18B20官方手冊關(guān)于“DS18B20初始化與check”,“寫0”,“寫1”,“讀0”,“讀1”的具體時序要求,注意針對不同MCU的主頻配置,在保證1微秒延時準(zhǔn)確的前提下,具體的微秒延時將有所調(diào)整;特別注意在讀時序時的延時,針對32MHZ的本機(jī),在DS18B20.C中已做延時調(diào)整(參考正點(diǎn)原子DS18B20試驗(yàn)(72MHZ),使用示波器抓取各個階段波形,結(jié)合DS18B20手冊,對比調(diào)試,)若時序不對,則讀數(shù)一直為0或者85。著重理解DS18B20_data管腳的輸入和輸出模式,拉高和拉低(如DS18B20標(biāo)準(zhǔn)電路要求在data管腳接上拉電阻,那么在管腳IN和OUT模式下,如未人為拉高或拉低,則管腳電平會自動拉高)。
4. 傳感器選用DS18B20,因外部封裝種類繁多,在此不放鏈接。
審核編輯 :李倩
-
芯片
+關(guān)注
關(guān)注
459文章
52201瀏覽量
436415 -
溫度傳感器
+關(guān)注
關(guān)注
48文章
3025瀏覽量
158185 -
定時器
+關(guān)注
關(guān)注
23文章
3288瀏覽量
117256
原文標(biāo)題:DS18B20驅(qū)動程序調(diào)試總結(jié)
文章出處:【微信號:TopSemic,微信公眾號:TopSemic嵌入式】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
基于FPGA的DS18B20數(shù)字溫度傳感器測溫實(shí)例

DS18B20實(shí)時溫度傳感器中文資料
基于FPGA的溫度傳感器(ds18b20)驅(qū)動設(shè)計

《DNESP32S3使用指南-IDF版_V1.6》第二十九章 DS18B20實(shí)驗(yàn)
CW32模塊使用 DS18B20溫度傳感器

ds18b20傳感器的使用方法
ds18b20溫度傳感器怎么接線
ds18b20溫度傳感器如何使用
ds18b20溫度傳感器是什么類型
ds18b20溫度傳感器和dht11的區(qū)別
STC32和STC8H驅(qū)動DS18B20測溫串口發(fā)送數(shù)據(jù)

評論