用我们领先的USB-C接收端解决方案改变您的连接和充电方式,提供超出期望的可靠性和性能。
A
A
硬件概览
它是如何工作的?
USB-C Sink 2 Click基于Diodes Incorporated的高性能USB PD接收端控制器AP33772。主机MCU可以以20mV/步的电压和50mA/步的电流控制PPS。PD控制器支持过温保护(OTP)、带自动重启的过压保护(OVP)、带自动重启的过流保护(OCP)、一次编程(OTP)、省电模式和系统监视和控制状态寄存器。对于OTP,此Click板™配备了一个NTC温度传感器,可选择温度点(25°C、50°C、75°C、100°C)作为温度阈值。板载的FAULT LED用作协商不匹配的可视表示。多次编程(MTP)保留供将来配置使用。这个USB Type-C电源传输接收端控制器需要从标准USB源适配器获
得电源,在我们的情况下是从标记为USB-C PD-IN的USB连接器获得,然后将电源传输到连接的设备上的VSINK连接器。一对MOSFET位于USB和VSINK端之间,根据AP33772驱动器进行N-MOS VBUS电源开关支持。PD控制器可以通过I2C接口控制外部NMOS开关的开关(所有控制都通过I2C接口完成)。USB C连接器充当带有USB Type-C配置通道1和2的PD-IN放电路径终端。USB C上的电源供应存在时,通过VBUS LED指示。AP33772配备有几个GPIO。用户可配置的GPIO1和GPIO2可在标记为GP1和GP2的侧面排针上找到,还带有额外的GND。此外,此Click板™还具有几个测试点供测试
使用。可以通过V5V和V3V测试点测量5V和3.3V LDO电压输出,通过VFB测试点测量电压反馈。USB-C Sink 2 Click使用标准的2线I2C接口与主机MCU通信。来自AP33772的中断可以通过INT引脚进行监视。USB-C Sink 2 Click的另一个附加功能是通过mikroBUS™插座的AN引脚跟踪VBUS电压。此Click板™可以通过VCC SEL跳线选择3.3V或5V逻辑电压电平。这样,既能使3.3V也能使5V能力的MCU正确使用通信线路。此外,此Click板™配备了一个包含易于使用的函数和示例代码的库,可用作进一步开发的参考。
功能概述
开发板
32L496GDISCOVERY Discovery 套件是一款功能全面的演示和开发平台,专为搭载 Arm® Cortex®-M4 内核的 STM32L496AG 微控制器设计。该套件适用于需要在高性能、先进图形处理和超低功耗之间取得平衡的应用,支持无缝原型开发,适用于各种嵌入式解决方案。STM32L496AG 采用创新的节能架构,集成
了扩展 RAM 和 Chrom-ART 图形加速器,在提升图形性能的同时保持低功耗,使其特别适用于音频处理、图形用户界面和实时数据采集等对能效要求较高的应用。为了简化开发流程,该开发板配备了板载 ST-LINK/V2-1 调试器/编程器,提供即插即用的调试和编程体验,使用户无需额外硬件即可轻松加载、调
试和测试应用程序。凭借低功耗特性、增强的内存能力以及内置调试工具,32L496GDISCOVERY 套件是开发先进嵌入式系统、实现高效能解决方案的理想选择。
微控制器概述
MCU卡片 / MCU

建筑
ARM Cortex-M4
MCU 内存 (KB)
1024
硅供应商
STMicroelectronics
引脚数
169
RAM (字节)
327680
使用的MCU引脚
mikroBUS™映射器
“仔细看看!”
Click board™ 原理图

一步一步来
项目组装
软件支持
库描述
该库包含 USB-C Sink 2 Click 驱动程序的 API。
关键功能:
usbcsink2_write_rdo- USB-C接收端2写入RDO函数。usbcsink2_get_pdo_voltage- USB-C接收端2获取电压函数。usbcsink2_get_pdo_current- USB-C接收端2获取电流函数。
开源
代码示例
完整的应用程序代码和一个现成的项目可以通过NECTO Studio包管理器直接安装到NECTO Studio。 应用程序代码也可以在MIKROE的GitHub账户中找到。
/*!
* @file main.c
* @brief USB-C Sink 2 Click Example.
*
* # Description
* This example demonstrates the use of the USB-C Sink 2 Click board™
* by setting DC power requests and control for Type-C connector-equipped devices (TCD).
*
* The demo application is composed of two sections :
*
* ## Application Init
* Initializes I2C and ADC modules and log UART.
* After driver initialization the app set default settings.
*
* ## Application Task
* In this example, the app configures Power Data Objects (PDO)
* highest priority profile and requests power from a standard USB PD source adapter.
* After connecting the PD source and USB-C Sink 2 Click with the Type-C cable,
* the app gets the total number of valid PDO's
* and switches all PDO configurations every 10 seconds.
* When the PD source accepts the request, the app displays information about
* VOUT Voltage [mV] and Current [mA] and the temperature [degree Celsius] of the USB-C connector.
*
* @note
* FAULT LED flickering notified of the system status:
* - Charging: Breathing light (2 sec dimming), 1 cycle is 4 sec.
* - Fully charged: Continuously lit Charging current < 500mA.
* - Mismatch: 1s flicker Voltage or power mismatch. Non-PD power source, 1 cycle is 2sec.
* - Fault: 300ms flicker OVP, 1 cycle is 600ms.
*
* @author Nenad Filipovic
*
*/
#include "board.h"
#include "log.h"
#include "usbcsink2.h"
static usbcsink2_t usbcsink2; /**< USB-C Sink 2 Click driver object. */
static log_t logger; /**< Logger object. */
void application_init ( void )
{
log_cfg_t log_cfg; /**< Logger config object. */
usbcsink2_cfg_t usbcsink2_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 );
log_info( &logger, " Application Init " );
// Click initialization.
usbcsink2_cfg_setup( &usbcsink2_cfg );
USBCSINK2_MAP_MIKROBUS( usbcsink2_cfg, MIKROBUS_1 );
err_t init_flag = usbcsink2_init( &usbcsink2, &usbcsink2_cfg );
if ( ( ADC_ERROR == init_flag ) || ( I2C_MASTER_ERROR == init_flag ) )
{
log_error( &logger, " Communication init." );
for ( ; ; );
}
if ( USBCSINK2_ERROR == usbcsink2_default_cfg ( &usbcsink2 ) )
{
log_error( &logger, " Default configuration." );
for ( ; ; );
}
log_info( &logger, " Application Task " );
log_printf( &logger, "---------------------------\r\n" );
Delay_ms ( 100 );
}
void application_task ( void )
{
static float voltage_mv = 0, current_ma = 0;
static uint8_t temperature = 0;
for ( uint8_t pdo_num = 0; pdo_num < usbcsink2.number_of_valid_pdo; pdo_num++ )
{
usbcsink2.pdo_data[ pdo_num * 4 + 3 ] = ( pdo_num + 1 ) << 4;
if ( USBCSINK2_OK == usbcsink2_write_rdo( &usbcsink2, &usbcsink2.pdo_data[ pdo_num * 4 ] ) )
{
log_printf( &logger, " --- PDO[ %d ] ---\r\n", ( uint16_t ) pdo_num );
}
if ( USBCSINK2_OK == usbcsink2_wait_rdo_req_success( &usbcsink2 ) )
{
if ( USBCSINK2_OK == usbcsink2_get_pdo_voltage( &usbcsink2, &voltage_mv ) )
{
log_printf( &logger, " Voltage : %.2f mV\r\n", voltage_mv );
}
if ( USBCSINK2_OK == usbcsink2_get_pdo_current( &usbcsink2, ¤t_ma ) )
{
log_printf( &logger, " Current : %.2f mA\r\n", current_ma );
}
if ( USBCSINK2_OK == usbcsink2_get_temperature( &usbcsink2, &temperature ) )
{
log_printf( &logger, " Temperature : %d C\r\n", ( uint16_t ) temperature );
}
log_printf( &logger, "---------------------------\r\n" );
// 10 seconds delay
Delay_ms ( 1000 );
Delay_ms ( 1000 );
Delay_ms ( 1000 );
Delay_ms ( 1000 );
Delay_ms ( 1000 );
Delay_ms ( 1000 );
Delay_ms ( 1000 );
Delay_ms ( 1000 );
Delay_ms ( 1000 );
Delay_ms ( 1000 );
}
}
}
int main ( void )
{
/* Do not remove this line or clock might not be set correctly. */
#ifdef PREINIT_SUPPORTED
preinit();
#endif
application_init( );
for ( ; ; )
{
application_task( );
}
return 0;
}
// ------------------------------------------------------------------------ END
额外支持
资源
类别:USB-C 电力传输































