打印
[活动专区]

【AT-START-F407测评】七、DAC

[复制链接]
459|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
      本次实验使用AT32F407VGT7的DAC输出通道1(PA4)输出三个预设电压值(1v、2v、3v)并利用万用表进行显示。预设电压值通过开发板上的用户按键进行设置,并同时利用三个颜色的LED灯(LED2、LED3、LED4)进行指示。

一、实验资源
1、AT-START-F407开发板;
2、keil v5.31.0.0;
3、BSP等相关资源;
4、UT61E;

二、相关知识学习
      AT32F407VGT7的DAC(数字->模拟转换)模块是12位数字输入,电压输出的“DAC”:








      “DAC”支持多种触发方式,本次实验使用了软件触发工作方式。可配置为8位、12位工作模式,数据格式可选择为左对齐或右对齐。实验中DAC被配置成12位右对齐工作模式。根据DAC输出电压计算工式:

计划在DAC输出三个电压值(1v、2v、3v),经测量开发板上的VREF=3.199V,经计算对应写入“DAC_HDR12RD”寄存器的数据分别为:0x0500、0x0A00、0x0F00。

三、硬件连接
      万用表连接PA4端口。

四、程序实现
      代码在“BSP”基础上修改,并利用板载用户按键中断控制“DAC”(PA4)输出电压。
为方便写入“DAC_HDR12RD”寄存器的预设电压值建个数组:
uint16_t DAC_DATA[]={0x0000,0x0500,0x0A00,0x0F00};

DAC配置:
static void DAC_Config(void)
{
        DAC_InitType DAC_InitStructure;
       
        /* DAC channel1 Configuration */
  DAC_StructInit(&DAC_InitStructure);
  DAC_InitStructure.DAC_Trigger = DAC_Trigger_Software;
  DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None;
  DAC_InitStructure.DAC_LFSRUnmask_TriangleAmplitude = DAC_LFSRUnmsk_Bits11_0;
  DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Enable;
  DAC_Init(DAC_Channel_1, &DAC_InitStructure);

  /* Enable DAC Channel1: Once the DAC channel1 is enabled, PA.04 is
     automatically connected to the DAC converter. */
  DAC_Ctrl(DAC_Channel_1, ENABLE);
}

按键中断处理:
void EXTI0_IRQHandler(void)
{
        static uint8_t BUTTON_CONT=0;
  Delay_ms(5);
  EXTI_ClearIntPendingBit(BUTTON_EXTI_LINE[gButtonType]);
  if ((GPIO_ReadInputData(BUTTON_GPIO_PORT[gButtonType]) & BUTTON_GPIO_PIN[gButtonType]) == \
      BUTTON_GPIO_PIN[gButtonType])
  {
                BUTTON_CONT++;
                if(BUTTON_CONT>3)
                        BUTTON_CONT=0;
                switch(BUTTON_CONT)
                {
                        case 1:        {
                                                                AT32_LEDn_ON(LED2);AT32_LEDn_OFF(LED3);AT32_LEDn_OFF(LED4);
                                                                DAC_SetChannel1Data(DAC_Align_12b_Right, DAC_DATA[1]);
                                                                DAC_SoftwareTriggerCtrl(DAC_Channel_1, ENABLE);
                                                                break;
                                                        }
                        case 2:        {
                                                                AT32_LEDn_OFF(LED2);AT32_LEDn_ON(LED3);AT32_LEDn_OFF(LED4);
                                                                DAC_SetChannel1Data(DAC_Align_12b_Right, DAC_DATA[2]);
                                                                DAC_SoftwareTriggerCtrl(DAC_Channel_1, ENABLE);
                                                                break;
                                                        }
                        case 3:        {
                                                                AT32_LEDn_OFF(LED2);AT32_LEDn_OFF(LED3);AT32_LEDn_ON(LED4);
                                                                DAC_SetChannel1Data(DAC_Align_12b_Right, DAC_DATA[3]);
                                                                DAC_SoftwareTriggerCtrl(DAC_Channel_1, ENABLE);
                                                                break;
                                                        }
                        default:{
                                                                AT32_LEDn_OFF(LED2);AT32_LEDn_OFF(LED3);AT32_LEDn_OFF(LED4);
                                                                DAC_SetChannel1Data(DAC_Align_12b_Right, DAC_DATA[0]);
                                                                DAC_SoftwareTriggerCtrl(DAC_Channel_1, ENABLE);
                                                                break;
                                                        }
                }
  }
}

五、实验结果
设定为“0”输出时有个底数





六、总结
      本次实验比较简单,所有复杂的都建立在这些简单、基础的实验之上,继续努力。



使用特权

评论回复
沙发
pattywu| | 2021-2-3 12:20 | 只看该作者
从图上看,DAC输出值,还是很准的啊。

使用特权

评论回复
板凳
lisingch|  楼主 | 2021-2-3 12:35 | 只看该作者
pattywu 发表于 2021-2-3 12:20
从图上看,DAC输出值,还是很准的啊。

精度不错。加个外置基准做个数控电源

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

99

主题

14978

帖子

17

粉丝