主要输入参数 | 主要输出信号 | 推荐器件 |
---|---|---|
编程 DAC 代码 0x000 至 0xFFF、GPI 触发器的 SPI 或 I2C 通信 | 0A 至 250µA 和 0mA 至 20mA LED 电流 | DAC43204(8 位)、 DAC53204(10 位)、 DAC63204(12 位) |
目标:使用智能 DAC 偏置具有高侧电流源的 LED。
本设计采用四通道缓冲电压或电流输出智能 DAC(比如 DAC43204、DAC53204 或 DAC63204 (DACx3204))来偏置发光二极管 (LED)。在仅需数毫安电流的 LED 偏置应用中,智能 DAC 可配置为电压输出模式,并与双极结型晶体管 (BJT) 连接形成强制感测配置,如电路原理图中 DACx3204 的通道 1 所示。DAC 设置 PNP 型 BJTx(比如 2N2905)的集电极电流,并通过改变基极电压来控制流过 LED 的电流量。LED 连接在 BJT 集电极和接地端之间。DAC 可用于电流输出模式,使用高达 250µA 的电流直接驱动 LED,适合低电流 LED 偏置应用,如电路原理图中 DACx3204 的通道 0 所示。使用 BJT 配置时,DACx3204 的反馈引脚 (VFB) 可补偿基极-发射极电压 (VBE) 压降和 BJT 漂移。DACx3204 具有通用输入输出 (GPIO) 引脚,可在两个电流值之间切换 LED,或开关 LED。可使用智能 DAC 的非易失性存储器 (NVM) 保存所有寄存器设置,这意味着可在无处理器时使用器件,即使在下电上电后也是如此。该电路可用于条形码扫描仪、条形码读取器、点钞机、POS 打印机、光学模块和电器照明等应用。
10 位 DAC53204 的 DAC 代码的计算公式为:
如果以 5V VDD 为基准,则高低 DAC 代码分别为:
根据寄存器设置部分所述的初始寄存器设置,可使用 I2C 或 SPI 对 DACx3204 进行编程。可将初始寄存器设置保存至 NVM,方法是将 1 写入 COMMON-TRIGGER 寄存器的 NVM-PROG 字段。对 NVM 进行编程后,器件将在重置或下电上电之后加载具有 NVM 所存储值的所有寄存器。
该原理图用于如下 DAC53204 仿真。
该仿真展示了 DAC 从裕量高到裕量低代码转换时的 LED 电流。
该仿真显示了 LED 电流与 DAC 输出电压间的关系。为使典型 PNP 型 BJT 导通,基极电压需比发射极电压低 0.7V。在该电路中,基极电压超过 900mV 时,所选 2N2905 晶体管开始导通。
寄存器地址 | 寄存器名称 | 设置 | 说明 |
---|---|---|---|
0x01 | DAC-0-MARGIN-HIGH | 0xFFC0 | [15:4] 0xFFC:左对齐 10 位数据更新 MARGIN-HIGH 代码 |
[3:0] 0x0:不用考虑 | |||
0x02 | DAC-0-MARGIN-LOW | 0xCCC0 | [15:4] 0xCCC:左对齐 10 位数据更新 MARGIN-LOW 代码 |
[3:0] 0x0:不用考虑 | |||
0x06 | DAC-0-FUNC-CONFIG | 0x0001 | [15] 0b0:写入 0b1,将 DAC-0 清除设置设为中标度 |
[14] 0b0:写入 0b1,通过 LDAC 触发器更新 DAC-0 | |||
[13] 0b0:写入 0b1,使 DAC-0 通过广播命令更新 | |||
[12:11] 0b00:为函数发生器选择相位 | |||
[10:8] 0b000:选择函数发生器生成的波形 | |||
[7] 0b0:写入 0b1,启用对数转换 | |||
[6:4] 0b000:选择 1 LSB 的 代码步进 | |||
[3:0] 0b001:选择 4µs/步进的压摆率 | |||
0x1F | COMMON-CONFIG | 0x0FF9 | [15] 0b0:写入 0b1,将窗口比较器输出设置为锁存输出 |
[14] 0b0:写入 0b1,锁定器件。将 0b0101 写入 COMMON-TRIGGER 寄存器的 DEV-UNLOCK 字段,以进行解锁 | |||
[13] 0b0:写入 0b1,在地址 0x01 处设置故障转储读取使能 | |||
[12] 0b0:写入 0b1,启用内部基准 | |||
[11:10] 0b11:将 VOUT3 断电 | |||
[9] 0b1:将 IOUT3 断电 | |||
[8:7] 0b11:将 VOUT2 断电 | |||
[6] 0b1:将 IOUT2 断电 | |||
[5:4] 0b11:将 VOUT1 断电 | |||
[3] 0b1:将 IOUT1 断电 | |||
[2:1] 0b00:将 VOUT0 上电 | |||
[0] 0b1:将 IOUT0 断电 | |||
0x20 | COMMON-TRIGGER | 0x0002 | [15:12] 0b0000:写入 0b0101,解锁器件 |
[11:8] 0b0000:写入 0b1010,触发 POR 复位 | |||
[7] 0b0:如 DAC-X-FUNC-CONFIG 寄存器中相应 SYNC-CONFIG-X 位为 1,则写入 0b1,触发 LDAC 运行。 | |||
[6] 0b0:写入 0b1,基于 DAC-X-FUNC-CONFIG 寄存器中相应 CLR-SEL-X 位,将 DAC 寄存器和输出设置为零代码或中间代码 | |||
[5] 0b0:不用考虑 | |||
[4] 0b0:写入 0b1,触发故障转储序列 | |||
[3] 0b0:写入 0b1,触发 PROTECT 功能 | |||
[2] 0b0:写入 0b1,读取 NVM 的一行进行故障转储 | |||
[1] 0b1:写入 0b1,将适用寄存器设置存储到 NVM | |||
[0] 0b0:写入 0b1,使用现有 NVM 设置重新加载适用寄存器 | |||
0x24 | GPIO-CONFIG | 0x0035 | [15] 0b0:写入 0b1,在 GPI 上启用干扰滤波器 |
[14] 0b0:不用考虑 | |||
[13] 0b0:写入 0b1,在 GPIO 引脚上启用输出模式 | |||
[12:9] 0b0000:映射到 GPIO 的 STATUS 功能设置作为输出 | |||
[8:5] 0b0001:确定受特定于通道的 GPI 功能影响的通道 | |||
[4:1] 0b1010:选择 GPI,触发裕量高/低 | |||
[0] 0b1:启用 GPIO 引脚的输入模式 |
寄存器地址 | 寄存器名称 | 设置 | 说明 |
---|---|---|---|
0x01 | DAC-0-MARGIN-HIGH | 0x8000 | [15:4] 0x800:左对齐 8 位数据更新 MARGIN-HIGH 代码 |
[3:0] 0x0:不用考虑 | |||
0x02 | DAC-0-MARGIN-LOW | 0x0000 | [15:4] 0x000:左对齐 8 位数据更新 MARGIN-LOW 代码 |
[3:0] 0x0:不用考虑 | |||
0x06 | DAC-0-FUNC-CONFIG | 0x0001 | [15] 0b0:写入 0b1,将 DAC-0 清除设置设为中标度 |
[14] 0b0:写入 0b1,通过 LDAC 触发器更新 DAC-0 | |||
[13] 0b0:写入 0b1,使 DAC-0 通过广播命令更新 | |||
[12:11] 0b00:为函数发生器选择相位 | |||
[10:8] 0b000:选择函数发生器生成的波形 | |||
[7] 0b0:写入 0b1,启用对数转换 | |||
[6:4] 0b000:选择 1 LSB 的 代码步进 | |||
[3:0] 0b001:选择 4µs/步进的压摆率 | |||
0x1F | COMMON-CONFIG | 0x0FFE | [15] 0b0:写入 0b1,将窗口比较器输出设置为锁存输出 |
[14] 0b0:写入 0b1,锁定器件。将 0b0101 写入 COMMON-TRIGGER 寄存器的 DEV-UNLOCK 字段,以进行解锁 | |||
[13] 0b0:写入 0b1,在地址 0x01 处设置故障转储读取使能 | |||
[12] 0b0:写入 0b1,启用内部基准 | |||
[11:10] 0b11:将 VOUT3 断电 | |||
[9] 0b1:将 IOUT3 断电 | |||
[8:7] 0b11:将 VOUT2 断电 | |||
[6] 0b1:将 IOUT2 断电 | |||
[5:4] 0b11:将 VOUT1 断电 | |||
[3] 0b1:将 IOUT1 断电 | |||
[2:1] 0b11:将 VOUT0 断电 | |||
[0] 0b0:将 IOUT0 上电 | |||
0x20 | COMMON-TRIGGER | 0x0002 | [15:12] 0b0000:写入 0b0101,解锁器件 |
[11:8] 0b0000:写入 0b1010,触发 POR 复位 | |||
[7] 0b0:如 DAC-X-FUNC-CONFIG 寄存器中相应 SYNC-CONFIG-X 位为 1,则写入 0b1,触发 LDAC 运行。 | |||
[6] 0b0:写入 0b1,基于 DAC-X-FUNC-CONFIG 寄存器中相应 CLR-SEL-X 位,将 DAC 寄存器和输出设置为零代码或中间代码 | |||
[5] 0b0:不用考虑 | |||
[4] 0b0:写入 0b1,触发故障转储序列 | |||
[3] 0b0:写入 0b1,触发 PROTECT 功能 | |||
[2] 0b0:写入 0b1,读取 NVM 的一行进行故障转储 | |||
[1] 0b1:写入 0b1,将适用寄存器设置存储到 NVM | |||
[0] 0b0:写入 0b1,使用现有 NVM 设置重新加载适用寄存器 | |||
0x24 | GPIO-CONFIG | 0x0035 | [15] 0b0:写入 0b1,在 GPI 上启用干扰滤波器 |
[14] 0b0:不用考虑 | |||
[13] 0b0:写入 0b1,在 GPIO 引脚上启用输出模式 | |||
[12:9] 0b0000:映射到 GPIO 的 STATUS 功能设置作为输出 | |||
[8:5] 0b0001:确定受特定于通道的 GPI 功能影响的通道 | |||
[4:1] 0b1010:选择 GPI,触发裕量高/低 | |||
[0] 0b1:启用 GPIO 引脚的输入模式 |
1: //SYNTAX: WRITE <REGISTER NAME (Hex code)>, <MSB DATA>, <LSB DATA>
2: //Configure GPI for margin high/low trigger
3: WRITE GPIO-CONFIG(0x24), 0x00, 0x35
4: //With 16-bit left alignment 0x3FF becomes 0xFFC0
5: WRITE DAC-0-MARGIN-HIGH(0x01), 0xFF, 0xC0
6: //With 16-bit left alignment 0x333 becomes 0xCCC0
7: WRITE DAC-0-MARGIN-LOW(0x02), 0xCC, 0xC0
8: //Set the CODE-SETP to 1 LSB and SLEW-RATE to 4 µs/step
9: WRITE DAC-0-FUNC-CONFIG(0x06), 0x00, 0x01
10: //Power-up voltage output on channel 0, internal reference disabled
11: WRITE GENERAL_CONFIG(0x1F), 0x0F, 0xF9
12: //Save settings to NVM
13: WRITE COMMON-TRIGGER(0x20), 0x00, 0x02
1: //SYNTAX: WRITE <REGISTER NAME (Hex code)>, <MSB DATA>, <LSB DATA>
2: //Configure GPI for deep-sleep trigger and enable deep-sleep function
3: WRITE GPIO-CONFIG(0x24), 0x00, 0x35
4: //With 16-bit left alignment 0x80 becomes 0x8000
5: WRITE DAC-0-MARGIN-HIGH(0x01), 0x80, 0x00
6: //Write DAC0 margin low code
7: WRITE DAC-0-MARGIN-LOW(0x02), 0x00, 0x00
8: //Set the CODE-SETP to 1 LSB and SLEW-RATE to 4 µs/step
9: WRITE DAC-0-FUNC-CONFIG(0x06), 0x00, 0x01
10: //Power-up current output on channel 0, internal reference disabled
11: WRITE GENERAL_CONFIG(0x1F), 0x0F, 0xFE
12: //Save settings to NVM
13: WRITE COMMON-TRIGGER(0x20), 0x00, 0x02