最新日志

发表于:2008-8-27 15:01:13
标签:无标签

0

80C51复位标志位的设置与应用研究

 设置复位标志位便于区分不同原因引发的复位,作为一种新技术被越来越多的新型单片机所采纳。例如Philips公司的P87LPC700和 P89LPC900系列、Freescale公司(原Motorola半导体部)的MC68HC05系列和MC68HC08系列、Sunplus公司的 SPMC65系列、Microchip公司的PIC系列等,内部都设计了专门用于记录各种复位标志的状态寄存器。

  MC68HC08系列有一个复位状态寄存器,负责记录6种复位标志位:上电复位、引脚复位、看门狗复位、非法指令复位、非法地址复位和欠压复位。SPMC65系列有一个系统控制寄存器,负责记录5种复位标志位:上电复位、外部复位、看门狗复位、非法地址复位和欠压复位。51兼容的P89LPC900系列有一个复位源寄存器,负责记录6种复位标志位:欠压复位、上电复位、外部复位、看门狗复位、软件复位和UART收到间隔字符复位(主要作为进入ISP监控程序的途径之一)。就连初学者很常用的 AT89S51/52和P89C52X2,也在其电源控制寄存器PCON中增设了一个上电标志位POF。

1  复位标志位的设置方法

  传统的80C51单片机没有设计复位标志位的记录功能,这应该说是一种遗憾,那么能否通过一定的技术手段来弥补这个缺憾呢?这里给广大80C51单片机用户提供一种启示和引导。

  实现复位标志位的记录肯定需要一定的硬件电路支持,而这种电路的设计不存在固定模式。笔者利用一片MAX813L设计了一种支撑电路,如图1所示,仅供读者参考。

按此在新窗口浏览图片
图1  80C51设置复位标志的支撑电路

  在图1中,应用了一个4输入端“与非”门G1和一个按钮开关SW1,还占用了80C51的5条I/O引脚P1.0~P1.4以及一个外部中断源 INT0,并且预先通过初始化软件设置INT0为唯一的高级中断源,下降沿触发方式有效,开放总中断使能位EA。平时G1因各输入端都维持在高电平上,因而其输出端也保持高电平。电路中利用了一个海量电容器C1作为储存能量的器件,扮演着备用电池的角色。由于二极管D1的存在,在主电源断电期间,C1仅为单片机供电,应该让这时的80C51进入耗能最低的停机状态(PD模式)。

  在图1电路的基础上配合必要的用户软件,就可以在7种不同复位源引起复位之后保存6个标志位来记录7种复位标志,以下分别进行讲解。可以事先在RAM的位寻址区间分配一个字节,例如20H单元,用于记录6个复位标志位,如表1所列。

表1  用户定义的系统复位标志寄存器(SRFR)
按此在新窗口浏览图片

  假设该寄存器定名为SRFR(System Reset Flag Register),字节地址为20H,8位当中仅利用了6位,bit5~bit0分别记录人工复位、欠压复位、看门狗复位、非法地址复位、软硬件复位和软件复位。

  ①  MRST:人工复位。当复位按钮SW1被按下时引发INT0中断;在中断服务程序中检测输入引脚P1.4的状态。如果P1.4=0,则置位MRST,记录下曾经发生了一次人工复位操作。然后进行一次主动的复位操作,方法是从输出脚P1.0输出一个低电平给MAX813L的输入引脚MR,经 MAX813L延时后从输出端RESET送出高电平复位信号给80C51,令其进行一次硬件复位操作。

  ②  LVR:欠压复位。当上游电源电压开始跌落并且下降到MAX813L的PFI检测门限以下,输出端PFO送出低电平,引发INT0中断;在中断服务程序中检测输入引脚P1.3的状态。如果P1.3=0,则置位LVR,记录下曾经发生了一次欠压复位操作;然后进行一次主动的复位操作(方法同上),或者令单片机进入停机状态,以便节省能耗和保持数据,以及等待主电源的恢复。

  ③  WDR:看门狗复位。当发生看门狗溢出时,MAX813L的输出端WDO送出低电平,引发INT0中断;在中断服务程序中检测输入引脚P1.2的状态。如果 P1.2=0,则置位WDR,记录下曾经发生了一次看门狗复位操作;然后进行一次主动的复位操作(方法同上)。喂狗操作利用了一个I/O引脚P1.1。

  ④  IAR:非法地址复位。当发生非法地址时,80C51的输出端PSEN送出低电平瞬时脉冲,也会引发一次INT0中断;在中断服务程序中检测输入引脚 P1.4~P1.2的状态。如果P1.4~P1.2=111,则置位IAR,表示发生了一次非法地址复位操作;然后进行一次主动的复位操作(方法同上)。

  ⑤  SHR: 软硬件复位。当发生了软件陷阱的捕捉事件,或者软件看门狗的溢出事件时,可以直接置位SHR,代表发生了一次软硬件复位操作;然后进行一次主动的复位操作(方法同上)。如果利用T0作软件WDT,则应该同时设置INT0和T0中断源为高级中断。

  ⑥  SWR: 软件复位。当发生了软件陷阱的捕捉事件,或者软件看门狗的溢出事件时,也可以直接置位SWR,代表发生了一次软件复位操作;然后调用软件复位程序SWRST即可。软件复位程序的编写方法如下:

SWRST:;定义软件复位程序的实际入口地址
  CLREA;首先关闭中断源总使能位
  SETBF0;设置一个软件复位标志位
  MOVP0,#0FFH;设定通用端口P0为高阻输入状态
  MOVP1,#0FFH;设定通用端口P1为高阻输入状态
  MOVP2,#0FFH;设定通用端口P2为高阻输入状态
  MOVP3,#0FFH;设定通用端口P3为高阻输入状态
  MOVPSW,#00H;设定程序状态字寄存器为原始值
  ;(根据需要还可初始化其他SFR)
  MOVDPTR,#SWR0;为RETI准备弹出地址,而又不改变
  ;执行顺序
  PUSHDPL;压栈低字节,在先
  PUSHDPH;压栈高字节,在后
  RETI;中断返回指令,清除高级中断激活触
  ;发器
SWR0:
  CLRA;准备复位地址
  PUSHACC;压栈低字节00H
  PUSHACC;压栈高字节00H
  RETI;清除低级中断激活触发器,并跳到
  ;0000H

  ⑦  POR:电源上电复位。虽然在用户定义的系统复位标志寄存器(SRFR)中,没有直接设置一个POR标志位,但是如果检测以上6个标志位同时为0,则表明此前进行的是一次上电复位。理由是,经过实验验证(实验所用的单片机型号为SST89C58),在每次初次加电时,包含RAM的20H单元在内的80C51内部 RAM区间(00H~7FH),其内容全部自动清零;在每次RST引脚复位(或者软件复位)时,其内容维持不变。而各个SFR无论是上电复位还是RST引脚复位时,均被还原为原始值(又称复位值),如表2所列。

表2  片内可改写存储器空间复位情况
按此在新窗口浏览图片

  对于那些仅增设了一个复位标志位(技术手册中记作POF)的较新型单片机(如AT89S51/52、AT89S8252、AT89C53、 AT89C55WD、AT89C51RC和P89C51X2/52X2/54X2/58X2等型号),也恰好不再需要这里所设置的POR标志位了。

  对于没有配备备用电源的单片机应用系统,还可以考虑利用E2PROM在断电之前的瞬间来转存复位标志位,以便在断电之后也不会彻底消失。该情况下既可选用外挂E2PROM数据存储器(如8脚串行的24C01、93C46或25C040等)的电路方案,也可选用内部本身带有E2PROM数据存储器的单片机型号,如AT89S8252等。这样在断电之前的瞬间,利用电源滤波电容C2上的少量残留能量,即可完成对于E2PROM的烧写操作。

2  复位标志位的应用方法

  一般的初始化程序段落的编写方法很简单,不过它仅适用于那些要求不高、功能也很简单的单片机项目。这类项目(如一些小家电之类的单片机应用)几乎不存在很强的“过程性”或“不间断性”,对于随时可能发生的复位操作以及重新从头运行的用户程序,不会带来太大的影响或破坏性后果。

  而对于“过程性”或“不间断性”要求很强的单片机项目,一旦发生偶然性复位操作,并且重新从头运行用户程序,那么将会带来极大的负面影响或破坏性后果。例如,单片机控制的面包机,在一次加工面包的过程中,会经历搅拌、加热等工序;假若其间发生意外复位并且重新从头执行程序,则会导致成为废品或者烧焦。电脑控制的手术机器人,在一次手术过程中如果发生意外复位并且返工,将会带来难以想象的严重后果。电脑控制的导弹,在对准目标发射之后的飞行过程中,如果发生意外复位并且重新从头执行程序,那么将会产生难以预料的结果。

  综上所述,单片机在工作过程中,受到意外干扰而进行复位操作,如果说是不可避免的,那么复位之后从何处或在何种背景下开始运行程序,则是可以人为安排的。因此,复位标志位的应用方法实质上就是复位处理程序的编写方法。复位处理程序的处理流程如图2所示。

按此在新窗口浏览图片
图2  复位处理程序流程

  类似于编写UART串口通信中断服务程序的思路,在进入中断程序之后首先要检测中断标志位,看是一次接收中断(RI=1)还是一次发送中断(SI=1),然后再进入不同程序分支进行针对性服务。从图2中可以看出,在从复位矢量0000H开始执行用户程序时,首先应该检测复位标志寄存器,判断是电源初始加电还是其他复位源引起的复位或程序计数器PC清零。

  ①  如果是电源初始加电,则进行原始状态的初始化。这种情况最简单。

  ②  如果属于程序跑飞引起的软件复位、软硬件复位、非法地址复位,或者人工强行复位,则应该依据具体情况尽量恢复数据或修正参数,以便尽最大可能不影响或少影响程序的正常运行(恢复和修正数据的具体算法这里不再深入探讨)。

  ③  如果是欠压复位,则尽量从被打断的程序断点处重新开始执行程序。具体的实现方法和步骤可以是:  复位之前——单片机响应PFO中断请求而进入其服务程序后,保存堆栈指针SP当前值到指定RAM单元,把单片机推入停机状态;复位之后——待电源恢复后, MAX813L得电而从RESET端送出高电平信号,唤醒停机状态下的单片机。若唤醒后的单片机再检测到是欠压复位,则首先复原先前的SP值,再利用一条 RET(或RETI)指令弹出停机之前的程序断点到PC,从而可以继续执行前面的任务。

参考文献

[1]  李学海.PIC单片机实用教程——基础篇/扩展篇. 北京:北京航空航天大学出版社,2002.
[2]  李学海.EM78单片机实用教程——基础篇/扩展篇. 北京:电子工业出版社,2003.
[3]  李学海.凌阳8位单片机——基础篇/提高篇. 北京:北京航空航天大学出版社,2005.
[4]  李学海.PIC单片机原理. 北京:北京航空航天大学出版社,2004.
[5]  李学海.PIC单片机实践. 北京:北京航空航天大学出版社,2004

点击此处查看原文 >>

系统分类: 单片机   |    用户分类: 无分类    |    来源: 转贴

评论(0) | 阅读(23)
发表于:2008-8-27 15:00:29
标签:无标签

0

博物馆智能防盗保护器系统设计

摘  要:本设计的目的是实现博物馆藏品防盗和保护的智能化。以微处理器为核心,利用美国国家半导体的彩色图像传感器LM9628和温度传感器LM19进行环境监控,并控制报警系统和空调系统以及进行图像处理。
关键词:图像传感器;温度传感器;AVR单片机;CPLD

引言
    博物馆内的藏品常常受到人为盗窃的威胁,周围环境的变化也会对其造成破坏,因此需要极为可靠的防盗系统及完善的空调系统,本设计的目的就是实现对馆藏品的智能化防盗和保护。博物馆关闭时便可将此防盗保护器启动,通过CMOS传感器对博物馆进行扫描,图像信号在微处理器中进行处理筛选压缩,并与被监控信号(人形信号)进行比较,一旦出现类人形信号,便将数据进行存储(这样可以大大节省存储空间),并进行报警。被监控信号可以增加,可以是其它任何可能对馆藏品造成损害的动物,只不过在进行筛选比较处理时要复杂一些。另外,通过温度传感器对温度信号进行采集监控,通过控制馆内空调来达到调节温度的效果,以避免馆内文物因为温度的变化而造成损害。

图1  系统功能框图

硬件系统设计
器件的选择
    本设计需要对博物馆内的情况进行大范围适时监控并采集图像数据和温度数据进行处理,因此核心器件应包括图像传感器、温度传感器和微处理器。
图像传感器

    为了实现适时监控,要求图像传感器的数据率(转换速度)比较快、分辨率比较高,本文选用了彩色CMOS传感器LM9628。

温度传感器
    本文采用了高精度温度传感器LM19,它具有以下主要特点:可检测的温度变化范围最大为-55℃~+130℃;温度变化呈良好的线性度;可预测的温度曲线误差。

AVR高速单片处理器
    本文采用了ATMEGA16单片机作为核心处理器,MEGA16可外接16MHz晶振,单位时钟内可以执行一条指令,内含RAM和EEPROM,并且含8通道10位ADC。基本可以达到本系统数据处理和控制的要求。

系统构成原理
    系统要具有采集、处理、传输、控制等功能,其组成功能框图如图1所示。在处理器的控制下,CMOS传感器的图像数字信号(8位,10位或者12位)通过并行数据线经接口电路存入存储器,微处理器将存储器内的数据取出并进行分析处理(同时检测温度数据), 然后控制讯响系统和相关空调接口。

图像采集部分
    因为CMOS传感器采集部分在使用过程中需要合适的安装位置,因此单独把它布线到了一块小电路板上,称之为采集头板。 需要注意的是LM9628采用48引脚的LCC封装,在焊接上有一定难度(本文用15W尖嘴小烙铁,采用拖焊技术)。同时,为了便于焊接,在画元件封装图时最好将引脚在数据手册中给出的标准数据基础上再延长2个毫米。 另外,为了能采集到完整的图像,还需要在头板CMOS传感器的上方装一个1/ 3”的光学成像透镜,使投影到感光阵列上的图像尽可能完整,在安装时注意调整合适的焦距以及光栅的大小。由于采得的图像数据恢复时需要定位输出, 因此采用CMOS传感器的主工作模式,同时检测其输出的像素时钟、行时钟、场时钟,存储时加入定位信息以保证数据的有效性以便正确恢复。由于MEGA16可以快速处理8位数据,因此通过设置CMOS内部寄存器PixDataSel 和PixDataMsb(将PixDataSel设置为10h,8位模式,数字视频输出d[11..3]有效;将PixDataMsb设置为11h,8位模式,内部视频ADC的高8位有效),将低4位数据进行屏蔽,直接输出8位图像数据。为了加快调试过程,可利用CMOS传感器具有采集窗口大小可以调整的特点,将采集窗口的像素设置的比较小,从而减少了所要处理的数据量。这些功能的实现,都需要通过 I2C总线对内部控制寄存器进行设定,内部一些寄存器状态的读出也需要通过I2C总线,因此I2C总线的读写时序的实现很重要,必须严格按照数据手册所给定时关系来实现。

温度采集电路
    为了保证良好的线性度,必须给温度传感器LM19的输入端提供稳定的直流电压,本设计采用的是3.3V稳压二极管,保证传感器有最大的动态范围,即-55℃~+130℃。传感器输出电流很小(几十微安),因此需要加运放进行放大,否则会被处理器引脚电压驱动为高电平或者低电平,以致于不能准确采集到电压信号。本文采用的运放器件是LMC6035。调试时应该注意,LM19是负温度系数的温度传感器,即温度越高,输出电压越低;反之,温度越低,电压越高,因此要合理选择运放的电阻参数,使输出有合适的动态范围。

存储器及其接口电路
    为了避免系统突然掉电导致监控数据的丢失,存储器件采用了AM29F002,它是一款Flsah ROM,存取数据速度相当快,掉电后数据不会丢失。设计中用了两块存储器,总存储量为218*2=524288,而一帧图像的最大有效数据量为648*448=290304,基本上可以满足存储要求。因为图像传感器输出的数字信号要直接存入存储器,同时处理器也要对存储器里的数据进行读写,而采用的处理器直接寻址范围有限,只能进行8位寻址,因此需要较复杂的控制逻辑,本文采用CPLD器件EPM7128来解决这一问题,通过软件编程简化硬件设计。

处理器及外围控制电路
    处理器部分是系统的核心,它具有控制和处理两个功能。外围控制接口电路包括讯响部分、空调控制显示部分和串口电路。

电源电路设计
    以尽量减小功耗为目的,整个系统采用了两种供电电源:3.3V 和 5V。3.3V稳压模块采用的是CZ1585CT,5V稳压模块采用的是MC7805T。由于现在稳压电源集成度比较高,电路组成也比较简单,在此就不给出原理图了。

软件程序的设计
    由于整个系统有单片机的控制与数据处理,也有PC机的图形处理,还有接口逻辑设计,因此软件调试既包括AVR单片机程序调试,也包括PC机程序的调试,还有硬件逻辑的描述,前两种程序的编写均使用C语言,后一种采用硬件描述语言VHDL进行编写。

    AVR单片机部分的程序设计要完成对CMOS器件的控制,温度和图像的采集与处理以及图像数据的传输。

    PC机图像处理程序主要完成图像数据的接收、分析处理以及图像的显示,主要程序模块有图形显示模块,UART通信模块,图像恢复模块等,程序相对来说比较复杂,程序段也比较长,在此就不给出了。

结语
    本系统具有实时性强、智能化、功耗低等特点。虽然是为专用用途而设计,实际上它适用于任何需要图像和温度监控的场合,比如普通家庭的防盗及室内温度调节,游泳馆的水温控制及防溺水等。由于时间有限,设计中还存在着很多缺陷与不足,在很多方面如图像数据的传输、图像的恢复等还需要进一步的改进与完善。

点击此处查看原文 >>

系统分类: 单片机   |    用户分类: 无分类    |    来源: 转贴

评论(0) | 阅读(22)
发表于:2008-8-27 14:58:21
标签:无标签

0

可控数字语音延迟器的PIC设计

摘要:详细阐述一种采用PIC16C55单片机实现可控数字语音延迟器的设计方案,同时提供控制电路图及软件算法流程图。
关键词:延迟器 语音信号 PIC单片机

    延迟器在音频信号处理中有着重要而特殊的用途,是制造混响器、回声信号的重要部件,在无线通信同步控制中也起着重要作用。延迟器大致可分为BBD (Bucket Brigade Device)式延迟器和数字式延迟器两类。数字式延迟器与BBD式延迟器相比,具有延时时间范围宽,工作频带宽,动态范围大等特点;而可控式延迟器可以灵活产生多种时延,以便应用于不同的场合。本文介绍一种基于PIC系列单片机的可控数字语音延迟器的设计方案。

    本系统采用性价比极高的PIC16C55单片机作为中心控制部件。PID16C55单片机是PIC系列单片机中的低档型单片机,具有20个I/O,1个定时器和1个WDT,其最短指令周期可达200ns。利用该型号单片机作为控制部件,具有控制快速、扩展方便、低功耗、性能稳定等特点,同时还可以最大限度地减少外围电路以降低成本,提高性价比。
点击看大图
1 系统工作原理

    可控数字语音延迟器的原理框图如图1所示。输入的语音信号先经过低通抗混迭滤波器,滤除其中的高频成分后送入A/D转换器。经过A/D转换后,信号变成数字信号。该数字信号在PIC16C55单片机的控制下被写入存储器。系统中高有两组存储器,这两组存储器在单片机的控制下交替工作:在一个延迟周期内,一组存储器专门用于存储本周期内采集的数据,而另一组存储器专门用于把上一个周期所采集的数据按顺序送到数据总线,经过D/A转换器和低通滤波器后恢复出原始信号。在下一个延迟周期,两组存储器交换工作状态,以后按此不断循环。可见,延迟的时间取决于A/D转换器前后两次启动的时间间隔和存储区的大小。在本系统中,利用PIC16C55中的定时器定时产生A/D转换器的启动信号,定时器的定时时间为10μs,所以,最小延迟时间为10μs。而存储区的大小设为256,所以,最大延迟时间为10μs×256=2560μs=2.56ms。系统中的预置单元用来设置延迟单元数,进而得到所需的延迟时间。
点击看大图

    系统中A/D转换器选用ADC0820,其读模式下的转换时间为2.5μs。而且,该芯片内置有采样/保持电路,不需外部时钟,故可大大简化电路。因ADC0820的输入范围仅为0~+5V,而系统输入信号的范围为-5~+5V,所以需对输入信号进行预处理,使其电压范围变为0~+5V。系统中的两组存储区用RAM6116中的00H~FFH和100H~1FFH单元代替。预置单元由一个8路开关实现,预置的范围为0~255。D/A转换器选用DAC0832。

2 控制电路设计

    系统中PIC16C55单片机是中心控制部件。它的主要任务有:定时控制A/D转换器进行转换;控制RAM(1)、RAM(2)的读写;控制D/A转换器的转换;产生RAM(1)、RAM(2)的地信息;控制RAM(1)、RAM(2)的交替;接受预置输入。控制电路如图2所示。

    RA0接收ADC0820的转换结束信号,RB0控制ADC0820的启动,RB1控制RAM6116的写操作,RB2控制RAM6116的读操作,同时控制DAC0832的写操作。PIC16C55 除了控制转换及读写外,还要产生RAM的地址信息及接收预置输入。在本系统中,由PIC16C55的RC口产生地址信息,同时也能接收预置输入。系统中利用74LS373作为预置输入的缓存,而74LS373的OE端由RB3控制。当RC口作为地址发生器时,RB3=OE=1,即74LS373的输出不允许,其输出端为高阻态;当RC口接收预置输入时,RB3=OE=0,即74LS373的输出允许,其输出端为预置输入。系统中两组存储区的选择由RA3控制:当RA3=A8=0时,选择的存储区为00H~FFH单元;当RA3=A8=1时,选择的存储区为100H~1FFH单元。

3 软件设计

    系统正常工作时的时序如图3所示。当START变为低电平时,ADC0820开始转换,转换时间约为2.5μs。在ADC0820转换期间,读存储区开始读操作,同时DAC0832开始转换,存储区的读操作时间设为1μs。当ADC0820转换结束后,INT变为低电平,同时写存储区进行写操作,延时1μs后,START设为高电平。至此,一次的转换和一次的读写操作已经操作已经完成。从此刻到下一次A/D转换开始的时间内,主要完成的操作有:存储地址的改变、两组存储区的交替及预置值的读入。

    程序流程如图4所示。

结束语

    笔者根据本文的设计方案制作了实际电路,效果良好。在实际应用中,读者可根据实际情况灵活改变最小延迟时间和最大延迟单元数。通过改变PIC16C55中定时器的定时时间即可改变最小迟时间;通过改变存储区的大小即可改变最大延迟单元数,进而改变最大延迟时间。

点击此处查看原文 >>

系统分类: 单片机   |    用户分类: 无分类    |    来源: 转贴

评论(0) | 阅读(17)
发表于:2008-8-27 14:57:03
标签:无标签

0

HT46X23设计微波炉控制器实例分析

微波炉控制器的工作环境相对比较恶劣。首先是炉腔温度比较高,控制器附近温度也会比较高,达到60℃~70℃;另一方面,微波辐射对单片机抗干扰的要求也很高,在做多次快速开关门试验中,当少量微波泄露时,对控制器有一定的辐射,以及反复开通和关断大功率负载会产生较强的干扰。所以选择合适的单片机十分重要,在多年的家电产品设计中,经常用盛群半导体(Holtek)的48系列及46系列8bit单片机设计微波炉控制器,无论在适应工作环境还是抗干扰等方面都完全满足要求,在成本及供货等方面比国外芯片也有更明显的优势。

    本文通过实际产品为例,以产品功能要求、方案确定和芯片选型、硬件设计、软件规划及编写等几部分介绍如何用单片机设计微波炉控制器。

功能要求

    设计产品首先了解产品的要求,了解越详细设计反复修改就越少,特别是关于影响芯片选型及输出控制等跟硬件直接相关的部分。本文介绍的微波炉控制器的主要功能如下:
  微波加热,功率有10档。
  烧烤加热,功率有2档。
  热风烘烤加热,温度多档。
  混合加热,有三种组合模式:烧烤加微波、烘烤加微波、烘烤加烧烤。
  自动解冻,重量选择有20档。
  自动菜单,6大类,各类分别有重量选择。
  显示:88:88数码管,四周带14个图标。
  按键:有功能选择键、启动键、取消键、热风烘烤键,时钟及定时键,自动菜单各功能键,总共11个。
  编码开关:调节加热时间。
  另有蜂鸣器、门检测和门灯控制。

方案确定和芯片选型

    了解产品的详细要求后,需要确定具体的实现方案,首先是选择合适的单片机。选择合适的型号主要要看两个方面:硬件资源和软件资源。要选择合理的单片机首先必须了解单片机的各系列及各款的资源,再了解需要什么样的资源,下面分别从硬件和软件来说明怎样根据要求选择单片机。在选择单片机时,整个产品的方案也基本确定。

硬件相关资源
    硬件相关的资源是指外围硬件相关的如I/O数量、特殊驱动、工作电压等。

    首先,选择合适的单片机系列。看供电电压及工作温度抗干扰能力等是否满足要求。盛群的MCU在系统振荡频率小于4MHz时供电电压供电范围为2.2V~5.5V,当8MHz时则为3.3V~5.5V,要提高系统的抗干扰能力,最好用5V电压供电,当供电电压较高时,MCU内部所有逻辑电平幅值较高,容差电压大,干扰更强才能改变其逻辑状态。工作温度,选择Holtek的48和46系列工业级单片机,工作温度范围为-40℃~85℃,完全能满足微波炉控制器工作温度的要求。在选择合适的系列时,还要看特殊资源的要求,如中断口、PWM、蜂鸣器驱动、A/D转换等;在此产品的具体要求中,需要检测炉腔的温度以及在产品中需要对交流风扇调速,温度检测需要A/D转换,交流风扇调速控制需要有过零中断,所以,在这个产品中选择了46系列单片机。但此产品不需要LCD驱动、高精度A/D转换及比较器等资源,则不选择HT46R6X、HT46R5X、HT46R1X等系列,而选择HT46R2X系列。

    再就是选择的具体I/O要求和什么样封装的单片机,在Holtek单片机中同型号的单片机有多种封装,如HT46R23有DIP28或SOP28封装,也有DIP24或SOP24封装,其I/O分别为23个和19个。

    根据前面提到的功能要求,其I/O的需求列举如下:
继电器驱动:微波、烧烤、热风烘烤、门灯/转盘、散热风扇共5个输出ports。
蜂鸣器驱动:1个输出ports
按键有11个:11个输入port
门状态检测:1个输入port
编码开关检测:2个输入port
显示数码管:5个COM,9个段,需14输出port
过零中断检测:1个中断输入port
温度检测:1个A/D输入port

    简单加起来总共需要20个输出port,16个输入port。考虑复用I/O,将9个数码驱动段和5个公共端同时做输入检测;温度检测只能用A/D口PB.0,过零检测只能用单独的中断PA.5来检测,所以总共需要22个I/O,所以选择28PIN的HT46R2x可以满足要求。

软件相关资源

    软件相关的资源主要包括程序空间即ROM的大小和数据空间RAM的多少,当功能较多且复杂时需要更多的ROM和RAM;当然还有定时器、中断、以及其它某些特殊的资源;前面已经选择了28PIN封装的46R2X系列单片机,此产品功能相对比较丰富,程序空间要求比较多,选择4K的ROM和192byteRAM的HT46R23应该能够满足要求,同样封装可以选择28PIN的HT46R24,它有8K ROM和384byteRAM,可以做后备选择,这样不必担心资源不够时换IC,反复修改硬件就很麻烦。

    总之,在选择资源时,要软硬兼顾,如果程序简单,硬件资源要求高,则可以选择封装小、I/O少的单片机,另外增加扩展IC来扩展I/O;当程序复杂,硬件资源要求少时,则选择较小封装、软件资源多的单片机。

硬件电路设计
    在选择主芯片时,已经在考虑部分电路设计了,显示、按键检测、输出驱动等都考虑好了,由于篇幅有限,只简单介绍几个关键问题:

门检测电路:给单片机检测的门开关信号的同时,还要控制微波、烧烤、热风烘烤继电器的电源。

供电部分:考虑数码管显示内容较多,驱动电流大,变压器尽量选择继电器和单片机独立供电,一方面降低变压器功率,同时可以让单片机的电源不受继电器的工作状态影响。

过零检测和触发:选择合适的光耦和可控硅驱动电路,实现过零驱动,过零检测电路注意适当的滤波和隔离,减少通过电源耦合的干扰。

微波炉控制器电路原理图如图1。


图1  HT46X23微波炉原理图

    另外,PCB设计时注意强弱电分开,注意电源与地的分布,注意生产的工艺性问题等。总之,合理的硬件设计和PCB布板对保证产品功能和性能十分重要。

软件规划及编写

芯片配置选项设定
    根据硬件电路,将按键、编码开关及门检测部分的内部设置上拉电阻;盛群单片机的LVD功能很可靠,所以复位电路直接接到VCC,那么在设置配置选项时一定要开启低电压复位功能,不开启容易上电复位不良。下面将主要选项设定列举如下:
PA3/PFD: Enable PFD
Pull-High PB: Enable
Pull-High PC: Disable
Pull-High PD: Enable
OSC: Crystal
WDT clock source: WDTOSC
WDT: Enable
LVR: Enable
LVR voltage: 3.2V
CLRWDT: Two Instructions.
软件整体规划及模块化分解

    将复杂的功能分解,通过变量传递各模块之间的关联内容,模块内部则尽量独立完成,这样让程序的可移植性提高,调试更快。把复杂的问题简单化是程序编写的重要原则。

1)主程序
     通过调用各子程序,整合各模块的功能。数码管扫描显示对时间要求比较高,而且各个公共端要平均分配时间,所以主程序执行周期选择固定周期。另外编码开关也是扫描检测方式,当编码开关旋转很快时,脉冲频率较高,扫描周期也不能太长,综合整体,主程序选择4ms为执行周期,但显示和按键及编码开关则执行2次,相当于2ms的扫描周期。

    如果用4MHz的晶振,4ms时间可以执行4000条指令,程序设计合理情况下完全可以运行完各子程序,不担心出现当处理事件多时显示闪烁等问题。

2)编码开关、按键及门状态检测
    因编码开关、按键及门状态检测I/O都同显示驱动I/O复用,所以需统一处理。
先关闭显示COM,检测SEG上的状态,再关闭SEG,再检测COM上的状态。

    此部分程序还要完成按键检测及消抖动处理、编码开关的检测、门状态去抖动检测,以有效按键变量、编码开关左右旋转标志、门状态等为输出。其它子程序根据按键、编码开关操作和门状态执行对应的操作和功能。

3)过零检测及过零触发
    过零检测在外部中断程序中完成,中断后根据当前运行状态设置散热风扇半功率、全功率和关三种状态。开和关状态直接设置控制光耦状态,当需要半功率时,需要记录中断次数,调整导通和关闭周期,这里没有用调整可控硅导通移相的方法调功,可减少电磁辐射。

4)按键设置
    按键操作设置程序的输入条件为有效的按键和编码开关左右旋转标志,再细分每个按键分别处理,在什么条件下设置对应的工作时间、输出模式、显示模式、蜂鸣器鸣叫等。

5)显示状态设置
    设置4字节保存显示数字部分内容,另2字节保存四周图标变量,由于四周的图标有闪烁和不闪烁状态,另2字节设置图标的闪烁状态。

6)显示输出扫描
    根据显示状态变量的8字节变量内容,设置数码管对应COM和SEG,扫描显示输出。

7)加热输出及功率控制设置
    加热和功率控制程序通过统一的变量输入,设置当前的微波、烧烤、热风还是几种混合加热,以及设置内灯及散热风扇输出等。

8)温度检测及计算
    设置A/D转换,检测热敏电阻的值,并滤波处理,以及开路短路保护检测。其输出为故障状态标志和当前炉腔温度。在热风烘烤输出程序中根据温度设置对应的加热状态。

9)时钟、定时及运行时间计算及对应输出模式切换
    程序中关于时间的设置很多,大多都在这个子程序中完成,如时钟计算、预约比较、倒计时、自动功能的多段加热模式切换等。

10)蜂鸣器设置
    两个变量buz_n,buz_long来设置蜂鸣器鸣叫次数和单声鸣叫长度。可单独设置buz_long值为单声的鸣叫,在上电和按键操作时设置单声鸣叫。当定时结束或定时启动或故障提示等情况时,需要设置鸣叫多时,设置buz_n值就可以了。

11)定时中断子程序
    定时中断子程序相对很简单,只设置中断次数记录就可以了。由于蜂鸣器鸣叫频率为2KHz,所以定时中断时间为250us。

    其中内容比较多的部分是:按键操作、显示状态设置、时钟、定时及运行时间计算及对应输出模式切换、加热输出及功率设置等部分。

    在软件的编写中,变量规划很重要,下面还列出了几个典型的变量规划:
    整个产品的主要工作模式用run_state来记录:
run_state equ [40h]
s_hotfan equ run_state.0     ;热风烘烤
s_micro equ run_state.1     ;微波
s_grill equ run_state.2     ;烧烤
s_mix equ run_state 3     ;混合模式
s_auto equ run_state.4     ;自动解冻
s_mu equ run_state.5     ;自动菜单工作模式
s_fast equ run_state.6     ;快速启动模式
显示模式用dsp_state来记录:
dsp_state equ [41h]
s_time equ dsp_state.0     ;显示时钟状态
s_timer equ dsp_state.1     ;显示定时时间状态
s_off_t equ dsp_state.2     ;显示倒计时状态
s_code equ dsp_state.3     ;显示菜单或工作模式状态

    加热模式heat_mode变量来控制当前的输出,其具体数据说明如下:

0则关闭所有输出。

bit0_bit3(10_1)保存微波100% /90% /80% /70% /60% /50% /40% /30% /20% /10% /10档,即最后4bit来记录微波输出功率,在自动解冻、自动菜单、混合等非简单微波模式时,加热功率输出时只需要判断此变量,就直接设置微波输出。

bit4_bit5保存烧烤功率100%和50%。

bit7保存热风烘烤输出。

    当有混合状态时,则同时设置对应的位就可以了。
 
    合理设计变量对整个程序的编写很有用,同时也是对产品功能的规划和理解的具体化,找出主要的和关键的控制关系,设计合适的、适当通用的算法。而且对于经常编写同类产品时,移植程序变得很简单;比如将此产品数码管换为LCD显示时,基本上只需要将显示输出部分修改为驱动显示IC或显示RAM就可以了,其显示得内容还是显示时间、定时、倒计时时间、菜单或模式,只需要修改对应得显示表就可以了。

程序编写和程序调试

    软件简单规划后,就需要具体的编写,将任务分解后,每部分已经比较简单了,调试时可以考虑各子程序单独调试,人为模拟输入各种情况下的数据及状态,检查输出是否正确。再将相关联的一起调试。除非很有把握,不要将程序全编写完了再调试,那样就不知道到底哪里有问题。

程序简单题纲如下:
;定义常量,某些固定的值,多次用到或经常修改的常量,单独定义后调用。
buz_l0 equ 50d    ;50*4=200ms设置所有默认蜂鸣器鸣叫声音长度。
sw_t0 equ 70d    ;有效按键响应时间,按键去抖动时间
。。。。。。
;定义I/O,将各输入/输出单独按功能或原理图网络标号定义,当原理图修改时方便软件修改
buz_p equ pa.3
grill_p equ pc.0
micro_p equ pc.1
......
;定义变量,
run_state equ [40h]    ;或则用自动变量定义
......
;程序开始
 org 0h
 jmp start_l
 org 04H       ;外部中断向量
 jmp int_set     ;跳转过零中断处理程序
 org 08H       ;定时中断向量,中断周期为250us
 mov temp_a,a   ;保存
 mov a,status
 mov temp_s,a
 inc t_int0        ;每次中断0.25us
 mov a,temp_s
 mov status,a
 mov a,temp_a
 reti
;中断处理程序,注意先保存用到的ACC和标志寄存器status,返回前恢复
int_set:
 ......;中断处理程序,设置风扇输出
 reti
;主程序开始
start_l:
;初始化RAM、I/O、timer、中断等,一般先将通用RAM全清零
;注意继电器等关键变量的初始化,否则上电时继电器可能会跳一下。
;初始化某些特殊变量
;主循环程序部分
main:
 call sw_in_set ;注意按键设置会将显示关闭,则显示输出程序在后
 call dsp_out_set ;显示扫描程序
 call sw_out_set ;按键功能及状态设置
 call ad_tem_set ;A/D转换及温度计算
 call dsp_state_set ;显示状态计算
main_delay_2ms:
 mov a,t_int0 ;0.25*8=2   等待2ms时间到
 sub a,8
 snz c
 jmp main_delay_2ms
 call sw_in_set ;注意按键设置会将显示关闭,则显示输出程序在后
 call dsp_out_set ;调用显示扫描程序
 call heat_out _set ;调用加热状态及功率设置
 call buz_set ;调用蜂鸣器设置子程序
 call time_set
main_delay_4ms:
 mov a,t_int0   ;0.25ms*16=4ms   等待4ms时间到
 sub a,16
 snz c
 jmp main_delay_2ms
 clr t_int0
 jmp main
;各子程序分列后面
sw_in_set: ;按键检测、编码开关检测、门状态检测
 ......
 ret
dsp_out_set: ;显示扫描程序
 ......
 ret
sw_out_set: ;按键功能及状态设置
 ......
 ret
ad_tem_set: ;A/D转换及温度计算
 ......
 ret
dsp_state_set: ;显示状态计算
 ......
 ret
heat_out _set: ;调用加热状态及功率设置
 ......
 ret
buz_set: ;蜂鸣器设置子程序
 ......
 ret
time_set: ;时间及定时处理程序
 ......
 ret
;程序中会用到很多表,为调用方便,则将其放到最后页面
 org 0f00h
dsp_code_l0:
 dc 10011111b;0
......
end ;程序结束

点击此处查看原文 >>

系统分类: 电源技术   |    用户分类: 无分类    |    来源: 转贴

评论(0) | 阅读(27)
发表于:2008-8-27 14:53:35
标签:无标签

0

智能电梯语音系统的设计

   随着城市文明化和现代化建设步伐的加快,对建筑物中电梯的服务要求也越来越高,人们越来越追求智能化、人性化的乘梯环境。在电梯语音服务方面,目前主要是传统的人工服务,即通过电梯管理员告知乘客所要到达的楼层以及其他相关的服务信息。本文以单片微机和ISD语音芯片为核心,设计了一种电梯语音服务系统,实现了电梯语音服务的智能化和自动化,以适应各种对服务要求比较高的电梯中。

2  器件功能介绍
    Winbond公司的ISD系列语音芯片采用了“直接模拟量存储”(DAST)专利技术,信号无需经过D/A,A/D转换,数字压缩和语音合成等复杂的数字信号处理过程,减少了失真,使其声音存贮效果较以前产品有大幅提高,实际试听主观评价可以达到磁带录音机的水平,是目前市场上录放效果最好的语音电路之一。

    ISD4004语音芯片采用CMOS技术,内含晶体振荡器、防混叠滤波器、平滑滤波器、自动静噪、音频功率放大器及高密度多电平闪烁存储陈列等(见图1),因此只需很少的外围器件就可构成一个完整的声音录放系统。芯片设计是基于所有操作由微控制器控制,操作命令通过串行通信接口(SPI或Micwire)送入。采样频率可为4.0kHz、 5.3kHz、6.4kHz、8.0kHz频率越低,录放时间越长,而音质则有所下降。片内信息存于闪烁存储器中,可在断电情况下保存100年(典型值) 反复录10万次。器件工作电压3V,工作电流25~30mA,维持电流1uA,单片录放语音时间8~16min,音质好,适用于移动电话机及其它便携式电子产品中。

点击看大图

图1     ISD4004系列语音芯片内部框图

2.1  引脚描述
ISD4004系列芯片引脚图如图2所示:

图2     ISD4004系列芯片引脚图(TSOP及PDIP、SOIC)

    同相模拟输入(ANA IN+)—这是录音信号的同相输入端,输入放大器可用单端或差分驱动。单端输入时,信号由耦合电容输入,最大幅度为峰峰值32mV,耦合电容和本端的3kΩ输入阻抗决定了芯片频率的低端截止频率。在差分驱动时,信号最大幅度为峰峰值16mV。

    反相模拟输入(ANA IN-)—差分驱动时,这是录音信号的反相输入端。信号通过耦合电容输入,最大幅度为峰峰值16mV,本端的标称输入阻抗为56kΩ,单端驱动时,本端通过电容接地。 两种方式下,ANA IN+和ANA IN-端的耦合电容值应相同。

·音频输出(AUD OUT)—提供音频输出,可驱动5Ω的负载。
·片选(SS)—此端为低,即选中ISD4004 系列。
·串行输入(MOSI)—此为串行输入端,主控制器应在串行时钟上升沿之前半个周期将数据放到本端,供ISD 输入。
·串行输出(MISO)—串行输出端,ISD未选中时,本端呈高阻态。
·串行时钟(SCLK)—ISD的时钟输入端,由主控制器产生,用于同步 MOSI 和MISO的数据传输。数据在SCLK上升沿锁存到ISD,在下降沿移出ISD。
·中断(INT)—本端为漏极开路输出,ISD在任何操作(包括快进)中检测到EOM或OVF时,本端变低并保持。中断状态在下一个SPI周期开始清除,中断状态也可用RINT指令读取。
·行地址时钟(RAC)—漏极开始输出。每个RAC周期表示 ISD存储器的操作进行了一行(ISD4004系列中的存储器有2400行)。8kHz采样频率的器件,RAC周期为200ms,其中175ms保持高电平,低电平为25ms。快进模式下,RAC为218.75ms高电平,31.25ms为低电平,该端可用于存储管理技术。
·外部时钟(XCLK)—本端有内部下拉元件,芯片内部的采样时钟在出厂前已调校,误差在+1%内,在不外接时钟时,此端必须接地。
·自动静噪(AM CAP)—1μF电容构成内部峰值检测电路的一部分,检测出的峰值电平与内部设定的阈值作比较,决定自动静噪电路的工作与否。大信号时自动静噪电路不衰减,静音时衰减6dB。同时,1μF电容也影响自动静噪电路时信号幅度的响应速度,本端接VCCA则禁止自动静噪。

2.2  SPI接口
    ISD4004工作于SPI串行接口。SPI协议是一个同步串行数据传输协议,协议假定微控制器的SPI移位寄存器在SCLK的下降沿动作。因此,对ISD4004而言,在时钟上升沿锁存MOSI引脚数据,在下降沿将数据送至MISO引脚。协议具体内容如下:
(1) 所有串行数据传输开始于SS下降沿;
(2) SS在传输期间必须保持为低电平,在两条指令之间保持为高电平;
(3) 数据在时钟上升沿移入,在下降沿移出;
(4) SS变低,输入指令和地址后,ISD行才开始录放操作;
(5) 指令格式是8位控制码加16位地址码;
(6) ISD的任何操作(含快进)如果遇到EOM或OVF,则产生一个中断,该中断状态在下一个SPI周期开始时被清除;
(7) 使用“读”指令会使中断状态位移出ISD的MISO引脚时,控制及地址数据也同步从MOSI端移入;
(8) 所有操作在运行位(RUN)置1时开始,置0时结束;
(9) 所有指令都在SS端上升沿开始执行。
OVF标志指示ISD录放操作已到达存储器的末尾。EOM标志只在放音过程中检测到内部的EOM标志时,此状态位置1,如图3所示。SPI指令码如表1所示。

点击看大图

图3     SPI端口的控制位

表1     SPI指令表


    以下列举了几种对ISD器件进行操作时的指令次序。
(1) 信息快进。用户不必知道确切的地址,就能快进跳过一条信息。信息快进只用于放音模式。放音速度是正常的1600倍,遇到EOM后停止,内部地址计数器加1,并接下条信息开始处。
(2) 上电顺序。器件延时TPUD(8kHz)采样时,约25ms后才能开始操作。因此,用户发完上电指令后,必须等待TPUD,才能发出一条操作指令。例如从 00处放音,应遵循如下时序:发power up命令;等待TPUD上电延时);发地址值为00的SETPLAY命令;发PLAY命令。器件会从00地址开始放音,当出现EOM时,立即中断,停止放音。如果从00处录音,则按以下时序:发power up命令;等待TPUD(上电延时);发power up命令;等待2倍 TPUD;发地址值为00的SET REC命令;发REC命令。器件便从00地址开始录音,一直到出现OVF存储器末尾)时,录音停止。

    SPI控制寄存器控制器件的每种功能,如表2所列。

表2     SPI 控制寄存器


    注:IAB置0时,录、放操作从A15A0地址开始。为了能连贯录、放到后续存储空间,在操作到达该行之前,应发出第二个SPI指令将IAB置1,原则器件在同一地址上反复循环。这个特点对语音提示功能很有用,RAC脚和 IAB位可用于信息管理。

2.3  命令格式及时序
    8位及24位命令格式如图4和图5所示。录音、放音、停止时序如图6所示。

图4     8位命令格式

点击看大图

图5     24位命令格式

点击看大图

图 6      录音、放音、停止时序


3  电梯语音系统的设计
3.1  系统原理电路
    本系统是指安装在电梯内的放音电路,不包含录音部分。在实际应用中,将对方需要播音的内容事先录制到语音芯片中(每一层楼对应一段语音服务,按楼层从低到高的顺序录音),电梯运行时,本系统便可实现自动的语音播报服务。各楼层信号通过信号采集系统从电梯控制面板中引出,经过隔离系统,进入单片机(如图8所示,其中隔离器件选用TOSHIBA的光电耦合芯片TLP521-4)。电源部分从电梯内部引入220V交流电源,通过电源模块和电压调节模块分别为单片机和语音芯片提供5V和3V电压(如图9所示)。语音芯片输出的音频信号通过功放电路输出至外部。系统总体结构如图7所示。

图7     系统整体结构图

点击看大图

图8     信号采集电路

点击看大图

图9     电源电路

3.2  单片机与ISD芯片接口电路
    本文讨论的电梯语音系统的控制和放音部分主要由AT89C51单片机和ISD4004语音芯片构成,其中单片机和语音芯片的接口设计如图10所示:

点击看大图

图10     ISD4004与89C51接口电路
    从图10中可以看出,单片机和ISD4004之间的连线较少。P1.0接 ISD4004的片选引脚/SS,控制ISD4004是否选通;P1.1接ISD4004的MOSI串行输入引脚,语音芯片从该引脚读入放音的地址; P1.2接ISD的串行输出引脚MISO,单片机从该引脚接收从语音芯片传来的信号;单片机AT89C51的P1.3接ISD4004的串行时钟输入端 SCLK,作为ISD的时钟输入,用于同步MOSI和MISO的数据传输;P1.4接ISD芯片的中断引脚/INT, 接收从语音芯片发来的EOM信号,获得语音段结束信息, 控制其放音或快进操作;ISD4004音频信号输出引脚AUDOUT通过一滤波电容输出至外部功放。

    本系统是针对播报20层楼的情形设计的,通过信号采集系统从电梯控制面板内主要取出了三类信号:楼层信号,上下行信号,关门信号。其中F1至F20便是楼层信号,UP和DOWN分别为上行和下行信号,CLOSE为关门信号,这些信号经过隔离处理后进入单片机。

4  软件设计
    按照前面的分析和硬件原理图,软件部分的任务主要是找出将要进行语音播报服务的楼层和在找到楼层后在合适的时候进行放音。

4.1  软件流程包括以下步骤
(1) 初始化,取定当前楼层;
(2) 扫描电梯面板,并量化存储用户选取的所有目标楼层信息;
(3) 为存储的目标楼层数据排序;
(4) 判断是否存在有效的目标楼层信息,若判断结果为否,则返回步骤(2);
(5) 若步骤(4)中的判断结果为是,检测是否有关门信号,若检测结果为否,则返回步骤(2);
(6) 若(5)中检测的结果为是,判断电梯是上行还是下行;
(7) 保存判断所述的电梯最近目标楼层;
(8) 调用选音播放子程序;
(9) 保存已经播放语音的电梯最近目标楼层为当前楼层。

4.2  软件
    软件流程图如图11所示。选音播放子程序见图12。

图11     系统软件流程图

图12     选音播放子程序流程图
    对于ISD4004而言,由于两次要放音的内容在存储器里不一定是相邻的两段,所以涉及到对语音芯片的分段提取语音的控制,而不只是简单的放音操作。对于这种情况,如果在知道每一语音段首地址的情况下,可以直接采用“发送该段首地址并从当前地址开始放音”的命令来实现,由于在实际录音过程中,录音设备不一定提供每一语音段的物理地址(一般只是显示对应的段数),所以在提取楼层对应的语音段的问题上,就必须采取另外的方法,在这里我们是采取控制语音芯片连续快进的方式来实现的。因此,选音播放子程序包括下列步骤:
(1) 根据电梯最近目标楼层设置快进次数计数器;
(2) 从首地址处开始快进一次(本系统一楼不要求语音服务);
(3) 向语音芯片发送从当前语音段地址开始快进的命令;
(4) 检测是否到达电梯最近目标楼层的语音段地址,若否则返回步骤(3);
(5) 若步骤(4)中的检测结果为是,则播放语音。

本文重点给出选音播放子程序如下:
FANGYIN:MOV 34H,33H   
;设置33H为计数器并将当前播音楼层作一备份
SETMC: CLR  SS
MOV R1,#0E8H  
;发送从首地址开始快进命令
MOV A, #00H
ACALL SEND
MOV A, #00H
ACALL SEND
MOV A, R1
ACALL SEND
SETB SS 
SETMC1: CLR SS
MOV R1, #0F8H  
;发送从当前地址开始快进命令
MOV A, R1
ACALL SEND
ACALL DELAY125U 
;调用12.5微秒延时子程序
SETB SS
ACALL DELAY125U
JB  INT,$  
;一段快进结束则接收到低电平信号
DJNZ 33H,SETMC1 
;判断快进次数是否达到要求, 是则往下执行
ACALL PLAY   ;调用放音子程序
MOV 33H,34H  
;保存播音楼层为当前楼层
RET
PLAY: CLR  SS    
MOV R1,#0F0H  
;发送从当前地址开始放音命令
MOV A, R1
ACALL SEND   
;调用发送子程序进行发送
SETB SS
JB INT, $  
;放音结束则接收到低电平信号
RET
由于篇幅所限,相关子程序并未全部给出。

5  结束语    
    本文所介绍的电梯语音系统已在某大医院门诊部大楼的多台电梯中投入使用,整个系统工作稳定,功耗小,音量可调,输出的语音清晰,音色优美,实现了电梯语音服务的智能化和自动化,用户评价良好。

点击此处查看原文 >>

系统分类: 单片机   |    用户分类: 无分类    |    来源: 无分类

评论(1) | 阅读(16)
发表于:2008-8-27 14:51:57
标签:无标签

0

PIC单片机的SPWM控制技术

   在UPS等电力电子设备中,控制方法是核心技术。早期的控制方法使得输出为矩形波,谐波含量较高,滤波困难。SPWM技术较好地克服了这些缺点。目前SPWM的产生方法很多,汇总如下。

    1)利用分立元件,采用模拟、数字混和电路生成SPWM波。此方法电路复杂,实现困难且不易改进;

    2)由SPWM专用芯片SA828系列与微处理器直接连接生成SPWM波,SA828是由规则采样法产生SPWM波的,相对谐波较大且无法实现闭环控制;

    3)利用CPLD(复杂可编程逻辑器件)设计,实现数字式SPWM发生器;

    4)基于单片机实现SPWM,此方法控制电路简单可靠,利用软件产生SPWM波,减轻了对硬件的要求,且成本低,受外界干扰小。

    而当今单片机的应用已经从单纯依赖于51系列单片机向其它多种单片机发展,尤其以嵌入式PIC单片机的发展应用更为广泛。PIC单片机含具有PWM功能的外围功能模块(CCP),利用此模块更容易通过软件实现SPWM,且具有更快的执行速度。本文采用软硬件结合设计的方法,利用面积等效法,并且基于PIC单片机实现对试验逆变系统的SPWM控制。

1 面积等效的SPWM控制算法

    目前生成SPWM波的控制算法主要有4种。

1)自然采样法;

2)对称规则采样法;

3)不对称规则采样法;

4)面积等效法。

    理论分析后知自然采样法和面积等效法相对于规则采样法谐波较小,对谐波的抑制能力较强。又因为PIC单片机片内无较大空间实现在线运算,所以自然采样法不利于软件实现。本文的试验系统采用面积等效法实现SPWM控制,其原理如图1所示。


图1 SPWM面积等效算法

    利用正弦波小块面积S1与脉冲面积S2相等原则,将正弦波的正半周分为N等分,则每一等分的宽度为π/N弧度,利用面积等效法计算出半个周期内N个不同的脉宽值,将产生的脉宽数列以列表形式存于PIC单片机的ROM中,以供程序调用。

    脉宽产生的基本公式为

式中:M为调制度;

N为载波比,即半个周期内的脉冲个数,实验中N取64;

k取值为0~63。

    由式(1)计算出的实际脉宽转换成计时步阶后生成64个值的正弦表存入PIC的ROM中以供调用。产生的SPWM脉宽表是一个由窄到宽,再由宽到窄的64个值的表。

2 软硬件结合试验系统

    以PIC单片机内部的两个外围功能模块(CCP)为基础,利用该模块具有的PWM功能,软件控制两路SPWM波形的输出。再将这两路SPWM波利用互补导通原则变换成4路,经隔离放大后驱动IGBT逆变器,实现对输出的控制。

2.1 硬件设计

    试验硬件系统如图2所示。选择PIC单片机的中档系列,该系列单片机的主要特点有:

1)具有高性能的RISCCPU;

2)除程序分支指令为两个周期外,其余均为单周期指令,且仅有35条单字指令;

3)8K×14个FLASH程序存储器,368×8个数据存储器(RAM)字节;

4)中断能力强,达到14个中断源;

5)外围功能模块丰富,含2个16位寄存器的CCP模块,具有PWM功能;

6)含3个定时器,其中与PWM功能相关的定时器2(即TMR2)带有8位周期寄存器,且带有8位预分频器和后分频器。


图2 硬件试验系统

    逆变部分采用自关断器件IGBT实现单相全桥逆变。IGBT是全控型电力电子器件,它的控制级为绝缘栅场效应晶体管,输出级为双级功率晶体管,因而它具有两者的优点而克服了两者的缺点。它开关频率相对高,驱动功率小,构成的功率交换器输出电压纹波小,线路简单,是当今最具有应用前景的功率器件。

2.2 软件设计

2.2.1 PIC单片机的设置

    试验中设置SPWM的频率为20kHz,并外接20MHz晶振信号,计算得指令周期即计时步阶为0.2μs。PIC单片机CCP外围功能模块的PWM功能实现主要依靠相关寄存器值的设定,且以定时器2(TMR2)作为PWM的时基。相关寄存器的设置如下。

1)SPWM周期的设定由寄存器PR2设定

(PWM)周期=(PR2+1)×4×Tosc×(TMR2)预分频(4)

试验中Tosc为20MHz,为提高分辨率,TMR2预分频设为1:1,由此计算得PR2=0XF9;

2)定时器TMR2的控制寄存器T2CON设定 因为SPWM频率高,周期短,在每个周期内完成脉宽的调整比较困难,故在此寄存器中设置后分频为1:3,这样每输出3个相同脉宽的SPWM波后改变一次脉宽值;

3)2个CCP模块的控制寄存器CCP1CON及CCP2CON的设定 两个CCP模块控制寄存器的设置类似,选择CCP模块作用于PWM功能模式,即bit3:0=11ⅹⅹ。

4)CCPR1L脉宽写入寄存器 写入的脉宽值在下个TMR2周期开始时转至CCPR1H,通过读CCPR1H的脉宽值来改变PWM脉宽。

5)寄存器TRISC 对应于CCP1和CCP2的输入输出设置,应设置为输出形式,即TRISC的bit2:1=00。

2.2.2 SPWM波形产生的实现过程

    软件控制PIC单片机使之产生SPWM波形?首先将之前设置的寄存器值写入相关寄存器,当PIC的PWM功能开启后TMR2从0开始计数,同时CCP模块引脚输出高电平。

    当TMR2≥CCPR1L时,PWM功能引脚开始输出低电平。

    当TMR2≥PR2时,则TMR2=0,重新开始另一个周期计数,PWM功能引脚开始输出高电平。同时TMR2的中断标志位被系统置高,即TMR2IF=1,转去执行中断服务程序。

    因实验中设置TMR2后分频为1:3,故在3个PR2周期后程序才转去执行中断服务程序。在中断服务程序中查找脉宽表,将下一个脉宽值写入寄存器CCPR1L中。下个周期输出的PWM的脉宽即为刚写入CCPR1L中的脉宽值,也就是说脉宽的变化在中断程序中实现,中断程序流程如图3所示。


图3 中断服务程序流程图

    程序中利用标志位F实现SPWM输出在CCP1和CCP2中的转换。在F=1时,CCP1输出PWM波形,CCP2设置输出为0电平;在F=0时,CCP2输出PWM波形,CCP1设置输出为0电平。

3 试验结果与分析

    由PIC单片机产生的SPWM波可由示波器测出。由于SPWM频率为20kHz,程序中又设置每3个脉宽相等,故在示波器中不能清楚地看到脉宽从最小到最大的完整的变化过程。由PIC单片机的CCP1引脚输出SPWM波形的一段如图4所示。这段波形中的脉宽由窄逐渐变宽,符合SPWM的变化规律。


图4 SPWM波形的一段

    试验中由PIC单片机的两个CCP模块产生两路SPWM波,将这两路SPWM波变换成4路后经隔离驱动逆变系统的IGBT。产生的两路SPWM波形分别对应正弦波的正负半波,完整周期的两路SPWM互补波形如图5所示。


图5 两路互补的SPWM波

    试验系统在直流电压为30V时负载运行所得正弦波如图6所示,可知周期为19.9ms,满足工频要求。


图6 负载正弦波

    试验系统为单相全桥逆变系统,这种工作模式有明显的倍频效应。倍频效应有利滤波,也可以降低器件的开关频率,减小开关损耗。又因为本试验系统采用面积等效法,相对于规则采样法谐波抑制能力较强。谐波分析后可在低电压时基本无偶次谐波,且所含奇次谐波幅值较小,能满足UPS逆变系统对谐波的要求。

4 结语

    本文介绍的基于PIC单片机的SPWM控制技术很好地把软硬件技术结合在一起,针对规则采样法谐波大的缺点,利用面积等效法较好地抑制了谐波。本文给出了具体的硬件试验系统及软件设计,分析试验结果波形后表明此方法输出谐波较小,在对输出波形质量要求较高的UPS逆变系统中有较强的实用价值。如今PIC单片机应用越来越广泛,电力电子技术发展越来越快速的阶段,这种软硬件结合的控制技术在其它很多应用领域也有较大的发展空间。

点击此处查看原文 >>

系统分类: 单片机   |    用户分类: 无分类    |    来源: 转贴

评论(0) | 阅读(41)
发表于:2008-8-27 14:50:23
标签:无标签

0

MSP430单片机中的WDT研究

  软件的可靠性一直是一个关键问题。任何使用软件的人都可能会经历计算机死机或程序跑飞的问题,这种情况在嵌入式系统中也同样存在。由于单片机的抗干扰能力有限,在工业现场的仪器仪表中,常会由于电压不稳、电弧干扰等造成死机。在水表、电表等无人看守的情况下,也会因系统遭受干扰而无法重启。为了保证系统在干扰后能自动恢复正常,看门狗定时器(Watchdog Timer)的利用是很有价值的。

1 看门狗的作用
    看门狗定时器是一个计数器,基本功能是在发生软件问题和程序跑飞后使系统重新启动。看门狗计数器正常工作时自动计数,程序流程定期将其复位清零,如果系统在某处卡死或跑飞,该定时器将溢出,并将进入中断。在定时器中断中执行一些复位操作,使系统恢复正常的工作状态,即在程序没有正常运行期间,如期复位看门狗以保证所选择的定时溢出归零,使处理器重新启动。

2 看门狗问题及相关实验
    现今市面上流行的一些单片机,多嵌有内部WDT,如TI的MSP430系列,Philips的P87XXX和P89XXX系列,Microchip的PIC列,Atmel的AT89SXX系列和Holtek公司的Htxxx系列。但是这些内部看门狗在工作时,多存在一定的误差。一些工程师在设计的过程中,由于忽略了这一点,导致系统出现异常。MSP430系列单片机是美国德州仪器公司(TI)近几年开发的新一代单片机,该系列是一款16位、具有精简指令集、超低功耗的全新概念混合型单片机。在众多单片机系列中,由于它具有极低的功耗、丰富的片内外设和方便灵活的开发手段,已成为一颗耀眼的新星。其内部自带看门狗及复位电路,理论上如果程序跑飞,可用看门狗将其复位。但在实际使用过程中,发现看门狗的作用并非万无一失,以下实验证明了这一点。
实验电路如图1所示。


实验程序清单:
#include <msp430x12x.h>
void main(void){
P1DIR l="OxOf"; //设置P1.2~P1.O为输出
for(;;){
volatile unsigned int i;
WDTCTL=WDTPW+ WDTCNTCL;
//复位WDT计数器
PIOUT==OxOt; //P1.0~P1.2相互异或
i=5000; //延时
d0(i--);
while(i!=O);
}
}
    上述实验启动后,如果程序正常运行,LED会闪烁。缺省时,MSP430的看门狗是允许状态,所运行的程序会不断地访问看门狗。理论上,这个系统是不会发生启动失败的,因为即使启动失败,看门狗也应该在数百毫秒内启动,复位整个系统。基于这种思想,对单片机的复位进行测试。K2断开,用K1连续产生。Reset信号,测试看门狗使系统重启的成功率。K2闭合,则reset端高电平,理论上K1不能有效产生复位脉冲,观察看门狗是否起作用。

3 实验结果与分析
    实验结果如下:K2断开,连续开关K1,上电重启系统,平均155次失败1次(LED不闪),即看门狗失效概率0.6%;K2闭合,连续开关K1,平均18次失败1次(LED不闪),且一旦失败,将连续失败下去,看门狗无效率占到了约5.5%。

    另外,当采用同样具有内置看门狗的其他系列单片机替代实验中的MSP430,启动程序段作相应修改时,实验结果仍大致相同,这说明具有内置看门狗的单片机面临的问题是相同的。经分析可能有如下原因:

    ①由于看门狗的时钟不独立,计数时钟与系统为同一分频链路,因此看门狗不能在系统出现问题时有效运作。
    ②由于时钟可用软件设置,启动失败时,开机时钟可能处于空档,没有时钟看门狗不能生效。
    ③有些看门狗需要用软件设置或启动,因此启动失败后,初始化程序没有激活,CPU可能跳转到随机代码,使看门狗被禁止。这样的看门狗是需要有可靠的上电复位作保证的,因此,从理论上讲,原设计存在着不合理性。基于上述分析,采用片外看门狗专用芯片TPS3823由独立的分频振荡电路提供计数脉冲。实验电路如图2所示。


    上述电路中,TPS3823输出定时溢出信号给Reset端。程序段中,CPU要不断地通过I/O口输出喂狗信号,使看门狗计数器清零。在此电路中重复上述试验中K1、K2的相同动作,系统重启成功率达到100%。

结 语
    未来的内置看门狗必须有独立可靠的时钟。系统上电后,看门狗即为允许状态,无需软件设置,它只能被外部硬件跳线或内部熔丝(fuse)所禁止。目前,如果要求设计可靠性较高的嵌入式系统,外置看门狗是必须考虑的。内置看门狗的另一问题是系统复位后,程序应判断是由Reset端正常上电复位,还是程序跑飞看门狗所致,由此确定现场数据是否应该保留。这也是在看门狗应用中所应考虑的。

点击此处查看原文 >>

系统分类: 单片机   |    用户分类: 无分类    |    来源: 无分类

评论(0) | 阅读(16)
发表于:2008-8-20 17:09:11
标签:无标签

0

常用的几种码制转换

#include <reg51.h>
#include <intrins.h>
#include <stdio.h>
#include <ctype.h> 

/**电子进修此宏定义摘自51bbs Youth发表***/
#define LongToBin(n) \
(\
((n >> 21) & 0x80) | \
((n >> 18) & 0x40) | \
((n >> 15) & 0x20) | \
((n >> 12) & 0x10) | \
((n >> 9) & 0x08) | \
((n >> 6) & 0x04) | \
((n >> 3) & 0x02) | \
((n ) & 0x01) \
)

#define Bin(n) LongToBin(0x##n##l)

/********** HEX转BCD******/
/***bcd_data(<0x255,>0)***/
unsigned char BCD2HEX(unsigned int bcd_data)
{
unsigned char temp;
temp=((bcd_data>>8)*100)|((bcd_data>>4)*10)|(bcd_data&0x0f);
return temp;
}
/********** HEX转BCD******/
/***hex_data(<0xff,>0)****/
unsigned int HEX2BCD(unsigned char hex_data)
{
unsigned int bcd_data;
unsigned char temp;
temp=hex_data%100;
bcd_data=((unsigned int)hex_data)/100<<8;
bcd_data=bcd_data|temp/10<<4;
bcd_data=bcd_data|temp%10;
return bcd_data;
}

void main(void)
{
unsigned int c;

c= Bin(10101001); // then c = 0xA9
c=BCD2HEX(0x255); //255 转成HEX为0xff
c=HEX2BCD(0xff); //0xff 转成BCD码为 255
}
-----afei 

点击此处查看原文 >>

系统分类: 单片机   |    用户分类: 无分类    |    来源: 原创

评论(0) | 阅读(68)
发表于:2008-8-20 17:07:47
标签:无标签

0

w77858或80c302的c51头文件

w77858或80c302的c51头文件

内有详细寄存器介绍
/*--BYTE Registers-------------------------*/
sfr P0 = 0x80;
sfr P1 = 0x90;
sfr P2 = 0xA0;
sfr P3 = 0xB0;
#define p0 P0