磁悬浮实验报告
大学物理实验:电磁感应与磁悬浮实验报告

一、电机频率与磁牵引力的关系
1、实验测得数据
2、拟合函数
由MATLAB进行数据拟合得到电机频率与牵引力符合以下函数:f(x) = 3.31e-05*x + 0.01282(95%置信度)
3、拟合函数图像
二、电机频率与磁悬浮力的关系
1、实验测得数据
2、拟合函数
由MATLAB进行数据拟合得到电机频率与牵引力符合以下函数:f(x) = 5.736e-06*x - 0.06576(95%置信度)
3、拟合函数图像
三、(1)磁牵引力随距离变化曲线
1、实验测得数据
2、数据拟合函数
由MATLAB进行数据拟合得到电机频率与牵引力符合以下函数:f(x) = 0.6908 * x ^ -0.8036 + -0.1516(95%置信度)3、拟合函数图像
(2)磁悬浮力随距离变化曲线
1、实验测得数据
2、实验数据拟合函数
由MATLAB进行数据拟合得到电机频率与牵引力符合以下函数:f(x) = -0.08735 * x ^ 0.2204 + 0.1266(95%置信度)
3、实验数据拟合函数图像
四、电机频率与转速的关系
1、实验测得数据
2、实验数据拟合函数
由MATLAB进行数据拟合得到电机频率与牵引力符合以下函数:f(x) = 0.009542 * x + -37.85(95%置信度)
3、实验数据拟合函数图像
五、电机频率与发电电压的关系
1、实验测得数据
2、实验数据拟合函数
由MATLAB进行数据拟合得到电机频率与牵引力符合以下函数:f(x) = 0.0001191 * x + 0.05747(95%置信度)3、实验数据拟合函数图像。
超导磁悬浮实验报告

超导磁悬浮实验报告本实验旨在通过超导磁悬浮技术,研究超导体在低温下的磁性特性,并探索其在磁悬浮领域的应用潜力。
在实验中,我们使用了液氮冷却系统,将超导体冷却至临界温度以下,观察其在外加磁场下的悬浮效应,同时测量其磁化曲线和临界电流等参数,以期获得有关超导体磁悬浮性能的实验数据。
首先,我们准备了液氮冷却系统和超导体样品,并将超导体样品置于液氮中进行冷却。
随着温度的逐渐下降,我们观察到超导体表面开始出现磁悬浮效应,即超导体在外加磁场下产生的抗磁性使其悬浮于磁场中,呈现出稳定的悬浮状态。
这一现象与超导体的迈斯纳效应密切相关,表明超导体在临界温度以下具有完全抗磁性。
随后,我们对超导体样品在不同外加磁场下的悬浮效应进行了观察和测量。
实验结果显示,随着外加磁场的增加,超导体的悬浮高度呈现出非线性变化,这与迈斯纳效应的特性相符合。
同时,我们还测量了超导体在不同温度下的临界电流值,结果表明临界电流随温度的降低而增加,这也与超导体的抗磁性质相关。
在实验过程中,我们还发现了一些问题和挑战。
例如,超导体样品的制备和冷却过程需要严格控制,以确保样品能够达到超导态并保持稳定的悬浮状态。
此外,超导体在外界振动和扰动下容易失去稳定悬浮状态,因此需要在实验环境中进行有效的隔振和稳定控制。
综合以上实验结果和分析,我们得出了以下结论,超导体在临界温度以下具有完全抗磁性,并能够在外加磁场下实现稳定的磁悬浮效应;超导体的悬浮高度和临界电流受外加磁场和温度的影响,呈现出特定的非线性变化规律。
这些结论为超导磁悬浮技术的应用提供了重要的实验数据和理论基础。
总之,本实验通过超导磁悬浮技术的研究,深入探讨了超导体在低温下的磁性特性和磁悬浮效应,并取得了一系列有意义的实验结果。
这些结果对于超导磁悬浮技术的发展和应用具有重要的理论和实验价值,也为相关领域的进一步研究提供了有益的参考和借鉴。
超导磁悬浮测量实验报告

超导磁悬浮测量实验报告超导磁悬浮技术是一种新型的磁悬浮技术,它采用了超导材料和强磁场技术,可以实现磁悬浮负载的稳定和高精度测量,广泛应用于轴承、运载和测量等领域。
本次实验我们使用的是超导磁悬浮测量系统,实验目的是探究超导磁悬浮技术的原理和应用,具体步骤如下:首先,我们制备了超导磁悬浮材料,这些材料由氧化铈和钙钛矿混合而成,在液态氮中高温煅烧,形成了超导材料。
我们将这些材料制成圆形磁悬浮样品,然后将它们浸入液氮中冷却,并施加一定的磁场。
接着,我们使用超导磁悬浮系统对样品进行测量。
该系统由磁体、传感器和控制电路组成。
磁体产生磁场,传感器测量磁场强度和样品位置,控制电路根据传感器测量值控制磁体,从而实现样品的浮起和悬浮。
在实验过程中,我们调整磁体和传感器的位置和信号灵敏度,使超导磁悬浮系统达到稳定状态。
然后,我们进行了磁场分布测试、样品浮力测试和样品位置测试。
磁场分布测试是通过传感器测量磁场强度,绘制出磁场强度分布图,来判断磁悬浮系统的稳定性和磁场分布情况。
样品浮力测试是通过测量样品受到的浮力大小和方向,确定样品的悬浮高度和重心位置。
样品位置测试是通过传感器测量样品位置和位移,计算出样品相对于磁体的距离和姿态,判断样品的平稳程度和精度。
最后,我们对实验结果进行统计和分析,得出超导磁悬浮系统的性能指标,如稳定度、精度、灵敏度等等,并探究其在未来的应用前景。
总之,超导磁悬测量实验是一项非常复杂而又高新的实验,本次实验虽图探究其原理和应用,但是实验过程也相应的要求较高,需要有一定的科学素养和专业技术人员进行指导。
此外,本文只是对此次实验的简单介绍,有兴趣的人可以在实验的基础上深入研究和探究。
磁悬浮实验实验报告

1. 了解磁悬浮技术的原理和基本操作。
2. 掌握磁悬浮实验的步骤和方法。
3. 通过实验,观察磁悬浮现象,分析磁悬浮系统的稳定性和悬浮高度与激磁电流的关系。
二、实验原理磁悬浮技术是利用磁力使物体悬浮在空中,避免物体与支撑面接触,从而减少摩擦和能量损耗。
实验中,通过改变激磁电流的大小,观察磁悬浮系统在不同悬浮高度下的稳定性。
三、实验器材1. 磁悬浮实验装置一套(包括磁悬浮盘、磁悬浮支架、激磁电流线圈、电源等)。
2. 测量工具(如尺子、万用表等)。
四、实验步骤1. 搭建实验装置,将磁悬浮盘放置在磁悬浮支架上,确保磁悬浮盘与支架平行。
2. 将激磁电流线圈绕在磁悬浮盘上,确保线圈与磁悬浮盘紧密贴合。
3. 连接电源,调整激磁电流的大小。
4. 观察磁悬浮盘在不同激磁电流下的悬浮状态,记录悬浮高度和激磁电流的对应关系。
5. 改变激磁电流的大小,重复步骤4,观察磁悬浮盘的悬浮状态。
五、实验结果与分析1. 观察到当激磁电流较小时,磁悬浮盘处于悬浮状态,但悬浮高度较低;随着激磁电流的增大,悬浮高度逐渐升高。
2. 当激磁电流过大时,磁悬浮盘开始接触支架,悬浮状态不稳定。
3. 通过实验数据可知,悬浮高度与激磁电流之间存在一定的关系,具体表现为:在一定范围内,激磁电流越大,悬浮高度越高。
1. 磁悬浮技术是一种利用磁力实现物体悬浮的技术,具有减少摩擦和能量损耗的优点。
2. 磁悬浮系统的稳定性与激磁电流的大小有关,在一定范围内,激磁电流越大,悬浮高度越高,系统越稳定。
3. 通过本实验,掌握了磁悬浮实验的步骤和方法,为后续研究磁悬浮技术奠定了基础。
七、实验总结本次实验成功地实现了磁悬浮现象的观察,通过实验数据的分析,得出了悬浮高度与激磁电流的关系。
在实验过程中,我们了解到磁悬浮技术的原理和应用,提高了对磁悬浮系统的认识。
同时,通过实际操作,锻炼了我们的动手能力和实验技能。
在今后的研究中,我们可以进一步探讨磁悬浮系统的优化设计,提高磁悬浮技术的稳定性和悬浮高度,为磁悬浮技术的发展和应用提供有力支持。
磁悬浮卡片实验报告

一、实验目的1. 了解磁悬浮技术的原理和基本原理。
2. 通过实验验证磁悬浮现象,观察磁悬浮卡片在磁场中的悬浮状态。
3. 探讨磁悬浮卡片在磁场中的稳定性及其影响因素。
二、实验原理磁悬浮技术是利用磁场对磁性物体的吸引和排斥作用,使物体在磁场中悬浮。
本实验采用磁悬浮卡片,通过改变磁悬浮卡片的形状、大小、材质等,研究磁悬浮卡片在磁场中的悬浮状态。
三、实验器材1. 磁悬浮卡片:采用高磁性材料制成,形状为圆形或方形。
2. 磁铁:用于产生磁场。
3. 铁架台:用于固定磁铁和磁悬浮卡片。
4. 电流表:用于测量磁铁产生的磁场强度。
5. 直流电源:为磁铁提供能量。
6. 测量工具:用于测量磁悬浮卡片的尺寸、质量等。
四、实验步骤1. 将磁铁固定在铁架台上,调整磁铁位置,使磁场方向与磁悬浮卡片平面垂直。
2. 将磁悬浮卡片放置在磁场中,观察磁悬浮卡片在磁场中的悬浮状态。
3. 改变磁悬浮卡片的形状、大小、材质等,重复步骤2,观察磁悬浮卡片在磁场中的悬浮状态。
4. 记录实验数据,分析磁悬浮卡片在磁场中的悬浮状态及其影响因素。
五、实验结果与分析1. 实验结果表明,磁悬浮卡片在磁场中能够悬浮。
当磁悬浮卡片与磁场方向垂直时,卡片悬浮效果较好;当磁悬浮卡片与磁场方向平行时,卡片悬浮效果较差。
2. 通过改变磁悬浮卡片的形状、大小、材质等,发现以下规律:a. 磁悬浮卡片的形状对悬浮效果影响较大。
圆形卡片在磁场中悬浮效果较好,方形卡片悬浮效果较差。
b. 磁悬浮卡片的大小对悬浮效果影响较小。
在实验范围内,卡片直径对悬浮效果的影响不明显。
c. 磁悬浮卡片的材质对悬浮效果影响较大。
高磁性材料制成的卡片悬浮效果较好,低磁性材料制成的卡片悬浮效果较差。
3. 影响磁悬浮卡片悬浮效果的因素:a. 磁场强度:磁场强度越大,磁悬浮卡片悬浮效果越好。
b. 磁悬浮卡片与磁场的相对位置:磁悬浮卡片与磁场方向垂直时,悬浮效果较好;平行时,悬浮效果较差。
c. 磁悬浮卡片的形状、大小、材质等。
大学磁悬浮实验报告

1. 了解磁悬浮列车的原理和结构。
2. 通过实验演示磁悬浮现象,验证超导体对永磁体的排斥作用。
3. 掌握磁悬浮列车的运行机制和影响因素。
二、实验原理磁悬浮列车利用超导体在低温下的特性,实现列车与轨道之间的无接触悬浮。
当超导体冷却至一定温度时,其电阻降为零,形成超导态。
此时,超导体内的电流产生强大的磁场,与轨道上的永磁体相互作用,产生排斥力,使列车悬浮于轨道之上。
三、实验器材1. 超导磁悬浮列车演示仪(含磁导轨支架、磁导轨)2. 高温超导体(含Ag的YBacuo系高温超导体)3. 液氮四、实验步骤1. 将超导磁悬浮列车演示仪放置在平稳的工作台上。
2. 使用液氮将高温超导体冷却至临界温度(约90K)。
3. 将冷却后的高温超导体放置在磁导轨上,确保其与轨道平行。
4. 打开电源,使磁导轨产生磁场。
5. 观察高温超导体在磁场中的悬浮状态。
五、实验结果与分析1. 当高温超导体冷却至临界温度时,其在磁场中悬浮,证实了超导体对永磁体的排斥作用。
2. 通过调整磁导轨的磁场强度,可以观察到悬浮高度的变化。
当磁场强度增大时,悬浮高度也随之增大。
3. 实验过程中,高温超导体在磁场中的悬浮稳定性较好,但受到外界温度、磁场强度等因素的影响。
1. 磁悬浮列车利用超导体在低温下的特性,实现列车与轨道之间的无接触悬浮。
2. 超导体对永磁体的排斥作用是实现磁悬浮的关键因素。
3. 磁悬浮列车的悬浮高度和稳定性受到外界因素的影响。
七、实验注意事项1. 实验过程中,操作人员需穿戴防护用品,如手套、护目镜等。
2. 使用液氮时,注意防止泄漏和低温冻伤。
3. 调整磁导轨磁场强度时,需缓慢进行,避免对高温超导体造成损伤。
八、思考题1. 磁悬浮列车在实际应用中,如何解决高温超导体冷却问题?2. 磁悬浮列车在高速运行时,如何保证其稳定性和安全性?3. 除了磁悬浮技术,还有哪些新型高速轨道交通技术?九、实验总结本次磁悬浮实验成功演示了超导体对永磁体的排斥作用,验证了磁悬浮列车的原理。
超导磁悬浮实验报告

超导磁悬浮实验报告一、实验目的本次超导磁悬浮实验的目的在于深入研究和理解超导材料在磁场中的独特性质,以及观察和分析超导磁悬浮现象的产生机制和相关特性。
通过实验,期望能够掌握超导磁悬浮的基本原理和实际应用的可能性,为未来在相关领域的进一步研究和应用提供基础数据和理论支持。
二、实验原理超导材料具有零电阻和完全抗磁性的特性。
当超导材料处于低温环境下并置于磁场中时,磁力线无法穿透超导体,从而产生迈斯纳效应,导致超导体内部的磁感应强度为零。
在超导磁悬浮实验中,通常使用超导块材和永磁体。
由于永磁体产生的磁场,超导块材会受到一个向上的排斥力,当这个排斥力与超导块材的重力相平衡时,就实现了超导磁悬浮。
三、实验设备与材料1、超导块材:选用高质量的高温超导材料 YBCO(钇钡铜氧),其临界温度约为 90K。
2、低温容器:用于保持超导块材处于低温状态,通常使用液氮作为冷却剂。
3、永磁体:提供稳定的磁场。
4、测量仪器:包括磁力计、温度计、位移传感器等,用于测量磁场强度、温度和超导块材的位移。
四、实验步骤1、准备工作将超导块材放入低温容器中,注入液氮,使超导块材冷却至临界温度以下,确保其处于超导态。
安装并校准测量仪器,确保测量数据的准确性。
2、放置永磁体将永磁体缓慢靠近超导块材,观察超导块材的反应。
3、测量与记录同时使用磁力计测量磁场强度,温度计测量温度,位移传感器测量超导块材的位移。
记录不同位置和条件下的测量数据。
4、改变实验条件调整永磁体的位置、方向和距离,重复测量和记录数据。
改变液氮的量,观察温度变化对超导磁悬浮效果的影响。
五、实验数据与分析在实验过程中,我们获得了大量的数据,包括磁场强度、温度、超导块材的位移等。
通过对这些数据的分析,我们得到了以下结论:1、磁场强度与悬浮高度的关系随着磁场强度的增加,超导块材的悬浮高度也相应增加。
但当磁场强度超过一定值后,悬浮高度的增加趋于平缓。
2、温度对超导磁悬浮的影响温度越接近临界温度,超导磁悬浮效果越不稳定。
磁悬浮实验报告5

磁悬浮实验报告5
本次实验是磁悬浮实验,主要是要了解磁悬浮的工作原理和实现方式,同时对于磁悬浮车的运动进行研究。
实验过程中需要进行的操作有:开启实验设备,设定磁场和气垫压力,将磁悬浮车放置在磁场中,并启动车辆,记录数据。
首先,在开启实验设备之前,需要做好实验设备的准备工作。
包括检查设备是否有损坏或缺陷,准备好所需的实验器材和工具。
接下来,需要设定磁场和气垫压力。
设定磁场时,先将磁悬浮车放置在磁场中,然后打开磁体电源,调节电流大小和方向,使得磁悬浮车能够悬浮在磁场中。
要注意的是,磁场的大小和方向需要根据磁悬浮车的特性来进行调节,以保证磁悬浮车能够平稳悬浮。
设定气垫压力时,需要将气垫压力调节阀开关打开,使用压力计来调节气垫压力的大小。
要注意的是,气垫压力的大小需要根据磁悬浮车的负载来进行调节,以保证磁悬浮车能够平稳运动。
接下来,将磁悬浮车放置在磁场中,并启动车辆。
记录磁悬浮车的运动轨迹、速度、加速度等数据。
根据记录的数据来分析磁悬浮车的运动状态和性能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
开放性试验:《磁悬浮原理实验仪制作及PID控制》试验报告实验内容:学生通过磁悬浮有关知识的学习,根据已有的试验模型,设计出磁悬浮实验仪器,并进行制作,进而在计算机上用PID技术进行调节和控制。
难点:PID控制程序的编写及调试。
创新点:该实验以机械学院数控所得科研成果为依托,以一种新颖的方式,用磁悬浮小球直观的展示了PID控制理论的应用。
该仪器构造简单,成本低廉。
此实验综合应用了电磁场、计算机、机械控制等相关知识,具有一定的研究创新性特点。
该仪器有望成为中学物理实验仪器,和高校PID 控制实验仪器。
关键问题1.悬浮线圈的优化设计2.磁悬浮小球系统模型3.磁悬浮小球的PID控制电磁绕组优化设计小球质量:钢小球质量:15~20g小球直径:15mm悬浮高度:3mm要求:根据悬浮高度、小球大小、小球重量设计悬浮绕组绕组铁芯尺寸、线圈匝数、额定电流、线径。
电磁绕组优化设计:由磁路的基尔霍夫定律、毕奥-萨格尔定律和能量守恒定律,可得电磁吸力为:式中:μ0——空气磁导率,4πX10-7H/m ; A ——铁芯的极面积,单位m2; N ——电磁铁线圈匝数;z ——小球质心到电磁铁磁极表面的瞬时气隙,单位m ; i ——电磁铁绕组中的瞬时电流,单位A 。
功率放大器中放大元器件的最大允许电压为15V 。
为了降低功率放大器件上的压力差,减少功率放大器件的发热,设定悬浮绕组线圈电压该值为12V 。
约束条件:U =12V 电流、电压与电阻的关系电阻:L ——漆包线的总长度/m S ——漆包线的横截面积/m2d ——线径的大小/mε是漆包线线的电阻率,查表可知: ε=1.5*1.75*e-8,单位:Ω*m根据线圈的结构,可以得出漆包线的总长度为:2202⎪⎭⎫⎝⎛-=z i AN F μUi R=L R Sε=214S d π=11()ni L L a id dπ==+∑ 线圈的匝数为:综上所述,电磁力为:在线圈骨架几何尺寸和所加的电压固定的情况下,线圈漆包线线径d 越大,漆包线的长度L 越小,电磁力F 越大 。
另外,漆包线线径和电流之间还存在下述关系:因此,线径d 越大通过线圈的电流也大,线圈发热越严重。
优化漆包线线径和线长必须综合考虑电磁力大小、线圈额定电流。
由最优的漆包线线径和线长,就可以得到合理的电磁绕组结构参数。
磁悬浮小球系统模型将钢质小球放入电磁铁产生的磁场中,用传感器检测钢球在螺线管磁场中2b a n d-=dnL N /1-=222201222()128AL b a U F z L μπε-=-LU d i επ42=时,控制理论的其它技术难以采用时,系统控制器的结构和参数必须依靠经验和现场调试来确定,这时应用PID控制技术最为方便。
即当我们不完全了解一个系统和被控对象﹐或不能通过有效的测量手段来获得系统参数时,最适合用PID控制技术。
比例控制能迅速反应误差,从而减小稳态误差。
但是,比例控制不能消除稳态误差。
比例放大系数的加大,会引起系统的不稳定。
积分控制的作用是,只要系统有误差存在,积分控制器就不断地积累,输出控制量,以消除误差。
因而,只要有足够的时间,积分控制将能完全消除误差,使系统误差为零,从而消除稳态误差。
积分作用太强会使系统超调加大,甚至使系统出现振荡。
微分控制可以减小超调量,克服振荡,使系统的稳定性提高,同时加快系统的动态响应速度,减小调整时间,从而改善系统的动态性能。
PID控制器参数整定的方法很多,概括起来有两大类:一是理论计算整定法。
它主要是依据系统的数学模型,经过理论计算确定控制器参数。
这种方法所得到的计算数据未必可以直接用,还必须通过工程实际进行调整和修改。
二是工程整定方法,它主要依赖工程经验,直接在控制系统的试验中进行,且方法简单、易于掌握,在工程实际中被广泛采用。
PID控制器参数的工程整定方法,主要有临界比例法、反应曲线法和衰减法。
临界比例度法进行PID控制器参数的整定步骤:(1)首先预选择一个足够短的采样周期TS,一般说TS应小于受控对象纯延迟时间的十分之一。
(2)用选定的TS,仅加入比例控制环节使系统工作,逐渐减小比例度,即加大比例放大系数KP,直至系统对输入的阶跃信号的响应出现临界振荡(稳定边缘),将这时的比例放大系数记为Kr,临界振荡周期记为Tr。
(3) 以连续-时间PID控制器为基准,建立数字PID的控制度评价函数,通过公式计算或查表确定PID控制器的参数TS,KP,TI和TD 。
反应曲线法(实验凑试法)通过闭环运行或模拟,观察系统的响应曲线,然后根据各参数对系统的影响,反复凑试参数,直至出现满意的响应,从而确定PID控制参数。
实验凑试法的整定步骤为“先比例,再积分,最后微分”。
(1)整定比例控制将比例控制作用由小变到大,观察各次响应,直至得到反应快、超调小的响应曲线。
(2)整定积分环节若在比例控制下稳态误差不能满足要求,需加入积分控制。
先将步骤(1)中选择的比例系数减小为原来的50~80%,再将积分时间置一个较大值,观测响应曲线。
然后减小积分时间,加大积分作用,并相应调整比例系数,反复试凑至得到较满意的响应,确定比例和积分的参数。
(3)整定微分环节若经过步骤(2),PI控制只能消除稳态误差,而动态过程不能令人满意,则应加入微分控制,构成PID控制。
先置微分时间TD=0,逐渐加大TD,同时相应地改变比例系数和积分时间,反复试凑至获得满意的控制效果和PID控制参数。
比例十积分十微分(PID)控制器式中KP——比例放大系数;TI——积分时间; TD——微分时间。
PID控制的程序实现:Up=Kp*error(k)Ui=Ui+Ki*error(k)Ud=Kd*(error(k)-error(k-1))U=Up+Ui+Ud在程序中我们采用的是增量是算法磁悬浮控制器介绍1、磁悬浮控制系统原理框图磁悬浮控制器组成资源配置:*P0.0蜂鸣器,P0.1测试灯,P0.2、P0.3两个按键。
*P1.0-P1.4五路A/D;*P1.5-P1.7控制LED;*P2.0-P2.7液晶数据传输;*P3.2-P3.4液晶控制线;*P3.0、P3.1接RS-232;*P3.5、P3.7两路DA;1、P0口:STC125412AD的P0口只有四个引脚,资源分配如下:P0.0蜂鸣器,P0.1测试灯,P0.2、P0.3两个按键。
2、STC125412AD的I/O口资源介绍:*四个I/O口,共27个引脚,其中P0口上只有4个引脚P0.0-P0.3,P3口上只有7个引脚却少P3.6脚,P1、P2口和8051一样有8个引脚;*所有I/O口都有四种类型:准双向口(传统8051模式)、推挽输出、仅为输入和开漏模式,均可由软件配置成4种工作类型之一; *每个口由2个控制寄存器(PxM0和PxM1)中的相应位控制每个引脚工作类型;举例:P2M0=0xC0;P2M0=0xA0;P2.7为开漏,P2.6为高阻输入,P2.5为推挽输出,P2.4-P2.0为弱上拉。
1、控制器设计了5路AD,都经调理送入单片机,占用P1.0-P1.4五个I/O引脚,其中P1.4用于采集传感器送入信号,P1.1-P1.3用于控制PID算法参数,P0.0用于设置小球浮起高度。
2、设置P1口:设置:P1M0=0x1F;P1M1=0x00;或者P1M0=0x1F;PIM1=0x1F;传感器信号AD转换原理框图2、控制信号AD转换原理框图1、控制器设计了两路DA,占用P3.5和P3.7两个引脚,P3.5路DA 送往功率放大器,P3.7路DA备用。
2、DA电路原理:STC12C5412AD本没有集成DA转换功能,但是它有4路的PWM(脉冲宽度调制)信号,PWM信号可以通过调理电路转化为DA信号。
3、DA电路原理框图:4、I/O口设定:不能设置为高阻输入!6、LED模块1、P1.5-P1.7控制8个数码管(LED)为了节省I/O资源,选用了一片MAX7219。
2、MAX7219简介*一种高集成化的串行输入/输出的共阴极LED显示驱动器;*每片可驱动8位7段加小数点的共阴极数码管,与单片机相连仅需3根线;*包括BCD译码器、多位扫描电路、段驱动器、位驱动器和用于存放每个数据位的8X8静态RAM以及数个工作寄存器;*可以编程控制工作寄存器,可以使MAX7219进入不同的工作状态。
*控制信号:DIN为串行数据输入端,CIK为串行时钟输入端,LOAD 为片选端;*DIGO~DIG7为吸收显示器共阴极电流的位驱动线,其最大值可达500mA;*SEGA~SEGG,DP 为驱动显示器7段及小数点的输出电流,一般为40mA左右;*DOUT 为串行数据输出端,通常直接接入下一片MAX7219的DIN端。
在试验中使用的源程序://test.c#include <STC12C5410AD.H>#include <intrins.h>#include<stdio.h>p0m0=0;p0m1=0x00;sbit p02=P0^2;sbit p03=P0^3;sbit p00=P0^0;sbit p01=P0^1;extern pid(int kp,ki,kd,spec,yk);extern disp1(unsigned char dat[4]); //有时候真的很无奈,就少了一点东西。
就是出不来啦,注意extern花了一天的时间,外加另建了一个项目。
无语了extern disp2(unsigned char dat[4]); //没一个冒号;害了我老半天,特别注意了extern unsigned int ADC_TURNON(unsigned char speed,chanl); extern void Delayms(void);extern void dac(unsigned char pwm);extern void disp_kp();extern void disp_ki();extern void disp_kd();unsigned char flag=1;void delay(unsigned int x);void main(){int kp=0,ki=0,kd=0,spec=0,yk=0;unsigned char da;unsigned char show0[4]={0x00,0x01,0x02,0x03}; unsigned int a=0,b=0;while(1){p03=0;a=ADC_TURNON(3,0);show0[0]=(unsigned char)(a/1000);show0[1]=(unsigned char)((a%1000)/100);show0[2]=(unsigned char)(((a%1000)%100)/10); show0[3]=(unsigned char)(((a%1000)%100)%10); disp1(show0);Delayms();b=ADC_TURNON(3,4);show0[0]=(unsigned char)(b/1000);show0[1]=(unsigned char)((b%1000)/100);show0[2]=(unsigned char)(((b%1000)%100)/10); show0[3]=(unsigned char)(((b%1000)%100)%10); disp2(show0);Delayms();kp=ADC_TURNON(3,3);ki=ADC_TURNON(3,2);kd=ADC_TURNON(3,1);spec=ADC_TURNON(3,0);yk=ADC_TURNON(3,4);da=pid(kp/100,ki/10,kd/10,spec/10,yk/10); dac(da);if(p02==0&&flag==1){ flag++;disp_kp();delay(20);}if(p02==0&&flag==2){ flag++;disp_ki();delay(20);}if(p02==0&&flag==3){flag=1;disp_kd();delay(20);}}//while的终止}//main的终止void delay(unsigned int x) {unsigned int m,k ;for (m=0;m<x;m++){for (k=0;k<0xffff;k++); }}n=(unsigned char)((b%1000)/100);}//disp.c用来led显示结果#include <STC12C5410AD.H>#include <intrins.h>sbit P15 =P1^5;sbit P16 = P1^6;sbit P17 = P1^7;#define din P17#define load P16#define clk P15#define NoOp 0x00#define Digit0 0x01#define Digit1 0x02#define Digit2 0x03#define Digit3 0x04#define Digit4 0x05#define Digit5 0x06#define Digit6 0x07#define Digit7 0x08#define DecodeMode 0x09#define Intensity 0x0a#define ScanLimit 0x0b#define ShutDown 0x0c#define DisplayTest 0x0funsigned char code dispcode_char[]={0x7e,0x30,0x6d,0x79,0x33,0x5b,0x5f,0x70,0x 7f,0x7b, 0x0, 0x1};extern unsigned int ADC_TURNON(unsigned char speed,chanl);void MAX7219_Write(unsigned char com, unsigned char dat);void Delayms(void){unsigned int a,b;for(a=0;a<20;a++)for(b=0;b<100;b++);}void MAX7219_Write(unsigned char com, unsigned char dat) {unsigned char temp,i,j;load=0;clk=0;for(i=0;i<8;i++){temp=com;if((temp&(0x80>>i))!=0)din=1;elsedin=0;clk=1;for(j=0;j<5;j++);clk=0;}for(i=0;i<8;i++){temp=dat;if((temp&(0x80>>i))!=0)din=1;elsedin=0;clk=1;for(j=0;j<5;j++);clk=0;}load=1;}void MAX7219_Init(){ MAX7219_Write(ShutDown ,0x00);Delayms();MAX7219_Write(ShutDown ,0x01);MAX7219_Write(DecodeMode,0xff);MAX7219_Write(Intensity ,0x0a); // Intensity Register FormatMAX7219_Write(ScanLimit,0x07);}void MAX7219_Init1(){ MAX7219_Write(ShutDown ,0x00);Delayms();MAX7219_Write(ShutDown ,0x01);MAX7219_Write(DecodeMode,0x00);MAX7219_Write(Intensity ,0x0a); // Intensity Register FormatMAX7219_Write(ScanLimit,0x07);}void disp1(unsigned char dat[4]){ load=1;clk=1;din=1;MAX7219_Init();//设P1.0/P1.1/P1.2/P1.3/P1.4为高阻输入,其他为IOP1M0=0x1F;P1M1=0x00;MAX7219_Write(Digit0,dat[0]);MAX7219_Write(Digit1,dat[1]);MAX7219_Write(Digit2,dat[2]);MAX7219_Write(Digit3,dat[3]);}void disp2(unsigned char dat[4]){load=1;clk=1;din=1;MAX7219_Init();P1M0=0x1F;P1M1=0x00;MAX7219_Write(Digit4,dat[0]);MAX7219_Write(Digit5,dat[1]);MAX7219_Write(Digit6,dat[2]);MAX7219_Write(Digit7,dat[3]);}void disp_kp() //用于显示kp,ki,kd的值{unsigned int b;unsigned char m,n,x,y;load=1;clk=1;din=1;MAX7219_Init1();P1M0=0x1F;P1M1=0x00;MAX7219_Write(Digit0,0);MAX7219_Write(Digit1,0x0F);MAX7219_Write(Digit2,0x67);MAX7219_Write(Digit3,0);b=ADC_TURNON(3,3);m=(unsigned char)(b/1000);n=(unsigned char)((b%1000)/100);x=(unsigned char)(((b%1000)%100)/10); y=(unsigned char)(((b%1000)%100)%10);MAX7219_Write(Digit4,dispcode_char[m]);MAX7219_Write(Digit5,dispcode_char[n]);MAX7219_Write(Digit6,dispcode_char[x]);MAX7219_Write(Digit7,dispcode_char[y]); }void disp_ki() //用于显示kp,ki,kd的值{unsigned int b;unsigned char m,n,x,y;load=1;clk=1;din=1;MAX7219_Init1();P1M0=0x1F;P1M1=0x00;MAX7219_Write(Digit0,0);MAX7219_Write(Digit1,0x0F);MAX7219_Write(Digit2,0x30);MAX7219_Write(Digit3,0);b=ADC_TURNON(3,2);m=(unsigned char)(b/1000);n=(unsigned char)((b%1000)/100);x=(unsigned char)(((b%1000)%100)/10); y=(unsigned char)(((b%1000)%100)%10);MAX7219_Write(Digit4,dispcode_char[m]);MAX7219_Write(Digit5,dispcode_char[n]);MAX7219_Write(Digit6,dispcode_char[x]);MAX7219_Write(Digit7,dispcode_char[y]);}void disp_kd() //用于显示kp,ki,kd的值{unsigned char m,n,x,y;unsigned int b;load=1;clk=1;din=1;MAX7219_Init1();P1M0=0x1F;P1M1=0x00;MAX7219_Write(Digit0,0);MAX7219_Write(Digit1,0x0F);MAX7219_Write(Digit2,0x3D);MAX7219_Write(Digit3,0);b=ADC_TURNON(3,1);m=(unsigned char)(b/1000);n=(unsigned char)((b%1000)/100);x=(unsigned char)(((b%1000)%100)/10);y=(unsigned char)(((b%1000)%100)%10);MAX7219_Write(Digit4,dispcode_char[m]);MAX7219_Write(Digit5,dispcode_char[n]);MAX7219_Write(Digit6,dispcode_char[x]);MAX7219_Write(Digit7,dispcode_char[y]);}//adc.c用来实现ad转换的子程序#include <STC12C5410AD.H>#include <intrins.h>extern void Delayms(void);unsigned int ADC_TURNON(unsigned char speed,unsigned char chanl){unsigned int x,y,z;//整理SPEEDspeed&=0x03;speed=speed<<5;//整理通道chanlchanl&=0x07;//ADC_POWER开ADC_CONTR=0x80;Delayms();//加入转换速度SPEED1/SPEED0ADC_CONTR|=speed;//加入通道CHS2/CHS1/CHS0ADC_CONTR|=chanl;//启动转换ADC_CONTR|=0x08;Delayms();//查结束标志位if((ADC_CONTR&0x10)==0) //while还是if有待商榷 //复位ADC_FLAGADC_CONTR&=0xef;x=ADC_DATA;x=x*4;y=ADC_LOW2&0x03;z=x+y;return(z);//da.cda转换子程序#include <STC12C5410AD.H>#include <intrins.h>#include <my.h>void dac(unsigned char pwm){CMOD=0X02;CL=0;CH=0;CCAP0L=0x00-pwm;CCAP0H=0x00-pwm;CCAPM0=0X42;CCAP1L=0x00-pwm;CCAP1H=0x00-pwm;CCAPM1=0X42;CR=1;}//pid.c pid算法程序#include <STC12C5410AD.H>#include <intrins.h>#include<math.h>mmul(int x,int y);madd(int x,int y);char change16_8(int wd);//△yk=kp【ek-ek_1】+ki[ts*ek]+kd/ts[ek-2*ek_1+ek_2]char pid(int kp,ki,kd,spec,yk) //pid的系数,设定值spec由0通道提供,实时的值yk由4通道提供{int p,i,d,ek,ek_1,aek,ts=1,bek,k,ake,ck,ck_1;char iband=0x50;ts=20;yk=k=p=i=d=0;ek=spec-yk;//errorbek=ek-ek_1-aek;aek=ek-ek_1;if(abs(ek)>abs(iband)) i=0;//判断积分分离else i=(ek*ts)*ki;p=kp*ake;d=(kd/ts)*bek/1000;//ts去单位为1msk=madd(i,p);k=madd(k,d);k=mmul(k,kp);k=k/10;ck=k+ck_1;ck=change16_8(ck);ck_1=ck;ek_1=ek;ck=ck+0x80;//return ck;}int change32_16(int z,int t) {int s;if(t==0){if((z&0x8000)==0 )s=z;else s=0x7fff;}else if((t&0xffff)==0xffff) {if((z&0x8000)==0) s=0x7fff; else s=z;}else if ((t&0x8000)==0) s=0x7fff; else s=0x8000;return(s);}char change16_8(int wd){char z,t,s;z=wd&0x0ff;t=(wd>>8)&0x0ff;if(t==0x00){if((z&0x80)==0) s=z;else s=0x7f;}else if ((t&0xff)==0xff){if((z&0x80)==0)s=0x80;else s=z;}else if ((t&0x80)==0) s=0x7f;else s=0x80;return(s);}int mmul(int x,int y){int t,z;long s;s=x*y;z=(int)(s&0x0ffff);s=change32_16(z,t); return(s);}int madd(int x,int y){int t;t=x+y;if(x>=0&&y>=0){if((t&0x8000)!=0)t=0x7fff;}else if (x<=0&&y<=0){if((t&0x8000)==0)t=0x8000;}return(t);}试验心得及小结:当初想不就是把一个小球浮起来嘛,挺简单的,可是实际操作时才知道要把这么一个小球扶起来还真是一件不容易的事啊。