ImageVerifierCode 换一换
格式:DOCX , 页数:24 ,大小:567.80KB ,
资源ID:9300142      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9300142.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(北邮arduino实验报告.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

北邮arduino实验报告.docx

1、北邮arduino实验报告电子电路综合实验设计实验名称:基于 Arduino 的电压有效值测量电路设计与实现学院:班级:学号:姓名:班内序号:实验 基于Arduino 的电压有效值测量电路设计与实现一. 摘要Arduino是一个基于开放原始码的软硬件平台,可用来开发独立运作、并具互动性的电子产品,也可以开发与PC 相连的周边装置,同时能在运行时与PC 上的软件进行交互。为了测量正弦波电压有效值,首先我们设计了单电源供电的半波整流电路,并进行整流滤波输出,然后选择了通过Arduino设计了读取电压有效值的程序,并实现使用此最小系统来测量和显示电压有效值。在频率和直流电压幅度限定在小范围的情况下,

2、最小系统的示数基本和毫伏表测量的值相同。根据交流电压有效值的定义,运用集成运放和设计的Arduino最小系统的结合,实现了运用少量元器件对交流电压有效值的测量。关键字:半波整流 整流滤波 Arduino最小系统读取电压有效值 二. 实验目的1、熟悉Arduino 最小系统的构建和使用方法;2、掌握峰值半波整流电路的工作原理;3、根据技术指标通过分析计算确定电路形式和元器件参数;4、画出电路原理图(元器件标准化,电路图规范化);5、熟悉计算机仿真方法;6、熟悉Arduino 系统编程方法。三. 实验任务及设计要求设计实现 Arduino 最小系统,并基于该系统实现对正弦波电压有效值的测量和显示。

3、1、基本要求(1)实现Arduino 最小系统,并能下载完成Blink 测试程序,驱动Arduino 数字13 口LED 闪烁;(2)电源部分稳定输出5V 工作电压,用于系统供电;(3)设计峰值半波整流电路,技术指标要求如下: 输入信号电压范围:01V; 频率范围:500Hz2KHz; 电源电压:5V;(4)采用Arduino 最小系统读取峰值半波整流电路的输出结果,并计算正弦波电压有效值;(5)测量出的有效值通过Arduino 串口监视器进行读取。2、提高要求(1)用数码管显示正弦信号有效值的测量结果;(2)用Arduino 最小系统直接读取正弦信号计算有效值,比较不同测试方法的测量误差;(

4、3)自拟其他功能。3、提交材料(1)实验报告(含仿真结果、原理图)(2)峰值半波整流等相关电路的仿真文件;(3)Arduino 程序;(4)电路原理图文件。四. 设计思路及结构框图设计思路: 系统组成框图Arduino 电压有效值测量电路包括峰值半波整流电路、最小系统、显示、稳压电路四部分,其中最小系统包括微处理器、振荡电路、下载电路和测试电路。元器件资料本实验中用到了一个LM741CN芯片,通过查找资料了解LM741CN的主要参数,管脚设置等。 一片ATMEGA8 芯片来搭建一个最小系统,通过查找资料了解ATMEGA8的主要参数和管脚设置。.分块电路和总体电路的设计(1)半波电路的设计本实验

5、需要的是输入710V的直流稳压电源,输出5V。具体电源电路包括整流,滤波等部分,具体的设计如下。仿真波形如下图所示(2)半波电路加上整流滤波的设计。交流电经过整流后得到的是脉动直流,采用滤波电路可以大大降低这种交流纹波成分,让整流后的波形变得比较平滑。通过整流滤波电路得到电压的峰峰值等于2倍电压有效值。仿真波形如下图所示四、功能实现及扩展1基本要求:实际实验中的波形截图及相关分析:五. 故障及问题分析1.问题一:半波整流电路的问题1)选择了不合适的半波电路失真波形图电路如下半波仿真波形图如下滤波仿真波形图如下2)电路没有共地(此时使用LM358)LM358严重失真波形图分析及解决方法:器件LM

6、358仿真始终就没能找到合适的半波整流电路,所以更换为LM741最终得到了合适的半波波形。3)在使用LM741时波形失真,电路没有接错。分析及解决方法:LM741四号管脚没有接地。问题二:使用Arduino过程中遇到的问题1)第一次接触Arduino接线接错导致ATMEGA8直接烧毁。解决方法:确认下载器接口和图示的对应关系,重接导线。2)没有把VCC和AREF相接,电压读数是错的。分析及解决方法:AREF是A/D转换的参考电压输入端,是5V,不接入参考电压读数必然不对。将两端连接问题解决。问题三:读数时将电压改变范围扩大,出现不能忽略的误差分析及解决方法:通过示波器上测量的输出电压值和毫伏表

7、测量的输入电压值的比值发现,输出和输入并非完美的线性关系,即在电路中存在一定的失真,但由于仿真中没有问题,迫于时间限制没能做出完美的线性输出,但可通过改写程序减小误差,如将电压值分段,计算几组比值,在代码中给每段不同的参数。改进代码附在最后(在验收时未使用)。六实验改进1)将运算放大器U1由LM358换成LM741,将电路改为经典半波整流电路,观测波形,滤波电路最初使用20k电阻,滤波后幅值较低,与毫伏表读数相差较多,后改为200,幅值正常。原因是20k消耗能量过多,电路的负载能力可能不够。改小电阻虽能减小损耗,但理论上输出电流的平滑性会降低,好在实验中没有出现此类现象。2)Arduino程序

8、改进。电压示数不对:第一次获得电压示数的时候发现是毫伏表测量的有效值的2倍,于是我们在获取的电压上乘以了,使读数相对准确了许多但误差依然存在。电压读数存在误差:为了使读数更加准确,我在不同幅值处都计算了输出端和毫伏表示数的比值并求平均,最终使Arduino读数在小范围内零误差读数。但输入幅值一旦非常小或者非常大之后会体现出不小的误差,由于时间问题最终没能对程序进行改进,个人认为由于输出和输入并非完全线性关系,所以对电压读值进行分段,每段计算出不同的输出/输入的比例系数,相对会减少误差,但非线性关系也意味着输出存在失真,所以电路还应进行改进。同组同学的滤波电阻都取的较小,相对的误差也较小,仿真中

9、并无区别,希望还能在实际操作中进行探究。后面附了改进之后的代码,一共进行两次改进,但最后一次停留在理论,未能进行实际操作的验证。七. 总结和结论1.实验总结:本次试验是综合设计性实验,要求我们将以前学过的知识都综合运用起,并和新接触的Arduino器件结合起来使用,设计出具有一定综合功能的电路。对Arduino进行了解并未花费太多时间,而半波整流电路的设计却是整个过程中最难的一部分,由于器件的性能和仿真似乎有出入,不同电路的仿真做了不下十种最终才找到了比较合适的。 2.实验结论: 通过Arduino搭建最小系统和模拟电路的结合实现了电压有效值的读取,还有许多功能有待尝试。有程序通过下载器经导线

10、对ATMEGA8的输入输出管脚进行控制来实现自己的程序是非常有意思的事情,希望日后还有机会做此类尝试。3.心得体会:这是一年的模电实验里最有意义的一次,约了六次实验,跑了9次实验室,用了非常多的时间去解决各种问题,起初觉得别人拿着现有的数据很快出图出结果非常羡慕,但是到后来一步一步慢慢达成试验目的也获得了许多成就感。尤其是很难忘记烧掉一个ATMEGA8之后第二次连上导线接到电脑成功地进行第一次blink之后的喜悦,当时甚至给自己起了个新名字叫“布令客1号”,现在回想起来有点像小学生做的事情,但真的在完成一个之前全然不懂的任务之后非常的有成就感。越到后期进步就越缓慢,但和同组的人交流之后发现并不

11、是在原地踏步,虽然很长一段时间没能确定下来电路,但同时排除了不少错误的电路设计。实验中收获的知识有限,但我觉得我得到了我几乎从来没有过的耐心,我甚至在实验结束后的五一小长假前一天认真的XX了色环读阻值,并且把所有的未知电阻挨个读值之后插回了电阻箱,那一刻我觉得电路实验是大学这两年最珍贵的课程,不能糊弄,不能投机取巧虽然在一定程度上可以,还培养了耐心,上了北邮之后我也算是第一次真正的觉得自己的专业还不错。八. 所用元器件及测试仪表清单元器件清单名称型号数量用途运算放大器LM741CN1反相放大二极管1N40092控制单项导通的开关特性,防止反向击穿,保护电路电容47F1用于整流滤波10F1用于隔

12、直电阻20k4限流,防止电压过大,提供负反馈,充当保护电阻、负载电阻等2001面包板1用于搭载电路,充当电路的载体用于连接电路导线若干仪器仪表清单仪器名称用途直流稳压电源提供直流信号函数信号发生器提供交流信号毫伏表测量输入电压有效值示波器显示波形万用表测分压、二极管正负等九. 参考文献1.北邮电路中心电子电路综合设计实验2.电子电路基础北京邮电大学出版社 刘宝玲3.电路中心网站4.极客工房Arduino教程资料附代码:1) 初次代码:const int D=5;int a;int V;int Num4;void disp(int pos,int num) for(int i(0);i6;i+)

13、 digitalWrite(i,LOW); digitalWrite(6,HIGH); digitalWrite(7,HIGH); digitalWrite(8,HIGH); digitalWrite(9,HIGH); digitalWrite(10,HIGH); digitalWrite(11,HIGH); digitalWrite(12,HIGH); digitalWrite(13,HIGH); if(num=0) digitalWrite(6,HIGH); digitalWrite(7,HIGH); digitalWrite(8,LOW); digitalWrite(9,LOW); di

14、gitalWrite(10,LOW); digitalWrite(11,LOW); digitalWrite(12,LOW); digitalWrite(13,LOW); else if(num=1) digitalWrite(6,HIGH); digitalWrite(7,HIGH); digitalWrite(8,HIGH); digitalWrite(9,HIGH); digitalWrite(10,HIGH); digitalWrite(11,LOW); digitalWrite(12,LOW); digitalWrite(13,HIGH); else if(num=2) digita

15、lWrite(6,HIGH); digitalWrite(7,LOW); digitalWrite(8,HIGH); digitalWrite(9,LOW); digitalWrite(10,LOW); digitalWrite(11,HIGH); digitalWrite(12,LOW); digitalWrite(13,LOW); else if(num=3) digitalWrite(6,HIGH); digitalWrite(7,LOW); digitalWrite(8,HIGH); digitalWrite(9,HIGH); digitalWrite(10,LOW); digital

16、Write(11,LOW); digitalWrite(12,LOW); digitalWrite(13,LOW); else if(num=4) digitalWrite(6,HIGH); digitalWrite(7,LOW); digitalWrite(8,LOW); digitalWrite(9,HIGH); digitalWrite(10,HIGH); digitalWrite(11,LOW); digitalWrite(12,LOW); digitalWrite(13,HIGH); else if(num=5) digitalWrite(6,HIGH); digitalWrite(

17、7,LOW); digitalWrite(8,LOW); digitalWrite(9,HIGH); digitalWrite(10,LOW); digitalWrite(11,LOW); digitalWrite(12,HIGH); digitalWrite(13,LOW); else if(num=6) digitalWrite(6,HIGH); digitalWrite(7,LOW); digitalWrite(8,LOW); digitalWrite(9,LOW); digitalWrite(10,LOW); digitalWrite(11,LOW); digitalWrite(12,

18、HIGH); digitalWrite(13,LOW); else if(num=7) digitalWrite(6,HIGH); digitalWrite(7,HIGH); digitalWrite(8,HIGH); digitalWrite(9,HIGH); digitalWrite(10,HIGH); digitalWrite(11,LOW); digitalWrite(12,LOW); digitalWrite(13,LOW); else if(num=8) digitalWrite(6,HIGH); digitalWrite(7,LOW); digitalWrite(8,LOW);

19、digitalWrite(9,LOW); digitalWrite(10,LOW); digitalWrite(11,LOW); digitalWrite(12,LOW); digitalWrite(13,LOW); else if(num=9) digitalWrite(6,HIGH); digitalWrite(7,LOW); digitalWrite(8,LOW); digitalWrite(9,HIGH); digitalWrite(10,LOW); digitalWrite(11,LOW); digitalWrite(12,LOW); digitalWrite(13,LOW); di

20、gitalWrite(pos,HIGH); pinMode(0, OUTPUT); pinMode(1, OUTPUT); pinMode(2, OUTPUT); pinMode(3, OUTPUT); pinMode(4, OUTPUT); pinMode(5, OUTPUT); pinMode(6, OUTPUT); pinMode(7, OUTPUT); pinMode(8, OUTPUT); pinMode(9, OUTPUT); pinMode(10, OUTPUT); pinMode(11, OUTPUT); pinMode(12, OUTPUT); pinMode(13, OUT

21、PUT); pinMode(A0,INPUT); digitalWrite(6,HIGH); digitalWrite(7,LOW); digitalWrite(8,LOW); digitalWrite(9,LOW); digitalWrite(10,LOW); digitalWrite(11,LOW); digitalWrite(12,LOW); digitalWrite(13,LOW); for(int i(0);i6;i+) digitalWrite(i,HIGH); delay(500); digitalWrite(i,LOW); pinMode(0, OUTPUT); pinMode

22、(1, OUTPUT); pinMode(2, OUTPUT); pinMode(3, OUTPUT); pinMode(4, OUTPUT); pinMode(5, OUTPUT); pinMode(6, OUTPUT); pinMode(7, OUTPUT); pinMode(8, OUTPUT); pinMode(9, OUTPUT); pinMode(10, OUTPUT); pinMode(11, OUTPUT); pinMode(12, OUTPUT); pinMode(13, OUTPUT); pinMode(0, OUTPUT); pinMode(1, OUTPUT); pin

23、Mode(2, OUTPUT); pinMode(3, OUTPUT); pinMode(4, OUTPUT); pinMode(5, OUTPUT); pinMode(6, OUTPUT); pinMode(7, OUTPUT); pinMode(8, OUTPUT); pinMode(9, OUTPUT); pinMode(10, OUTPUT); pinMode(11, OUTPUT); pinMode(12, OUTPUT); pinMode(13, OUTPUT);/ pinMode(A5,INPUT);/ the loop routine runs over and over ag

24、ain forever:void loop() analogReference(DEFAULT); adData=analogRead(A5);if(V=100) /判断语句V=(adData*-2550)*;else if(V=200)V=(adData*-2550)*;else if(V=300)V=(adData*-2550)*;else if(V=400)V=(adData*-2550)*;else if(V=500)V=(adData*-2550)*;else if(V=600)V=(adData*-2550)*;else if(V=700)V=(adData*-2550)*;else if(V=800)V=(adData*-2550)*;else if(V=900)V=(adData*-2550)*;else if(V1000)V=(adData*-2550)*; preV=V; Num0=V/1000; Num1=(V%1000)/100; Num2=(V%100)/10; Num3=(V%10); for(int i(0);i10;i+) disp(2,Num0); delay(S); disp(3,Num1); delay(S); disp(4,Num2); delay(S); disp(5,Num3); delay(S);

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1