聚豐項(xiàng)目 > 基于AB32VG1開(kāi)發(fā)板的設(shè)備溫度檢測(cè)
基于RT-Thread 的Sensor框架對(duì)應(yīng)的軟件包max6675,通過(guò)AB32VG1開(kāi)發(fā)板模擬spi驅(qū)動(dòng),讀取熱電偶傳感器的數(shù)據(jù),并通過(guò)串口輸出,到串口屏顯示圖形。 非常感謝這次大賽主辦方睿賽德,中科藍(lán)訊,elecfan,為我們提供了很好的軟件硬件平臺(tái),學(xué)習(xí)到基于嵌入式系統(tǒng)開(kāi)發(fā)技術(shù),提升一下技能,為今后的工作積累經(jīng)驗(yàn)。同時(shí)深深感受到,我們國(guó)產(chǎn)軟件硬件系統(tǒng)在崛起了! 感謝群里各位大佬,無(wú)私奉獻(xiàn)
jf_13982707
分享jf_13982707
團(tuán)隊(duì)成員
ninda 技術(shù)員
AB32VG1開(kāi)發(fā)板,用GPIO模擬spi接口,接到溫度傳感器模塊
溫度傳感器模塊MAX6675,采用spi數(shù)據(jù)接口和開(kāi)發(fā)板通訊,三根信號(hào)線so,cs,sck分別接到MISO,CS,SCLK,電源VCC,GND,+,-接到熱電偶傳感器
串口屏(構(gòu)成:TFT顯示屏,spi接口連接到ESP32開(kāi)發(fā)板),通過(guò)串口連接到AB32VG1,接收并圖形化顯示傳感器數(shù)據(jù)圖表
1、軟件構(gòu)成:rtthread開(kāi)發(fā)環(huán)境,sensor軟件包,max6675軟件包,Arduino編譯器,littleVGL圖形界面,vscode編輯器。
2、驅(qū)動(dòng):rtthread硬件設(shè)備驅(qū)動(dòng)框架,rtthread硬件管理系統(tǒng),spi驅(qū)動(dòng),uart模塊,msh模塊,downloader下載器
3、線程:rtthread線程保障實(shí)時(shí)傳感器數(shù)據(jù)采集,信號(hào)量實(shí)現(xiàn)同步串口發(fā)送數(shù)據(jù),互斥量保護(hù)傳感器數(shù)據(jù)集正確性
4、spi接口說(shuō)明:非常感謝大神提供的drvsoftspi,讓AB32VG1實(shí)現(xiàn)可以定制gpio為spi接口,
通過(guò)SOFT_SPI1_BUS_CONFIG結(jié)構(gòu)體,設(shè)置miso=10,mosi=8,sck=9,將相應(yīng)編號(hào)的io點(diǎn)連線到傳感器模塊的so->10,clk->9,cs->19,板級(jí)初始化 實(shí)現(xiàn)spi0設(shè)備總線,
max6675_init(const char *spi_device_name)中rt_soft_spi_device_attach("spi0","spi10",RT_NULL,19)將傳感器設(shè)備掛載到spi0總線,片選cs=19,成為設(shè)備spi10,
rt_spi_configure(dev->spi, &cfg); //配置傳輸模式,設(shè)置spi10設(shè)備讀寫(xiě)時(shí)序邏輯,cpol=1,cpha=0,datawidth=16。
5、代碼倉(cāng)庫(kù):https://gitee.com/alphasu1109/max6675_temp
數(shù)據(jù)顯示線程,1秒定時(shí),周期性讀取sensor數(shù)據(jù),存入全局變量temp1,釋放信號(hào)量rxsem,同步串口發(fā)送數(shù)據(jù)
if (sensor_data.data.temp >= 0)
{
rt_kprintf("temp:%3d.%dC, timestamp:%5d\n",
sensor_data.data.temp / 100,
sensor_data.data.temp % 100,
sensor_data.timestamp);
}
else
{
rt_kprintf("temp:-%2d.%dC, timestamp:%5d\n",
abs(sensor_data.data.temp / 100),
abs(sensor_data.data.temp % 100),
sensor_data.timestamp);
}
temp1=sensor_data.data.temp;
//temp1=5;
rt_sem_release(&rx_sem);
遇到的坑:1,找不到max6675_read_temp(),原因是drvsoftspi.c沒(méi)有被編譯,通過(guò)勾選setting組建spi,并修改同級(jí)目錄中sconscript文件,增加編譯條件后解決。
2.掛載以后,通過(guò)list_device,能看到spi10,但是讀取數(shù)據(jù)總是0,原因是沒(méi)有設(shè)置時(shí)序邏輯,spi初始值datawidth是8,cpol和cpha都是0,經(jīng)過(guò)檢查max6675數(shù)據(jù)手冊(cè),重新修改配置后,成功讀取數(shù)據(jù)。
3.include "spi.h" 編譯報(bào)錯(cuò),找不到,沒(méi)有包含在include文件夾內(nèi),經(jīng)過(guò)檢查"rt_thread/components/drivers/include"文件夾,存在"rtdevice.h"文件,里面含有spi.h加載過(guò)程,#ifdef RT_USING_SPI #include "spi.h" #endif, 因此改為#include "rtdevice.h"