1 引言
ATmegal62是ATMEL公司推出的一款基于AVR RISC的低功耗CMOS的8位单片机。AT-megal62通过在一个时钟周期内执行一条指令,可以达到接近1 MIPS/MHz的性能,从而使设计人员可以在功耗和执行速度之间取得平衡。AVR核将32个通用工作寄存器和丰富的指令集连接在一起。所有的工作寄存器都与ALU算术逻辑单元直接相连,允许在一个时钟周期内执行单条指令,同时访问两个独立的寄存器。这种结构提高了代码效率,使AVR得到了比普通CISC单片机高将近10倍的性能。本文采用ATmegal62开发了键盘-液晶显示器、无位置传感器两相直流无刷电机和异步串行通讯口实现的数据采集发送三个系统。实验证明,采用ATmegal62开发的这些系统性能可靠,成本较低,软件设计灵活,硬件接口功能丰富,为今后系统升级创造了良好条件。
2 ATmegal62的结构及特点
ATmegal62具有35个可编程的I/O口线,有40引脚PDIP、44引脚TQFP及44引脚MLF等多种封装。4个8位双向I/O 口 A、B、C、D,一个带内部上拉电阻的3位双向I/O E口。
每个端口都有对应的3个I/O端口寄存器,分别是数据寄存器PORTx、方向寄存器器DDRx和输入引脚寄存器PINx。当DDxn写入0时,对应的Pxn配置为输入引脚,置PORTxn为1时,配置该引脚的内部上拉电阻有效。当DDxn为1时,对应的Pxn配置为输出引脚,POPTxn中的数据为外部引脚的输出电平,即为1,端口引脚被强制驱动为高,输出高电平(输出电流);清零PORTxn,端口引脚被强制拉低,输出低电平(吸入电流)。在复位过程中,即使在系统时钟还未启振的情况下,端口为三态口。还可以作为地址/数据复用口,提供ATmegal62的许多特殊接口功能。C口提供JTAG接口的功能。在允许JTAG接口状态下,引脚PC7(TDI)、PC5(TMS)和PC4(TCK)的内部上拉电阻总是处于有效方式(包括复位时)。
ATmegal62具有以下特点:16 KB且同时具有读写能力的可在线编程Flash;512B EEPROM;1 KBSRAM存储器;35个通用I/O口;1个外部存储器接口;32个通用工作寄存器;1个具有边界扫描功能的JTAG接口;支持在线编译、编程以及仿真调试;支持对Flash、EEPROM、芯片熔丝位和保密锁定位的编程;4个具有比较模式的灵活的定时器/计数器,2个具有比较模式的带预分频器的8位定时器/计数器,2个带预分频器,具有比较、捕捉和捕获模式的16位定时器/计数器,具有独立振荡器的实时计数器;6个PWM通道;内外中断源;上电复位和可编程的电压检测电路;内部可校准的RC振荡器;2个可编程的UART接口;具有内部时钟的可编程看门狗定时器;SPI串行接口;BOOT区具有独立的加密位,可通过片内的引导程序实现在系统编程,写操作时真正可读;全静态操作;片内带有执行时间为2个时钟周期的硬件乘法器;5种可通过软件选择的节电模式。
ATmegal62采用了ATMEL公司的高密度非易失性内存技术,片内Flash可以通过SPI接口+通编程器,或通过JTAG接口,或使用自引导BOOT程序进行编程和自编程。利用自引导BOOT程序,可以使器件在工作过程中通过任一硬件串行通讯接口下载应用程序,并写入到Flash的应用程序区中(IAP)。在更新Flash的应用程序区代码时,处在Flash的BOOT区中的自引导程序将继续执行,实现了同时读写的功能。由于将增强的RISC 8位CPU与在系统编程和在应用编程的Flash存储器集成在一个芯片内,ATmegal62成为功能强大的单片机,为多嵌入式控制应用提供了灵活而低成本的解决方案。
ATmegal62是AVR系列产品中配置比较高的单片机,是一种很复杂的微控制器,它的I/O地址取代了保留在AVR指令集中的64个I/O地址。为确保向后兼容ATmegal61,ATmegal62上所有的I/O的位置与ATmegal61相同。很多附加的I/O地址被加到一个$60$FF的扩展外部I/O空间中。这些地址只能用LD/LDS/LDD和ST/STS/STD指令访问,而不能用IN和OUT指令。对于ATmegal61来说,存在内部RAM空间的重定位的问题。同样,如果代码使用绝对地址,那么增加的中断向量也是问题。要解决这些问题,可以通过编程熔丝M161C来选择AT-megal61的兼容模式。在这一模式下,ATmegal62和ATmegal61之间则不存在这些差别。
(1)地址空间Ox0060-0x00FF用来扩展外部I/0,而不是内部SRAM;
(2)地址空间0x0100—0x04FF用作内部SRAM,因而外部存储器从地址0x500开始(ATmegal61的外部存储器从地址0x460开始);
(3)UART有一个输入缓冲,允许在数据溢出标志(DOR)置l前接收多一个字节的数据;
(4)去除扩展中断向量。
ATmegal62与ATmegal61的引脚完全兼容,可以替代ATmegal61。但是这两种器件的地址熔丝位和电特性不同。在ATmegal61的兼容模式下,AT-megal62不具备如下特性:
(1)USART的FIFO操作;
(2)定时器/计数器3;
(3)访问系统时钟预分频器;
(4)Port A和Port C的引脚中断;
(5)通过软件改变WDT预分频器设置时要遵循特定时序;
(6)M161C熔丝对中断向量重新映射,使之与ATmegal61相同。
4 ATmegal62的工程应用
4.1 ATmegal62与键盘及液晶显示器的设计
键盘是各种CPU不可缺少的输入工具,通过它可以输入程序和数据,从而实现人机对话。液晶显示器(LCD)以其功耗低、体积小、显示内容丰富、超薄轻巧的优点,得到越来越广泛的应用。DM12864是一种图形点阵液晶显示器,它采用动态驱动原理由行驱动控制器和列驱动器两部分组成了128(列)×64(行)的全点阵液晶显示,可显示图形和汉字。它能直接与单片机连接,具有专用指令,可方便地实现画面卷动等功能。图1为采用ATmegal62开发的键盘-液晶显示应用系统。键盘的接键排成3x4的矩阵形式,I/O口线PBl-PB3为输入(设置为O),作为键盘的列扫描线;PB4-PB7为输出(设置为1),作为键盘的行扫描线,并带有上拉电阻。当判断有键按下时,延时去除键抖动,再次判断闭合键的位置,若确实有键按下,计算键值并返回。液晶显示器的工作电压为+5V±10%;PC2作为寄存器数据/指令选择信号D/I,当D/I为1时,显示数据,D/I为0时,指令代码;PC3作为读/写操作选择信号R/W,R/W为l时,读数据或指令,R/W为0时,写数据或指令;PC0、PCI分别作为液晶的左右半屏片选信号CSl、CS2;复位信号RST与PEl连接,高电平复位DMl2864;PE0作为液晶的使能信号EN;PA作为并行数据总线DB,用于二者之间传送数据。在读/写显示数据到LCD之前,要对LCD进行忙标志位判别、显示开关设置、显示起始行设置、页面地址设置和列地址设置。
在ATmegal62开发的键盘-液晶显示系统中:
(1)由于ATmegal62 C口的PC4-PC7具有JTAG接口功能,因此不能再作为I/O输出口,除非将熔丝位JTAGEN设置为l才可以作为I/O输出口用;
(2)在选择系统时钟源时,要正确配置熔丝位,熔丝位决定着系统采用时钟源的方式,不能通过普通的编程在MCU运行时更改,在调试之前应根据所选时钟源形式和唤醒方式,在仿真系统中正确配置熔丝位,使时钟源与熔丝位匹配。
(3)在调试过程中,要求液晶LCD的驱动负电压VDD-Vo=13 V,否则将无法正常显示。
4.2 ATmegal62控制的两相直流无刷电机
两相直流无刷电机是一种结合了直流电机和交流电机优点的改进型电机,采用无位置传感器两相直流无刷电动机控制技术,可充分利用直流无刷电动机调速范围宽、无位置传感器和不易损坏的优点,实现电动机的无级变速,噪声低,运行效率、控制精度和可靠性高。图2为采用ATmegal62控制两相直流无刷电机的应用实例。图中ADCl测量电机的给定速度,在大多数装置中,电机的速度是根据外部给定值调整的,给定值是一个模拟信号,因此需用ADC通道测量外部速度,PWM输出要不断地改变以减小电机的速度和外部给定值的差值。由于用内部的ADC和PWM,不需要霍尔传感器测量电机的转速。ATmegal62的ADC(模/数转换器)通道测量感应电动势,控制电机的换向,流过无源定子线圈的感应电动势决定电机的方向。通过改变PWM寄存器的值来控制PWM的占空比,从而形成脉宽随着调制波变化而变化的PWM信号。用PWM信号控制功率开关的通断来给电机电枢绕组供电,相电流的大小和传送到电机电枢绕组的能量由功率开关的通断时间决定,同时,相电流和传送到电机的能量又决定着电机的转矩和转速,从而实现对转速的闭环控制。
在ATmegal62控制无位置传感器两相直流无刷电机时:
(1)PWM控制电机的速度时,PWM的基频必须大于20 kHz,驱动晶体管的耗散功率要根据PWM的开关频率决定;
(2)在控制有源线圈的电压时,PWM的基频要接近于20 kHz;
(3)用ADC测量感应电压时,ADC的时钟选择应确保ATmegal62有足够的时间处理中断。
4.3 异步串行通讯口数据的采集和发送
ATmegal62带有两个全双工通用同步/异步串口,是区别于AVR系列器件的一个显著特点,用户可以以低成本更加灵活地进行设备间的数据通讯。ATmegal62的USARTn收发模块分为三大部分:时钟发生器、数据发送器和接收器。有三个完全独立的中断:TX发送完成,TX发送寄存器空和RX接收完成。最高波特率可达115 200 b/s,而且有专用的高精度波特率发生器,不占用定时器/计数器。图3是用ATmegal62的异步串行通讯口实现数据的采集和发送的应用实例,电机驱动器件SMD-401通过ATmegal62 PC口输出的控制信号来控制步进电机的转速和方向,步进电机带动智能传感器旋转,经ATmegal62串口O的发送端输出触发信号触发传感器采集数据,采集到的数据通过MAX232送到ATmegal62串口O的接收端,数据在ATmegal62中经过必要的处理后由串口l经过NAX488转送到上位机。
在ATmegal62实现异步串行通讯口数据的采集和发送时,应注意以下问题:
(1)所选器件不同,ICCAVR产生的源代码不一定匹配,应根据实际情况检查初始化程序;
(2)ATmegal62的波特率寄存器UBRROH和USARTO的控制和状态寄存器UCSROC共用同一个单元地址,如果不设定URSSEL0位,接收的波特率就会出错;
(3)确保发送与接收的波特率相同或在容许的误差范围内,发送与接收要有相同的数据格式。
5 结束语
本文介绍了ATmegal62的特点及其在实际工程中的应用实例。ATmegal62具有AVR系列其他器件的大部分其他器件功能,又具有独特技术,配置全、功能强、可靠性高、速度高、抗干扰性好、功耗低、性价比高、硬件结构简单、软件设计灵活、适用面广、价格低廉,具有一定的实用价值,在实际开发中将会发挥越来越大的作用。