LED驱动灯珠驱动(ET6934、DP5125D)

       作为人机交互最简单的方式,通过LED灯珠将信息显示出来无疑是仪器仪表行业最常用且成本低廉的方式。

      这里给大家介绍下我常用的两颗驱动芯片ET6934和DP5125D,芯片资料网上一搜一大把,找不到的小伙伴可以私信我。

     首先介绍下ET6934,这是一款恒流LED驱动控制电路,内部集成MCU数字接口、数据锁存器、LED恒流驱动模块,最多可以驱动8(段)*16(位)即128个LED灯珠。内部有专门的寄存器可以控制输出电流,可以非常方便的控制LED灯的亮度。数据传输通过I2C,控制起来非常方便。这颗芯片最牛逼的地方还是在它输出的电流你设定好了他就不会变,不受点亮的LED灯数量和输入电压变化而受影响。

    典型应用电路:

     硬件连接还是很简单的,I2C总线接上拉电阻就行,下面看下程序部分。

   软件模拟I2C的程序相信大家都很熟悉了,单片机入门最先接触的就是他和串口。分3个信号:

起始信号:

  

/*****************************************************
*函数名称:void I2cStart()
*函数功能:启动i2c
*入口参数:void
*出口参数:void
*****************************************************/
void I2cStart(void)
{
	I2C_SCL=1;	//总线空闲时,SCL,SDA为高电平
	I2C_SDA=1;
	_nop_(); 	//SCL高电平保持	4.7US,拉低SDA,产生起始信号
  _nop_();
  _nop_();
  _nop_();
	I2C_SDA=0;
	_nop_();
  _nop_();
  _nop_();
	_nop_();
  _nop_();
  _nop_();
	_nop_();
  _nop_();
  _nop_();
	_nop_();
  _nop_();
  _nop_();	
	I2C_SCL=0;
  _nop_(); 
}

   应答信号:

 

/*****************************************************
*函数名称:bit I2cRecAck()
*函数功能:检查应答信号
*入口参数:void
*出口参数:ask
*****************************************************/

void I2cRecAck(void)
{
	I2C_SDA=1; //主机主动释放SDA,为读ASK做准备
  P1M3 = 0x41; //SDA改为输入
	_nop_();
  _nop_();
  _nop_();
	_nop_();
  _nop_();
  _nop_();
	_nop_();
  _nop_();
  _nop_();
	_nop_();
  _nop_();
  _nop_();
	I2C_SCL=1;
	_nop_();
  _nop_();
  _nop_();
	_nop_();
  _nop_();
  _nop_();
	_nop_();
  _nop_();
  _nop_();
	_nop_();
  _nop_();
  _nop_();
	I2C_SCL=0;
  P1M3 = 0xC1; //应答结束后再将SDA改为输出
}

  停止信号:

/*****************************************************
*函数名称:I2cStop(void)
*函数功能:停止I2C
*入口参数:void
*出口参数:void
*****************************************************/
void I2cStop(void)
{		
	I2C_SDA=0;
	I2C_SCL=0;
  _nop_();
  _nop_();
	I2C_SCL=1;		
	_nop_();
  _nop_();
  _nop_();
	_nop_();
  _nop_();
  _nop_();
	_nop_();
  _nop_();
  _nop_();
	_nop_();
  _nop_();
  _nop_();
	I2C_SDA=1;
  _nop_();
}

以上代码就是I2C通用的三种信号状态,小伙伴可以直接参考,亲测有效。接下来就是写入数据的时序的,这个时序需要看具体datasheet

 

/*****************************************************
*函数名称:I2cWriteByte(uchar dat)
*函数功能:写入一个字节
*入口参数:void
*出口参数:void
*****************************************************/
void I2cWriteByte(unsigned char dat)
{
	unsigned char temp;//定义一个char类型

	for(temp=0;temp<8;temp++)
	 {     
		if((dat&0X80)==0)
			I2C_SDA=0;
	  else
			I2C_SDA=1;
		dat=dat<<1;
    _nop_();
		I2C_SCL=1;
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
		I2C_SCL=0;	//SCL低电平时,数据允许变化		
    _nop_();
	}	
}


/******************写入所有数据***********************/
void I2cWrAllData(unsigned char *p,unsigned char lengh)
{
		unsigned char i;
  	for (i=0;i<lengh;i++)	//发送最多16字节的显存数据
  	{
			
			I2cWriteByte(*p);        //写入数据
    	p++;
			I2cRecAck();
  	}
}



/******************写完整数据***********************/
void I2cWrStruct(unsigned char *p,unsigned char length)
{
  I2cStart();
	I2cWriteByte(device_addr);//device_addr是宏定义好的芯片地址
	I2cRecAck();
	I2cWrAllData(p,length);	
	I2cStop();
}

      然后我们就可以创建一个20字节长度的数组,管理这些灯珠的亮灭状态了,通常会列一个真值表方便写程序,因为6934是带锁存的,所以你要隔一段时间重新对他来赋值。

    接下来看下DP5125D这颗芯片,首先还是先介绍硬件,硬件是软件的基础,一定要确保自己的硬件电路是没有问题的再写软件,不然找问题会把自己找绝望的,哪怕是一颗小小的采样电阻。细心的小伙伴会发现这个芯片没有SEG口,只有GRID口,所以还需要有个推的大电流的SEG口,下面我用一个我做过的老年代步车的项目电路来帮助大家理解。

MCU电路连接:

驱动芯片周边连接:

SEG口推电流电路:

双8字数码管内部电路图

  细心的小伙伴会发现这不是用I2C进行数据传输了,这就要详细的看下datasheet中的时序图:

这幅图最主要的就是数据在芯片内部是SCK上升沿进行写入

代码如下:

void write_byte(unsigned int dat)//单字节数据写入
{
	unsigned int i;   
	YB_DCK = 0;
	YB_LAT = 0;
	YB_PDM = 0;
	for(i=0;i<16;i++)//最长16字节写入
	{
       if((dat &0x8000)==0)
         YB_DI =0;
         else
       YB_DI =1;
	   YB_DCK = 1;//上升沿写入
	   dat = dat<<1;
	   YB_DCK = 0;//SCK再设置为低,为下一步做准备
   }
}

void data_output(unsigned char num)//输出数据写入
{
 write_byte(SLEDDSP[num]);
 YB_LAT = 1;//串行锁存信号输入
 YB_LAT = 0;
 YB_PDM = 1;//输出使能信号输入
 YB_PDM = 0;
}

void LedScan()//LED扫描函数,此处可以修改扫描时间
{
  unsigned char i;   
  YC1=1;
  YC2=1;

  if(LedReady)//ready标志位
  {
	  LedReady=0;
	  for(i=1;i<3;i++)
	  {
	    SLEDDSP[i]=LEDDSP[i];//数组
	  }
  }

  data_output(SegNumber);
  if(SegNumber==1)YC1=0;
  if(SegNumber==2)YC2=0;

  if(++SegNumber>2)
  {           
     SegNumber=1;
  }

}

    再在主函数里调用,LED扫描函数放在100ms周期内就100ms扫一次,我的项目是2个SEG口在扫,每1ms扫描一次,所以亮度会比较亮并且显示很丝滑。扫的SEG口越多,亮度越暗,但是此时要注意不能太长时间才进行一次LED扫描,否则显示看起来会非常的卡顿。

QCC5125 VFBGA is a system on-chip (SoC) with on-chip Bluetooth, audio and programmable application processor. It includes high-performance, analog, and digital audio codecs, Class-AB and Class-D audio drivers, advanced power management, Li-ion battery charger, light-emitting diode (LED) drivers, and flexible interfaces including interintegrated circuit sound (I²S), inter-integrated circuit interface (I²C), universal asynchronous receiver transmitter (UART), and programmable input/output (PIO). An application-dedicated Developer Processor and a system Firmware Processor run code from an external quad serial peripheral interface (QSPI) flash. Both processors have tightly coupled memory (TCM) and an on-chip cache for performance while executing from external flash memory. The system Firmware Processor provides functions developed by Qualcomm Technologies International, Ltd. (QTIL). The Developer processor provides flexibility to the product designer to customize their product. The Audio subsystem contains a programmable Kalimba core running Qualcomm® Kymera™ system DSP architecture framework from read only memory (ROM). A range of audio processing capabilities are provided from ROM which are configurable in fully flexible audio graphs. In built capabilities in ROM, may be complimented or replaced by capabilities run from random access memory (RAM), including those provided by QTIL, the product designer or third parties. The flexibility provided by the fully programmable applications processor plus the ability to configure and program the audio processors enables manufacturers to easily differentiate products with new features. QCC5125 VFBGA is driven by a flexible, software platform with powerful integrated development environment (IDE) support. This enables rapid time-to-market deployment for a broad range of consumer electronic products, including audio, wireless speaker, Qualcomm TrueWireless, and broadcast audio for stereo speaker arrangements.
### 3W LED 模块技术规格概述 #### 功率与电压特性 3W LED 模块通常设计用于高亮度应用场合,其额定功率为3瓦特。这类模块的工作电压范围一般在2.8V至3.4V之间[^1],具体数值取决于所使用的半导体材料以及制造工艺。 #### 光学参数 光通量方面,标准的3W白光LED可以提供约90到150流明(lm) 的输出[^2]。色温选项多样,常见的有暖白色(2700K~3500K),自然白色(4000K~5000K),以及冷白色(5600K~6500K)[^3]。显色指数(CRI)对于高质量照明产品来说非常重要,许多商用3W LED能够达到CRI>80的标准[^4]。 #### 尺寸与封装形式 物理尺寸上,这些器件多采用表面贴装(SMD)方式安装,在某些情况下也可能见到陶瓷基板上的COB(chip-on-board)配置。典型的SMD型3W LED可能具有大约5mm×5mm 或者更大一些的核心发光区域面积[^5]。 #### 散热考量 由于较高的电输入功率密度,良好的散热管理成为必要条件之一。建议通过金属核心印刷电路板(MCPCB),铝制散热片或者其他高效导热路径来维持结点温度低于规定限值以延长使用寿命并保持性能稳定[^6]. ```python # 示例 Python 计算代码片段展示如何估算所需驱动电流给定目标光输出. def calculate_current_for_lumen(target_lumens, lumens_per_watt=120): power_needed = target_lumens / lumens_per_watt voltage_forward = 3.2 # Volts (example value) current_ma = (power_needed * 1000) / voltage_forward return round(current_ma) print(f"Required Current: {calculate_current_for_lumen(120)}mA") ``` 上述脚本展示了基于典型效率假设下计算实现特定光照水平所需的驱动电流方法.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值