[应用相关]

Stm32f103 DAC 学习笔记

[复制链接]
612|7
手机看帖
扫描二维码
随时随地手机跟帖
externally|  楼主 | 2019-6-17 16:43 | 显示全部楼层 |阅读模式
最近在做电流型信号输出的项目,遇到了些问题这里把这些解决方法做一个笔记方便以后运用。在搞这个的时候因为手册这部分讲的不是很详细,所以在使用上也遇到了些阻力。
用的是64封装的芯,   此芯ADC的基准Vref+和电源是同一个端口,Vref-共用电源地。在电池输出时AD值为0时 取样电阻100欧姆 有0.66mA的电流输出,只要在初始化时只要失能端口输出缓冲,输出可到0.0025mA。OK问题就解决了。
void AnalogInit(void)
{
    DAC_InitTypeDef  DAC_InitStructure;
    GPIO_InitTypeDef GPIO_InitStructure;

      RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOA, ENABLE);
      /* DAC Periph clock enable */
      RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);
      
    /* Configure DAC channe1 output pin */
    GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_4;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    /* Configure DAC channe1 output pin */
    GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_5;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

   
    /* DAC channel1 Configuration */
    DAC_InitStructure.DAC_Trigger = DAC_Trigger_Software;
    DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None;
    DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Disable;    //输出缓冲失能   
    DAC_InitStructure.DAC_LFSRUnmask_TriangleAmplitude = DAC_TriangleAmplitude_4095;

    DAC_Init(DAC_Channel_1, &DAC_InitStructure);

    /* DAC channel2 Configuration */
    DAC_Init(DAC_Channel_2, &DAC_InitStructure);

    /* Enable DAC Channel1: Once the DAC channel1 is enabled, PA.04 is
    automatically connected to the DAC converter. */
    DAC_Cmd(DAC_Channel_1, ENABLE);
    /* Enable DAC Channel2: Once the DAC channel2 is enabled, PA.05 is
    automatically connected to the DAC converter. */
    DAC_Cmd(DAC_Channel_2, ENABLE);

}

//端口1AD值更新
void DAC1_update(u16 ch1)
{
    ch1 = (ch1 <<4) & 0xfff0;
    /* Set DAC Channel1 DHR12L register */
    DAC_SetChannel1Data(DAC_Align_12b_L, ch1);

    /* Start DAC Channel1 conversion by software */
    DAC_SoftwareTriggerCmd(DAC_Channel_1, ENABLE);
}

void DAC2_update(u16 ch2)
{
    ch2 = (ch2 <<4) & 0xfff0;
    /* Set DAC Channel2 DHR12L register */
    DAC_SetChannel2Data(DAC_Align_12b_L, ch2);

    /* Start DAC Channel1 conversion by software */
    DAC_SoftwareTriggerCmd(DAC_Channel_2, ENABLE);
}


使用特权

评论回复
mmuuss586| | 2019-6-29 22:16 | 显示全部楼层
不错,感谢分享

使用特权

评论回复
mmuuss586| | 2019-6-29 22:16 | 显示全部楼层
不错,感谢分享

使用特权

评论回复
xiaoqizi| | 2019-7-8 09:30 | 显示全部楼层
要用高精度电阻吗

使用特权

评论回复
磨砂| | 2019-7-8 09:38 | 显示全部楼层
要求不高的话 应该不用高精度的把

使用特权

评论回复
晓伍| | 2019-7-8 09:55 | 显示全部楼层
驱动能力如何

使用特权

评论回复
八层楼| | 2019-7-8 10:00 | 显示全部楼层
非常感谢楼主分享

使用特权

评论回复
观海| | 2019-7-8 10:45 | 显示全部楼层
代码写的非常整齐

使用特权

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

本版积分规则

10

主题

285

帖子

0

粉丝