当前位置:首页 > 水库控制系统设计论文资料(经典) - 图文
图5.1上位机端程序流程图
图5.2如下所示,是下位机端的程序流程图。
否 判断电机的方向 否 进行水位测量,并送入显示器缓冲区 界面切换 是否收到上位机命令 否 是 进行流量转换,并送入显示缓冲区 是 处理上位机命令 初始化计数器0,定时器2及无线模块 开始 数码管扫描 是 正转 反转 图5.1 下位机端程序流程图
在本系统中,程序流程图分为上位机端程序流程图和下位机端程序流程图两大部分。在上位机端,是编译程序来完成上下位机之间的串口通讯,以及实现数据在上下位机间的传送;而下位机端的程序流程图可以实现以下系统功能:一是实现传感器对模拟水库的实时参数的采集,如水位,流量等;二是实现CC1100无线模块的无线通讯;三是实现AT89S52单片机对步进电机的控制。
5.2 CC1100模块发送和接收部分程序分析
在这里介绍CC1100模块的部分通讯代码。由于CC1100无线模块的源代码非常多,下面只介绍CC1100无线模块发送/接收部分的程序代码。程序分析如下: //函数名:void halRfSendPacket(INT8U *txBuffer, INT8U size) //输入:发送的缓冲区,发送数据个数 //输出:无
//功能描述:CC1100发送一组数据
void halRfSendPacket(INT8U *txBuffer, INT8U size) {
halSpiWriteReg(CCxxx0_TXFIFO, size);
halSpiWriteBurstReg(CCxxx0_TXFIFO, txBuffer, size); //写入要发送的数据
halSpiStrobe(CCxxx0_STX); //进入发送模式发送数据
// Wait for GDO0 to be set -> sync transmitted while (!GDO0);
// Wait for GDO0 to be cleared -> end of packet while (GDO0);
halSpiStrobe(CCxxx0_SFTX); }
void setRxMode(void) {
halSpiStrobe(CCxxx0_SRX); //进入接收状态 }
INT8U halRfReceivePacket(INT8U *rxBuffer, INT8U *length) {
INT8U status[2]; INT8U packetLength;
INT8U i=(*length)*4;
// 具体多少要根据datarate和length来决定
halSpiStrobe(CCxxx0_SRX); //进入接收状态 delay(2); while (GDO0) {
delay(2); --i; if(i<1)
return 0; }
if ((halSpiReadStatus(CCxxx0_RXBYTES) & BYTES_IN_RXFIFO)) //如果接的字节数不为0
{
packetLength = halSpiReadReg(CCxxx0_RXFIFO);
//读出第一个字节,此字节为该帧数据长度 if (packetLength <= *length)
//如果所要的有效数据长度小于等于接收到的数据包的长度
{ halSpiReadBurstReg(CCxxx0_RXFIFO, rxBuffer, packetLength); //读出所有接收到的数据
*length = packetLength;
//把接收数据长度的修改为当前数据的长度
// Read the 2 appended status bytes (status[0] = RSSI, status[1] = LQI) halSpiReadBurstReg(CCxxx0_RXFIFO, status, 2);
//读出CRC校验位
halSpiStrobe(CCxxx0_SFRX);
//清洗接收缓冲区
return (status[1] & CRC_OK);
//如果校验成功返回接收成功 } else {
*length = packetLength; halSpiStrobe(CCxxx0_SFRX);
//清洗接收缓冲区 return 0; } } else
return 0; }
6 误差与干扰分析
6.1 干扰因素及解决方法
在模拟水库监测系统的设计中,由于系统所涉及面广,需要解决的问题就相对比较多,自然会出现不少误差,干扰等情况,影响系统的操作。这些误差干扰主要来自一下几个方面。
(1) 环境和自身性能的影响
由于系统硬件设计中所用到的流量传感器,超声波传感器,CC1100模块等都是比较精密的器件,水流量过大,室内温度过高,或者外界电磁波的干扰等都会影响这些器件的正常工作。比如CC1100模块,假如在其工作的环境中有不协调的磁频电波,就会严重影响系统的无线通讯,使上位端收集的信号产生误码,导致所监测值与水库的实际情况
不相符,会导致严重后果。所以在使用CC1100无线模块前,必须使用场强仪对现场环境进行电测,使无线发送信号避开外界的干扰频率。根据系统的实际要求,要选择适合CC1100无线模块无线收发的频率,以减少误差。还有部分元器件自身性能存在不足,如对步进电机的控制,步进电机计算步数时,由于不可避免的自身因素干扰,导致所测量的值往往出现偏差。 (2) 脉冲干扰
下位机端,将采集到的数据信号处理好,通过单片机编译分析后,控制步进电机运转。在这个过程中,步进电机接收到的控制信号是以脉冲形式发出的,很容易引起脉冲干扰。为此,必须在单片机和电机驱动芯片LM298间加入光耦电路,隔离驱动电路和单片机,来减少因脉冲而带来的干扰。 (3) 无线通讯距离的影响
本系统中,CC1100模块的作用距离可达1.2公里,但由于信号波在传播介质中受空气热对流扰动以及尘埃吸收的影响,接收回的幅值随传播距离的增加成指数规律的衰减,使得远距离回波检测误差较大。特别是对接收信号的起始阶段影响较大,增加了检测数据信号起始点的难度。由于基于CC1100无线模块的开发板是固定的,无发再加入运算放大器来缓解干扰,为了控制精度,该系统的无线传输距离实际上是非常有限的。 (4) 测量的随机性
干扰信号多呈毛刺状,作用时间短且具有随机性。对于一次监测的结果,其受到干扰信号影响的几率比较大,可能造成监测结果具有较大的误差。对于这些干扰所造成的影响,本文采用求平均值的方法解决:即连续监测多次,去掉监测结果中的最大值和最小值,再对其余监测结果求平均值,将其作为最终的监测结果,用于分析,这样就减少了随机干扰对监测结果造成的影响。
例如在本系统中,超声波采集水位时,需要测的是开始发射到接收到信号的时间差,测量方法是将测量所得的时间差,乘以314,再除以2,结果就是要检测的水位值。在这个过程中,需要检测的有效信号为反射物反射的回波信号,故要尽量避免检测到余波信号,这就要求对接收头收到的波束进行处理,这也是超声波检测中存在最小测量盲区的主要原因。除此之外,还可以通过软件来处理余波信号。当反射头发出脉冲,计时器同时开始记时;在记时器开始记时后再开启检测回波信号,来减少余波信号的干扰,等待的时间可以为1MS左右。等待时间越精确,最小测量盲区就越少,以此来得到更精确的水库水位信息。
6.2 硬件系统设计的抗干扰技术
电路板设计是从电路原理图变成一个具体产品的必经之路,电路板设计的合理性与产品的生产及质量密切相关。在本课题中,系统牵涉的硬件设计非常多,画图时,硬件布局和走线非常重要,图画的好,画的简便,硬件调试工作就能很容易地进行,系统性
共分享92篇相关文档