This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TLC5951:使用Arduino驱动菊花链式TLC5951

Guru**** 2329980 points
Other Parts Discussed in Thread: TLC5951
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/584658/tlc5951-driving-daisy-chained-tlc5951s-with-arduino

部件号:TLC5951
使用Arduino驱动3个菊花链式TLC5951。 是否可以这样做? Arduino MEGA 2560的SPI时钟是否足够快? 是否有可用于实现此目的的示例代码? (我在GitHub中看到了“肢体”代码,但这仅适用于一台设备,该设备有3个菊花链式连接....) 我在链中的第一台设备上尝试了上述代码... 但它只点亮8个LED中的6个? 是否有人可以与我聊天以更好地了解此设备的工作原理?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Gowen,

    该职位已分配给适当的工程师,将尽快答复。

    此致,
    肯尼斯
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Gowen:

    能否告诉我您的Arduino的最快频率是多少? 是否集成了晶体来生成时钟信号,它的频率是多少? 最好是共享设计的原理图或简单的结构图。

    如您所述,只有一台设备使用该代码,我怀疑数据未正确发送到所有三台设备。

    此致,
    Jason
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Jason:

    随附的是方框图和示意图。

    1. 用于红色绿色和蓝色的GSCK全部绑定在一起,并全部链接回Arduino的插针13。  (从肢体示例的针脚9修改)  

    2. Xblink全部绑定在一起并连接到Arduino的引脚23

    3. GSLAT 全部捆绑在一起并连接到Arduino的引脚22

    4.所有GSSCK引脚都绑在一起并连接到引脚52 Arduino

    5.每个气缸组的所有GSSIN引脚都绑在一起并连接 到引脚51 Arduino。  (7 X数据输入线路驱动7个存储库)

    Arduino具有16MHz时钟,SPI总线设置为我们 使用此时钟向LED板发送数据的一半(8MHz)。

    我们将数据计时到第1列气缸组的第一个芯片,然后再次发送相同的数据,期望它转移到第1列气缸组的第二个芯片...我们第三次重复此操作,将数据转移到第3列气缸组的芯片中。

    我们发送到芯片1的数据似乎工作正常(所有LED指示灯均亮起)。

     然后,我们再次发送相同的数据,希望看到相同的数据被转移到芯片2。我们看到芯片1的所有LED照亮是预期的。 但 芯片#2并未始终照亮所有LED。我们再次这样做,并期望数据通过芯片#3移动...但我们看到相同的问题...似乎有些数据没有正确地通过移动。第一个芯片#1始终是 正确,但从这一步切换至2和3的后续步骤似乎不能正常工作。

    我们看到气缸组2等出现类似问题。每个气缸组的第一个芯片获得正确的数据并点亮所有LED,但后续切换至芯片2和3并不总是点亮所有LED。

    有时换档工作正常,但有时芯片2和3上的某些LED不亮。

    这是我们修改的代码,用于转移到下一个芯片并点亮所有的存储库

    // GSSCK和GSSIN分别连接到SPI时钟和MOSI引脚
    // GSLAT位于引脚22上,XBLNK至23
    //绿色,红色和蓝色的所有灰度时钟(GSCKG,GSCKR,GSCKB)
    //连接到相同的Arduino引脚(9)
    //----------------

    包含"TLC5951.h"
    #include <SPI.h>

    #define GSLAT 22.
    #define XBLNK 23.
    #define GSCKGRB 13.
    #define start_color "红色"
    TLC5951 tlc;

    void setup(){
    //将计时器设置为最大速度以生成最快的PWM
    //这是必需的,以便TLC5951上的灰度时钟速度足够快,可以防止LED中出现可见抖动
    //当前值适用于Arduino Mega 2560
    //链接以查找您的Arduino的值: fard.Arduino .cc/.../TimerPWMC散热片
    TCCR0B = TCCR0B和0b11.1万 | 0x01;//引脚9和10 @ 3.125万 Hz

    //现在将GSCKGRB设置为输出和50 % PWM占空比
    //为了简单起见,所有三个灰度时钟都绑定到同一个引脚上
    PinMode (GSCKGRB,输出);
    类比书写(GSCKGRB, 127);

    //库不会为您创建SPI,以防止其他SPI库出现问题
    SPI.begin();
    SPI.setClockDivider(SPI_CLOCK_DIV2);

    // init (GSLAT引脚,XBLNK引脚,所有LED的默认灰度值)
    tlc.init(GSLAT,XBLNK,0);

    // setled (输出编号,红色值,绿色值,蓝色值)
    //后面的行将所有LED设置为最亮的蓝色设置(0-4095)
    // tlc.setLED(0,0,04095);
    // tlc.setLED(1,0,04095);
    // tlc.setLED(2,0,04095);
    // tlc.setLED(3,0,04095);
    // tlc.setLED(4,0,04095);
    // tlc.setLED(5,0,04095);
    // tlc.setLED(6,0,04095);
    // tlc.setLED(7,0,04095);

    //我们必须设置网点校正值,因此将它们全部设置为最亮的调整
    tlc.setAllDCData(127);

    //设置功能控制数据锁存值。 有关此闩锁的用途,请参阅TLC5951数据表。
    //数据首先是输入LSB,即位192 (用于红色DC范围)首先是1
    //位198 (0)是最后一个,用于灰度计数器模式
    tlc.setFunctionData(B111.11万);
    Serial.begin(11.52万);

    对于(int i = 0;i <= 7;I++){
    tlc.setLED(i,0,0,0);
    //Serial.println (i);
    }
    //将所有亮度级别设置为最大值(127)
    TLC.update();

    延迟(10万次);
    对于(int i = 0;i <= 7;I++){
    tlc.setLED(i,4095,4095,4095);</s>4095 4095
    serial.println (i);
    }

    //最后,调用函数将数据发送到TLC5951
    // tlc.update();

    //蓝色,x红色
    tlc.setBrightness(8,0,0);
    TLC.update();
    延迟(10万次);
    tlc.setBrightness(0,8,0);
    TLC.update();
    延迟(10万次);
    tlc.setBrightness(0,0,8);
    TLC.update();

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Gowen:

    功能控制数据应通过DSSIN和DSCLK引脚写入,但这两个引脚都连接到原理图中的GND。 我认为这应该是问题所在。

    DC/BC/FC/UC没有默认值,寄存器中的数据是随机的。 因此,有时LED驱动器会工作,但有时不工作。

    此致,
    Jason
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的回复,

    我们正在通过GSSIN引脚将功能控制数据发送到设备。 据我所知 ,这样做是可能的。

    我们正在格式化 功能控制数据(216位),并将其发送到设备 (通过GSSIN引脚),然后格式化GSdata (288位),然后将其发送到 (通过GSSIN引脚),通过时钟指示器引脚锁定每个。

    但是我认为我们的问题是,因为我们有3个设备是以菊花链方式连接的,我们最初发送控制数据,然后将设备数据发送到第一个设备,锁定它,然后对第二个设备执行完全相同的操作,锁定它,然后对第三个设备执行相同的操作。

    我们应该做的是格式化所有 控制数据(648位),将其发送到3个设备,然后格式化  GSdata (864位)并将其发送到3个设备..这样做现在似乎工作正常。

    这是否合理?

    此致

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Gowen:

    正确,这就是原因。
    如果只有216位数据后的锁存信号,则只有设备1获得正确的数据,但设备2和设备2没有获得正确的数据。
    所有数据都应发送到所有3个设备,然后发送锁存信号。

    此致,
    Jason
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢Jason,



    还有一件事...

    我们有一条数据线和一个时钟(MOSI到GSSIN,SPI clk到SCLK),用于将控制数据(648位)和GSdata (864位)发送到库1。

    然后,我们将其他银行的所有数据线连接到同一MOSI,这样就可以将相同的数据同时发送到每个银行..。

    我们现在想设置不同的亮度,例如只能设置气缸组7和8 ...是否可以这样做?

    我们认为,如果我们将不同的银行GSSIN线路切换到我们的MOSI (可能使用继电器),我们可以将不同的控制数据发送到不同的银行.. 但我想,我们把SCLK绑在所有银行上,不允许我们这样做?

    谢谢