• 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 */
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    //定义函数控制增益放大倍数
    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();
    }
    
    • 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
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
      /* 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 */
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    四、实验结果

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


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


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

  • 相关阅读:
    黔院长 | 邀您一同共筑养生健康项目!
    JavaScript学习Day001
    Vue中Class绑定和style绑定的方式
    X3DS V4.0 正式发布 性能、功能、易用性和安全性大幅提升
    【动画进阶】极具创意的鼠标交互动画
    freefilesync文件同步软件
    Nginx反向代理、负载均衡理解及实践
    C++ 简介、基本语法、数据类型、变量、常量
    tcp记录
    HTML5 基础
  • 原文地址:https://blog.csdn.net/WandZ123/article/details/125948258