采用Atmega128单片机的嵌入式控制器设计

发布者:郑大大最新更新时间:2018-03-18 来源: eefocus关键字:Atmega128  单片机  嵌入式控制器 手机看文章 扫描二维码
随时随地手机看文章

     采用Atmega128单片机设计的嵌入式控制器,模拟量输入通道用Atmega128片内A/D转换器,输出用AD421 D/A转换器,数字量I/O通道配置高速先耦器件.用LCCavr编译器修改OSTaskStklnit()函数及其相关文件,定义数据类型等以实现MICroC/OS-Ⅱ的移植.

    1 引言

 

    嵌入式控制器是机电设备实现自动化的核心部件。故以大型机电设备为控制对象,利用高性能Atmega 128微处理器, 设计了具有现场总线(CANBUS)网络通信和一定通用性的多功能嵌入式智能控制器。

    2 硬件设计

    系统的硬件结构如图1。

基于Atmega128嵌入式控制器的设计

    本控制器的核心采用64管脚TQFP封装的Atmega128芯片,具有53个可编程的I/O引脚,片内集成有128KB闪存、4KB EEPROM 和4KBSRAM,适合I/O通道和存储空间的需求。

    (1)模拟量输入通道

    模拟量输入通道采用Atmega128片内的8通道1O位A/D转换器。其信号输入部分可以根据具体的信号情况选择使用图2所示的多功能输入信号调理电路。在电压信号输入时可以由R1和C构成低通滤器(R2开路);R1和R2可以构成输入信号分压电路(电容c开路);对于4-20mA电流输入信号,R2使用250Q的精密电阻即可变换为1~5V的信号(R1短路、C开路)。在电路版上设计有对应多功能信号调理电路焊位元件的位置,可根据需要白行选择使用。8路模拟量输入部分占用的是ATMEGA128的PF0~PF7。

基于Atmega128嵌入式控制器的设计

    (2)模拟量输出通道

    模拟量输出通道单元电路设计方案如图3。D/A转换器采用AD公司的AD421,它是一种单片低功耗、高精度的电流输出型DAC芯片,4~20mA 的输出可以驱动标准的执行元件。该芯片的数字接口为标准HART (三线)或其它FSK协议,DAC为16位分辨率,单调性输出。采用回路供电方式,内含电源调整器为本身和外围器件供电。在工业控制中,通常输入量要多于输出量,所以只设计Atmega128的PAO~PA7,PE2、PE3、PE6、PG4引脚通过4个光电隔离器(6N137)与4个AD421相连,构成4路模拟量输出。

    (3)数字量输入/输出通道

    数字量I/O通道各配置8路高速光耦隔离通道。光耦器件选6N137,其开关延迟tpd仅75ns,而普通光耦器件开关延迟有3~6μs。I/O通道接口安排在Atmega128的PB0~PB7、PD0~PD7。

    (4)CAN总线接口

基于Atmega128嵌入式控制器的设计

    选择独立的CAN通信控制器SJA1000、CAN总线驱动器82C250和高速光电耦合器6N137与微控制器Atmega128进行设计。微处理器Atmega128负责SJA1000的初始化,通过控制SJA1000实现数据的接收和发送等通信任务。

    CAN总线接口如图4。SJA1000的AD0~AD7连接到Atmega128的PC 口,CS连接到Atmega128的PG3。PG3为0时CPU片外存储器地址选中SJA1000,CPU通过地址可对SJA1000执行读/写操作。SJA1000的RD、WE、ALE与Atmega128的引脚相连,INT 接Atmega128的PE7,Atmega128可通过中断方式访问SJA1000。

基于Atmega128嵌入式控制器的设计

    (5)与PC机的串行通信

    考虑到智能控制节点要接收从RS232串口来的数据,因而采用了Atmega128的串行口进行中断接收,所用的引脚是PE0、PE1。通过MAX232进行数据传输。

    (6)脉冲输入脉冲输出

    由于输入信号的多样性,增加了PI/PO部分。

    3 Micro C/OS—II的移植

    Micro C/OS—II移植到Atmega128上,需要修改OS_CPU.H,OS_CPU_A.S和OS_CPU_C.C三个与其相关的文件。其中OS—CPU.H主要完成的是数据类型、堆栈单位、堆栈增长方向的定义。相关的数据类型定义:

    typedef unsigned char BOOLEAN;

    typedef unsigned char INT8U; //无符号8位数

    typedef signed char INT8S; //带符号8位数

    typedef unsigned int INTI6U; //无符号l6位数

    typedef signed int INTl6S; //带符号l6位数

    typedef unsigned long INT32U; //无符号32位数

    typedef signed long INT32S; //带符号32位数

    typedef float FP32; //单精度浮点数

    堆栈单位的定义:

    typedef unsigned char OS_STK;//堆栈入口宽度为8位

    状态寄存器的定义:

    typedef unsigned char OS_ CPU_SR;//定义状态寄存器为8位

    堆栈增长方向的定义:

    #define OS_STK_GROW TH 1;//AVR堆栈由高地址向低地址增长

    0S_CPU_C.C 文件主要包括任务堆栈初始化和实现操作系统规定的几个Hook函数。其中移植需要的Hook函数如下:

    OSTaskCreateHook();OSTaskDelHook()

    OSTaskldleHook();OSTaskStateHook()

    OSTaskSwHook();oSTCBInitHook()

    OSTimeTickHook()

    移植所需的OS— CPU-A.s中的函数有:

    OS_CPU_SR_SAVE();OS_CPU_SR_RESTORE()

    OSStartHightRdy();OSCtxSw0

    OSINTCtxSw();OSTicklSR0

    应用移植后的嵌入式操作系统对控制器进行验证,选取PB0~PB7作为输入,PD0~PD7作为输出,实现了二极管的发光演示。

    部分源代码如下:

    static void LED_Toggle(INT8U led)

    {

    #if OS_CRITICAL_M ETHOD = = 3

    //AlLOCate storage for CPU status register

    OS_CPU_SR cpu_sr;

    #endif

    OS_ENTER_CRITICAI ():

    switck(1ed)

    {casc 1:PORTD⌒=0x01;break;

    case 2:PORTD⌒= 0x02;break;

    case 3:PORTD⌒= 0x04;break;

    case 4:PORTD⌒= 0x08;break;

    }

    OS_EXIT_CRITICAl ();

    }

    4 结语

    应用Atmega128设计的嵌入式控制器能完成多功能数据采集与控制,CAN总线和RS232通信,移植的嵌入式实时操作系统可增强实时多任务信息处理的能力。并通过实验对本设计进行了验证。


关键字:Atmega128  单片机  嵌入式控制器 引用地址:采用Atmega128单片机的嵌入式控制器设计

上一篇:基于ATmega16的便携式机车信号发生器的设计研究
下一篇:用ATmega8单片机控制的红外导盲系统设计

推荐阅读最新更新时间:2024-03-16 15:57

MCU多元再进化 强化运算及各种介面延伸字号
微控制器(MCU)近年在智慧系统、物联网需求提高,成为电子产业中,再次翻红的产品,怎么说翻红。过去的MCU功能较简单,已大量应用在传统电子产品如冰箱、电视等家电到自动化产品等,如今在网路影响及数位资讯云端化,传统应用方向不再单一,还多了分享,因此MCU随之进化,强化运算及各种介面的延伸,打造出符合市场需求的产品,让MCU需求不断提高。 意法半导体大中华暨南亚区产品行销经理杨正廉说,MCU市场受M2M(MachinetoMachine)加持,近年出货表现确实不俗,但对整体MCU市场,则是一场厂商生存战的开始,主因推出低阶MCU的业者,将面临技术提升及价格竞争,反观谁拥有技术及整体多元的产品支援才符合市场期待。以意法半导体为
[单片机]
自己制作的单片机万年历 程序+原理图
单片机万年历仿真原理图如下 仿真 Altium Designer画的万年历原理图和PCB图如下: PCB 原理图 基于51单片机,可以完成时钟显示、公历显示、农历显示、温度显示、闹钟报警定时的LCD时钟 PPT内容预览: 本设计使用AT89C51来做主控芯片,其强大的功能足够实现我们设计的所有功能。 使用LCD1602的液晶显示器来进行显示。 使用Keil uVision5进行编程。 通过Proteus8.6来进行仿真。 点击一次K1进入时钟设置页面,通过点击K2切换时、秒、分、星期、年、月、日,通过K3与K4实现加减来完成时钟的设置 点击两次K1进入闹钟设置页面,通过点击K2切换开关、时、
[单片机]
自己制作的<font color='red'>单片机</font>万年历 程序+原理图
使用高集成度MCU实现网络支持的技术
  在过去 20 年中,许多工业和自动化系统的趋势是向单个节点添加越来越多的数字智能,以提高它们的响应速度。通过使用分布式智能将系统整合到系统系统(也称为“物联网”)中,系统可以变得更加灵活。通过网络控制,可以提供对设备的远程控制,让它们更智能地工作,以节省能源并提供状态和错误反馈。   使用从远程节点收集的数据,云中的服务器可以在警报开始出现时主动安排维护。这些服务器还可以通过使用增强的控制算法使设备协同工作,以获得更节能或更具成本效益的解决方案,这些算法不仅对来自一个设备的数据作出反应,而且还执行传感器融合以使用来自多个设备的输入。   自 1970 年代推出以来,以及随后在 1980 年代更新为使用低成本双绞线电缆,
[单片机]
使用高集成度<font color='red'>MCU</font>实现网络支持的技术
51单片机(汇编语言)实现十进制转十六进制
任务描述 DEC0 DEC1 DEC2 存放 十进制 数 eg:03 35 96 HEX0 HEX1存放十六进制数 eg:83 3C 任务原理 本质是BCD码转二进制 所谓的十进制 如“15”,对应的是 0x15H 这一个十六进制数,而0x15的十进制数为21,二进制为0001 0101(就是1 “和” 5) 所以,我们要做的是 把每一位十进制的BCD码提出来,附上相应的权重,结果本质为普通的二进制,表现为十六进制(这听起来很绕口)但是在keil里跑一下会更好理解(后面会结合代码分析) 方案Ⅰ 思路 循环— (HEX*10)+TMP 1.从高位开始 提取“十进制”的每一位数(半个byte存一位) 2.带进位的循环
[单片机]
51<font color='red'>单片机</font>(汇编语言)实现十进制转十六进制
Silicon Labs扩充符合车用标准微控制器系列
高性能模拟与混合信号领导厂商Silicon Laboratories (芯科实验室有限公司, Nasdaq: SLAB)今日发表一系列全新符合车用标准的C8051F5xx微控制器(MCU)产品线,能减少车身电子应用中的系统成本及电路板面积。此高集成度的C8051F5xx系列无需使用分立模拟组件,提供领先业界的处理能力,可大幅缩减程序代码大小,进一步降低系统成本。全新的管脚及软件兼容8位微控制器相当适用于对成本极为敏感且空间受限的嵌入式车身控制应用,例如风扇控制、座位调整、车窗升降及油箱传感器等。 F5xx车用微控制器提供前所未有的混合信号集成度,可打造小至4×4毫米的电路板面积,相较于竞争对手的方案,能节省0.5美元
[汽车电子]
51单片机开发中一些常用代码块
数码管中的16个字符 uchar code table ={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; 延时函数(使用之前先声明一遍) void delay(uint); void delay(uint z) { uint x,y; for(x=z;x 0;x--) for(y=110;y 0;y--); } 点亮第一个二级管 #include reg52.h //点亮第一个发光二级管 sbit D1=P1^0;//P1是P1口,P1^0代表D1,D1为自己命名的变量 m
[单片机]
基于C8051单片机的血糖监测仪解决方案
  血糖测量的电生物化学原理是当施加一定电压于经酶反应后的血液产生的电流会随着血液中的血糖浓度的增加而增加。通过精确测量出这些微弱电流,并根据电流值和血糖浓度的关系,反算出相应的浓度。所以,确定这个关系是问题的核心。但其关系复杂,受多方面因素影响。电压强度、所使用的试条以及检测的血液量都会对其产生影响。理论上需要在所有浓度点上大量实验才能确定最终的关系。在实际操作中,只需在选择若干重要浓度点做大量实验,然后采用曲线拟合或插值等数据处理方式来确定其与电流值之间的关系。   血糖测量通常采用电化学分析中的三电极体系。三电极体系是相对于传统的两电极体系而言,包括,工作电极(WE),参比电极(RE)和对电极(CE)。参比电极用来定点位
[单片机]
基于C8051<font color='red'>单片机</font>的血糖监测仪解决方案
4×4键盘C51单片机程序源码分享
/*MCU:AT89S52*/ #include #include #define uchar unsigned char int key; int del; void Key_Scan(void); /************主程序*************/ void main(void) { void Key_Scan(void); void delay(int); while(1) { Key_Scan(); delay(2000); } } /********矩键查寻键值4*4程序******/ void Key_Scan(void) { uchar readkey; uchar x_temp,y_temp; P
[单片机]
4×4键盘C51<font color='red'>单片机</font>程序源码分享
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved