基于AVR单片机的控制系统设计

时间:2022-03-17来源:佚名

本文介绍的AVR单片机由美国ATMEL公司生产,采用RISC指令集,内置RAM及可以擦写数千次的FLASH,采用哈佛结构,速度较快。ATmega128为此系列中功能最强大的一款,用于设计控制系统能适应现时复杂系统的要求。

AVR单片机介绍

ATMEL公司是世界上著名的高性能低功耗非易失性存储器和数字集成电路的一流半导体制造公司。AVR单片机由ATMEL公司开发,是过去12年里第一个新发布的8位RISCMCU,执行大多数指令只需一个时钟周期速度快(8MHzAVR≈200MHzC51)。其32个通用寄存器直接与ALU相连,消除了运算瓶颈;同时由于C编译专家的参与,C代码效率极高;用户在享受C语言带来的极大便利的同时无需担心消耗更多的资源。芯片内嵌可串行下载或自我编程的FLASH和E2PROM。具有以下功能:电压检测BOD复位源寄存器看门狗、PWM、10位A/D、模拟比较器、UART、I2C、SPI、实时时钟等。具有Idle/Power-Save和Power-Down等低功耗运行模式,可电平中断唤醒PowerDown。同时具有完整产品线,FLASH从1KB到128KB,E2PROM从64B到4KB,SRAM从128B到4KB,引脚数从8到64。

其中Atmeg128为AVR系列中的代表性产品之一。相比其它产品,该芯片有以下特性:

(1)先进的RISC结构:133条功能强大的指令,大部分在单时钟周期内完成,32×8个通用工作寄存器 外设控制寄存器,最高可工作在16MHz下,性能可达16MIPS;片内带有执行时间为2个时钟周期的硬件乘法器。

(2)程序和数据存储区:128kB在线可编程Flash存储器,可反复擦写1000次;可通过独立的加密位选择引导程序代码段,可通过片内引导程序实现在线系统编程,写操作时真正可读;4kB的EEPROM存储区,可反复擦写100,000次。4kB的片内SRAM存储区,可外部扩展为64kB。

系统硬件设计框架

硬件系统主要由CPU(AVR单片机)、人机操作和显示接口(液晶显示、键盘、指示灯和蜂鸣器)、通信接口组成。系统框图如图1所示

图1 系统硬件设计框图

CPU为核心处理器件,通过I/O接口方式或A/D总线方式与液晶、显示键盘、指示灯和蜂鸣器交互,作者实现了两个版本,分别采用I/O方式和A/D总线方式。通信接口主要用到了UART接口和扩展的网络接口。其中UART提供了RS-232和RS-485接口,RS-232提供全双工单对单通信同时,而RS-485以主/从方式与系统的多个部分通信,可用于多通道的输入输出设备。该芯片本身并不带网络接口,通过扩展一个W3100A连接RT-L8201(L)芯片,实现TCP/IP协议栈,从而使设备可以接入LAN,实现在LAN内的远程控制管理和监控。

系统软件结构

系统软件体系分为几个部分:

(1)系统的循环检测部分,用于检测各通道的系统设备工作是否正常,出现异常时则通过三色指示灯报警(绿色代表正常,红色代表异常,黄色为中间状态)。

(2)系统的设置部分,接受用户按键,用户可以在GUI上设置希望设置的参数。

(3)网络接口部分,此时单片机系统不参与设置,主要功能将网络部分获得的数据导至各通道。软件系统的核心部分在于菜单结构的设计。

本系统采用一种基于节点编号的三叉树状菜单的设计。将整个菜单看作一个菜单树,每个界面对应于树中的一个节点,父节点为当前菜单的上一级菜单;右节点为当前菜单的“兄弟”菜单,亦即上级菜单的其余子菜单。

我们采用对节点编号的方式将整个菜单树串起来,通过识别节点编号(ID)就能知道该节点处于哪一级菜单,同时也便于我们将菜单数初始化。编号方式:每级子菜单的编号为上级父菜单ID乘以10再加上该级子菜单在上级菜单中对应的子项号(1,2,3.),我们将根节点ID编号为1,则根节点菜单的子菜单对应的ID分别为11,12,13。ID为11的节点的下级菜单ID为:111,112,113。一个树型结构菜单的结构和ID编号的实例如图2所示。

Typedef structmenu{

long ID; / /当前菜单ID

void ( * disp laymenu) ( long i, unsigned char j) ; / /当前菜单对应处理函数

char cur; / /当前菜单子项

char total; / /子菜单总数

structmenu * up, * down, * right; / /毗邻子菜单

}MENU;

图2 一个菜单树的实例

对于用户按键操作切换不同的菜单时,我们只需修改一个指向对应菜单节点的全局菜单节点指针即可。当用户按下“ESC”键时,菜单指针指向当前节点的父节点,按下“Enter”键时,则指针指向对应节点的子节点。

用于AVR单片机的RAM空间较小,只有4KB,我们需设计一种合理而简洁的数据结构,我们将菜单的数据结构定义为(C语言实现)。

图3 menuselect函数的流程图

将菜单分为显示型菜单和功能性菜单,显示型菜单项用于切换各级菜单,功能型菜单则执行最底层菜单所对应的操作,total变量为0则表示为功能型菜单,大于0则表示选择型菜单。通过菜单的ID,即可以知道当前菜单的显示位置和内容,将此信息放在对应的displaymenu函数中可以节省数据空间,不用对于功能型菜单建立额外的ID与处理函数间的对应关系表,从而实现功能型菜单和显示型菜单的一致性操作。一个供参考的执行函数可以写作:

if(g_pmenu->total>0)

{

g_pmenu=menuselect(g_pmenu,Key);

}

else

{

(g_pmenu->displaymenu)(g_pmenu->ID,g_pmenu->cur);

}

其中menuselect函数用于切换对应的菜单子项,按键为“UP”键和“DOWN”键时,只需修改g_pmune->cur即可;按下“ENTER”键时,则g_pmenu=g_pmenu->down,再根据cur值,g_pmenu=g_pmenu->right;按下“ESC”键,则g_pmenu=g_pmenu->up。

这种设计使得代码数据量变得较小,同时增强了程序的扩展性,需要增加或修改菜单项时,不论是功能型菜单还是执行性菜单,只需要修改对应的菜单结构的数组即可,而不必修改对应的执行代码。经过这样的简化后,发现对于菜单数较多的多通道输入/输出系统,系统RAM区还是不够用。对于一个8输入通道的系统,每个通道的参数设置项可能多达40项,总菜单节点大于300个,每个节点占用14B,则整个菜单节点所占的RAM已超过4K,所以这种方式还是需要进一步改进。

注意到多通道的参数设置项完全相同,ID为111,112,.,118的菜单分支完全一样,ID为121和122的菜单分支也完全相同。可以定义一种Sibling菜单,从而删去ID为112~118以及ID为122的菜单节点和子节点(虚线框所示),其上级菜单(ID为11和ID为12)的项目中的total值均变为1。为了区别不同的通道分支,有两种实现办法:

一种处理方法采用全局变量

增加一个g_CODER_Channel_Number的全局变量,用于保存当前的通道号。在menuselect函数中,增加一个针对本系统设计的一个判断,当ID为11时,则不修改对应的g_pmenu->cur,而是直接修改变量g_CODER_Channel_Number,进入对应的显示函数后,直接根据g_CODER_Channel_Number判断通道号,从而输出对应的值。这种方法不需要改变系统设计的结构,但需要针对不同的系统修改主处理函数menuselect。

另一种处理方法在菜单结构中增加一个MenuSibling结构,定义为

typedef struct _menuSibling{

signedcharcur;

signedchartotal;

}SIBLING;

同时对应的菜单结构修改为

typedefstructmenu{

...

SIBLINGSibling;

}MENU;

这样,ID为11的结构项的Sibling.total为8,Sibling.cur为当前的子菜单项。判断到total>0且Sibling.total>0时,可知其下一级菜单为SIB2LING菜单,此时以前需修改cur想的操作则修改Sibling.cur即可。这种设计下,每个节点增加了2B的空间,但是保证的程序的一致性,对于不同的系统其设计基本一致。

以上菜单项的设计用于系统设置部分,当退出系统设置时,即进入系统循环检测部分。单片机通过RS-485接口检测各个通道是否正常,当正常时则显示为绿灯,出现异常则显示为红灯,黄灯为中间状态。指示灯的流程参见图4。

图4 循环检测的指示灯流程

结束语

按照本文提供的方法优化后的设计,可以满足大多数的多通道输入/输出系统的控制系统的需要,整个系统的设计主要在于建立一个菜单树,将对应的节点编号,再编写对应的节点处理函数即可。这种设计使得程序的开发、维护都很容易,具有较强的可扩展性和可移植性。


    相关阅读

    城市亮化工程如何设计才能具有层次感?

    城市亮化工程 的主要目地是为夜间带来一体化照明,考虑基础的视觉识别规定,自然环境照明的光层级与光线总数的多少相关,假如空间中的自然环境照明比工作照明低许多 ,在工作...
    2022-10-11
    城市亮化工程如何设计才能具有层次感?

    城市道路照明工程主要有哪些?

    在城市建设中,道路照明 是必不可少的基础设施,也是城市夜景的重要组成部分。在某种程度上,它还反映了城市的经济实力,社会进步和现代化的标志。它为夜间在城市中的车辆和行...
    2022-07-12
    城市道路照明工程主要有哪些?

    安全出口指示标志灯为什么是绿色而不是红色?

    对于安全出口指示标志灯相信大家都不陌生,我们在日常生活中在任何公众场所的紧急疏散的安全出口都可以看到这个安全出口指示标志灯,大家有没有想过安全出口的指示标志为什么...
    2022-05-21
    安全出口指示标志灯为什么是绿色而不是红色?

    路灯照明合理的布置方式

    路灯的布置方式主要有单侧布置、双侧交错布置、双侧对称布置、中心对称布置、横向悬索布置五种形式,随着城市道路的不断拓宽,平交路口转弯半径越来越大,根据《城市道路亮化...
    2022-07-15

    泛光照明工程是什么?应用范围有哪些?

    很多人提及 泛光照明工程 会有一些生疏,不理解泛光照明包含哪些,也不知道 泛光照明工程 跟普通照明工程有哪些不一样。 实际上泛光照明工程便是归属于城市景观照明工程或环境...
    2022-10-17
    泛光照明工程是什么?应用范围有哪些?

    消防应急灯的寿命有多长?一般可以使用多长时间?

    对于消防应急灯的使用寿命相信很多人都想了解这个问题,因为消防应急灯安装了就不需要时时刻刻盯着,这需要定时检查就可以了,但是很多人都不知道消防应急灯的寿命有多长,不...
    2022-05-21
    消防应急灯的寿命有多长?一般可以使用多长时间?

    快投派智能无线投屏器,让无线互联更加简单便捷

    没有WiFi的情况下可以进行无线投屏吗? 长期使用投屏功能的人,或多或少都知道自己的手机可以通过【无线投屏】【屏幕镜像】功能,直接连接到智能电视或无线投屏器,下意识地认...
    2022-05-11
    快投派智能无线投屏器,让无线互联更加简单便捷

    广场照明的设计技巧

    广场照明设计 主要包括休闲广场、集会活动广场、商业广场的照明设计。 1)休闲广场。主要是为人们提供休息、社交和举行小型文化娱乐活动的地方,由于人们活动方式不同,有些区...
    2022-07-15

    网站栏目