3781|13

9803

帖子

24

TA的资源

版主

楼主
 

NV2+GW1N+STM32红外热成像数据显示 [复制链接]

 
  本帖最后由 littleshrimp 于 2022-1-10 12:20 编辑

为了让热成像的数据能在STM32上显示,上次计划使用GW1N将DS90C124的并行数据转成SPI串行数据热成像数据采集的GW1N DS90C124到SPI的并串转换,因为是使用飞线连接50MHz的时钟频率STM32那边没法正确读取,这个问题需要将FPGA芯片直接和STM32画在一个板子上才以解决。当然上次的程序在FIFO处理上也有些问题,没有对FIFO为空时的数据做处理,使得收到的数据会有大量重复,不过这不是功能不能实现的主因。

目前情况SPI的方式不行还有DCMI的方式可用,DCMI是STM32的摄像头接口,使用8bit并行数据。使用GW1N可以非常方便的将DS90C124的并行数据转换成对应的8bit摄像头数据。这里为了简化STM32部分的编程我直用GW1N把14bit的热像数据做了处理,使它直接输出8bit/pixel的数据,STM32可以直接显示灰度数据。为了能显示颜色我又在STM32上做了CLUT(颜色查找表)这样就可以为黑白数据增加相应色彩的调色板功能。

 

FPGA部分的代码也比较简单,只需要对vsync和hsync做相应处理,然后再把14bit的数据做相应的剪裁即可,不过这里的offset是固定的,如果GW1N板子上有轻触按键就可以使用板子上的按键控制动态调节“亮度”。

module ds90c124(
    input rst_n,
    input rclk, 
    input wire[15:0]rout,
    output reg vsync,
    output wire hsync,
    output wire[7:0] data  
);

    reg hsync_reg,hsync_reg1;
    assign hsync = ~hsync_reg;
    reg [7:0]data_reg;
    assign data = data_reg;
    reg vsync_reg,vsync_reg1;
    reg [13:0]offset = 14'd3000;
    reg [13:0]temp = 14'd0;

    reg[8:0]cnt = 9'd0;
    //rout[15] = 1时行起始
    //rout[14] = rout[15] = 1时,1时为帧起始
    //rout[9]  = rout[15] = 1时,1时为数据无效/0时数据有效

    reg data_valid,data_valid1,data_valid2; 

    reg[4:0]vsync_cnt;
    always@(posedge rclk) begin
        if(~rst_n) begin
            vsync_cnt <= 1'b0;
        end else begin
            if(rout[15] & rout[14])begin
                vsync_cnt <= 1'b0;
            end else if(vsync_cnt < 5)begin
                vsync_cnt <= vsync_cnt + 1'b1;
            end
        end
    end
    always@(posedge rclk) begin
        if(~rst_n) begin
            vsync <= 1'b0;
        end else begin
            if(rout[15] & rout[14])begin
                vsync <= 1'b1;
            end else if(vsync_cnt == 3)begin
                vsync <= 1'b0;
            end
        end
    end

    always@(posedge rclk) begin
        if(~rst_n) begin
            data_valid <= 1'b0;
            data_valid1 <= 1'b0;
        end else begin
            if(rout[15] == 1'b1 && rout[14] == 1'b0 && rout[9] == 1'b0) begin
                data_valid1 <= 1'b1;
            end else if(rout[15] == 1'b1 && (rout[14] == 1'b1 || rout[9] == 1'b1))begin
                data_valid <= 1'b0;
                data_valid1 <= 1'b0;
                data_valid2 <= 1'b0;
            end else begin            
                data_valid2 <= data_valid1;
                data_valid <= data_valid2;
            end
        end
    end

    always@(posedge rclk) begin
        if(~rst_n) begin
            vsync_reg <= 1'b0;
            vsync_reg1 <= 1'b0;
        end else begin
            if(rout[15] == 1'b1 && rout[14] == 1'b1) begin
                vsync_reg1 <= 1'b1;
            end else if (data_valid1 == 1'b1)begin
                vsync_reg1 <= 1'b0;
                vsync_reg <= 1'b0;
            end
            vsync_reg <= vsync_reg1;
        end
    end

    always@(posedge rclk) begin
        if(~rst_n) begin
            data_reg <= 8'b0;
        end else begin
            if(rout[12:1] > offset)begin
                if(rout[12:1] - offset > 8'd255)
                    data_reg <= 8'd255;
                else
                    data_reg <= rout[12:1] - offset;
            end else begin
                data_reg <= 8'b0;
            end
        end
    end

    always@(posedge rclk) begin
        if(~rst_n) begin
            cnt <= 9'b0;
        end else begin
            if(cnt == 324 || rout[15] == 1'b1)begin
                cnt <= 9'b0;
            end else begin                
                cnt <= cnt + 1'b1;
            end
        end
    end

    always@(posedge rclk) begin
        if(~rst_n) begin
            hsync_reg <= 1'b0;
            hsync_reg1 <= 1'b0;
        end else begin
            if(rout[15] == 1'b1 && rout[14] == 1'b0 && rout[9] == 1'b0) begin
                hsync_reg1 <= 1'b1;
            end else if(cnt == 324)begin
                hsync_reg <= 1'b0;
                hsync_reg1 <= 1'b0;
            end else begin            
                hsync_reg <= hsync_reg1;
            end
        end
    end
endmodule

TOP模块主要在前期调试时生成一些测试代码,调好后把测试代码删除基本就没什么内容了。

module top(
    input rst_n,
    input rclk,
    input [15:0]rout,
    output pixck,
    output vsync,
    output hsync,
    output [7:0]data  
);
    ds90c124 ds90c124_ins(
    .rst_n(rst_n),
    .rclk(rclk), 
    .rout(rout),
    .vsync(vsync),
    .hsync(hsync),
    .data(data)  
    );
    assign pixck = rclk;

endmodule

因为这个STM32H7的显示屏分辨率比较高(800x472),热成像是324*256没做放大处理看起来有点小。

 

板子上还是使用了大量的飞线,因为速率比较低(5MHz)显示324*256 30fps数据没受影响。

STM32的DCMI使用的是30*0.5的FPC接口,我在网上买了一个FPC到2.54的转接板这样就可以将GW1N和STM32连接。

我这几天在外地没带示波器这类的工具过来,实际测试时遇到一个问花了很长时间才找到问题,原因是商家赠送了一个小锡珠正好夹在2条数据线中间,造成短路。

 

 现在不确定GW1N的芯片在哪能买到,如果能买到芯片画个板玩起来就更方便了。

 

 

最新回复

是的,很难上手,我不是做这个行业的,仅仅是喜欢捣鼓热成像,所以要求助您,麻烦私信一下,拜托了   详情 回复 发表于 2024-7-17 19:07
点赞 关注(2)
个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 
 

回复
举报

7671

帖子

2

TA的资源

五彩晶圆(高级)

沙发
 

前面不久记得虾哥还在琢磨FPGA入门,现在虾哥FPGA已经开始搞事情了?哈哈,厉害厉害!

点评

想玩点花样FPGA是躲不过去的坎,只可惜入门时不知道高云FPGA,要不可以省下很多时间。  详情 回复 发表于 2022-1-10 15:18
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 
 

回复

9803

帖子

24

TA的资源

版主

板凳
 
freebsder 发表于 2022-1-10 14:55 前面不久记得虾哥还在琢磨FPGA入门,现在虾哥FPGA已经开始搞事情了?哈哈,厉害厉害!

想玩点花样FPGA是躲不过去的坎,只可惜入门时不知道高云FPGA,要不可以省下很多时间。

点评

复杂系统入门确实不如简化系统直接。这个就像一来就折腾Linux内核,往往不容易摸到门。  详情 回复 发表于 2022-1-10 15:27
 
 
 

回复

7671

帖子

2

TA的资源

五彩晶圆(高级)

4
 
littleshrimp 发表于 2022-1-10 15:18 想玩点花样FPGA是躲不过去的坎,只可惜入门时不知道高云FPGA,要不可以省下很多时间。

复杂系统入门确实不如简化系统直接。这个就像一来就折腾Linux内核,往往不容易摸到门。

个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 
 

回复

1976

帖子

0

TA的资源

五彩晶圆(初级)

5
 

版主,你的热成像相机哪里买到的,我刚去闲鱼上搜索了一下宝马夜视摄像头,几十到几千的都有,淘宝上基本都是几千上万,这里面有什么玄机?

 
 
 

回复

9803

帖子

24

TA的资源

版主

6
 
bobde163 发表于 2022-5-25 13:49 版主,你的热成像相机哪里买到的,我刚去闲鱼上搜索了一下宝马夜视摄像头,几十到几千的都有,淘宝上基本都 ...

正常情况下,某鱼的价格都要2千左右,也有1千多一些的。有时会碰到几百块那种损坏严重的。

个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(中级)

7
 

我是一个完全小白,之前完全不懂这类电子设备,但花了些时间,虽然我大概明白了一些原理,但具体实操还是一头雾水,比如解密过程中stm32是如何发出命令给can,eevblog我是看不太懂他们说的。这个帖子里面的开发板实在是太大了,我想做成便携手持,我对您在b站发布的那块板子很感兴趣,可否能出售给我?即使是pcb空板都好。谢谢

点评

在那个帖子的回帖里有说明 基本上就是获取随机数 用密钥生成加密签名后返回给相机  详情 回复 发表于 2024-1-20 12:47
 
 
 

回复

9803

帖子

24

TA的资源

版主

8
 
litego 发表于 2024-1-19 15:11 我是一个完全小白,之前完全不懂这类电子设备,但花了些时间,虽然我大概明白了一些原理,但具体实操还是一 ...

在那个帖子的回帖里有说明 基本上就是获取随机数 用密钥生成加密签名后返回给相机

个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(中级)

9
 
littleshrimp 发表于 2024-1-20 12:47 在那个帖子的回帖里有说明 基本上就是获取随机数 用密钥生成加密签名后返回给相机

   好的,谢谢回答,另外我目前有一些疑问:

1.我不敢确定我的nv2是不是正常的,目前没有解密的情况下接入12v,电流表显示111毫安,can之间没有看到什么波形,或许是我的示波器不好,lvds有一个0.4v左右的电平在做周期,万用表测出位1.2v左右,请问这是否是正常的?

2.esp32可以控制can来解密是吧?还是stm32或者树莓pico更容易实现?

3.下面是我根据你的照片预估要准备的配件

部件包括

    1.ttl转can

    2.usb转ttl调试器

    3..ds90c124自制解串板

    4.tang primer 20k(帖子里高云的开发板太大了)

以上部件应该可以将nv2输出图像吧?

不好意思打扰您,还是希望有偿能得到你b站展示的自制板,无元件空板都可以,一张板子搞定。

 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(中级)

10
 

亲爱的版主,跪求手持nv3输出原理图,pm我啊

点评

NV3需要用解码芯片读数据  详情 回复 发表于 2024-7-16 22:08
 
 
 

回复

9803

帖子

24

TA的资源

版主

11
 
litego 发表于 2024-7-16 13:43 亲爱的版主,跪求手持nv3输出原理图,pm我啊

NV3需要用解码芯片读数据


点评

我了解的应该是通过max9260解串然后用fpga采集再输出,是这样子吧?但我不是这个行业的,我无法理解和设计这些电路和周边电路的设计,麻烦您指导下哈,能有原理图就最好啦。  详情 回复 发表于 2024-7-17 09:06
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(中级)

12
 
littleshrimp 发表于 2024-7-16 22:08 NV3需要用解码芯片读数据

我了解的应该是通过max9260解串然后用fpga采集再输出,是这样子吧?但我不是这个行业的,我无法理解和设计这些电路和周边电路的设计,麻烦您指导下哈,能有原理图就最好啦。

点评

电路方面不复杂 原理你可以读max9260的数据手册了解 然后是如何通过FPGA读取、解析和显示数据,这部分没有一定经验很难上手。  详情 回复 发表于 2024-7-17 16:55
 
 
 

回复

9803

帖子

24

TA的资源

版主

13
 
litego 发表于 2024-7-17 09:06 我了解的应该是通过max9260解串然后用fpga采集再输出,是这样子吧?但我不是这个行业的,我无法理解和设 ...

电路方面不复杂 原理你可以读max9260的数据手册了解 然后是如何通过FPGA读取、解析和显示数据,这部分没有一定经验很难上手。


点评

是的,很难上手,我不是做这个行业的,仅仅是喜欢捣鼓热成像,所以要求助您,麻烦私信一下,拜托了  详情 回复 发表于 2024-7-17 19:07
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(中级)

14
 
littleshrimp 发表于 2024-7-17 16:55 电路方面不复杂 原理你可以读max9260的数据手册了解 然后是如何通过FPGA读取、解析和显示数据 ...

是的,很难上手,我不是做这个行业的,仅仅是喜欢捣鼓热成像,所以要求助您,麻烦私信一下,拜托了

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表