本帖最后由 iysheng 于 2016-7-16 13:49 编辑
今天再调试一个STM32的dac ,因为LANDZO Z1 上的电机是电压控制的,所以,移植到STM32 的时候就需要这个外设。 用了GPIOA.4(通道1)引脚。 先看手册上的介绍: Dac功能主要分两大类:1、波形发生器,可以产生三角波、伪噪声。2、普通的dac,模数转换。 我分别对以上三种功能进行了测试:
1。三角波测试效果如下图: 在配置的过程中,为了比较清晰的看到波形,我们记得要设置比较高的放大倍数,如手册介绍的: 上图波形,我是设置的最高。配置代码如下:
- DAC_InitStructure.DAC_Trigger = DAC_Trigger_Software;
- DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_Triangle;
- DAC_InitStructure.DAC_LFSRUnmask_TriangleAmplitude = DAC_TriangleAmplitude_4095;
- DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Enable;
- DAC_Init(DAC_Channel_1, &DAC_InitStructure);
复制代码
2。伪噪声的波形: 同样对应的设置也要设置最高,使噪声的阈值范围比较大,才能清晰的看到噪声的变化。配置过程如下:
- DAC_InitStructure.DAC_Trigger = DAC_Trigger_Software;
- DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_Noise;
- DAC_InitStructure.DAC_LFSRUnmask_TriangleAmplitude = DAC_LFSRUnmask_Bits11_0;
- DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Enable;
- DAC_Init(DAC_Channel_1, &DAC_InitStructure);
复制代码
3。正常的数模转换,我定义了sin 函数,先用matlab取点: 定义数组: unsigned charsinwave[8]={64,109,128,109,64,18,0,18};
波形如下: 主要配置过程如下:
- DAC_InitStructure.DAC_Trigger = DAC_Trigger_Software;
- DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None;
- DAC_InitStructure.DAC_LFSRUnmask_TriangleAmplitude = DAC_LFSRUnmask_Bits9_0;
- DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Enable;
- DAC_Init(DAC_Channel_1, &DAC_InitStructure);
复制代码
- for(i=0;i<8;i++)
- {
- DAC_SoftwareTriggerCmd(DAC_Channel_1, ENABLE);
- DAC_SetChannel1Data (DAC_Align_8b_R,sinwave[i]);
- }
复制代码
至此,DAC部分的代码,算是告一段落了。
|