国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

FPGA實(shí)現(xiàn)IIC驅(qū)動(dòng)環(huán)境光、距離傳感器

這篇具有很好參考價(jià)值的文章主要介紹了FPGA實(shí)現(xiàn)IIC驅(qū)動(dòng)環(huán)境光、距離傳感器。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

簡(jiǎn)介

本次實(shí)驗(yàn)平臺(tái)為野火征途mini開發(fā)板,用到的外設(shè)有按鍵、LED燈數(shù)碼管、環(huán)境光(ALS)+距離(PS)傳感器芯片。

AP3216C是一款環(huán)境光、距離傳感器芯片,其接口為IIC接口,F(xiàn)PGA通過(guò)IIC接口可以配置工作模式、讀取環(huán)境光、距離數(shù)據(jù)。

系統(tǒng)框圖

系統(tǒng)模塊連接如下:

FPGA實(shí)現(xiàn)IIC驅(qū)動(dòng)環(huán)境光、距離傳感器,FPGA,fpga開發(fā)

key_filter模塊實(shí)現(xiàn)按鍵消抖功能,mode_reg是1bit寄存器,檢測(cè)到按鍵脈沖則翻轉(zhuǎn),mode會(huì)通過(guò)led顯示,ALS_PS_driver模塊負(fù)責(zé)通過(guò)IIC總線驅(qū)動(dòng)AP3216C芯片,其內(nèi)部有一個(gè)狀態(tài)機(jī)和一個(gè)IIC驅(qū)動(dòng)模塊。

當(dāng)mode為0時(shí),讀取環(huán)境光的16bit的二進(jìn)制數(shù)據(jù),通過(guò)一個(gè)16bit的二進(jìn)制轉(zhuǎn)bcd碼模塊將二進(jìn)制數(shù)據(jù)轉(zhuǎn)化為bcd碼,最后通過(guò)數(shù)碼管驅(qū)動(dòng)模塊顯示在開發(fā)板的數(shù)碼管上。當(dāng)mode為1時(shí),讀取、顯示的則是距離數(shù)據(jù)。

接下來(lái)主要介紹ALS_PS_driver模塊,其他模塊就不介紹了

環(huán)境光、距離傳感器驅(qū)動(dòng)模塊

ALS_PS_driver模塊內(nèi)部的狀態(tài)機(jī)如下

FPGA實(shí)現(xiàn)IIC驅(qū)動(dòng)環(huán)境光、距離傳感器,FPGA,fpga開發(fā)

根據(jù)數(shù)據(jù)手冊(cè),上電200ms后,進(jìn)入CONFIG狀態(tài),配置芯片工作模式為環(huán)境光+距離傳感器都激活。

配置好工作模式后,該傳感器芯片會(huì)將模擬信號(hào)轉(zhuǎn)化為數(shù)字信號(hào),供我們用IIC接口讀取,這個(gè)過(guò)程需要一定時(shí)間,根據(jù)數(shù)據(jù)手冊(cè),距離數(shù)據(jù)轉(zhuǎn)化需要12.5ms,環(huán)境光數(shù)據(jù)轉(zhuǎn)化需要100ms,總共需要112.5ms,每次讀取間隔大于112.5ms即可,同時(shí)為了防止數(shù)據(jù)變化太快不方便觀察,本次實(shí)驗(yàn)設(shè)定讀取間隔為200ms。

進(jìn)入DELAY延時(shí)狀態(tài),當(dāng)mode為0時(shí),進(jìn)入環(huán)境光數(shù)據(jù)讀取循環(huán),每200ms讀取一次環(huán)境光數(shù)據(jù),當(dāng)mode為1時(shí),進(jìn)入距離數(shù)據(jù)讀取循環(huán),每200ms讀取一次距離數(shù)據(jù)。

代碼如下:

module ALS_PS_driver(
    input               clk,
    input               rst_n,
    input               mode,
    output reg  [15:0]  ALS_data,
    output reg  [9:0]   PS_data,
    // iic
    output              scl,
    inout               sda
);
//------------signals--------------
// 狀態(tài)機(jī)信號(hào)
localparam INIT           = 4'h0,  // 上電延時(shí)200ms
           CONFIG         = 4'h1,  // 模式配置
           DELAY          = 4'h2,  // 數(shù)據(jù)轉(zhuǎn)化等待200ms
           IIC_READ_ALS_L = 4'h3,  // 讀取ALS低8位
           IIC_WAIT_1     = 4'h4,  // 等待ALS低8位讀取完成
           IIC_READ_ALS_H = 4'h5,  // 讀取ALS高8位
           IIC_READ_PS_L  = 4'h6,  // 讀取PS低4位
           IIC_WAIT_2     = 4'h7,  // 等待PS低4位讀取完成
           IIC_READ_PS_H  = 4'h8;  // 讀取PS高6位
reg [3:0]       state;
// 200ms延時(shí)計(jì)數(shù)器
reg [23:0]      cnt;
wire            cnt_end = (cnt == 24'd10_000_000);
// iic讀寫信號(hào)
reg             rd_req;
reg             wr_req;
reg [7:0]       addr;
reg [7:0]       wr_data;
wire            rd_valid;
wire    [7:0]   rd_data;
//------------function-------------
// 200ms計(jì)數(shù)器
always @(posedge clk, negedge rst_n) begin
    if(!rst_n)
        cnt <= 0;
    else if(state == INIT || state == DELAY)
        cnt <= cnt_end ? 24'd0 : (cnt + 24'd1);
end
    
// 狀態(tài)機(jī)
always @(posedge clk, negedge rst_n) begin
    if(!rst_n)
        state <= INIT;
    else begin
        case(state)
            INIT          : state <= cnt_end ? CONFIG : INIT;
            CONFIG        : state <= DELAY;
            DELAY         : state <= cnt_end ? (mode ? IIC_READ_PS_L : IIC_READ_ALS_L) : DELAY;
            IIC_READ_ALS_L: state <= IIC_WAIT_1;
            IIC_WAIT_1    : state <= rd_valid ? IIC_READ_ALS_H : IIC_WAIT_1;
            IIC_READ_ALS_H: state <= DELAY;
            IIC_READ_PS_L : state <= IIC_WAIT_2;
            IIC_WAIT_2    : state <= rd_valid ? IIC_READ_PS_H : IIC_WAIT_2;
            IIC_READ_PS_H : state <= DELAY;
            default       : state <= INIT;
        endcase
    end
end
// iic讀寫信號(hào)
always @(*) begin
    case(state)
        CONFIG: begin
            rd_req  = 1'b0;
            wr_req  = 1'b1;
            addr    = 8'h00;
            wr_data = 8'h03;
        end
        IIC_READ_ALS_L: begin
            rd_req  = 1'b1;
            wr_req  = 1'b0;
            addr    = 8'h0c;
            wr_data = 8'h00;
        end
        IIC_READ_ALS_H: begin
            rd_req  = 1'b1;
            wr_req  = 1'b0;
            addr    = 8'h0d;
            wr_data = 8'h00;
        end
        IIC_READ_PS_L: begin
            rd_req  = 1'b1;
            wr_req  = 1'b0;
            addr    = 8'h0e;
            wr_data = 8'h00;
        end
        IIC_READ_PS_H: begin
            rd_req  = 1'b1;
            wr_req  = 1'b0;
            addr    = 8'h0f;
            wr_data = 8'h00;
        end
        default   : begin
            rd_req  = 1'b0;
            wr_req  = 1'b0;
            addr    = 8'h00;
            wr_data = 8'h00;
        end
    endcase
end
// 讀取ALS數(shù)據(jù)到寄存器
always @(posedge clk, negedge rst_n) begin
    if(!rst_n)
        ALS_data <= 0;
    else if(~mode) begin
        if(rd_valid) begin
            if(state == IIC_WAIT_1)
                ALS_data[7:0] <= rd_data;
            else
                ALS_data[15:8] <= rd_data;
        end
    end
end
// 讀取PS數(shù)據(jù)到寄存器
always @(posedge clk, negedge rst_n) begin
    if(!rst_n)
        PS_data <= 0;
    else if(mode) begin
        if(rd_valid) begin
            if(state == IIC_WAIT_2)
                PS_data[3:0] <= rd_data[3:0];
            else
                PS_data[9:4] <= rd_data[5:0];
        end
    end
end
// iic驅(qū)動(dòng)模塊
iic_driver #(
    .ADDR_WIDTH (1),
    .DEV_ADDR   (7'b0011110)
) inst_iic_driver (
    .clk        (clk),
    .rst_n      (rst_n),
    .rd_req     (rd_req),
    .wr_req     (wr_req),
    .addr       ({8'h00, addr}),
    .wr_data    (wr_data),
    .rd_valid   (rd_valid),
    .rd_data    (rd_data),
    .scl        (scl),
    .sda        (sda)
);
endmodule

IIC驅(qū)動(dòng)模塊

IIC驅(qū)動(dòng)模塊不詳細(xì)介紹了。。。這里給出代碼:

// -----------------------------------------------------------------------------
// iic驅(qū)動(dòng),支持400khz,支持地址位寬1字節(jié)、2字節(jié),支持單字節(jié)讀寫
// -----------------------------------------------------------------------------
module iic_driver
#(
    // 寄存器地址寬度
    parameter ADDR_WIDTH = 2,
    // 野火開發(fā)板EEPROM設(shè)備地址為0x53,1010011,這里作為默認(rèn)地址
    parameter DEV_ADDR = 7'b1010011
)
(
    input               clk,
    input               rst_n,
    
    // host side
    input               rd_req,
    input               wr_req,
    input   [15:0]      addr,
    input   [7:0]       wr_data,
    output reg          rd_valid,
    output reg  [7:0]   rd_data,

    // iic side
    output reg          scl,
    inout               sda
);
//-----------------------------------信號(hào)聲明-----------------------------------
    // 由于寫法問(wèn)題,SCL頻率默認(rèn)400k,不支持100k和1M
    localparam SCL_FREQ = 400_000;
    wire [7:0] DEV_ADDR_W = {DEV_ADDR, 1'b0};// 7bit設(shè)備地址 + 1bit寫命令(低電平)
    wire [7:0] DEV_ADDR_R = {DEV_ADDR, 1'b1};// 7bit設(shè)備地址 + 1bit讀命令(高電平)
    // 狀態(tài)機(jī),一共16個(gè)狀態(tài)
    reg [3:0] state, next;
    localparam IDLE    = 0,        // 空閑
               START1  = 1,        // 起始位1
               DEV_W   = 2,        // 7bit設(shè)備地址 + 1bit寫命令(低電平)
               ACK1    = 3,        // 設(shè)備地址應(yīng)答
               ADDR_H  = 4,        // 地址高字節(jié)
               ACK2    = 5,        // 地址高字節(jié)應(yīng)答
               ADDR_L  = 6,        // 地址低字節(jié)
               ACK3    = 7,        // 地址低字節(jié)應(yīng)答
               WR_DATA = 8,        // 寫數(shù)據(jù)
               ACK4    = 9,        // 寫數(shù)據(jù)應(yīng)答
               START2  = 10,       // 起始位2
               DEV_R   = 11,       // 7bit設(shè)備地址 + 1bit讀命令(高電平)
               ACK5    = 12,       // 設(shè)備地址應(yīng)答
               RD_DATA = 13,       // 讀數(shù)據(jù)
               NO_ACK  = 14,       // 無(wú)應(yīng)答
               STOP    = 15;       // 停止位
    // 讀寫狀態(tài)寄存,0為寫,1為讀
    reg is_read;
    // wr_data寄存
    reg [7:0] wr_data_r;
    // addr寄存
    reg [7:0] addr_h, addr_l;
    // 讀數(shù)據(jù)寄存器
    reg [7:0] rd_data_r;
    // 應(yīng)答信號(hào)寄存
    reg ack_r;
    // scl計(jì)數(shù)器,400khz則為125時(shí)鐘周期,但125不能被4整除,所以選擇128,產(chǎn)生的scl頻率約為390khz
    reg [6:0] scl_cnt;
    // bit計(jì)數(shù)器
    reg [2:0] bit_cnt;
    // 內(nèi)部sda
    reg sda_r;
    // sda三態(tài)門輸出使能
    wire sda_oe;
    // sda三態(tài)門
    assign sda = sda_oe ? sda_r : 1'bz;
    // scl計(jì)數(shù)器滿,127,即7'b1111111
    wire scl_cnt_end = &scl_cnt;
    // 1字節(jié)結(jié)束,當(dāng)scl_cnt == 7'b1111111 且 bit_cnt == 3'b111時(shí),表示1byte結(jié)束
    wire byte_end = scl_cnt_end & (&bit_cnt);
//---------------------------------輸入信號(hào)寄存---------------------------------
    // 地址寄存
    always @(posedge clk, negedge rst_n) begin
        if(!rst_n)
            {addr_h, addr_l} <= 0;
        else if(state == IDLE && (rd_req | wr_req))
            {addr_h, addr_l} <= addr;
    end
    // 寫數(shù)據(jù)寄存
    always @(posedge clk, negedge rst_n) begin
        if(!rst_n)
            wr_data_r <= 0;
        else if(state == IDLE & wr_req)
            wr_data_r <= wr_data;
    end
//-----------------------------------------------------------------------------
    // 讀狀態(tài)寄存,讀優(yōu)先,不在讀狀態(tài)即為寫狀態(tài)
    always @(posedge clk, negedge rst_n) begin
        if(!rst_n)
            is_read <= 1'b0;
        else if(state == IDLE)
            is_read <= rd_req;
    end
    // 狀態(tài)機(jī)
    always @(posedge clk, negedge rst_n) begin
        if(!rst_n)
            state <= IDLE;
        else
            state <= next;
    end
    always @(*) begin
        case(state)
            IDLE   : next = (rd_req | wr_req) ? START1 : IDLE;
            START1 : next = scl_cnt_end ? DEV_W : START1;
            DEV_W  : next = byte_end ? ACK1 : DEV_W;
            ACK1   : next = scl_cnt_end ? (~ack_r ? (ADDR_WIDTH == 2 ? ADDR_H : ADDR_L) : IDLE) : ACK1;
            ADDR_H : next = byte_end ? ACK2 : ADDR_H;
            ACK2   : next = scl_cnt_end ? (~ack_r ? ADDR_L : IDLE) : ACK2;
            ADDR_L : next = byte_end ? ACK3 : ADDR_L;
            ACK3   : next = scl_cnt_end ? (~ack_r ? (is_read ? START2 : WR_DATA) : IDLE) : ACK3;
            WR_DATA: next = byte_end ? ACK4 : WR_DATA;
            ACK4   : next = scl_cnt_end ? (~ack_r ? STOP : IDLE) : ACK4;
            START2 : next = scl_cnt_end ? DEV_R : START2;
            DEV_R  : next = byte_end ? ACK5 : DEV_R;
            ACK5   : next = scl_cnt_end ? (~ack_r ? RD_DATA : IDLE) : ACK5;
            RD_DATA: next = byte_end ? NO_ACK : RD_DATA;
            NO_ACK : next = scl_cnt_end ? STOP : NO_ACK;
            STOP   : next = scl_cnt_end ? IDLE : STOP;
            default: next = IDLE;
        endcase
    end
    // scl計(jì)數(shù)器
    always @(posedge clk, negedge rst_n) begin
        if(!rst_n)
            scl_cnt <= 0;
        else if(state != IDLE)
            scl_cnt <= scl_cnt + 7'd1;
    end
    // bit計(jì)數(shù)器
    always @(posedge clk, negedge rst_n) begin
        if(!rst_n)
            bit_cnt <= 0;
        else if(state == DEV_W || state == ADDR_H || state == ADDR_L || state == WR_DATA || state == DEV_R || state == RD_DATA) begin
            if(scl_cnt_end)
                bit_cnt <= bit_cnt + 3'd1;
        end
    end
    // scl 每個(gè)周期持續(xù)128系統(tǒng)時(shí)鐘周期,scl_cnt[6:5]變化規(guī)律為00-01-10-11,所以可以用于調(diào)整scl電平,保證sda在scl低電平中間進(jìn)行跳轉(zhuǎn)
    always @(*) begin
        case(state)
            IDLE   : scl = 1'b1;
            // 與非 1110
            // ___
            //    |_
            START1 : scl = ~(scl_cnt[6] & scl_cnt[5]);      
            // 或 0111
            //   ___
            // _|
            STOP   : scl = scl_cnt[6] | scl_cnt[5];
            // 異或 0110
            //   __
            // _|  |_
            default: scl = scl_cnt[6] ^ scl_cnt[5];
        endcase
    end
    // sda_oe 在應(yīng)答狀態(tài)和讀數(shù)據(jù)狀態(tài),允許sda輸入
    assign sda_oe = ~((state == ACK1) || (state == ACK2) || (state == ACK3) || (state == ACK4) || (state == ACK5) || (state == RD_DATA));
    // sda_r
    always @(*) begin
        case(state)
            START1, START2: sda_r = ~scl_cnt[6];            // 下降沿
            DEV_W         : sda_r = DEV_ADDR_W[~bit_cnt];   // 7bit設(shè)備地址 + 1bit寫命令
            ADDR_H        : sda_r = addr_h[~bit_cnt];       // 地址高字節(jié)
            ADDR_L        : sda_r = addr_l[~bit_cnt];       // 地址低字節(jié)
            WR_DATA       : sda_r = wr_data_r[~bit_cnt];    // 寫數(shù)據(jù)
            DEV_R         : sda_r = DEV_ADDR_R[~bit_cnt];   // 7bit設(shè)備地址 + 1bit讀命令
            STOP          : sda_r = scl_cnt[6];             // 上升沿
            default       : sda_r = 1'b1;
        endcase
    end
    // 采樣應(yīng)答信號(hào)
    always @(posedge clk, negedge rst_n) begin
        if(!rst_n)
            ack_r <= 1'b1;
        else if((state == ACK1) || (state == ACK2) || (state == ACK3) || (state == ACK4) || (state == ACK5)) begin
            if(scl_cnt == 7'b0111111)  // 在scl高電平中間進(jìn)行采樣
                ack_r <= sda;
        end else
            ack_r <= 1'b1;
    end
    // 讀數(shù)據(jù)
    always @(posedge clk, negedge rst_n) begin
        if(!rst_n)
            rd_data_r <= 0;
        else if(state == RD_DATA && scl_cnt == 7'b0111111)// 在scl高電平中間進(jìn)行采樣
            rd_data_r <= {rd_data_r[6:0], sda};
    end
    // 輸出讀數(shù)據(jù)
    always @(posedge clk, negedge rst_n) begin
        if(!rst_n) begin
            rd_valid <= 1'b0;
            rd_data  <= 8'h00;
        end else if(is_read && state == STOP && scl_cnt_end) begin
            rd_valid <= 1'b1;
            rd_data  <= rd_data_r;
        end else begin
            rd_valid <= 1'b0;
            rd_data  <= 8'h00;
        end
    end
endmodule

二進(jìn)制轉(zhuǎn)bcd碼模塊

verilog實(shí)現(xiàn)加3移位法-二進(jìn)制轉(zhuǎn)BCD碼

數(shù)碼管驅(qū)動(dòng)模塊

FPGA驅(qū)動(dòng)74HC595實(shí)現(xiàn)數(shù)碼管動(dòng)態(tài)顯示文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-574833.html

到了這里,關(guān)于FPGA實(shí)現(xiàn)IIC驅(qū)動(dòng)環(huán)境光、距離傳感器的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • ESP32-硬件IIC讀取溫濕度傳感器SHT30

    ESP32-硬件IIC讀取溫濕度傳感器SHT30

    esp32 使用硬件I2C讀取溫濕度傳感器SHT30,例程基于 EDP-IDF-4.4.X 的I2C Simple Example 例程修改 打開 VSCODE ,通過(guò) 查看-- 命令面板(快捷鍵Ctrl+Shift+P),打開 ESP-IDF 的例程后,選擇 i2c_simple 例程,點(diǎn)擊 Create project using example i2c_simple,選擇自己要存儲(chǔ)的目錄。【PS:工程的目錄不要有中文路

    2024年02月02日
    瀏覽(52)
  • IIC學(xué)習(xí)之SHT30溫濕度傳感器(基于STM32)

    IIC學(xué)習(xí)之SHT30溫濕度傳感器(基于STM32)

    附上SHT30資料和邏輯分析儀源文件,點(diǎn)擊下載 關(guān)于IIC的介紹網(wǎng)上已經(jīng)非常詳盡,這里只說(shuō)重點(diǎn): 雙線(SDA,SCL),半雙工 采用主從結(jié)構(gòu),支持一主多從,通過(guò)地址尋址,每個(gè)I2C設(shè)備都有唯一的7位或10位地址,還有1bit選擇讀寫(0為寫,1為讀) 速率較低,I2C總線支持多種通信

    2024年02月01日
    瀏覽(27)
  • arm學(xué)習(xí)-IIC總線連接溫濕度傳感器測(cè)量溫濕度(si7006)

    arm學(xué)習(xí)-IIC總線連接溫濕度傳感器測(cè)量溫濕度(si7006)

    main.c iic.h si7006.h iic.c si7006.c

    2024年02月13日
    瀏覽(32)
  • MFC+Modbus-Tcp協(xié)議實(shí)現(xiàn)溫濕度傳感器采集
二、libmodbus驅(qū)動(dòng)庫(kù)

    MFC+Modbus-Tcp協(xié)議實(shí)現(xiàn)溫濕度傳感器采集 二、libmodbus驅(qū)動(dòng)庫(kù)

    本文簡(jiǎn)單介紹 MFC 使用 Modbus -Tcp通信實(shí)現(xiàn) RS-WS-ETH-6 系列 MODBUSTCP 型溫濕度傳感器采集數(shù)據(jù)。 ?一文看懂Modbus協(xié)議:一文看懂Modbus協(xié)議 ?libmodbus驅(qū)動(dòng)庫(kù)的使用:Modbus驅(qū)動(dòng)庫(kù)—libmodbus驅(qū)動(dòng)庫(kù)的使用_whik1194的博客-CSDN博客_libmodbus ?modbus 中文手冊(cè): libmodbus官方手冊(cè)中文翻譯_躍動(dòng)的風(fēng)

    2024年02月02日
    瀏覽(75)
  • Arduino驅(qū)動(dòng)MiCS-4514氣體傳感器(氣體傳感器篇)

    目錄 1、傳感器特性 2、控制器和傳感器連線圖 3、驅(qū)動(dòng)程序

    2024年02月11日
    瀏覽(25)
  • ESP32應(yīng)用教程(1)— VL53L3CX距離傳感器

    ESP32應(yīng)用教程(1)— VL53L3CX距離傳感器

    文章目錄 前言 1 產(chǎn)品概述 1.1 技術(shù)規(guī)格 1.2?系統(tǒng)框圖 1.3?設(shè)備引腳分布 2 工作流程 2.1?系統(tǒng)功能描述 2.2?狀態(tài)機(jī)描述 2.3?測(cè)距模式說(shuō)明 3?控制接口 3.1 設(shè)備地址 3.2?I2C寫1個(gè)字節(jié)數(shù)據(jù) 3.3?I2C讀1個(gè)字節(jié)數(shù)據(jù) 3.4?I2C寫多個(gè)字節(jié)數(shù)據(jù) 3.5?I2C讀多個(gè)字節(jié)數(shù)據(jù) 3.6?I2C 接口 - 參考寄存

    2024年02月11日
    瀏覽(65)
  • Arduino驅(qū)動(dòng)VEML6075紫外線傳感器(光照傳感器篇)

    目錄 1、傳感器特性? 2、控制器和傳感器連線圖 3、驅(qū)動(dòng)程序 VEML6075傳感器能夠?qū)⑷展獾腢V光強(qiáng)度轉(zhuǎn)換成數(shù)字信號(hào),準(zhǔn)確地測(cè)量信號(hào)強(qiáng)度。即使長(zhǎng)時(shí)間暴露在陽(yáng)光的紫外輻射下,VEML6075紫外線傳感器依然具有良好的性能,在-40℃~+85℃溫度范圍內(nèi)具有很高的溫度補(bǔ)償穩(wěn)定性。VE

    2024年02月09日
    瀏覽(19)
  • ARM開發(fā),stm32mp157a-A7核IIC實(shí)驗(yàn)(采集溫濕度傳感器值)

    ARM開發(fā),stm32mp157a-A7核IIC實(shí)驗(yàn)(采集溫濕度傳感器值)

    ---iic.h封裝時(shí)序協(xié)議頭文件--- ---iic.c封裝時(shí)序函數(shù)實(shí)現(xiàn)--- ---si7006.h讀取溫濕度頭文件--- ---si7006.c讀取溫濕度函數(shù)--- ---main.c主函數(shù)測(cè)試---

    2024年02月11日
    瀏覽(50)
  • Arduino驅(qū)動(dòng)MQ9模擬一氧化碳?xì)怏w傳感器(氣體傳感器篇)

    目錄 1、傳感器特性 2、硬件原理圖 3、控制器和傳感器連線圖 4、驅(qū)動(dòng)程序 MQ-9是一款對(duì)一氧化碳、甲烷和液化石油氣非常敏感的傳感器。它可以被應(yīng)用于許多CO等可燃?xì)馓綔y(cè)的場(chǎng)景。通過(guò)與Arduino相結(jié)合,用戶可以制作出許多低成本的探測(cè)方案。

    2024年02月14日
    瀏覽(30)
  • 土壤濕度傳感器的原理及驅(qū)動(dòng)

    土壤濕度傳感器的原理及驅(qū)動(dòng)

    一、介紹 1.表面采用鍍鎳處理,有加寬的感應(yīng)面積,可以提高導(dǎo)電性能,防止接觸土壤容易生銹的問(wèn)題,延長(zhǎng)使用壽命; 2.可以寬范圍控制土壤的濕度,通過(guò)電位器調(diào)節(jié)控制相應(yīng)閥值,濕度低于設(shè)定值時(shí),DO輸出高電平,高于設(shè)定值時(shí),DO輸出低電平;3.比較器采用LM393芯片,工作

    2024年02月08日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包