目录

3ElectronicDesign

PA0用于测出待测电阻端电压 PA2是74HC4051的S0 PA3是74HC4051的S1 PA4是74HC4051的S2 PA5是74HC4051的EN PB0是键盘行0 PB1是键盘行1 PB10是键盘行2 PB11是键盘行3 PB12是键盘列0 PB13是键盘列1 PB14是键盘列2 PB15是键盘列3 PB8 是I2C_SCL,用来控制显示屏 PB9 是I2C_SDA,用来控制显示屏 PB4 是Tim3端 PA1 是充放电端

测电阻电压使用比例法 新增引脚配置PA7,用来获取已知未知电阻的电压 PA0 用来读整个的电压

测电容采用RC时间常数法,使用: 一个 GPIO 先给电容放电 清零 TIM3->CNT 打开充电开关 启动输入捕获 HAL_TIM_IC_Start_IT(&htim3, TIM_CHANNEL_1); 阈值到达时,TIM3_CH1 捕获 在回调里读 HAL_TIM_ReadCapturedValue(&htim3, TIM_CHANNEL_1) 按公式算电容 充电路径一直存在 只需要测前放电一下,然后松开放电就开始充电

文字版测量流程图

电阻测量流程图

开始
  ↓
设置 PA8 激励输出有效
  ↓
根据当前模式选择量程
  自动档:先使用 current_range
  手动档:直接使用 manual_range
  ↓
通过 74HC4051 切换到对应参考电阻通道
  ↓
等待通道稳定
  ↓
ADC1 读取总电压 Vtotal
ADC2 读取分支电压 Vbranch
  ↓
判断采样是否成功
  ├─ 否 → 结果置 0,结束
  └─ 是
       ↓
    按分压公式计算 Rx
       ↓
    若为自动档,判断是否需要切换量程
       ├─ 需要 → 切换通道后重新采样并重新计算
       └─ 不需要
             ↓
          判断结果是否越界或无效
             ├─ 是 → 按 0 或超量程处理
             └─ 否
                  ↓
               若刚切档:重置滤波器
               否则:进入滑动平均滤波
                  ↓
               保存 last_resistance / last_voltage
                  ↓
                 结束

电容测量流程图

开始
  ↓
根据当前模式选择量程
  自动档:使用 current_range
  手动档:使用 manual_range
  ↓
关闭激励输出
  ↓
通过 74HC4051 选择对应充电电阻
  ↓
PA1 拉低,对待测电容放电
  ↓
等待放电时间达到 discharge_duration_us
  ↓
释放 PA1
  ↓
打开激励输出,电容开始通过已知电阻充电
  ↓
启动 TIM3 输入捕获,等待上升沿阈值到达
  ↓
是否捕获到上升沿?
  ├─ 否
  │    ↓
  │  是否超时?
  │    ├─ 否 → 继续等待
  │    └─ 是
  │         ↓
  │       自动档且当前是 50nF 档?
  │         ├─ 是 → 切到 500nF 档,重新开始
  │         └─ 否 → 按超量程处理,结束
  └─ 是
       ↓
    记录上升沿计数值 captured_rise_ticks
       ↓
    若计数过小,认为无效,重新开始
       ↓
    关闭激励输出
       ↓
    启动 TIM3 输入捕获,等待下降沿
       ↓
    是否捕获到下降沿?
       ├─ 否且超时 → 重新开始
       └─ 是
            ↓
         判断下降沿计数是否有效
            ├─ 否 → 重新开始
            └─ 是
                 ↓
              用上升沿时间按 RC 公式计算电容值
                 ↓
              乘以标定系数
                 ↓
              自动档判断是否需要重新切换量程
                 ├─ 需要 → 切档后重新开始
                 └─ 不需要
                      ↓
                   保存 last_capacitance
                      ↓
                     结束

对照关系

  • 电阻主流程对应 Resistance_StartMeasurement()
  • 电阻计算公式对应 calculate_resistance()
  • 电容状态机主流程对应 Capacitance_Task()
  • 电容时间换算对应 ticks_to_capacitance_nF()
关于

电赛代码上传

12.4 MB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9 京公网安备 11010802032778号