中级
30 分钟

使用TLC59283和STM32F031K6无缝调节照明水平,在任何环境中创造完美氛围

释放完美光线的力量

LED Driver 10 Click with Nucleo 32 with STM32F031K6 MCU

已发布 10月 01, 2024

点击板

LED Driver 10 Click

开发板

Nucleo 32 with STM32F031K6 MCU

编译器

NECTO Studio

微控制器单元

STM32F031K6

利用我们的LED驱动器,为各行各业的创新照明解决方案奠定基础,助力您的电子创新。

A

A

硬件概览

它是如何工作的?

LED Driver 10 Click基于德州仪器的TLC59283,是一款SPI总线控制的16通道恒流沉型发光二极管(LED)驱动器,具有预充电场效应晶体管。它在VCC供电电压范围内工作,其输出具有10V容忍度。每个LED输出,16个LED驱动器分布在两个九位置弹簧端子上,每个通道的最大输出电流为+50mA,可以编程设置为关和开状态,具有可编程的单个LED亮度。内部的预充电场效应晶体管防止了多路复用LED模块的幽灵现象。这种现象的一个原因是恒流输出和连接到TLC59283的LED引脚的PCB布线的寄生电容充电电流通过外部LED。TLC59283通过最大频率为35MHz的标准SPI串行接口与MCU通信。它有一

个16位移位寄存器和一个输出ON/OFF数据锁存器。移位寄存器和数据锁存器是16位长的,用于打开/关闭恒流输出。当串行数据缓冲区加载时,mikroBUS™插座的LAT引脚上升沿将数据传输到LED输出。当TLC59283首次上电时,16位移位寄存器和输出ON/OFF数据锁存器中的数据不设置为默认值。因此,在打开LED输出之前,必须将输出ON/OFF数据写入数据锁存器。当上电时,PWM引脚应设置为高逻辑状态,因为由于输出ON/OFF数据锁存器中的随机数据,恒流可能会打开。当PWM引脚处于低逻辑状态时,如果ON/OFF控制数据锁存器中的数据为'1',则相应的LED输出将打开;如果数据

为'0',则保持关闭。当PWM引脚处于高电平时,所有LED输出都被强制关闭。LED Driver 10 Click还具有可调电位器,标记为VR1,用于调整所有16个通道的恒流值。所有16个通道的恒流值由放置在TLC59283的恒流值设置引脚IREF和地之间的单个外部电阻进行设置。可以通过标记为CURRENT的板载SMD跳线将选择放置在标记为L和H的适当位置。这个Click板™可以通过VCC SEL跳线选择3.3V或5V逻辑电压电平操作。这样,既能使用3.3V也能使用5V逻辑电压的MCU可以正确使用通信线路。此外,这个Click板™配备了一个包含易于使用的函数和示例代码的库,可用作进一步开发的参考。

LED Driver 10 Click hardware overview image

功能概述

开发板

Nucleo 32开发板搭载STM32F031K6 MCU,提供了一种经济且灵活的平台,适用于使用32引脚封装的STM32微控制器进行实验。该开发板具有Arduino™ Nano连接性,便于通过专用扩展板进行功能扩展,并且支持mbed,使其能够无缝集成在线资源。板载集成

ST-LINK/V2-1调试器/编程器,支持通过USB重新枚举,提供三种接口:虚拟串口(Virtual Com port)、大容量存储和调试端口。该开发板的电源供应灵活,可通过USB VBUS或外部电源供电。此外,还配备了三个LED指示灯(LD1用于USB通信,LD2用于电源

指示,LD3为用户可控LED)和一个复位按钮。STM32 Nucleo-32开发板支持多种集成开发环境(IDEs),如IAR™、Keil®和基于GCC的IDE(如AC6 SW4STM32),使其成为开发人员的多功能工具。

Nucleo 32 with STM32F031K6 MCU double side image

微控制器概述 

MCU卡片 / MCU

default

建筑

ARM Cortex-M0

MCU 内存 (KB)

32

硅供应商

STMicroelectronics

引脚数

32

RAM (字节)

4096

你完善了我!

配件

Click Shield for Nucleo-32是扩展您的开发板功能的理想选择,专为STM32 Nucleo-32引脚布局设计。Click Shield for Nucleo-32提供了两个mikroBUS™插座,可以添加来自我们不断增长的Click板™系列中的任何功能。从传感器和WiFi收发器到电机控制和音频放大器,我们应有尽有。Click Shield for Nucleo-32与STM32 Nucleo-32开发板兼容,为用户提供了一种经济且灵活的方式,使用任何STM32微控制器快速创建原型,并尝试各种性能、功耗和功能的组合。STM32 Nucleo-32开发板无需任何独立的探针,因为它集成了ST-LINK/V2-1调试器/编程器,并随附STM32全面的软件HAL库和各种打包的软件示例。这个开发平台为用户提供了一种简便且通用的方式,将STM32 Nucleo-32兼容开发板与他们喜欢的Click板™结合,应用于即将开展的项目中。

Click Shield for Nucleo-32 accessories 1 image

使用的MCU引脚

mikroBUS™映射器

NC
NC
AN
NC
NC
RST
SPI Chip Select
PA4
CS
SPI Clock
PB3
SCK
SPI Data OUT
PB4
MISO
SPI Data IN
PB5
MOSI
Power Supply
3.3V
3.3V
Ground
GND
GND
ON/OFF LED Channel Control
PA8
PWM
NC
NC
INT
NC
NC
TX
NC
NC
RX
NC
NC
SCL
NC
NC
SDA
Power Supply
5V
5V
Ground
GND
GND
1

“仔细看看!”

Click board™ 原理图

LED Driver 10 Click Schematic schematic

一步一步来

项目组装

Click Shield for Nucleo-144 front image hardware assembly

从选择您的开发板和Click板™开始。以Nucleo 32 with STM32F031K6 MCU作为您的开发板开始。

Click Shield for Nucleo-144 front image hardware assembly
Nucleo 144 with STM32L4A6ZG MCU front image hardware assembly
Stepper 22 Click front image hardware assembly
Prog-cut hardware assembly
Stepper 22 Click complete accessories setup image hardware assembly
Nucleo-32 with STM32 MCU Access MB 1 - upright/background hardware assembly
Necto image step 2 hardware assembly
Necto image step 3 hardware assembly
Necto image step 4 hardware assembly
Necto image step 5 hardware assembly
Necto image step 6 hardware assembly
STM32 M4 Clicker HA MCU/Select Step hardware assembly
Necto No Display image step 8 hardware assembly
Necto image step 9 hardware assembly
Necto image step 10 hardware assembly
Debug Image Necto Step hardware assembly

实时跟踪您的结果

应用程序输出

此款Click板可通过两种方式进行接口连接和监控:

  • Application Output - 在调试模式下,使用“Application Output”窗口进行实时数据监控。按照本教程正确设置它。

软件支持

库描述

该库包含 LED Driver 10 Click 驱动程序的 API。

关键功能:

  • leddriver10_set_channels - 该函数使用SPI串行接口将所有通道设置为所需值。

  • leddriver10_read_channels - 该函数使用SPI串行接口读取所有通道的当前状态。

  • leddriver10_set_duty_cycle - 该函数以百分比(范围[0..1])设置PWM占空比。

开源

代码示例

完整的应用程序代码和一个现成的项目可以通过NECTO Studio包管理器直接安装到NECTO Studio 应用程序代码也可以在MIKROE的GitHub账户中找到。

/*!
 * @file main.c
 * @brief LEDDriver10 Click example
 *
 * # Description
 * This example demonstrates the use of LED Driver 10 click board.
 *
 * The demo application is composed of two sections :
 *
 * ## Application Init
 * Initializes the driver, starts the PWM module and enables all channels.
 *
 * ## Application Task
 * Controls the LEDs brightness by changing the PWM duty cycle.
 * The PWM duty cycle percentage will be logged on the USB UART.
 *
 * @author Stefan Filipovic
 *
 */

#include "board.h"
#include "log.h"
#include "leddriver10.h"

static leddriver10_t leddriver10;
static log_t logger;

void application_init ( void ) 
{
    log_cfg_t log_cfg;                  /**< Logger config object. */
    leddriver10_cfg_t leddriver10_cfg;  /**< Click config object. */

    /** 
     * Logger initialization.
     * Default baud rate: 115200
     * Default log level: LOG_LEVEL_DEBUG
     * @note If USB_UART_RX and USB_UART_TX 
     * are defined as HAL_PIN_NC, you will 
     * need to define them manually for log to work. 
     * See @b LOG_MAP_USB_UART macro definition for detailed explanation.
     */
    LOG_MAP_USB_UART( log_cfg );
    log_init( &logger, &log_cfg );
    Delay_ms( 100 );
    log_info( &logger, " Application Init " );

    // Click initialization.

    leddriver10_cfg_setup( &leddriver10_cfg );
    LEDDRIVER10_MAP_MIKROBUS( leddriver10_cfg, MIKROBUS_1 );
    err_t init_flag  = leddriver10_init( &leddriver10, &leddriver10_cfg );
    if ( SPI_MASTER_ERROR == init_flag ) 
    {
        log_error( &logger, " Application Init Error. " );
        log_info( &logger, " Please, run program again... " );

        for ( ; ; );
    }

    leddriver10_pwm_start( &leddriver10 );    
    leddriver10_set_channels ( &leddriver10, LEDDRIVER10_ENABLE_ALL_CH );
    log_printf( &logger, " All channels enabled!\r\n" );
    log_printf( &logger, " Dimming the LEDs light...\r\n" );
}

void application_task ( void ) 
{
    static int16_t duty_cnt = 1;
    static int8_t duty_inc = 1;
    float duty = duty_cnt / 10.0;
    
    leddriver10_set_duty_cycle ( &leddriver10, duty );
    log_printf( &logger, "> Duty: %u%%\r\n", ( uint16_t )( duty_cnt * 10 ) );
    
    Delay_ms( 500 );
    
    if ( 10 == duty_cnt ) 
    {
        duty_inc = -1;
    }
    else if ( 0 == duty_cnt ) 
    {
        duty_inc = 1;
    }
    duty_cnt += duty_inc;
}

void main ( void ) 
{
    application_init( );

    for ( ; ; ) 
    {
        application_task( );
    }
}

// ------------------------------------------------------------------------ END

额外支持

资源

喜欢这个项目吗?

'购买此套件' 按钮会直接带您进入购物车,您可以在购物车中轻松添加或移除产品。