作品报告Word格式文档下载.docx
《作品报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《作品报告Word格式文档下载.docx(31页珍藏版)》请在冰点文库上搜索。
采用主控制器的三个I/O口,一个接待测电阻,一个接定值电阻,两个电阻的输出端与另一个I/O口一齐接到一个电容上,利用不同阻值的电阻对应电容的充放电时间不同来分辨所测的电阻阻值。
此方案的优点是原理简单,而且外接电路方便容易测量;
缺点是相比方案一,占用了较多的I/O口,电容的充放电时间不易于精确控制,测得的阻值偏差大。
此方案的设计原理图如附图2所示。
采用惠斯顿电桥法,它是一种精密的测量方法,但在测量小电阻时有一定的困难,这是因为引线本身的电阻和引线端点接触电阻的存在。
并且会斯顿电桥法,用到的模拟器件较多,不利于调制。
此方案的设计原理图如附图3所示。
为了能更精确的测量电阻值及方便量程转换,经整合考虑后,决定采用方案一。
3.显示部分的比较与选择
采用数码管显示测得的电阻值。
此方案可以大大节约作品的成本,提高性价比,而且数码管显数易于控制。
此方案的缺点是数码管只能显示十进制数字,对于需要显示曲线的要求无法实现;
而且显示时使用的数码管的数量越多,占用的I/O口就越多,不利于程序的编写,还给硬件电路的设计增加负担。
采用NOKIA5110液晶显示屏。
与用数码管做显示模块相比,该液晶显示屏具有小巧方便、占用I/O资源少(仅七个I/O口);
但是5110液晶显示屏所能显示的范围有限,不太人性化,对于画曲线不利于实时显示滑动电位器在工作时阻值与转角的关系。
采用SSD1289触摸式液晶显示屏。
相对于NOKIA5110来说,此种液晶显示屏具有如下优点:
彩色屏幕显示,人机交互显得更加人性化;
具有可触摸屏,能节省外围电路的设计;
显示波形速率快,能实时显示波形变化,提高测得数据的精度。
经整合考虑,决定采用方案三。
4.电机的选择
选用360°
舵机作为单圈滑动电位器的控制电机。
360°
舵机能够按指定度数旋转,与本作品的单圈电位器的转角刚好吻合。
但舵机在工作时每一次转动都要从0°
开始,能画出要求的电位器阻值随转角变化的曲线,但使用的时间明显超过10秒,与题不符。
选用步进电机作为电位器的控制电机。
步进电机能够步进1.8°
,而且能够一直旋转,不需从0°
开始转动,旋转一圈用时可人为控制,很适合本作品的要求。
采用直流电机作为电位器的控制电机。
直流电机能够不停地旋转一圈,与舵机和步进电机相比,采用直流电机画出的曲线更连续。
但是直流电机转速快,画出的阻值随角度变化的曲线精确度不高,与题目的精度要求有偏差,故舍弃此方案。
整合考虑后,决定采用方案二。
2.理论分析与计算
1.电阻阻值测量部分的分析与计算
采用待测电阻Rx与量程电阻Ra串联的形式(如附图1所示),得到的待测电阻的采样电压Ux为:
,其中Uref为基准电压,设置值为3.30V。
由于Rx与Ra串联,预设的待测电阻Rx阻值小于量程电阻Ra的阻值,所以采样电压的值最大为
,即1.65V。
2.采样阻值处理的分析与计算
采样电压从电阻值测量部分输出以后,其值恒定在0V与
V之间,即0V~1.65V之间,可用STM32识别该值并经计算处理后,在液晶显示屏上出来,计算公式为:
Rx=(Vx*Ra)/(Vref-Vx),Ra:
基准电阻、Vx:
测得电压。
3.电位器阻值与转角变化关系的分析与计算
因本作品使用的电位器为线性单圈4.7K滑动电位器,故从理论上分析,其关系为线性变化,理想状态下,比值应为定值。
分析得到的关系如图2所示。
图2电位器阻值随转角变化关系图
3.电路与程序设计
1.系统总体框图的设计
按题目要求的功能来分,系统共含有三个功能,即电阻阻值测量功能、设定电阻筛选功能、电位器阻值与转角关系曲线的绘制功能。
系统电源共有两个,一个为步进电机专用驱动电路的电源,一个为STM32(F103VCT6)、液晶屏、电阻阻值采样电路的电源。
采用双电源供电,能有效的避免因电机驱动电路工作时影响电阻阻值测量的精确度,提高系统的稳定性。
系统总体设计框图如图3所示。
2.系统单元电路的设计
(1)电阻阻值测量电路的设计
电阻测量电路原理图如附图3所示。
接通电源后,放好待测电阻,则采样电路就会送出一个采样后的信号,送给控制部分,经主控制器的分析计算,接通适当档位的开关,并在显示部分显示出测量的结果。
图3系统总体设计框图
(2)系统电源电路的设计
步进电机驱动电路如附图4所示,
(3)供电电源电路
步进电机电源电路如附图5所示,其它电路供电电源电路如附图6所示。
3.系统程序设计
程序设计流程图如图5所示。
首先,检查触屏按键是否点触,根据键功能转到相应的子程序。
按到电阻测量时,检测测量端是否有电阻接入,有电阻接入时,测量电路的输出端会产生一个相应的电位信号,此信号被控制部分检测到,经过一系列的处理后,会得到一个电阻值和待测电阻两端的电压值,同时调用显示部分,将得到的这两个数值和相应的单位显示出来。
按到电阻筛选时,会显示预设的阻值和误差,同时检测被测电阻,显示得到的结果。
按到电位器阻值随转角测量时,会启动电机并实时测绘电位器的阻值与转角的变化图。
图5程序流程图
4.测试方案与测试结果
1.测试仪器
进行数据测试时使用的仪器仪表如表1所示。
表1数据测试时使用的仪器仪表列表
仪器仪表名
型号
生产商
全保护·
遥控器检测指针式万用表
MF47F
南京科华仪器仪表有限公司
3位3/4数字万用表
FLUKE17b
深圳市迪瑞特机电设备有限公司
LCR数字电桥
HF2810C型
常州市汇发电子设备有限公司
2.测量数据
(1)100Ω电阻档位电阻的测量
使用100Ω的电阻档位测量时,测得的数据如表2所示。
(注:
“待测电阻阻值”为用HF2810C型LCR数字电桥测出的数值)
表2实测阻值与误差值对比表
项目
测试次数
电桥测量电阻阻值
测得电阻值(屏幕显示)
误差
是否达标
1
9.974Ω
10.0Ω
0.7%
是
2
33.02Ω
32.7Ω
0.8%
3
64.75Ω
64.5Ω
0.3%
测量结果表明:
使用100Ω的电阻档位测量电阻时,测得的阻值准确度高,满足题目误差为1%的要求。
(2)1kΩ电阻档位电阻的测量
使用1kΩ的电阻档位测量时,测得的数据如表3所示。
表3实测阻值与误差值对比表
125.19Ω
124Ω
0.6%
359.3Ω
357Ω
0.5%
670.8Ω
667Ω
0.4%
测量结果表明:
使用1kΩ的电阻档位测量电阻时,测得的阻值准确度高,满足题目误差为1%的要求。
(3)10kΩ电阻档位电阻的测量
使用10kΩ的电阻档位测量时,测得的数据如表4所示。
表4实测阻值与误差值对比表
2.1937kΩ
2.17kΩ
1%
4.603kΩ
4.57kΩ
6.253kΩ
6.21kΩ
使用10kΩ的电阻档位测量电阻时,测得的阻值准确度高,满足题目误差为1%的要求。
(4)10MΩ电阻档位电阻的测量
使用10MΩ的电阻档位测量时,测得的数据如表5所示。
表5实测阻值与误差值对比表
98.99kΩ
98.3kΩ
178.92kΩ
177.kΩ
5.048MΩ
5.03MΩ
使用10MΩ的电阻档位测量电阻时,测得的阻值准确度高,满足题目误差为1%的要求。
(5)三位数字显示电阻阻值的测量
本次测量选用了阻值为100Ω、1kΩ、10kΩ的电阻进行了测量,实测结果如表6所示。
表6三位数字显示阻值的测量
电阻实际阻值
(电桥测量)
电阻测量值
(本作品测量)
99.1Ω
99.8Ω
1.02kΩ
1.01.kΩ
9.79kΩ
9.81kΩ
0.1%
对阻值分别为100Ω、1kΩ、10kΩ的电阻进行测试,测量误差值均在误差允许范围内,显示的阻值为三位数,说明了本作品已完成了三位数字显示电阻阻值的基本功能。
(6)自动量程转换功能的测量
依据测量需要,我们将被测电阻为了阻值分别为200Ω、2kΩ、20kΩ的精密滑动电位器,实测数据如表7所示。
“待测电阻阻值”为用FLUKE17b数字万用表测出的数值)
表7自动量程转换测试表
FIUKE万用表测试阻值
(滑动前)
测得电阻值
(滑动后)
80.1Ω
123Ω
50.3Ω
148Ω
837kΩ
1.44.kΩ
525kΩ
1.61kΩ
5.43kΩ
12.8kΩ
3.43kΩ
17.1kΩ
测试结果表明:
作品能够实现自动量程转换功能。
5.结论
经以上分析,本作品不仅很好的完成了题目的基本要求,而且还实现了发挥功能。
题目要求和作品整体的制作情况如表8所示。
表8作品制作完成情况表
基本要求
扩展功能
完成情况
含四个量程档位,测量准确度为
完成
3位数字显数
自动显示小数点和单位
100Ω、1kΩ、10kΩ3个档位能自动转换量程
电阻筛选功能
100Ω、1kΩ、10kΩ、10M自动换挡
电位器阻值随转角变化曲线装置的制作
附:
附录1作品各部分电路原理图
附图1被测电阻阻值采样电路
附图2系统总体设计框图
附图3电阻测量电路原理图
附图4步进电机驱动电路原理图
附图5步进电机供电电源原理图
附图6系统供电电源电路原理图
附录2部分系统源程序清单
/*Includes------------------------------------------------------------------*/
#include"
stm32f10x.h"
delay.h"
printf.h"
ssd1289.h"
adc.h"
intmain(void)
{
delay_init(72);
//USART_Configuration();
//printf("
创新ST_VC开发板adc单通道测试程序.....\r\n"
);
//adc_test();
adc_GPIO_Configuration();
DMA_adc_Configuration();
//DMA_adc配置
adc_Configuration();
//adc配置
ssd1289_Configuration();
//液晶初始化
//display_adjust();
//touch_adjust();
//触屏校准
SetupRCC_Configuration();
SetupGPIO_Configuration();
SetupNVIC_Configuration();
SetupEXTI_Configuration();
while
(1)
{
tupian();
}
}
#ifdefUSE_FULL_ASSERT
/**
*@briefReportsthenameofthesourcefileandthesourcelinenumber
*wheretheassert_paramerrorhasoccurred.
*@paramfile:
pointertothesourcefilename
*@paramline:
assert_paramerrorlinesourcenumber
*@retvalNone
*/
voidassert_failed(uint8_t*file,uint32_tline)
{
/*Usercanaddhisownimplementationtoreportthefilenameandlinenumber,
ex:
printf("
Wrongparametersvalue:
file%sonline%d\r\n"
file,line)*/
/*Infiniteloop*/
#endif
*@}
/*******************(C)COPYRIGHT2010STMicroelectronics*****ENDOFFILE****/
/****************************************Copyright(c)**************************************************
**
**
**Thisprogramwasproducedbythe
**RVMDK4.10
**Copyright2008-2009stmfans
**Chiptype:
STM32F103VC
**Programtype:
Application
**Clockfrequency:
8.000000MHz
**Memorymodel:
**ExternalSRAMsize:
**DataStacksize:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#defineADC1_DR_Address((u32)0x4001244C)
uint32_tss=0,RR,RR1,RR2;
u32Speed=50;
u16Counter=200;
uint32_tbujin=0,sudu=0;
u32AD_value=0,sumdate=0,junzhi=0,i=0;
/*Privatemacro-------------------------------------------------------------*/
/*Privatevariables---------------------------------------------------------*/
vu16ADCConvertedValue;
/*******************************************************************************
*函数名称:
voidDMA_adc_Configuration(void)
*函数描述:
DMA_adc配置
*输入参数:
*输出参数:
无
*返回值:
*******************************************************************************/
voidDMA_adc_Configuration(void)//DMA_adc配置
DMA_InitTypeDefDMA_InitStructure;
/*EnableDMA1clock*/
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);
/*DMA1channel1configuration----------------------------------------------*/
DMA_DeInit(DMA1_Channel1);
//将DMA的通道x寄存器重设为缺省值
DMA_InitStructure.DMA_PeripheralBaseAddr=ADC1_DR_Address;
//该参数用以定义DMA外设基地址ADC1为0x4001244C
//0x4001244C寄存器边界地址0X40012400+ADC规则数据寄存器偏移地址4CH
DMA_InitStructure.DMA_MemoryBaseAddr=(u32)&
ADCConvertedValue;
//该参数用以定义DMA内存基地址
DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralSRC;
//外设作为数据传输的来源
DMA_InitStructure.DMA_BufferSize=1;
//用以定义指定DMA通道的DMA缓存的大小,单位为数据单位。
根据传输方向,
//数据单位等于结构中参数DMA_PeripheralDataSize或者参数DMA_MemoryDataSize的值。
DMA_InitStructure.DMA_PeripheralInc=DMA_PeripheralInc_Disable;
//外设地址寄存器不变
DMA_InitStructure.DMA_MemoryInc=DMA_MemoryInc_Disable;
//内存地址寄存器不变
DMA_InitStructure.DMA_PeripheralDataSize=DMA_PeripheralDataSize_HalfWord;
//数据宽度为16位
DMA_InitStructure.DMA_MemoryDataSize=DMA_MemoryDataSize_HalfWord;
DMA_InitStructure.DMA_Mode=DMA_Mode_Circular;
//工作在循环缓存模式
//注意:
当指定DMA通道数据传输配置为内存到内存时,不能使用循环缓存模式。
DMA_InitStructure.DMA_Priority=DMA_Priority_High;
//DMA通道1拥有非常高优先级
DMA_InitStructure.DMA_M2M=DMA_M2M_Disable;
//DMA通道1没有设置为内存到内存传输
DMA_Init(DMA1_Channel1,&
DMA_InitStructure);
/*EnableDMA1channel1*/
DMA_Cmd(DMA1_Channel1,ENABLE);
voidadc_Configuration(void)
adc配置
********************************