在cubemx中选择OPAMP,其中后两个为可配置运放倍数。PGA NOT CONNECTED 为普通可编程运放,PGA CONNECTED 还会多出来一个VINM管脚。
如下图所示:
在这里我只用基本模式,即为PGA NOT CONNECTED
然后配置ADC通道,也就是OUT口直接和内部ADC通道相连接。
这个口是在ADC2的通道3上,有差分和单通道两个选项,本次只需要用单通道的,所以用最后一个模式,单通道模式。
配置到这里就差不多了,需要注意的是,配置ADCDMA时,这连个选项需要开起来。最后,dma中断默认开启的,所以要在DMA初始化的参数中将其关闭。
接下来就进入程序编程了。
首先校准一下ADC,注意,必须要在开启AD转换之前做。
1 |
HAL_ADCEx_Calibration_Start(&hadc2,ADC_SINGLE_ENDED);//校准ADC,选择单端模式,非差分模式校准 |
然后开始ADCDMA,开启运放。注意,必须要start运放才能使运放正常使用。
1 2 3 4 |
HAL_ADC_Start_DMA(&hadc2,(uint32_t *)adc_dma_buf,ADC_bufsize); HAL_OPAMP_Start(&hopamp2); hopamp2.Init.PgaGain = OPAMP_PGA_GAIN_4; HAL_OPAMP_Init(&hopamp2); |
最后用来测试的DAC也贴出来做个笔记吧。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
void StartDefaultTask(void const * argument) { /* USER CODE BEGIN 5 */ /* Infinite loop */ HAL_DAC_Start(&hdac1,DAC_CHANNEL_1);//其中DAC_CHANNEL_1 可见DAC1_INIT初始函数 HAL_DAC_SetValue(&hdac1, DAC_CHANNEL_1, DAC_ALIGN_12B_R, 0x100);//DAC_ALIGN_12B_R 为右对齐,0x400为输出数值。 HAL_ADC_Start_DMA(&hadc2,(uint32_t *)adc_dma_buf,ADC_bufsize); HAL_OPAMP_Start(&hopamp2); hopamp2.Init.PgaGain = OPAMP_PGA_GAIN_4; HAL_OPAMP_Init(&hopamp2); while(1) { osDelay(1000); HAL_GPIO_TogglePin(LD2_GPIO_Port,LD2_Pin); printf("%d\n",adc_dma_buf[0]); //printf("123\n"); } /* USER CODE END 5 */ } |
以上。
通过下面代码可以修改运放放大倍率,其改变数值为2,4,8,16四种。
1 2 |
hopamp2.Init.PgaGain = OPAMP_PGA_GAIN_4; HAL_OPAMP_Init(&hopamp2); |
也可以手工修改,但是发现好像确实有点烦啊。好或很多东西。还是算了吧。呵呵。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
void Set_OPAMP4_Magnification(uint8_t Magnification)//Magnificatio:1、2、4、8、16 { switch(Magnification) { case 1: hopamp4.Init.Mode = OPAMP_FOLLOWER_MODE;//配置1倍放大倍率。 HAL_OPAMP_Init(&hopamp4);//配置完放大倍率后,需要通过init加载。 HAL_OPAMP_SelfCalibrate(&hopamp4); break; case 2: hopamp4.Init.Mode = OPAMP_PGA_MODE;//配置多倍放大倍率。 hopamp4.Init.PgaGain = OPAMP_PGA_GAIN_2;//配置放大倍率。 HAL_OPAMP_Init(&hopamp4);//配置完放大倍率后,需要通过init加载。 HAL_OPAMP_SelfCalibrate(&hopamp4); break; case 4: hopamp4.Init.Mode = OPAMP_PGA_MODE;//配置多倍放大倍率。 hopamp4.Init.PgaGain = OPAMP_PGA_GAIN_4;//配置放大倍率。 HAL_OPAMP_Init(&hopamp4);//配置完放大倍率后,需要通过init加载。 HAL_OPAMP_SelfCalibrate(&hopamp4); break; case 8: hopamp4.Init.Mode = OPAMP_PGA_MODE;//配置多倍放大倍率。 hopamp4.Init.PgaGain = OPAMP_PGA_GAIN_8;//配置放大倍率。 HAL_OPAMP_Init(&hopamp4);//配置完放大倍率后,需要通过init加载。 HAL_OPAMP_SelfCalibrate(&hopamp4); break; case 16: hopamp4.Init.Mode = OPAMP_PGA_MODE;//配置多倍放大倍率。 hopamp4.Init.PgaGain = OPAMP_PGA_GAIN_16;//配置放大倍率。 HAL_OPAMP_Init(&hopamp4);//配置完放大倍率后,需要通过init加载。 HAL_OPAMP_SelfCalibrate(&hopamp4); break; default: break; } } |
转载请注明:徐自远的乱七八糟小站 » 【原创】STM32F303RE可编程运放使用