一、任务
利用普通 PCB 覆铜板设计和制作手写绘图输入设备。系统构成框图如图 1所示。普通覆铜板尺寸为 15cm×10cm,其四角用导线连接到电路,同时,一根带导线的普通表笔连接到电路。表笔可与覆铜板表面任意位置接触,电路应能检测表笔与铜箔的接触,并测量触点位置,进而实现手写绘图功能。覆铜板表面由参赛者自行绘制纵横坐标以及 6cm x 4cm(高精度区 A)和 12 cm x8cm(一般精度区 B)如图中两个虚线框所示。
二、要求
1. 基本要求:
(1)指示功能:表笔接触铜箔表面时,能给出明确显示。
(2)能正确显示触点位于纵坐标左右位置。
(3)能正确显示触点四象限位置。
(4)能正确显示坐标值。
(5)显示坐标值的分辨率为 10mm, 绝对误差不大于 5mm。
2.发挥部分:
(1)进一步提高坐标分辨率至 8mm 和 6mm;要求分辨率为 8mm 时,绝对误差不大于 4mm;分辨率为 6mm 时,绝对误差不大于 3mm。
(2)绘图功能。能跟踪表笔动作,并显示绘图轨迹。在 A 区内画三个直径分别为 20mm,12mm 和 8mm 不同直径的圆,并显示该圆;20mm 的圆要求能在 10s 内完成,其它圆不要求完成时间。
(3)低功耗设计。功耗为总电流乘 12V;功耗越低得分越高。要求功耗等于或小于 1.5W。
(4)其他。如显示文字,提高坐标分辨率等。
三、说明
1.必须使用普通的覆铜板
(1)不得更换其它高电阻率的材料。
(2)不得对铜箔表面进行改变电阻率的特殊镀层处理。
(3)覆铜板表面的刻度自行绘制,测试时以该刻度为准。
(4)考虑到绘制刻度影响测量,不要求表笔接触刻度线条时也具有正确检测能力。
2.覆铜板到电路的连接应满足以下条件
(1)只有铜箔四角可连接到电路,除此之外不应有其它连接点(表笔触点除外)。
(2)不得使用任何额外传感装置。
3.表笔可选用一般的万用表表笔。
4.电源供电必须为单 12V 供电。
5.基本要求除(5)外均在 B 区测,测分辨率和圆均在 A 区内测。
GPT-4o给出的设计方案:
本设计的目的是开发一个带有LCD显示器的手写绘图输入设备,主要实现绘图和定点功能。该设备可以将绘制的轨迹显示在LCD屏幕上。设计要求系统的尺寸为15cm x 10cm,并通过模拟和数字电路实现数据采集和处理。
输入设备设计与集成:
信号处理与显示:
电源与控制电路:
功耗与响应时间:
四、最重要的电路原理图设计要点
触摸屏接口电路:
数据处理电路:
电源管理电路:
五、核心器件设计要点
六、实施步骤
硬件设计:
软件开发:
系统调试:
代码实现:MCU (STM32) C代码
#include "stm32f1xx_hal.h"
#include "lcd_i2c.h" // LCD I2C通信库文件
ADC_HandleTypeDef hadc1;
I2C_HandleTypeDef hi2c1;
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_ADC1_Init(void);
static void MX_I2C1_Init(void);
int main(void) {
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_ADC1_Init();
MX_I2C1_Init();
LCD_Init();
uint32_t adcVal;
char buffer[20];
while (1) {
HAL_ADC_Start(&hadc1);
if (HAL_ADC_PollForConversion(&hadc1, 1000000) == HAL_OK) {
adcVal = HAL_ADC_GetValue(&hadc1);
float current = ((adcVal / 4096.0) * 5.0 - 2.5) / 0.185; // 假定ACS712 5A模块
sprintf(buffer, "Current: %.2fA", current);
LCD_SetCursor(0, 0);
LCD_PrintStr(buffer);
}
HAL_ADC_Stop(&hadc1);
HAL_Delay(1000);
}
}
static void MX_ADC1_Init(void) {
ADC_ChannelConfTypeDef sConfig = {0};
hadc1.Instance = ADC1;
hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;
hadc1.Init.ContinuousConvMode = DISABLE;
hadc1.Init.DiscontinuousConvMode = DISABLE;
hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
hadc1.Init.NbrOfConversion = 1;
HAL_ADC_Init(&hadc1);
sConfig.Channel = ADC_CHANNEL_0;
sConfig.Rank = 1;
sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5;
HAL_ADC_ConfigChannel(&hadc1, &sConfig);
}
static void MX_I2C1_Init(void) {
hi2c1.Instance = I2C1;
hi2c1.Init.ClockSpeed = 100000;
hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2;
hi2c1.Init.OwnAddress1 = 0;
hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
hi2c1.Init.OwnAddress2 = 0;
hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
HAL_I2C_Init(&hi2c1);
}
// 其后的系统初始化配置与库函数调用部分省略
以上代码实现了对电流传感器数据的采集和LCD数值显示。
通过以上方案设计,可以实现一个功能完善、响应快速、显示效果良好的手写绘图输入设备,并满足题目中的各项具体要求。
本项目考察得主要知识点