电子线路设计下实验报告2

  |  

文章导航

大三下电子线路设计下实验报告2

一、实验准备

1、Keil的基本使用方法 2、51单片机C8051F020基础知识 3、ADC 4、液晶实时显示波形 5、PID控制算法和调参方法

二、实验任务与要求

(一)基础要求

编程实现平衡器控制系统功能调试。要求采用基于C8051F020智能控制器作为平衡器控制系统的核心部件,编程实现对平衡器的自动控制。要求程序中必须包含数码管、液晶显示、键盘、AD。 将实验任务一和任务二的功能整合成一个大工程,LCD屏上显示主菜单:包括三个子菜单 (1)个人信息 ; (2)实验一功能; (3)实验二功能:LCD屏上显示控制电压曲线、LED显示控制电压值。 自己编写PID算法并实现PID参数的整定,能够保证控制的稳定性和快速性。

(二)工程实现的功能

重新编辑了主菜单,为了配合按键显示,将实验一的功能一和功能二合成了一个子功能。加入了显示个人信息界面和实验二的显示波形、控制飞行器子功能。 1.主菜单包括三个选项:显示个人信息(左键)、进入实验一功能(中键)、进入实验二功能(右键)。其中显示个人信息界面下显示姓名学号班级等等信息,按右键退出。 2.实验一子菜单内是实验一实现的功能,在此不再赘述。值得一提的是,由于实验一有三个功能,缺一个返回按钮,所以我把计时和播动画两个功能进行了合并,变为一个“计时选图”选项,并创建了一个过度菜单来选择,将右键统一设置为返回按钮。 3.实验二子菜单有三个选项:显示波形(左键)、控制平衡器(中键)、返回主菜单(右键)。 4.显示波形子功能中选中进入过渡菜单,按左键进入播放,中键播放下一个,右键返回。一共有三种波形:正弦波、三角波、方波。进入以后再按左键重新播放这一个波形。 5.控制平衡器功能选中进入选择滤波方式过渡菜单。其中左键选择下一个,右键退出。一共有三种滤波方式:算数均值滤波、中值平均滤波、滑动均值滤波。按中键确定进入,按右键退出。进入显示波形界面后,上半屏显示霍尔传感器实时检测的电压曲线,下半屏是提示信息,左键为飞行器向上,中键为飞行器向下,右键为返回停止。

(三)流程图

1.主逻辑

2.实验一子菜单

3.实验二子菜单

4.显示波形、控制飞行器子功能

三、硬件原理

(一)ADC

A/D转换器片内有D/A转换和电压比较器,基本电路图如下:

ADC电路通常由两部分组成,它们是:采样、保持电路和量化、编码电路。其中量化、编码电路是最核心的部件,任何ADC转换电路都必须包含这种电路。

模—数转换的过程有四个阶段,即采样、保持、量化和编码。

ADC有4种转换启动方式,在本实验中使用的是定时器3溢出(即定时的连续转换)方式。

(二)DAC

每个C805 1F020/1/2/3器件都有两个片内12 位电压方式数/模转换器(DAC)。每个DAC的输出摆幅均为0V到(VREF-ILSB),对应的输入码范围是0x000到0xFFF。可以用对应的控制寄存器DACOCN和DACICN允许/禁止DACO和DAC1。每个DAC都具有灵活的输出更新机制,允许无缝的满度变化并支持无抖动输出更新,适合波形发生器的应用。其中使用方式有两种:根据软件命令更新输出、基于定时器溢出的输出更新。在本实验中使用第二种方式,使用定时器2进行输出,具体操作将在后面调试中介绍。 下面是信号发生器的硬件电路:

(三)模拟飞行器

模拟飞行平衡器实物 模拟飞行平衡器原理图 直升机垂直升降系统接口

序号 信号 作用
1 +12V +12V 电源
2 +5V +5V 电源
3 GND 地线
4 AIN0 0 号模拟量检测端子,霍尔传感器电路输出检测端子。
5 AIN1 1 号模拟量检测端子,霍尔传感器电路接地端。
6 AIN2 2 号模拟量检测端子,螺旋桨电机电压检测端子。
7 AIN3 3 号模拟量检测端子,螺旋桨电机电压检测端子。
8 DA-OUT0 模拟量控制信号端子,螺旋桨电机电压控制端子。
9 AGND 模拟地线

(四)外部放大电路

实验板输出电压0~5v不能驱动控制对象,需要用放大电路放大信号。

(五)接线方法

如图所示,实验板输出控制电压(DAC)接到DA-OUT0口,实现螺旋桨电机电压控制。AIN0口霍尔传感器电路输出检测端子接到放大电路,放大后的信号接到实验板输入接口(ADC)。其中5V、12V、地线都从实验板引出,通过面包板连接即可。

备注:其他硬件模块功能已在实验1

四、软件实现

(一)主函数

(二)显示个人信息

(三)实验一增加的中转界面


(四)实验二主菜单

(五)显示波形

定时器中断输出波形

按键中断显示波形条件语句:


(六)选择滤波方式

(七)控制平衡器

滤波操作:

显示检测值、设定值、控制量:(led数码管上中下三行)

控制算法:

网上参考的位置型PID算法出处:

根据网上找到的参考PID算法,进行简单修改以后即可投入使用,需要注意的是,在风扇电机控制中,控制量应该是原检测值加上PID控制量,因为该电机没有积分环节,必须保留原始值才可以。

三种滤波算法:

数码管显示检测、设定、控制值子函数:

Lcd屏幕绘制电压波形子函数:

各种初始化合集函数:

备注:全部代码在提交的工程文件中,此处由于篇幅限制不粘贴全部代码。

五、调试过程

(一)RAM不够的问题

显示地址空间溢出,查找相关资料后发现是全局变量太多把ram用超了,需要利用一下高字节ram和片外存储器。由于实现的功能比较多,各种函数之间传递参数必须用到全局变量,所以在尽可能精简以后存储器空间还是超了,这就需要扩充到其他存储空间。

论坛找到的资料——我遇到了这个问题后,我发现是RAM不够,一般的话。有data、idata、pdata以及xdata。data的话,就是低128(片内)字节;idata的话,就是256个(片内)字节。起始data就是idata的一部分。pdata以及xdata是片外RAM的,那就得看单片机的手册进行操作。例如STC12C5A60S2的话,要用内部扩展的话,是要用到xdata的,即unsigned char xdata a[256],那么这就去了256个字节了。内部扩展的。也就是说,当你编译后,发现data已经是大于128了,同时伴随着报错。那你就得使用xdata或者pdata了。

在变量定义时声明为idata或者xdata即可

可以看到编译通过。

(二)定时器选择与DAC输出方式的改变

刚开始我在按照例程写完DAC输出时发现并没有对电机起到控制作用,在仔细查看操作手册以后我发现这和DAC初始化时向DAC0CN写入的控制字有关。两个例程中写入的控制字不同,一个是0x98(10011000),另一个是0x94(10010100)。

对于我的工程来说,使用定时器2,直接对DAC0写入,所以控制字写入0x98即可达到效果,而我尝试使用定时器4,发现数码管会发生肉眼可见的闪烁,这应该与定时器的周期有关,所以在使能时关掉了定时器4,中断中也没有使用定时器4的功能。

(三)波形全屏显示

由于霍尔传感器的输出电压是一个范围,并不是准确的0-5V,而之前编写的显示函数显示范围是0-4096,即将0-5V映射到12位二进制数中。所以对于不同的飞行器要根据其显示范围,确定不同的变换系数。即将飞行器霍尔元件输出电压区间拉伸映射到整个显示区间。 在我使用的这块板子上,标定的参数为:

(四)PID参数的整定

PID参数必须通过整定才能达到最好的控制效果,而不好的PID参数甚至可能会使控制系统不稳定。 网上查到的凑试法调节PID参数方法:

根据这个方法可以进行PID参数的整定,下面是具体的调参过程: 1.在初步确定了一组PID参数后,得到了一组控制曲线:

可以看出,在飞行器高度较高时,稳态性能不好,有抖动和静差。而在调节高低的过程中,在加入扰动以后,响应曲线的动态性能也不好。有震荡和超调的存在,响应时间也很长。

2.比例环节的调节

按照方法中的指示,先从比例环境调起,可以很明显地看出,比例环节过小,调节时间太长且具有静差;但是比例环节太大以后,出现了较大的超调,比较合适的时调节出理想的4:1衰减曲线。

3.积分环节的调节

积分环节能够起到消除稳态误差的作用,但是如果积分环节过大,会破坏系统的稳定性,出现较大的超调和震荡,应该将积分环节调节到几乎没有超调且没有静差。

4.微分环节的调节

微分环节起到一个“超前调节”的作用,如果没有微分环节,可能会造成调节时间过长,而微分环节过大会造成系统失衡,稳定性变差。

调节到最后,应该在保证没有静差、系统稳定的情况下,尽可能地缩短调节时间,以达到完美的响应曲线。

5.最终调节结果

这一个是我特别满意的调节曲线,可以看出,不管是从小到大还是从大到小,调节曲线都很稳定,而且没有超调和静差,响应时间也很快。最关键的是,从视频中可以看出,在按下改变设定值按钮后,飞行器迅速响应,马上稳定且没有震荡,稳定以后也没有细微的波动。

对应的PID参数为:Kp:1.3,Ki:0.04,Kd:0.003

备注:对应的参数只对特定的实验仪器有用。

六、实验总结

这次实验前前后后做了五天的时间,从研读例程,到尝试修改例程、测试功能,再到列清单设计菜单,到把两次实验整合起来,最后再加入PID控制,调试PID参数以达到完美的响应曲线。这次试验确确实实花费了很多时间和心血,从借到实验板到拿着小起子转电位器调节显示波形,再到研读数据手册解决问题,最后搭板子调PID参数,整个过程确实让人难忘。最让我印象深刻的是例程当中存在的各种各样的问题,在无法实现功能,寻找解决办法的过程中发现了其中的各种bug,看来,发现和解决问题是最好的学习方法。在感叹于例程错误多的过程中,我也逐渐的加深了对单片机的认识,在查找数据手册、请教老师、同学交流和上网查找解决方案的过程中,我对于这些知识的掌握也更加深刻。许多错误的发生正是我们在编程中最容易发生的,这也为我的编程提供了参考与警示。 PID参数的调节过程又是一个挑战,对于我们自动化专业,PID可以说是老朋友了,但是在之前的课程和实验中,都是确定了的理想条件,包括做实验也是调试好的集成设备,可以直接拿来使用。对于一个不太了解的系统,如何调节参数以达到最好的控制效果确实是第一次遇到。在仔细复习了PID算法、PID参数调节方法以后,我对于控制对象的参数调节前前后后进行了一天时间。一方面是因为三个参数互相耦合,牵一发而动全身;另一方面是因为不太的模拟飞行器都有一套不同的参数,下午再来到实验室时更换了实验板和飞行器,还有重新进行波形显示的调节和参数的整定,这里也浪费了一些时间。不过最终结果让人满意,我调出了理想的曲线,控制效果也很让人满意。这也给定一个实际系统来进行单片机控制,也接近于实际应用,让我更好地体会到了理论与实践相结合的魅力。

附带的视频如果电脑自带视频播放器打不开可以使用腾讯视频打开。

本站总访问量 您是第位访客