从‘0’开始完成一个阻抗分析仪(中篇——初始化,基于CUBEMAX G431RB)

  • Post author:
  • Post category:其他


这是一个卑微电子信息学员的开始

哦 现在是通信

4月5日工作记录



这是学习stm32的第n天

卑微通信学员开始了stm32的学习过程。



从‘0’开始完成一个阻抗分析仪

怎么说呢,这种东西会者不难

不会嘛,就像我绝望了好久,别说了



如何理解阻抗分析仪的原理

我决定另起一篇写 有点难度(链接还在我脑子里)。

后面的是各种操作,反正你一步步做就是对的。

有问题不懂看下面这篇博客。



给我划重点!!

这里先说明CUBEMAX的操作,这样操作的好处和原因解释在后面。



CUBEMAX操作

在这里插入图片描述

1配置时钟和SW

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2ADC配置

ADC1开启IN12,独立输入,同时IN12的引脚会作为OPAMP的输出,点击对应的引脚就可以设置。

在这里插入图片描述

在这里插入图片描述

3DAC配置

DAC1作为输入信号源,timer15触发,采样频率1M。开启DMA循环模式,DMA中断优先等级中级。

在这里插入图片描述

在这里插入图片描述

DAC3向OPAMP正输入提供VCC/2的电压。软件触发,开启DMA循环模式,DMA中断优先等级低。

在这里插入图片描述

在这里插入图片描述

4OPAMP配置

独立工作模式并用DAC3channel2的输出作为正输入,与前面对应。别的不用做多的设置。

在这里插入图片描述

5GPIO配置(我将数据放到显示屏上进行显示)

随便配置两个引脚就完事。

在这里插入图片描述



关于ADC的相关配置

重点就在于IN12是一个复用引脚(少引出一根导线),这样操作可以提升阻抗分析仪的精准性。



关于DAC的相关配置

重点在于DAC3是一个内部的输出,选用out2作为OPAMP的正输入。这样直接可以少引出一个引脚,同时做到了最短距离连接和稳定性。



关于OPAMP的相关配置

重点在于OPAMP使用独立工作模式并用DAC3channel2作为正输入,与前面提到的相对应。



关于显示屏的相关配置

去看这篇博客

https://blog.csdn.net/mohaoyuan/article/details/115269883

写过的东西绝不做第二遍



将所有配置串联起来

好了,现在准备过程都完成了,要开始的就是纯代码的操作了。



完成DAC的初始化

对DAC1out1的初始化:

	//DAC1 ch1 start&&wave
	HAL_DAC_Start(&hdac1, DAC_CHANNEL_1);	
	Coswave_Maker(ffv,POINT_NUMBER,2);
	HAL_DAC_Start_DMA(&hdac1, DAC_CHANNEL_1,(uint32_t *)coswave,POINT_NUMBER,DAC_ALIGN_12B_R);

其中Coswave_Maker是我的自制函数,生成对应点数和幅度的余弦波,然后就按部就班。

对DAC3out2的初始化:

	//DAC3 ch2 start
	HAL_DAC_SetValue(&hdac3, DAC_CHANNEL_2, DAC_ALIGN_12B_R, 2048);
	HAL_DAC_Start(&hdac3, DAC_CHANNEL_2);

就输出VCC/2就可以了。



完成OPAMP的初始化

	//OPAMP3 start
	HAL_OPAMP_Start(&hopamp3);
	HAL_OPAMP_SelfCalibrate(&hopamp3);

最后一句话是对OPAMP的自校准



完成ADC的初始化

	//ADC1 start
	HAL_ADCEx_Calibration_Start(&hadc1,ADC_SINGLE_ENDED);
	HAL_Delay(100);

第二句是ADC的自校准。第三局给它时间等待校准完成



完成TIMER的初始化

	//timer 15 start
	if (HAL_TIM_Base_Start(&htim15) != HAL_OK)
  {
    /* timer start error */
    Error_Handler();
  }	



完成LCD的初始化

	//LCD start
	OLED_Init();			
	OLED_Clear(); 
//	OLED_ShowString(0,0,"range",8);
//	OLED_ShowString(0,2,"phase",8);
	OLED_ShowString(0,0,"Rc",8);
	OLED_ShowString(0,2,"Cc",8);
	OLED_ShowString(0,4,"Rb",8);
	OLED_ShowString(0,6,"Cb",8);

到这里初始化和最开始的配置就完成了,感觉写了很多了,再另起一篇博客继续。


本文仅供学习使用,禁止一切转载或调用,最终解释权由作者本人享有。



版权声明:本文为mohaoyuan原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。