1924|1

250

帖子

5

TA的资源

纯净的硅(初级)

楼主
 

【N32L43x评测】DAC各种波形输出测试 [复制链接]

 

一般DAC输出很多都是用在模拟量信号控制地方,可以控制运放输出电压。我们本次主要就是简单玩下其输出噪声,正弦波,三角波这些。

  • #include "dac.h"
  • void TIM4_TrgoInit(void);
  • void dac_channel_one_init()
  • {
  •       
  •        GPIO_InitType GPIO_InitStructure;
  •        DAC_InitType DAC_InitStructure;
  •        /* DAC Periph clock enable */
  •     RCC_EnableAPB1PeriphClk(RCC_APB1_PERIPH_DAC, ENABLE);
  •       
  •     GPIO_InitStruct(&GPIO_InitStructure);
  •     /* GPIOA Periph clock enable */
  •     RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOA, ENABLE);
  •     /* Once the DAC channel is enabled, the corresponding GPIO pin is automatically
  •        connected to the DAC converter. In order to avoid parasitic consumption,
  •        the GPIO pin should be configured in analog */
  •     GPIO_InitStructure.Pin       = GPIO_PIN_4;
  •     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Input;
  •     GPIO_InitStructure.GPIO_Pull = GPIO_No_Pull;
  •     GPIO_InitPeripheral(GPIOA, &GPIO_InitStructure);
  •       
  •     /* DAC Channel Configuration */
  •     DAC_InitStructure.Trigger      = DAC_TRG_NONE;
  •     DAC_InitStructure.WaveGen      = DAC_WAVEGEN_NONE;
  • //    DAC_InitStructure.LfsrUnMaskTriAmp = DAC_TRIAMP_2047;
  •     DAC_InitStructure.BufferOutput = DAC_BUFFOUTPUT_DISABLE;
  •     DAC_Init(&DAC_InitStructure);
  •  
  •        DAC_Enable(ENABLE);
  •       
  • //    DAC_SetChData(DAC_ALIGN_R_12BIT,0x100);
  • //    TIM4_TrgoInit();
  • //    /* TIM4 enable counter */
  • //    TIM_Enable(TIM4, ENABLE);
  • }
  • /**
  •  * @brief  TIM4 Init.
  •  */
  • void TIM4_TrgoInit(void)
  • {
  •     TIM_TimeBaseInitType TIM_TimeBaseStructure;
  •     /* TIM4 Periph clock enable */
  •     RCC_EnableAPB1PeriphClk(RCC_APB1_PERIPH_TIM4, ENABLE); // RCC_APB2_PERIPH_TIM8
  •     /* TIM4 Configuration */
  •     /* Time base configuration */
  •     TIM_InitTimBaseStruct(&TIM_TimeBaseStructure);
  •     TIM_TimeBaseStructure.Period    = 0x08;
  •     TIM_TimeBaseStructure.Prescaler = 0x03;
  •     TIM_TimeBaseStructure.ClkDiv    = 0x0;
  •     TIM_TimeBaseStructure.CntMode   = TIM_CNT_MODE_UP;
  •     TIM_InitTimeBase(TIM4, &TIM_TimeBaseStructure);
  •     /* TIM4 TRGO selection */
  •     TIM_SelectOutputTrig(TIM4, TIM_TRGO_SRC_UPDATE);
  • }

这么一段初始化代码,都是我们后面各种测试能用上的,先看下上面的是正弦波配置,我看给的例程是DMA+定时器4触发产生的,这里我们用他直接输出电压加正弦函数表来实现,这个有缺点,就是while中只能有这个循环,多一个任务都不行。

  • uint16_t SinData[256]={2048, 2098, 2149, 2199, 2250, 2300, 2350, 2399, 2449, 2498, 2548, 2596, 2645, 2693, 2741, 2788, 2835, 2881, 2927, 2972, 3017, 3061, 3105, 3148, 3190, 3231, 3272, 3312, 3351, 3390, 3428, 3465, 3501, 3536, 3570, 3603, 3636, 3667, 3697, 3727, 3755, 3783, 3809, 3834, 3858, 3881, 3903, 3924, 3944, 3962, 3980, 3996, 4011, 4025, 4037, 4049, 4059, 4068, 4075, 4082, 4087, 4091, 4094, 4095, 4095, 4095, 4093, 4089, 4085, 4079, 4072, 4063, 4054, 4043, 4031, 4018, 4003, 3988, 3971, 3953, 3934, 3914, 3892, 3870, 3846, 3822, 3796, 3769, 3741, 3712, 3682, 3651, 3620, 3587, 3553, 3518, 3483, 3446, 3409, 3371, 3332, 3292, 3252, 3211, 3169, 3126, 3083, 3039, 2995, 2950, 2904, 2858, 2811, 2764, 2717, 2669, 2621, 2572, 2523, 2474, 2424,2375, 2325, 2275, 2224, 2174, 2124, 2073, 2023, 1972, 1922, 1872, 1821, 1771, 1721, 1672, 1622, 1573, 1524, 1475, 1427, 1379, 1332, 1285, 1238, 1192, 1146, 1101, 1057, 1013, 970, 927, 885, 844, 804, 764, 725, 687, 650, 613, 578, 543, 509, 476, 445, 414, 384, 355, 327, 300, 274, 250, 226, 204, 182, 162, 143, 125, 108, 93, 78, 65, 53, 42, 33, 24, 17, 11, 7, 3, 1, 0, 0, 2, 5, 9, 14, 21, 28, 37, 47, 59, 71, 85, 100, 116, 134, 152, 172, 193, 215, 238, 262, 287, 313, 341, 369, 399, 429, 460, 493, 526, 560, 595, 631, 668, 706, 745, 784, 824, 865, 906, 948, 991, 1035, 1079, 1124, 1169, 1215, 1261, 1308, 1355, 1403, 1451, 1500, 1548, 1598, 1647, 1697, 1746, 1796, 1846, 1897, 1947, 1998, 2048};
  • while(1)
  • {
  •               for(int x=0;x<sizeof(SinData)/sizeof(SinData[0]);x++){
  •                      DAC_SetChData(DAC_ALIGN_R_12BIT,SinData[x]);
  •               }
  • }

就是如上代码,测试效果如下:

 

 

三角波就是把红框里的都使能,然后有系统自己产生即可,使用定时器4。

修改如下,测试效果如下:

  •     DAC_InitStructure.Trigger      = DAC_TRG_T4_TRGO;
  •     DAC_InitStructure.WaveGen      = DAC_WAVEGEN_TRIANGLE;
  •        DAC_InitStructure.LfsrUnMaskTriAmp = DAC_TRIAMP_2047;

 

同样噪声输出也是一样,修改如下,效果如下:

  •     DAC_InitStructure.Trigger      = DAC_TRG_T4_TRGO;
  •     DAC_InitStructure.WaveGen      = DAC_WAVEGEN_NOISE;
  •        DAC_InitStructure.LfsrUnMaskTriAmp = DAC_TRIAMP_2047;

 

其中我也测试了其稳定性,目前还是觉得波动不是特别大的,后期使用还需要考虑内部温升看有没有影响了。

最新回复

感谢分享   详情 回复 发表于 2022-8-15 19:30
点赞(1) 关注
 
 

回复
举报

1

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

感谢分享

 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
有奖探索 | 和村田一起,深挖 GNSS 开发!
活动时间:即日起-5月11日
活动奖励:智能手环、螺丝刀套装、双肩包

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

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

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

北京市海淀区中关村大街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
快速回复 返回顶部 返回列表