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