无论是在科学仪器、电信设备还是音频设备中,我们的 DAC 解决方案都能帮助用户从数字输入生成精确的模拟输出,充当数字与模拟领域之间的通用翻译器。
A
A
硬件概览
它是如何工作的?
DAC 14 Click 基于 DAC53202,这是一款来自德州仪器的 10 位双通道缓冲数模转换器。DAC 通道可独立配置为电压或电流输出,通过 R6 和 R7 电阻实现。默认情况下,这些电阻被填充,Click board™ 在电压输出模式下工作,提供 0V 至 5V 的输出电压;若使用电流输出模式,则需移除这些电阻。电压和电流输出模式都支持多种可编程输出范围。除了内部 1.21V 电压参考外,DAC53202 还可以使用 mikroBUS™ 电源轨作为外部参考电压。DAC53202 支持 Hi-Z 关断模式,在电源关闭条件下将其输出置于高阻态,保持输出通道的低泄漏电流,强制电压高达 1.25V。此外,它
还支持每个通道的独立比较器模式。比较器模式允许可编程滞后、锁存比较器、窗口比较器和故障转储到非易失性存储器 (NVM)。这些特性使 DAC53202 能够超越传统 DAC 的限制,实现无处理器操作。这些特性使 DAC53202 成为电压边际和缩放应用、偏置和校准的直流设定点以及波形生成(预定义的正弦、余弦、三角形和锯齿波)的理想选择。DAC 14 Click 允许使用 I2C 和 SPI 接口,I2C 的最大频率为 1MHz,SPI 的最大频率为 50MHz。接口选择通过将标记为 COMM SEL 的 SMD 跳线置于适当位置进行。请注意,所有跳线必须在同一侧,否则 Click board™ 可
能无响应。它还允许通过将 SMD 跳线 ADDR SEL 置于适当位置来选择其 I2C 地址的四个最低有效位,为用户提供四个地址的选择。DAC53202 还具有一个附加的通用 GP 引脚,连接到 mikroBUS™ 插座的 INT 引脚,配置为多个中断功能。此 Click board™ 可以在 3.3V 或 5V 逻辑电压水平下运行,通过 VCC SEL 跳线选择。这样,3.3V 和 5V 的 MCU 都可以正确使用通信。此外,该 Click board™ 配备了包含易于使用的函数和示例代码的库,可作为进一步开发的参考。
功能概述
开发板
Curiosity PIC32 MZ EF 开发板是一个完全集成的 32 位开发平台,特点是高性能的 PIC32MZ EF 系列(PIC32MZ2048EFM),该系列具有 2MB Flash、512KB RAM、集成的浮点单元(FPU)、加密加速器和出色的连接选项。它包括一个集成的程序员和调试器,无需额外硬件。用户可以通过 MIKROE
mikroBUS™ Click™ 适配器板扩展功能,通过 Microchip PHY 女儿板添加以太网连接功能,使用 Microchip 扩展板添加 WiFi 连接能力,并通过 Microchip 音频女儿板添加音频输入和输出功能。这些板完全集成到 PIC32 强大的软件框架 MPLAB Harmony 中,该框架提供了一个灵活且模块化的接口
来应用开发、一套丰富的互操作软件堆栈(TCP-IP、USB)和易于使用的功能。Curiosity PIC32 MZ EF 开发板提供了扩展能力,使其成为连接性、物联网和通用应用中快速原型设计的绝佳选择。
微控制器概述
MCU卡片 / MCU

建筑
PIC32
MCU 内存 (KB)
2048
硅供应商
Microchip
引脚数
100
RAM (字节)
524288
使用的MCU引脚
mikroBUS™映射器
“仔细看看!”
Click board™ 原理图

一步一步来
项目组装
软件支持
库描述
该库包含 DAC 14 Click 驱动程序的 API。
关键功能:
dac14_set_dac_data- 此功能设置所选 DAC 通道的原始 DAC 数据dac14_start_function_gen- 此功能启动所选 DAC 通道的函数发生器dac14_config_function_gen- 此功能配置所选 DAC 通道的函数发生器
开源
代码示例
完整的应用程序代码和一个现成的项目可以通过NECTO Studio包管理器直接安装到NECTO Studio。 应用程序代码也可以在MIKROE的GitHub账户中找到。
/*!
* @file main.c
* @brief DAC 14 Click example
*
* # Description
* This example demonstrates the use of DAC 14 Click board by changing the voltage level
* on the OUT0 as well as the waveform signals from a function generator on the OUT1.
*
* The demo application is composed of two sections :
*
* ## Application Init
* Initializes the driver and performs the Click default configuration.
*
* ## Application Task
* Changes the voltage level on the OUT0 as well as the waveform signals from a function
* generator on the OUT1 every 3 seconds. The state of both outputs will be displayed
* on the USB UART.
*
* @author Stefan Filipovic
*
*/
#include "board.h"
#include "log.h"
#include "dac14.h"
static dac14_t dac14;
static log_t logger;
void application_init ( void )
{
log_cfg_t log_cfg; /**< Logger config object. */
dac14_cfg_t dac14_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.
dac14_cfg_setup( &dac14_cfg );
DAC14_MAP_MIKROBUS( dac14_cfg, MIKROBUS_1 );
err_t init_flag = dac14_init( &dac14, &dac14_cfg );
if ( ( I2C_MASTER_ERROR == init_flag ) || ( SPI_MASTER_ERROR == init_flag ) )
{
log_error( &logger, " Communication init." );
for ( ; ; );
}
if ( DAC14_ERROR == dac14_default_cfg ( &dac14 ) )
{
log_error( &logger, " Default configuration." );
for ( ; ; );
}
log_info( &logger, " Application Task " );
}
void application_task ( void )
{
static uint16_t dac = 0;
static uint8_t waveform = DAC14_WAVEFORM_TRIANGULAR;
if ( DAC14_OK == dac14_set_dac_data ( &dac14, DAC14_SEL_DAC_0, dac ) )
{
log_printf( &logger, "\r\n OUT0: %u -> %.2f V\r\n",
dac, ( float ) dac * DAC14_VDD_3V3 / DAC14_DAC_DATA_MAX );
dac += 100;
if ( dac > DAC14_DAC_DATA_MAX )
{
dac = DAC14_DAC_DATA_MIN;
}
}
err_t error_flag = dac14_stop_function_gen ( &dac14, DAC14_SEL_DAC_1 );
error_flag |= dac14_config_function_gen ( &dac14, DAC14_SEL_DAC_1, waveform,
DAC14_CODE_STEP_32_LSB, DAC14_SLEW_RATE_4_US );
error_flag |= dac14_start_function_gen ( &dac14, DAC14_SEL_DAC_1 );
if ( DAC14_OK == error_flag )
{
log_printf( &logger, " OUT1: " );
switch ( waveform )
{
case DAC14_WAVEFORM_TRIANGULAR:
{
log_printf( &logger, "triangular wave at about 4kHz\r\n" );
waveform = DAC14_WAVEFORM_SAWTOOTH;
break;
}
case DAC14_WAVEFORM_SAWTOOTH:
{
log_printf( &logger, "sawtooth wave at about 7.8kHz\r\n" );
waveform = DAC14_WAVEFORM_INV_SAWTOOTH;
break;
}
case DAC14_WAVEFORM_INV_SAWTOOTH:
{
log_printf( &logger, "inverse sawtooth wave at about 7.8kHz\r\n" );
waveform = DAC14_WAVEFORM_SINE;
break;
}
case DAC14_WAVEFORM_SINE:
{
log_printf( &logger, "sine wave at about 10.7kHz\r\n" );
waveform = DAC14_WAVEFORM_DISABLE;
break;
}
case DAC14_WAVEFORM_DISABLE:
{
log_printf( &logger, "function generator disabled\r\n" );
waveform = DAC14_WAVEFORM_TRIANGULAR;
break;
}
default:
{
log_printf( &logger, "unknown state\r\n" );
break;
}
}
}
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
额外支持
资源
类别:数模转换器
































