一、任务
设计并制作一台简易自动电阻测试仪。
二、要求
1.基本要求
(1)测量量程为 100Ω、1kΩ、10kΩ、10MΩ四档。测量准确度为±(1%读数+2 字)。
(2)3 位数字显示(最大显示数必须为 999),能自动显示小数点和单位,测量速率大于 5 次/秒。
(3)100Ω、1kΩ、10kΩ三档量程具有自动量程转换功能。
2.发挥部分
(1)具有自动电阻筛选功能。即在进行电阻筛选测量时,用户通过键盘输入要求的电阻值和筛选的误差值;测量时,仪器能在显示被测电阻阻值的同时,给出该电阻是否符合筛选要求的指示。
(2)设计并制作一个能自动测量和显示电位器阻值随旋转角度变化曲线的辅助装置,要求曲线各点的测量准确度为±(5%读数+2 字),全程测量时间不大于 10 秒,测量点不少于 15 点。辅助装置连接的示意图如图 1 所示。
(3)其他
三、说明
1.在辅助装置中,要求电位器为 4.7kΩ 旋转式单圈电位器, 并规定采用线性电位器。
2.要求电位器的三个端子作为测试端子引出。
GPT-4o给出的设计方案:
设计一台简易的自动电阻测试仪,通过测量和分析旋转电位器的角度变化来测量电阻值,并在曲线显示装置上显示结果。系统的主要组成部分包括旋转电位器、驱动设备、电阻测试仪和显示设备。电阻测试仪根据旋转电位器的角度变化测量电阻值,并将数据传送给显示器。
旋转电位器和电机控制电路:
电阻测量电路:
显示和接口:
MCU(如STM32系列):
步进电机与驱动电路:
MCU主要功能代码
#include "stm32f4xx.h"
#include "stdio.h"
// 定义步进电机控制引脚
#define STEP_PIN GPIO_PIN_0
#define DIR_PIN GPIO_PIN_1
#define STEP_PORT GPIOA
// 定义显示接口
#define I2C_ADDRESS 0x3C
ADC_HandleTypeDef hadc1;
I2C_HandleTypeDef hi2c1;
// 步进电机初始化
void Stepper_Init(void) {
__HAL_RCC_GPIOA_CLK_ENABLE();
GPIO_InitTypeDef GPIO_InitStruct = {0};
GPIO_InitStruct.Pin = STEP_PIN | DIR_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(STEP_PORT, &GPIO_InitStruct);
}
// 步进电机步进控制
void Stepper_Step(int steps, int direction) {
HAL_GPIO_WritePin(STEP_PORT, DIR_PIN, direction ? GPIO_PIN_SET : GPIO_PIN_RESET);
for(int i = 0; i < steps; i++) {
HAL_GPIO_WritePin(STEP_PORT, STEP_PIN, GPIO_PIN_SET);
HAL_Delay(1);
HAL_GPIO_WritePin(STEP_PORT, STEP_PIN, GPIO_PIN_RESET);
HAL_Delay(1);
}
}
// ADC初始化
void ADC_Init(void) {
__HAL_RCC_ADC1_CLK_ENABLE();
ADC_ChannelConfTypeDef sConfig = {0};
hadc1.Instance = ADC1;
hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV2;
hadc1.Init.Resolution = ADC_RESOLUTION_12B;
HAL_ADC_Init(&hadc1);
sConfig.Channel = ADC_CHANNEL_0;
sConfig.Rank = ADC_REGULAR_RANK_1;
sConfig.SamplingTime = ADC_SAMPLETIME_15CYCLES;
HAL_ADC_ConfigChannel(&hadc1, &sConfig);
}
// 读取电位器电阻值
uint32_t Read_Resistance(void) {
HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1, HAL_MAX_DELAY);
return HAL_ADC_GetValue(&hadc1);
}
// 显示初始化
void Display_Init(void) {
// I2C初始化配置代码
// 命令更新显示器
}
// 显示电阻值
void Display_Resistance(uint32_t resistance) {
char buffer[10];
sprintf(buffer, "%ld", resistance);
// 通过I2C发送数据给显示设备
// HAL_I2C_Master_Transmit(&hi2c1, I2C_ADDRESS, (uint8_t*)buffer, strlen(buffer), HAL_MAX_DELAY);
}
// 主函数
int main(void) {
HAL_Init();
SystemClock_Config();
Stepper_Init();
ADC_Init();
Display_Init();
while (1) {
// 控制步进电机转动,测试不同电阻值
for(int angle = 0; angle <= 360; angle += 45) {
Stepper_Step(50, angle > 180);
uint32_t resistance = Read_Resistance();
Display_Resistance(resistance);
HAL_Delay(1000);
}
}
}
// 系统时钟配置函数
void SystemClock_Config(void) {
// 系统时钟配置代码
}
通过上述设计,简易的自动电阻测试仪能够在不同量程下准确测量电阻值,并在显示设备上实时显示结果。此外,步进电机的使用确保旋转电位器的角度转换精确,满足测量精度和响应速度的要求。
本题考察的主要知识点: