寒假在家一起练 - 2- 元器件特性测试仪
已实现对电阻, 电容, 电感, 二极管, 三极管5种元器件的测量, 以及在OLED屏上显示测量值和元器件符号.
标签
嵌入式系统
测试
元器件测试
void
更新2021-03-08
1246

实验任务:

  •  通过编程完成对5种以上元器件特性的测量,比如:
    • 电阻
    • 电容
    • 电感
    • 二极管
    • 三极管
    • 能够自动识别元器件
  • 在OLED屏幕上通过图形化的界面显示各种元器件的符号及测量得到的信息

以上完成对元件的自动识别,电阻电容二极管三极管参数测量.

      参考之前的CH579F元器件特性测试仪, 本次基于STM32G031的最小系统模块,在之前的代码上进行移植,修复了电感无法识别的BUG

首先建立CubeIDE工程, 配置引脚和片内外设如下:

FtzglSi4ltmk4_dMExS0XLzPnwAM

其中Probe是直接通过ADC测量的引脚;

STA_LED为核心上的指示灯, 与TIM16模块连接, 后来因为FLASH占用量过高, 将此模块代码取消.

为了移植适配参考的代码,的修改部分代码片段:

  1. 修改IO功能, 其中当IO配置为浮空时, 直接将其初始化为模拟模式
    /*******************************************************************************
    * Function Name  : MeasurePort_Init
    * Description    : 初始化测试端口模式
    * Input          : 	port: 端口选择
    		 	mode: 端口模式选择
    		 	level: 引脚输出电平设置,端口模式为浮空时任意设置即可
    * Return         : None
    *******************************************************************************/
    void MeasurePort_Init(MEASUREPORT port, PORTMODE mode, uint8_t level)
    {
    	switch(mode)
    	{
    		case PORT_WITH_NONE:
    			GPIO_ModeCfg(port.PIN_WITH_NONE, GPIO_MODE_OUTPUT_PP);
    			HAL_GPIO_WritePin(port.PIN_WITH_NONE.GPIO_Port,port.PIN_WITH_NONE.PIN,level);
    			GPIO_ModeCfg(port.PIN_WITH_680, GPIO_MODE_ANALOG);
    			GPIO_ModeCfg(port.PIN_WITH_470K, GPIO_MODE_ANALOG);
    			break;
    
    		case PORT_WITH_680:
    			GPIO_ModeCfg(port.PIN_WITH_NONE, GPIO_MODE_ANALOG);
    			GPIO_ModeCfg(port.PIN_WITH_680, GPIO_MODE_OUTPUT_PP);
    			HAL_GPIO_WritePin(port.PIN_WITH_680.GPIO_Port,port.PIN_WITH_680.PIN,level);
    			GPIO_ModeCfg(port.PIN_WITH_470K, GPIO_MODE_ANALOG);
    			break;
    			
    		case PORT_WITH_470K:
    			GPIO_ModeCfg(port.PIN_WITH_NONE, GPIO_MODE_ANALOG);
    			GPIO_ModeCfg(port.PIN_WITH_680, GPIO_MODE_ANALOG);
    			GPIO_ModeCfg(port.PIN_WITH_470K, GPIO_MODE_OUTPUT_PP);
    			HAL_GPIO_WritePin(port.PIN_WITH_470K.GPIO_Port,port.PIN_WITH_470K.PIN,level);
    			break;
    			
    		case PORT_FLOATING:
    			GPIO_ModeCfg(port.PIN_WITH_NONE, GPIO_MODE_ANALOG);
    			GPIO_ModeCfg(port.PIN_WITH_680, GPIO_MODE_ANALOG);
    			GPIO_ModeCfg(port.PIN_WITH_470K, GPIO_MODE_ANALOG);
    			break;
    		
    		default:
    			break;
    	}
    }
  2. IO的初始化直接调用HAL库函数

    /*******************************************************************************
    * Function Name  : GPIO_ModeCfg
    * Description    : GPIO模式配置
    * Input          : pin: 端口选择
                       mode: 输入输出模式
    * Return         : None
    *******************************************************************************/
    void GPIO_ModeCfg(GPIO_PIN pin, uint32_t mode)
    {
      GPIO_InitTypeDef GPIO_InitStruct = {0};
      HAL_GPIO_DeInit(pin.GPIO_Port, pin.PIN);
      GPIO_InitStruct.Pin = pin.PIN;
      GPIO_InitStruct.Mode = mode;
      HAL_GPIO_Init(pin.GPIO_Port, &GPIO_InitStruct);
    }​
  3. 修改ADC代码采集功能
    void ADC_ChannelCfg(uint16_t ch)
    {
      ADC_ChannelConfTypeDef sConfig = {0};
      GPIO_InitTypeDef GPIO_InitStruct = {0};
    switch (ch) {
      case TP1:
        GPIO_InitStruct.Pin = Probe1_Pin;
        sConfig.Channel = ADC_CHANNEL_5;
        break;
      case TP2:
        GPIO_InitStruct.Pin = Probe2_Pin;
        sConfig.Channel = ADC_CHANNEL_6;
        break;
      case TP3:
        GPIO_InitStruct.Pin = Probe3_Pin;
        sConfig.Channel = ADC_CHANNEL_7;
        break;
      default:
        break;
    }
    
      GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
      //GPIO_InitStruct.Pull = GPIO_NOPULL;
      HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
      HAL_ADC_ConfigChannel(&hadc1, &sConfig);
    
    }​
  4. 真实电压转换采用HAL库内置
    /*******************************************************************************
    * Function Name  : ADC_RealVol
    * Description    : ADC实际电压值计算
    * Input          : val: ADC的值
    * Return         : (double)实际电压值
    *******************************************************************************/
    double ADC_RealVol(uint16_t val)
    {
        return (__HAL_ADC_CALC_DATA_TO_VOLTAGE(VDDA_APPLI, val, ADC_RESOLUTION_12B)/1000.0);
    }
    ​

其他代码部分移植源于沁恒的参考设计

检测与配置部分在视频中有所讲解

代码在后续文档中打包

总结:

个人觉得代码还是有一些臃肿, 必要时可能会因为FLASH空间占用, 牺牲一定的阅读性

完成项目之时恰赶上开学临近, 虽然项目有放宽提交, 但还是有点粗糙, 后期还要再修剪一番

会更新在项目后

附件下载
ComponentTester.rar
使用CubeIDE建立工程并调试
团队介绍
安徽师范大学
团队成员
Chou Ds
通信工程菜鸡一枚
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号