HT82V38应用笔记

1.数据手册-介绍

  1. 特性
    在这里插入图片描述
  2. 通用描述
    在这里插入图片描述
  • SHA 是sample and hold amplifier 的缩写。
    是最常用的AD转换方式之一。简单讲,就是采样后保持一段时间再采样,可以在保持的时间内做AD转换,防止数据被新的输入破坏,但这种方法并不能区分噪声和信号。
  • CDS是correlated double sampling的缩写,是一种降噪AD转换方式。
    每次采样都要把输入和参考电压做减法,相当于是两次采样一次输出。在图形这里主要用于降噪点。SLOAD应该是不接也可以用的,至少传个数据没问题。估计某个标准里规定了三线制的IIC,但是最常用的还是两线制的。
  1. 框图
    在这里插入图片描述
    HT82V26是一个完整的CCD成像应用的模拟信号处理器。它采用了3通道架构设计,来样和条件下,三线性彩色CCD阵列的输出。每个通道包括一个输入钳位,相关双采样(CDS)的失调DAC和可编程增益放大器(PGA),以及一个高性能的16位A / D转换器。对框图能进行,分块分析
  2. 引脚分配和说明
    在这里插入图片描述在这里插入图片描述
  3. 时序规范
  4. 内部寄存器
    在这里插入图片描述
    HT82V38共有8个8 bit的内部寄存器,各寄存器的每一位控制不同的内容。其中,配置寄存器控制芯片的工作模式和偏置电压。MUX寄存器控制采样通道的顺序。PGA寄存器和补偿寄存器各有3个,分别对红、绿、蓝3个通道做增益控制和信号补偿。设计中,由FPGA提供三线串行接口的时序及数据。
  • 寄存器的设置
    1.配置寄存器
    在这里插入图片描述
    配置寄存器控制HT82V38的工作模式和偏置电平。

  • D6位控制参考钳位电压。将该位置低时,OFFSET会变为高阻态Z,从而可以从外部电源驱动OFFSET。

  • D5将HT82V38配置为3通道(高)操作模式。

  • D4设置为高电平将启用CDS操作模式,而将此位设置为低电平将启用SHA操作模式。

  • D2控制掉电模式。将D2位设置为高电平可使HT82V38进入低功耗睡眠模式。HT82V38处于掉电状态时,所有寄存器的内容都将保留。

  • D1位控制满量程输入范围。D1 = 1,满量程输入范围为2V,D1 = 0满量程输入范围为1.6V。

  • D0位控制HT82V38的输出模式。 将D0位设置为高电平将启用单字节输出模式,该模式下仅输出16位ADC的8个MSB。 如果D0位设置为低电平,则16位ADC输出将多路复用为两个字节。

  • 设定值为 0011 00010
    2.多路复用寄存器设置
    在这里插入图片描述
    MUX寄存器控制HT82V38中的采样通道顺序。

  • 在三通道模式下使用时,使用D7位。 将D7位设置为高电平将对MUX进行排序,以首先对红色通道进行采样,然后对绿色通道进行采样,然后对蓝色通道进行采样。在这种模式下,CDSCLK2的上升沿总是将MUX复位为首先对红色通道进行采样(请参见时序图)。 当位D7设置为低电平时,通道顺序颠倒为蓝色第一,绿色第二和红色第三。 CDSCLK2上升沿脉冲将始终使MUX复位,以首先对蓝色通道进行采样。

  • 在1通道模式下工作时,使用D6,D5和D4位。
    位D6设置为高电平以对红色通道进行采样;位D5设置为高电平以对绿色通道进行采样。 D4位设置为高电平以对蓝色通道进行采样。

  • 在1通道模式下,MUX将保持静止。 位D3至位D0控制0.45V至2.7V的4位DAC钳位电压。

  • 设定值 01000 xxxx
    3.可编程增益放大器的配置寄存器
    在这里插入图片描述

  • 三个PGA寄存器,分别对红色,绿色和蓝色通道中的增益进行编程。
    每个寄存器中的D8,D7和D6位必须设置为低电平,而D5至D0位控制64个增益范围。

  • PGA寄存器的编码是直接二进制的,全零字对应于最小增益设置(1x),全字对应于最大增益设置(5.85x)。

  • PGA的增益范围为1x(0dB)至5.85x(15.3dB),可调64级。 该图显示了PGA增益与PGA寄存器代码的关系。尽管增益曲线的dB近似呈线性,但V / V的增益与寄存器代码成非线性比例变化,根据以下方程式:
    在这里插入图片描述

    4.三个通道的偏置寄存器
    在这里插入图片描述
    有三个偏置寄存器,用于分别对红色,绿色和蓝色通道中的偏移进行编程。 D8至D0位以512为增量控制250mV至+ 250mV的偏移范围。偏移寄存器的编码为符号幅度,其中D8为符号位。 表格显示了偏移范围与位D8至D0的关系。

  1. Timing Diagrams 时序图

    • 寄存器通过串行接口进行配置
      串行接口时序说明
      在这里插入图片描述
      串行接口时序图
      在这里插入图片描述
      首先将SLOAD拉低,内部寄存器设置就和IIC很类似了,注意时序中的最小时间
    1. 时序特性
      在这里插入图片描述
      您前面接的是什么传感器?是CCD的还是CIS的?传感器输出的模拟波形是什么样子的?您截得这个图是CCD信号,需要用CDS mode,而CIS是需要SHA mode。不同mode的timing是不一样的。先核对一下传感器的输出类型。
      三通道SHA模式时序图
      在这里插入图片描述
      单通道SHA模式时序图
      在这里插入图片描述

2. 驱动程序

  • HT82V38.c
#include "ht82v38.h"
#include "user_config.h"
#include "cis.h"
//
u16 Config,MUX,PGAR,PGAG,PGAB,OffsetR,OffsetG,OffsetB;
//	 
//HT82V38的初始化
void HT82V38_Init(void)
{	 
/*
*	PG12	HT82V38 SDATA
*	PG13	HT82V38 SCLK
*	PG14	HT82V38 SLOAD
*/

	RCC->AHB1ENR|=1<<6;    	//使能PORTG时钟	   
	GPIO_Set(GPIOG,7<<12,GPIO_MODE_OUT,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU);	//PG12-14推挽输出 
	SCLK=0;
	SLOAD=1;
}   



void SetSDATAin(void)
{
	GPIO_Set(GPIOG,(1<<12),GPIO_MODE_IN,0,0,GPIO_PUPD_PU);	//PG12设置上拉输入SDATA
}


void SetSDATAout(void)
{
	GPIO_Set(GPIOG,(1<<12),GPIO_MODE_OUT,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU); //PG12设置输出SDATA
}

void WriteADC(u16 addr,u16 data)
{
	u16 i;
	addr=addr<<12;
	data=data+addr;
	SLOAD=0;
	for(i=0;i<16;i++)
	{
		if(data&0x8000)
			SDATA=1;
		else
			SDATA=0;
		data=data<<1;
    delayus(4);
	  SCLK=1;
    delayus(4);
	  SCLK=0;
	}
	SLOAD=1;
}

u16 ReadADC(u16 addr)
{
	u16 i,data;
	addr=addr<<12;
	addr=addr+0x8000;
	data=0;
	SLOAD=0;
	for(i=0;i<7;i++)
	{
		if(addr&0x8000)
			SDATA=1;
		else
			SDATA=0;
		addr=addr<<1;
    delayus(2);
	  SCLK=1;
    delayus(2);
	  SCLK=0;
	}
	SetSDATAin();
	for(i=7;i<16;i++)
	{
		data=data<<1;
    delayus(2);
		if(SDATAin)
			data=data+1;
	  SCLK=1;
    delayus(2);
	  SCLK=0;
	}
	SetSDATAout();
	SLOAD=1;
	return data;
}

void SetHT82v38(void)
{
	WriteADC(ConfigAddr,Config);
	WriteADC(MUXAddr,MUX);
	WriteADC(RedPGAAddr,PGAR);
	WriteADC(GreenPGAAddr,PGAG);
	WriteADC(BluePGAAddr,PGAB);
	WriteADC(RedOffsetAddr,OffsetR);
	WriteADC(GreenOffsetAddr,OffsetG);
	WriteADC(BlueOffsetAddr,OffsetB);
}
  • HT82V38.h
#ifndef __HT82V38_H
#define __NT82V38_H
#include "user_config.h"
//	
				    
//ADC addr
#define ConfigAddr             0
#define MUXAddr                1
#define RedPGAAddr             2
#define GreenPGAAddr           3
#define BluePGAAddr            4
#define RedOffsetAddr          5
#define GreenOffsetAddr        6
#define BlueOffsetAddr         7
//端口定义
#define SDATAin   PGin(12)	   // HT82V38 SDATA

#define SDATA   PGout(12)	   // HT82V38 SDATA
#define SCLK    PGout(13)	   // HT82V38 SCLK
#define SLOAD   PGout(14)	   // HT82V38 SLOAD

extern u16 Config,MUX,PGAR,PGAG,PGAB,OffsetR,OffsetG,OffsetB;	  	    													  
void HT82V38_Init(void);			 //初始化HT82V38
void SetSDATAin(void);
void SetSDATAout(void);
void WriteADC(u16 addr,u16 data);
u16 ReadADC(u16 addr);
void SetHT82v38(void);
#endif
  • 4
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AIOT技术栈

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值