STM32H750VBT6驱动程控增益放大模块PGA113——基于CubeMX的Hal库

前言

高情已逐晓云空,不与梨花同梦。


最近,因为准备电赛的需要,需要用到程控增益放大模块(PGA113),也就是这篇博文的主角:破哥啊(谐音称呼),需要调通这位大哥,今天终于完成了驱动的程序代码。说起调 PGA113 这位大哥的过程,真是有点小感慨吧。

本来这个模块是另外一个队伍做第一个比赛准备项目需要用到的增益放大模块,他们买的是芯片(为什么买芯片呢?因为模块太贵,买不起。这里附上淘宝模块购买链接:https://item.taobao.com/item.htm?id=673514214019,我是推荐先买一个模块,玩明白了再自己之后买芯片自己做,不要像我们一样,直接买了六七个芯片,结果做出来差点没人会调,大佬的话就可以按自己的想法来做了),然后自己打板焊电路,做模块,结果他们队负责软件的同学调不出来,然后我们就展开了“礼让推辞”环节,最后调 PGA113 的任务就落到我身上了。

还好最后调出来了,因为网上能找到的资料也不多,就根据一个芯片手册看着慢慢弄,还是英文的,这里省略一百字吐槽的话,废话不多说,下面给大家分享一下。


一、介绍

简介

PGAPmgrammable Gain Amplifier 的英文名称,中文意思是 可编程增益放大器PGA 是一种通用性很强的放大器,其放大倍数可以根据需要用程序进行控制。采用这种放大器,可通过程序调节放大倍数,使 A/D 转换器满量程信号达到均一化,因而大大提高测量精度。

应用程序:

  • 远程静电计阅读
  • 自动增益控制
  • 便携式数据采集

手册目录:

在这里插入图片描述


SPI时序图

在这里插入图片描述
在这里插入图片描述

增益控制范围选择:

在这里插入图片描述

最重要的部分:SPI命令

在这里插入图片描述
在这里插入图片描述

  • 这里只需要将 SPI 配置为:Transmit Only Master 模式即可,我们不需要 PGA113 对单片机进行数据传输;
  • 记住写指令的 十六进制 表示:0x2a00(0x0010 1010 0000 0000)
    0010 1010:表示 写(write)模式;
    第一个0000:表示增益放大倍数;
    第二个0000:表示选择的通道数,(这里用的通道0,我们设计的模块没有用通道1,因为第一个版本是用了通道0,没用通道1,第二版本就换了一下,事实证明:用通道 0 还是比较有效的,就是存在一个初始就会有一倍放大的效果(Bug))

下面介绍我们的主角(PGA113):

在这里插入图片描述
在这里插入图片描述

  • 接线图:(这里我用的是 SPI1,软件片选:CS,用 DAC 输出 1.5 V 的参考电压)
STM32H750VBT6单片机PGA113模块
PA4(DAC1_OUT )VREF
GNDGND
PA5(SPI1_SCK)SCLK
PA7(SPI1_MOSI)DIO
PC4(SPI1_CS)CS

二、新建工程

1、进行 CubeMX 配置

  • 开启时钟:
    在这里插入图片描述

  • 配置时钟树:
    在这里插入图片描述

  • 开启DAC:
    在这里插入图片描述

  • SPI 配置:
    在这里插入图片描述

  • 生成代码:

在这里插入图片描述

在这里插入图片描述

  • 上述就完成了 CubeMX 生成代码的过程。

三、代码编写

  • main.c 文件中添加以下代码:
/* USER CODE BEGIN PTD */
//定义增益数组
uint16_t gainBuffer[8]={ 0x2a00,0x2a10,0x2a20,0x2a30,
						 0x2a40,0x2a50,0x2a60,0x2a70 };
//分别对应系统放大:
//对应数组下标:0, 1, 2, 3, 4, 5,  6,  7
//  二进制增益:1, 2, 4, 8,16,32, 64,128
//	  增益范围:1, 2, 5,10,20,50,100,200

//CS片选低电平为有效使能, CS片选高电平不使能
#define SPI_CS_Enable()					HAL_GPIO_WritePin(GPIOC,SPI1_CS_Pin,GPIO_PIN_RESET)
#define SPI_CS_Disable()				HAL_GPIO_WritePin(GPIOC,SPI1_CS_Pin,GPIO_PIN_SET)

/* USER CODE END PTD */
//定义函数控制增益放大倍数
void SetGain(int gain)
{
	uint8_t gtemp=0;
 
	switch(gain)
	{
		case 1:
			gtemp=0;
			break;
		case 2:
			gtemp=1;
			break;
		case 5:
			gtemp=2;
			break;
		case 10:
			gtemp=3;
			break;
		case 20:
			gtemp=4;
			break;
		case 50:
			gtemp=5;
			break;
		case 100:
			gtemp=6;
			break;
		case 200:
			gtemp=7;
			break;
	}
	
	SPI_CS_Enable();
	HAL_SPI_Transmit(&hspi1, (uint8_t *)gainBuffer+gtemp*2, 1, 0xffff);
	SPI_CS_Disable();
}
  /* USER CODE BEGIN 2 */
	
	PrintfUart("wang_test\r\n");
	
	//启动DAC转换器
	HAL_DAC_Start(&hdac1,DAC1_CHANNEL_1);															
	
	//电压转换:利用DAC输出1.5V的电压,作为参考电压(VREF)
	HAL_DAC_SetValue(&hdac1, DAC1_CHANNEL_1, DAC_ALIGN_8B_R, 116);	  

	SetGain(50);
	
	PrintfUart("Over\r\n");
	
  /* USER CODE END 2 */

四、实验结果

在这里插入图片描述
在这里插入图片描述


分享结束,其实写完觉得也没有特别难,就是一些细节要注意一下,例如:写命令的十六进制格式别写错(8+2=a,不是6)、还有将十六进制转换为八进制,这两个部分是我写驱动时候害我不浅的地方,提醒大家注意。


以上就是本篇博文的分享内容,如果对你有帮助的话,麻烦帮忙点个小赞,谢谢!!!

  • 15
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
### 回答1: STM32H750VBT6是一款由STMicroelectronics推出的高性能微控制器。要驱动TFT液晶显示器,我们需要完成以下几个步骤: 1.准备硬件:首先,我们需要连接TFT液晶显示器到STM32H750VBT6微控制器。通常情况下,TFT显示器会通过并行接口或SPI接口与微控制器进行连接。因此,确保正确地连接了TFT显示器与微控制器的对应引脚。 2.配置引脚:接下来,我们需要在STM32H750VBT6上配置相关引脚。根据TFT显示器的接口类型,选择合适的GPIO引脚,将其配置为相应的功能模式,以便与TFT显示器进行通信。 3.编写驱动程序:使用STM32H750VBT6的开发工具,如STM32CubeIDE等,编写驱动程序。驱动程序的作用是通过控制引脚的状态和发送相应的命令和数据,与TFT显示器进行通信,以实现数据的显示和控制。 4.初始化配置:在驱动程序中,需要进行初始化配置,包括设置TFT显示器的分辨率、像素格式、时钟频率等。此外,还需要配置TFT显示器的驱动模式、背光控制等。 5.绘制图像:一旦驱动程序成功配置,就可以使用相关接口函数进行图像的绘制。通过在驱动程序中调用相应的API函数,可以实现在TFT显示器上显示文本、图形和图像等。 6.调试和优化:在显示过程中,可能会出现一些问题,如图像显示不正确、颜色失真等。在这种情况下,我们需要对驱动程序进行调试和优化,以确保TFT显示器正常工作。 总而言之,驱动TFT液晶显示器需要正确连接硬件、配置引脚,编写驱动程序并进行初始化配置,最后通过调试和优化确保正常显示。通过以上步骤,我们可以实现STM32H750VBT6对TFT显示器的驱动。 ### 回答2: 要驱动TFT(薄膜晶体管)显示屏,我们可以使用STM32H750VBT6微控制器。首先,我们需要设置GPIO引脚和时钟,并初始化LCD控制器。然后,我们可以通过编程来配置FSMC控制器,该控制器可用于驱动外部存储器,包括TFT。 在配置FSMC控制器之后,我们需要根据TFT的规格来设置参数,例如颜色模式、像素分辨率等。这些参数可以通过命令和数据写入LCD控制器的寄存器来配置。根据TFT的接口类型(如RGB、SPI等),我们需要相应地设置数据传输方式。 一旦配置完成,我们可以通过向LCD控制器发送像素数据来显示图像。这涉及将图像数据写入FSMC外部存储器接口,并设置控制信号以选择TFT的特定像素。为了获得平滑的图像过渡和动态效果,我们可以使用双缓冲技术来存储多个图像帧。 此外,为了增加用户交互性,我们可以将触摸屏与TFT结合使用。通过配置STM32的触摸屏控制器,并连接触摸屏传感器,我们可以实现触摸输入功能。 总结起来,驱动TFT显示屏需要完成以下步骤: 1. 设置GPIO引脚和时钟,并初始化LCD控制器。 2. 配置FSMC控制器,包括设置参数和数据传输方式。 3. 通过向LCD控制器发送像素数据来显示图像。 4. 使用双缓冲技术以获得平滑的图像过渡和动态效果。 5. 结合触摸屏控制器和传感器以实现触摸输入功能。 以上是对于使用STM32H750VBT6驱动TFT的基本步骤,具体的实现可能会因特定的TFT型号和应用需求而有所区别。实施时应参考相关技术文档和资料,并根据具体情况进行适当的调整和优化。 ### 回答3: 要驱动STM32H750VBT6控制器上的TFT液晶显示屏,需要进行以下步骤: 1. 硬件连接:将TFT液晶屏的引脚与STM32H750VBT6控制器的引脚连接。按照液晶屏的规格书,连接液晶屏的数据总线(像RGB、SPI、I2C等)、控制信号(像时钟、复位、使能等)。确保连接的引脚是正确的,并且按照正确的电气特性连接。 2. 初始化控制器:通过配置控制器的寄存器和设置寄存器的值,来初始化控制器。这些寄存器包括控制显示区域、像素格式、像素时钟、控制信号等。根据液晶显示屏的规格,设置控制器的寄存器为合适的值。 3. 数据写入:通过控制器的数据总线(像RGB、SPI、I2C等)向液晶屏发送数据。这些数据包括要显示的图像的像素值、控制信号等。可以通过控制器的寄存器设置像素颜色、显示坐标等。 4. 刷新显示:在液晶屏上显示图像之前,需要将数据刷新到屏幕上。这可以通过控制器的寄存器来触发刷新操作。控制器将根据设置的寄存器值,将数据从内存写入液晶屏中的显示RAM。 5. 控制屏幕显示:如果需要,控制器可以设置液晶屏的亮度、对比度等显示参数。这些参数可以通过控制器的寄存器来设置,以满足显示要求。 通过上述步骤,可以将STM32H750VBT6控制器连接并驱动TFT液晶显示屏,实现图像的显示功能。但是具体的驱动代码会根据使用的液晶显示屏的类型和控制器的规格书来编写。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

W_oilpicture

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值