电子设计赛设计报告
课题名称: 智数字万表
指导教师:
学生班级: 电子
学生姓名:
学 号:
学生院系: 理技术学院计科系
2011年X月
目录
实验目2
二 实验务求2
三 总体设计方案3
四 硬件电路设计计算4
五 软件设计8
六 系统联调测试分析8
七 心体会13
八 参考文献13
附录14
智数字万表实验电路
实验目
1.培养综合性电子线路设计力
2.掌握综合性电子线路安装调试方法
3.掌握CortexM3工作环境实现硬件软件联调
4 实现万表智测量功
二 务求
() 务
设计制作台具直流电压交流电压电阻测量功智数字万表示意图图21示
图21 智数字万表示意图
(二) 求
1.基求
(1)数码显示读数1999
(2)直流电压量程:02V2V20V精度±02±1字输入阻抗≥10MΩ
(3)交流电压量程:02V2V20V精度±05±2字(50 Hz基准)输入阻抗≥10MΩ频率响应范围401000Hz
(4)电阻量程: 2Ω200Ω2MΩ精度±02±2字
2.发挥部分
(1)直流电压测量具动量程转换功
(2)具动关机功测量程中1分钟键仪器会动关闭显示处低功耗状态意键仪器返回动关机前工作状态
(3)具相误差(△)测量功进行某项测量时首先通显示屏提示户键盘输入标称值旦输入确认仪器显示相误差中△值
5jpg (153 KB)
2010819 0816
三 总体设计方案
() 总体方案证
根题目求系统设计思想系统包括图31示模块 测量输入
键盘显示
单片机系统
测交流电压
电阻测量电路
交直流转换电路
动量程转换电路
AD转换电路
测电阻
测直流电压
通拨动开关选择
图31 系统模块框图
(二) 模块方案证
1.交直流转换模块
全波整流电路利二极单导电性容易直流电压满足设计求
2.动量程转换模块
通单片机读取MC14433数字信号控制模拟开关CD4052采软件实现改变反馈电阻实现档位选择够容易满足测量范围求
3.电阻测量模块
利运算放器采反相例运算方法进行测量该方法实现较简单满足设计求
4.A\D转换模块
采MC14433MC14433低功耗3位双积分式AD转换器 MC14433采动态扫描显示路调制BCD码输出端超量程信号输出端便实现动控制
四 硬件电路设计计算
() 交流直流转换电路
利二极单导电性图41运放A1D1D2组成半波整流电路<0时D1导通D2截止0>0时D1截止D2导通运放A1构成反相器运放A2说构成反相加法电路反相放2倍输入信号叠加2时输入信号正半周保留负半周抵消加剩变成完整全波整流电路波形图42利NE5532双运放芯片(图43)A2100pF电容(图44)实现交直流转换滤波图条直线图45
图41 交流直流转换电路
图42 整流波形
图43 NE5532
图44 交流直流转换电路
图45 滤波图
(二) 模拟选择开关量程转换电路
模拟选择开关量程转换电路作输入条件信号(量程欠量程信号)时钟信号(EOCDS1~DS4)发生相应量程信号控制通单片机读取MC14433数字信号通数字信号控制模拟开关改变反馈电阻实现档位选择模拟开关导通Q3Q0决定测电压量程时Q01Q30欠量程时Q01Q31量程时保持原状态变相关参数计算
Rf设1k10k100k然通CD4052芯片(图46)组4选路模拟选择开关实现换档原理图图47
图46 CD4052双4选路模拟选择开关
图47 模拟选择开关量程转换电路
(三) 电阻测量电路
利运算放器采反相例运算方法原理图图48电阻转换成相关电压电压输入MC14433测量电路通单片机计算液晶屏显示出具体电路换算公式:
>
图48 电阻测量电路
(四) A\D转换电路
MC1403提供输出调基准电压输入直流电压时进行AD转换单片机处理MC14433控制信号AD转换结束时MC14433EOC引脚输出高电脉单片机单片机进入中断处理程序单片机MC14433DS1~DS4进行动态扫描然Q0~Q3进行转换液晶显示器LCM12832显示原理图图49
MC14433属双积分型AD转换器测电压基准电压关系:输出读数
满量程VxVr满量程选1999VVr取2000V满量程1999mV时Vr取2000mV实际应电路中根需Vr值200mV—2000V间选取积分电容般选01uF原片电容果需转换4次秒时钟频率选66kHz2000V满量程时电阻R约470kΩ满量程200mV时R取27kΩ
图49 A\D转换电路
五 软件设计
见附录
六 系统联调测试分析
() 测试仪器
1.数字万表UT2003
2.EE1640C型函数信号发生器
3.RIGOL DS1062C型示波器
(二) 测试测试结果分析
1.交流直流转换电路测试
示波器输出整流波形(图61)理波形图完全吻合接电容干扰示波器滤波波形稳定万表测量时数6368mV(Vpp2V)结果正确
图61 整流波形
2模拟选择开关量程转换电路测试
时输入输出间1倍关系输入Vpp2V时输出Vpp214V波形正常图62
时输入输出间01倍关系输入Vpp2V时输出Vpp204mV波形正常图63
时输入输出间10倍关系输入Vpp200mV时输出Vpp206V波形正常图64输入Vpp2V时输入电压导致示波器波形失真图65
图62 BA011倍
图63 BA1001倍
图64 BA0010倍关系
图65 BA00Vi波形失真
3电阻测量电路测试
理计算:
>
测量图:数字万表测 Rx1009
图66
4A\D转换电路测试
MC14433EOC引脚输出高电脉单片机单片机MC14433DS1~DS4进行动态扫描扫描脉理波形图67DS1~DS4分连接示波器观察波形图图68EOC示波器显示波形图稳定EOC脉短暂
图67 EOCDS1~DS4时序脉
图68 DS1~DS4扫描脉
5交直流转换测量
设定频率
档位
输入Vpp
计算电压值
实际测量电压值
误差()
1KHz
200mV
40mV
127mV
133mV
451
100mV
318mV
297mV
664
200mV
636mV
619mV
271
2V
2V
0636V
0639V
047
24V
0763V
0776V
170
28V
0891V
0904V
145
20V
3V
095V
098V
272
36V
114V
111V
305
4V
127V
115V
956
6电阻测试
档位
理想电阻值
测电阻值
误差()
20Ω
735Ω
678Ω
775
1051Ω
977Ω
704
1537Ω
1436Ω
657
200Ω
8521Ω
844Ω
095
12554Ω
1260Ω
036
18963Ω
1865Ω
165
2 kΩ
24296Ω
232Ω
431
34174Ω
329Ω
372
七 心体会
程序编写部分首次接触lm3s811单片机首次C语言编写单片机程序开始学时候较困难通读已程序熟悉编程语句规
程序载开发板运行前切记跳线引脚定义根需改变跳帽接法刚开始忽视跳帽步骤预期实验效果
检测AD转换电路部分时DS1~DS4波形正确开发板联调时液晶显示器没显示先检查基准电压否2V发现基准电压0V结果MC1403芯片坏
搭建电路时候搭完部分电路进行检测减少总电路中正常现象发生时方便查找错误潜部分焊接电路板时注意元件电路板排布仅布局合理避免电路板焊接面导线交叉
八 参考文献
1谢美 电子线路设计·实验·测试(第三版) 武汉:华中科技学出版社2006年8月
附录:
#include systemInith
#include lcdh
#define Q_PERIPH SYSCTL_PERIPH_GPIOB ADC输入信号 #define Q_PORT GPIO_PORTB_BASE
#define Q GPIO_PIN_3|GPIO_PIN_2|GPIO_PIN_1|GPIO_PIN_0 输入位标志位
#define DS_PERIPH SYSCTL_PERIPH_GPIOA
#define DS_PORT GPIO_PORTA_BASE
#define DS GPIO_PIN_3|GPIO_PIN_2|GPIO_PIN_1|GPIO_PIN_0 输入数千百十
#define EOC_PERIPH SYSCTL_PERIPH_GPIOB
#define EOC_PORT GPIO_PORTB_BASE
#define EOC GPIO_PIN_4
#define BA GPIO_PIN_6|GPIO_PIN_5
#define LED GPIO_PIN_7
#define KEY_PERIPH SYSCTL_PERIPH_GPIOD D口键盘读入数
#define KEY_PORT GPIO_PORTD_BASE
#define KEY_ROW GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7 D口行输入
#define KEY_CLO GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3 D口列输出
unsigned char a[4]qg
int key_z16
unsigned char str0[]测量 定义显示汉字字符
unsigned char str1[]1直流电压
unsigned char str2[]2交流电压
unsigned char str3[]3电阻
unsigned char m0b0c0
void GPIO_Init()
{SysCtlPeripheralEnable(Q_PERIPH) ADC输入数端口
GPIOPinTypeGPIOInput(Q_PORTQ)
SysCtlPeripheralEnable(KEY_PERIPH) 键盘扫描端口
GPIOPinTypeGPIOInput(KEY_PORTKEY_ROW)
GPIOPinTypeGPIOOutput(KEY_PORTKEY_CLO)
SysCtlPeripheralEnable(DS_PERIPH) ADC输入命令端口
GPIOPinTypeGPIOInput(DS_PORTDS)
SysCtlPeripheralEnable(EOC_PERIPH)
GPIOPinTypeGPIOInput(EOC_PORTEOC)
GPIOPinTypeGPIOOutput(EOC_PORTBA|LED)
GPIOPinTypeGPIOInput(EOC_PERIPHEOC)
GPIOIntTypeSet(EOC_PERIPHEOCGPIO_RISING_EDGE)
GPIOPinIntEnable(EOC_PERIPHEOC)
IntEnable(INT_GPIOB)
IntMasterEnable()
}
int KEY ()
{ GPIOPinWrite(KEY_PORTKEY_CLO0x0f)
GPIOPinWrite(KEY_PORTKEY_CLO 0x0E)
if( (GPIOPinRead(KEY_PORTKEY_ROW)&0xf0)0xf0)
{if(GPIOPinRead(KEY_PORTGPIO_PIN_4)0)key_z0
if(GPIOPinRead(KEY_PORTGPIO_PIN_5)0)key_z4
if(GPIOPinRead(KEY_PORTGPIO_PIN_6)0)key_z8
if(GPIOPinRead(KEY_PORTGPIO_PIN_7)0)key_z12
}
GPIOPinWrite(KEY_PORTKEY_CLO0x0f)
GPIOPinWrite(KEY_PORTKEY_CLO 0x0D)
if( (GPIOPinRead(KEY_PORTKEY_ROW)&0xf0)0xf0)
{if(GPIOPinRead(KEY_PORTGPIO_PIN_4)0)key_z1
if(GPIOPinRead(KEY_PORTGPIO_PIN_5)0)key_z5
if(GPIOPinRead(KEY_PORTGPIO_PIN_6)0)key_z9
if(GPIOPinRead(KEY_PORTGPIO_PIN_7)0)key_z13
}
GPIOPinWrite(KEY_PORTKEY_CLO0x0f)
GPIOPinWrite(KEY_PORTKEY_CLO 0x0B)
if( (GPIOPinRead(KEY_PORTKEY_ROW)&0xf0)0xf0)
{if(GPIOPinRead(KEY_PORTGPIO_PIN_4)0)key_z2
if(GPIOPinRead(KEY_PORTGPIO_PIN_5)0)key_z6
if(GPIOPinRead(KEY_PORTGPIO_PIN_6)0)key_z10
if(GPIOPinRead(KEY_PORTGPIO_PIN_7)0)key_z14
}
GPIOPinWrite(KEY_PORTKEY_CLO0x0f)
GPIOPinWrite(KEY_PORTKEY_CLO 0x07)
if( (GPIOPinRead(KEY_PORTKEY_ROW)&0xf0)0xf0)
{if(GPIOPinRead(KEY_PORTGPIO_PIN_4)0)key_z3
if(GPIOPinRead(KEY_PORTGPIO_PIN_5)0)key_z7
if(GPIOPinRead(KEY_PORTGPIO_PIN_6)0)key_z11
if(GPIOPinRead(KEY_PORTGPIO_PIN_7)0)key_z15
}
return(key_z)
}
void judge_display()
{unsigned char qianbaigeshifuhaodian
baia[2]
shia[1]
gea[0]
dian''
if(a[3]&0x040x04) 否正
fuhao1 正显示+
else fuhao0 负显示
if(a[3]&0x010x00) 否量程
{if(a[3]&0x080x08) 千位否1
qian'0' 1送0千
else qian'1' 否送1千
}
else
{if(a[3]&0x080x08) 否欠压
{GPIOPinWrite(EOC_PORTBA0x00)q1goto lop0} BA输出00
else {GPIOPinWrite(EOC_PORTBA0x02)g1goto lop1} 否BA输出10
} 量程显示
WriteCommand(0x92)
if(fuhao1)
WriteData('+')
else
WriteData('')
WriteNum(qian)
WriteNum(bai)
WriteNum(shi)
WriteNum(ge)
欠压显示
lop0 if(a[3]&0x010x00) 否量程
{if(a[3]&0x080x08) 千位否1
qian'0' 1送0千
else qian'1' 否送1千
}
WriteCommand(0x92)
if(fuhao1)
WriteData('+')
else
WriteData('')
WriteNum(qian)
WriteNum(bai)
WriteNum(shi)
WriteNum(ge)
压显示
lop1 if(a[3]&0x010x00) 否量程
{if(a[3]&0x080x08) 千位否1
qian'0' 1送0千
else qian'1' 否送1千
}
WriteCommand(0x92)
if(fuhao1)
WriteData('+')
else
WriteData('')
WriteNum(qian)
WriteNum(bai)
WriteNum(shi)
WriteNum(ge)
}
void danwei_v ()
{if(q1){WriteData('m')WriteData('v')}
if(g1)WriteData('v')
if((q1)&(g1))WriteData('v')
}
延时01 ms
void Delay1(unsigned char aunsigned char b) 延时读取DS电
{ unsigned char ij
for(iai>0i)
for(jbj>0j)
}
显示级菜单函数
void display_menu1(void)
{PSB_L 串行方式
SysCtlDelay(250*(SysCtlClockGet()3000))
LcmInit() 液晶初始化
KEY()
WriteCommand(0x30)
do
{ PutStr(00str0)
if(KEY()16) {LcmClearTXT0() return}
else PutStr(11str1) 直流电压
SysCtlDelay(2000*(SysCtlClockGet()3000))
LcmClearTXT()
if(KEY()16) {LcmClearTXT0()return }
else PutStr(11str2) 交流电压
SysCtlDelay(2000*(SysCtlClockGet()3000))
LcmClearTXT()
if(KEY()16) {LcmClearTXT0()return }
else PutStr(11str3) 电阻
SysCtlDelay(2000*(SysCtlClockGet()3000))
LcmClearTXT()
key_zKEY()
}
while(key_z16)
}
测量直流电压
void zhiliu(void)
{ WriteCommand(0x30)
WriteCommand(0x80)
do {PutStr(00str1)judge_display()danwei_v()mKEY()}
while (m1)
}
显示二级菜单
int main(void)
{ unsigned char b0c0
jtagWait() JTAG口解锁函数
clockInit()
LCD_init()
GPIO_Init()
LcmClearTXT()
WriteCommand(0x30)
WriteCommand(0x90)
KEY ()
for()
{
display_menu1()
do {KEY()} while(key_z16)
switch(key_z)
{case 0key_z16display_menu1()break
case 1 1 测量直流电压
zhiliu()key_z16display_menu1()break
case 2key_z16display_menu1()break
case 3key_z16display_menu1()break
case 4key_z16display_menu1()break
case 5 2 测量交流电压
do {PutStr(00str2)judge_display()WriteData('v')bKEY()}
while(b5)key_z16display_menu1() break
case 6key_z16display_menu1()break
case 7key_z16display_menu1()break
case 8key_z16display_menu1()break
case 9 3测量电阻
do {PutStr(00str3)judge_display()WriteData('O')cKEY()}
while(c9)key_z16display_menu1()break
case 10key_z16display_menu1()break
case 11key_z16display_menu1()break
case 12key_z16display_menu1()break
case 13key_z16display_menu1()break
case 14key_z16display_menu1()break
case 15key_z16display_menu1()break
}
}
}
单片机中断读取ADC转换数值放数组a中
void GPIO_Port_B_ISR(void) GPIOD中断服务函数
{ unsigned long ulStatus
ulStatus GPIOPinIntStatus(EOC_PORT true) 读取中断状态
果INT0中断状态效
GPIOPinIntClear(EOC_PORTulStatus)
Delay1(24)
a[3]GPIOPinRead(Q_PORTQ)&0x0f 果Q3~Q0读a[3]中
Delay1(34)
a[2]GPIOPinRead(Q_PORTQ)&0x0f 果Q3~Q0读a[]中i加
Delay1(34)
a[1]GPIOPinRead(Q_PORTQ)&0x0f
Delay1(34)
a[0]GPIOPinRead(Q_PORTQ)&0x0f
}
湖北济学院
文档香网(httpswwwxiangdangnet)户传
《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档