723|0

17

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

HC32F4A0开发板DAC信号发生测试 [复制链接]

 

HC32F4A0开发板DAC信号发生测试

1概述

1.1开发板接口

        HC32F4A0搭载了两个12位的数字-模拟电压转换器单元DAC1和DAC2。每个DAC单元包含两个D/A转换通道,可以独立转换也可以通过转换数据的同步更新实现同步转换。每个转换通道配有一个输出放大器,可以在没有外部运放时直接驱动外部负载。独立管脚输入参考电压VREFH和VREFL可用来提高转换精度。
参考官方提供的例程,计划产生正弦波、方波、锯齿波、三角波四种波形,使用按键K1 ~ K5来控制波形的产生和关闭。

1.2开发板原理图

        DAC外围电路和引脚分配如图1、2所示。
图1 DAC外围电路示意图
图2 引脚分配图

1.3测试设备

        本次测试所用设备如表1所示,设备实物图连接图如图3所示:

测试设备

单位 数量
EV_F4A0_LQ176_REV1.0开发板
ARM仿真器
5V电源适配器
RIGOL DHO804示波器
表1 测试设备
图3 开发板实物连接图

2代码编写

方波产生函数
static void Pulse_Init(uint32_t pPulseTable[], uint32_t u32count)
{
	uint32_t i;
    float32_t pulse;
    for (i = 0U; i < u32count; i++) {
        if(i<=u32count/2-1)
			pulse=u32count;
		else
			pulse=0;

#if (DAC_DATA_ALIGN == DAC_DATA_ALIGN_LEFT)
        {
            pPulseTable[i] = (uint32_t)pulse << 9;
        }
#else
        {
            pSinTable[i] = (uint32_t)fSin;
        }
#endif
    }
}

 

锯齿波产生函数
static void Sawtooth_Init(uint32_t pSawTable[], uint32_t u32count)
{
	uint32_t i;
    float32_t sawtooth;
    for (i = 0U; i < u32count; i++) {
        sawtooth=i;

#if (DAC_DATA_ALIGN == DAC_DATA_ALIGN_LEFT)
        {
            pSawTable[i] = (uint32_t)sawtooth << 9;
        }
#else
        {
            pSinTable[i] = (uint32_t)fSin;
        }
#endif
    }
}

 

三角波产生函数
static void Triangle_Init(uint32_t pTriangleTable[], uint32_t u32count)
{
	uint32_t i;
	uint32_t j=0;
    float32_t triangle;
    for (i = 0U; i < u32count; i++) {
        if(i<=u32count/2-1)
			j=j+1;
			
		else
			j=j-1;
		
	triangle=j;

#if (DAC_DATA_ALIGN == DAC_DATA_ALIGN_LEFT)
        {
            pTriangleTable[i] = (uint32_t)triangle*2 << 9;
        }
#else
        {
            pSinTable[i] = (uint32_t)fSin;
        }
#endif
    }
}

主函数

int32_t main(void)
{
    uint16_t u16OutputCnt = 0U;
    en_key_event_t enEvent;
    uint8_t u8IsConversionStart = 0U;
	uint32_t flag=0U;

    LL_PERIPH_WE(LL_PERIPH_GPIO | LL_PERIPH_FCG | LL_PERIPH_PWC_CLK_RMU | \
                 LL_PERIPH_EFM | LL_PERIPH_SRAM);

    BSP_CLK_Init();
    BSP_IO_Init();
    BSP_LED_Init();
    BSP_KEY_Init();

    /* Init MAU for generating sine data*/
    MAU_Init();
    /* Init sine data table */
    static uint32_t gu32SinTable[SINE_DOT_NUMBER];
    SinTable_Init(gu32SinTable, SINE_DOT_NUMBER);
	
	static uint32_t gu32SawTable[SINE_DOT_NUMBER];
    Sawtooth_Init(gu32SawTable, SINE_DOT_NUMBER);
	
	static uint32_t gu32PulseTable[SINE_DOT_NUMBER];
    Pulse_Init(gu32PulseTable, SINE_DOT_NUMBER);
	
	static uint32_t gu32TriangleTable[SINE_DOT_NUMBER];
    Triangle_Init(gu32TriangleTable, SINE_DOT_NUMBER);
	
	DAC_ConversionInit();
	
    LL_PERIPH_WP(LL_PERIPH_GPIO | LL_PERIPH_FCG | LL_PERIPH_PWC_CLK_RMU | \
                 LL_PERIPH_EFM | LL_PERIPH_SRAM);

    for (;;) {
        enEvent = Key_Event();
        switch (enEvent) {
            case E_KEY1_PRESSED:
                if (u8IsConversionStart == 1U) {
                    break;
                }
				flag=1;
                u16OutputCnt = 0U;
                u8IsConversionStart = 1U;
                BSP_LED_On(LED_BLUE);
                DAC_StartConversion();
                break;
			case E_KEY2_PRESSED:
                if (u8IsConversionStart == 1U) {
                    break;
                }
				flag=2;
                u16OutputCnt = 0U;
                u8IsConversionStart = 1U;
                BSP_LED_On(LED_BLUE);
                DAC_StartConversion();
                break;
			case E_KEY3_PRESSED:
                if (u8IsConversionStart == 1U) {
                    break;
                }
				flag=3;
                u16OutputCnt = 0U;
                u8IsConversionStart = 1U;
                BSP_LED_On(LED_BLUE);
                DAC_StartConversion();
                break;
			case E_KEY4_PRESSED:
                if (u8IsConversionStart == 1U) {
                    break;
                }
				flag=4;
                u16OutputCnt = 0U;
                u8IsConversionStart = 1U;
                BSP_LED_On(LED_BLUE);
                DAC_StartConversion();
                break;
            case E_KEY5_PRESSED:
                if (u8IsConversionStart == 0U) {
                    break;
                }
                u8IsConversionStart = 0U;
                DAC_StopConversion();
                BSP_LED_Off(LED_BLUE);
                break;

            default:
                break;
        }

        if (u8IsConversionStart == 0U) {
            continue;
        }
		if (flag==1){
			DAC_SetConversionData(gu32SinTable[u16OutputCnt]);
		}
        else if(flag==2){
			DAC_SetConversionData(gu32SawTable[u16OutputCnt]);
		}
		else if(flag==3){
			DAC_SetConversionData(gu32PulseTable[u16OutputCnt]);
		}
		else if(flag==4){
			DAC_SetConversionData(gu32TriangleTable[u16OutputCnt]);
		}
		else{
		}
        /* Loop output */
        if (++u16OutputCnt >= SINE_DOT_NUMBER) {
            u16OutputCnt = 0U;
        }
    }
}

 

3实验现象

3.1实验现象分析

        按下开发板上的K1、K2、K3、K4,示波器分别显示正弦波、锯齿波、方波、三角波,按下K5会关闭DAC输出。

3.2实验现象

        如图4、5、6、7所示
图4 正弦波
图5 锯齿波
图6 方波
图7 三角波
点赞 关注
 
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表