电容电阻测量

0.插件电容

带标志的为负极,不带标志的为正极

测量 红笔接地 黑笔测量

1.测供电电阻

主板通电

万用表 20V档位

黑笔接地 红笔测量

ATX电源测量

 

 

 

  1. ATX电源接口对地阻值参考:

>>: 5VSB对地值400-700左右。

>>: PS_ON对地值400-600左右。

>>: 3.3V对地值30或300左右。

>>:5V对地值300左右。

>>: -12对地值无穷大。

>>: -5V对地无穷大。

>>: PG信号400-600左右。

红笔接地 黑笔测量对地阻值

对地阻值

30/300

30/300

300

300

400-600

400-700

30/300

电压V

3.3

3.3

GND

5

GND

5

GND

PG

5VSB

12

12

3.3

颜色

颜色

绿

电压V

3.3

-12

GND

PS-ON

GND

GND

GND

-5

5

5

5

GND

对地阻值

30/300

OL

400-600

OL

300

300

300

 

### 使用STM32F103C8T6实现电容电阻测量 #### 测量电阻的方法 对于电阻测量,可以采用分压法。通过已知电阻 \( R_{known} \) 和待测电阻 \( R_x \),连接到ADC输入通道上形成分压电路。当给定电源电压 \( Vcc \) 时,可以通过读取ADC计算得到未知电阻。 \[ Vout = Vcc * (Rx / (Rknown + Rx)) \] 由此可得: \[ Rx = Rknown * ((Vcc/Vout)-1) \] 其中\( Vout \) 是由 ADC 转换后的数转换成实际电压得到的结果[^1]。 ```c #include "stm32f1xx_hal.h" // 定义使用的GPIO口以及ADC通道 #define RESISTANCE_MEASURE_PIN GPIO_PIN_0 #define RESISTANCE_MEASURE_CHANNEL ADC_CHANNEL_0 void setup_resistance_measurement(void){ __HAL_RCC_ADC1_CLK_ENABLE(); static ADC_ChannelConfTypeDef sConfig; static ADC_HandleTypeDef hadc; hadc.Instance = ADC1; HAL_ADC_Init(&hadc, NULL); sConfig.Channel = RESISTANCE_MEASURE_CHANNEL; sConfig.Rank = 1; sConfig.SamplingTime = ADC_SAMPLETIME_7CYCLES_5; HAL_ADC_ConfigChannel(&hadc, &sConfig); } uint16_t measure_resistance(uint32_t known_resistor_value){ uint32_t adc_raw; float v_out, r_unknown; HAL_ADC_Start(&hadc); HAL_ADC_PollForConversion(&hadc, HAL_MAX_DELAY); adc_raw = HAL_ADC_GetValue(&hadc); HAL_ADC_Stop(&hadc); // 假设供电电压为3.3V const float supply_voltage = 3.3; v_out = (supply_voltage / 4095.0) * adc_raw; r_unknown = known_resistor_value * ((supply_voltage/v_out) - 1); return (uint16_t)r_unknown; } ``` #### 测量电容的方法 为了测量电容器容量,一种常见的方式是充放电时间常数法。该方法基于RC充电曲线特性,在固定时间内记录电压变化情况从而推算出电容大小。具体来说就是让电容经过一个已知阻抗快速充电至一定比例后再自然放电,并监测此过程所需的时间长度来间接求解电容。 ```c #include "stm32f1xx_hal.h" #include <time.h> // 定义用于控制开关状态的IO引脚 #define CAPACITOR_CHARGE_PIN GPIO_PIN_1 #define CHARGE_TIME_MS 100 /* ms */ float calculate_capacitance(float resistance, int charge_time_ms){ // 计算公式 C=I*t/(ΔV)=t/R*ln(Vmax/Vmin) // 这里假设初始电压接近于零而最终达到约一半的最大工作电压 const float max_voltage_ratio = 0.5; // 设定目标电压比率为最大电压的一半 const float ln_two = 0.69314718056; // 自然对数底e下的二的对数 return (charge_time_ms / 1000.0) * ln_two / resistance; } void start_charge_cycle(){ HAL_GPIO_WritePin(GPIOA,CAPACITOR_CHARGE_PIN,GPIO_PIN_SET); HAL_Delay(CHARGE_TIME_MS); HAL_GPIO_WritePin(GPIOA,CAPACITOR_CHARGE_PIN,GPIO_PIN_RESET); } int main(void){ // 初始化硬件资源... float measured_c = calculate_capacitance(1000,CHARGE_TIME_MS); printf("Measured Capacitance: %.2f uF\n",measured_c * 1E6); while (1){} } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小1314王

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

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

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

打赏作者

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

抵扣说明:

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

余额充值