找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3603|回复: 0
打印 上一主题 下一主题
收起左侧

单片机智能升旗系统设计 带ISD4004语音,MC3479驱动步进电机 附程序+电路图

[复制链接]
跳转到指定楼层
楼主
ID:494149 发表于 2019-3-21 23:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
随着电子技术的发展,各种各样的系统越来越接近自动化了,本系统设计一套采用智能升旗系统来代替人工的系统,并解决演奏速度不同步的问题,将使操作起来非常方便,能大大提高了质量和效率。
该系统以Atmel公司生产的AT89S52单片机为核心,利用ISD4004作为语音存储芯片,实现长时间的存储语音,利用MC3479驱动步进电机,准确完成
实验效果表明:系统可全自动的实现升旗,同时完成语音播放,具有方便实用价值,具有一定经济价值。

2系统方案设计              1

2.1 系统总体方案
2.2 系统功能介绍              2
2.3 主控芯片介绍              2
3 硬件系统设计              3

3.1硬件设计思路              3
3.2模块电路设计              3
3.2.1显示模块              4
3.2.2语音模块              5
3.2.3语音放大模块
3.2.4电机驱动模块              6
3.2.5电源模块              7
3.2.6控制模块              8
4 软件系统的设计

4.1 软件系统组成
4.2键盘显示软件设计
4.3步进电机程序设计              10
4.4语音程序设计              11
5 总结              12

附录1系统原理图              14
附录2系统部分软件              15
附录3系统实物图              19

本系统以Atmel公司生产的AT89S52单片机为核心,实现了在自动升旗过程,脱离了传统的人工,只需控制按键就可以完成全过程,操作方便、快捷。系统功能齐全,既可当作实验系统提供给学生用,如高校实验室使用;又可添加部分硬件构成其他工业应用产品。系统可以实现室内外自动升旗、解决大家在操作时候带来的不便,完成时菜单操作简单。而且,我们在实际设计中还预留了很多的功能接口,以便于系统功能的扩展,如利用传感器检测环境变化实现自动化。因此,系统的使用性和多功能性得到了很好的体现。

2.1 系统总体方案
本系统的开发以为单片机为控制核心,综合考虑了单片机的性能、系统成本及使用人群等方面的因素。同时也语音播放的效果,设计出一种经济、实用且功能强大的升旗系统。系统由JTAG接口、语音回放、键盘、显示、功率放大等模块构成。系统框图如图2.1所示。


图2.1
2.2 系统功能介绍
通过以上方案,系统能够完成如下功能:键盘输入,键盘是一个系统和外界交互的桥梁,键盘部分实现了键盘的控制的输入;显示,和键盘一样,显示模块在人机交互时发挥着不可忽视的作用,该部分完成了单片机系统内部数据的输出显示;语音播放是升旗中不可缺少的部分,通过ISD4004实现语音的回放功能,由于系统的语音芯片输出功率大小不够,通过TDA2030语音放大模块实现语音的放大,应用喇叭输出;同时利用MC3479芯片驱动步进电机,实现自动升旗的效果,通过对步进电机的控制,可以准确的实现对高度的控制,通过对电机的计算可以实现对高度的测量,以便显示当前的高度。

2.3 主控芯片介绍
本设计中用的单片机是Atmel公司生产的AT89S52单片机。它是一个低功耗,高性能CMOS 8位单片机,片内含4k Bytes ISP的可反复擦写1000次的Flash只读程序存储器,器件采用Atmel公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元。AT89S52具有如下特点:40个引脚,4k Bytes Flash片内程序存储器,128 bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。 此外,AT89S52设计和配置了振荡频率可为0Hz并可通过软件设置省电模式。空闲模式下,CPU暂停工作,而RAM定时计数器,串行口,外中断系统可继续工作,掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。同时该芯片还具有PDIP、TQFP和PLCC等三种封装形式,以适应不同产品的需求。

3 硬件系统设计
3.1硬件设计思路
为迎合本产品的设计目的,我们以Atmel公司廉价的AT89S51/52为核心,来构建一个廉价的自动控制系统。要求方便操作,所以本系统将采用按键操作,以实现操作简单,为设计方便,用模块化设计。设一块主模块,若干实验子模块,主模块的引脚尽量由用接口引出,根据系统的要求,如果在主模块上不方便实现,选用相应的子模块与主模块接上,进行实验本系统要求要有明确的设计思路,不追求主模块的全面性,考虑在主模块上保留不占I/O口电路的同时,对不易于在主模块上设计的电路部分按子模块设计。这样的设计能使电路更容易的升级,只要增加相应的电路子模块即可。本系统的设计的创新点也在于此——追求系统的方便性。

3.2模块电路设计
3.2.1 显示模块
键盘和显示往往是一个控制系统的重要部分,同时也是最难做的一部分。在本系统中,为了节约端口,同时简化程序编写和保证系统工作的稳定性,我们采用了键盘和传口输入,并口输出芯片74LS164,提供串人——并出的原理,其图3.2.1如下:   



图3.2.1
3.2.2 语音模块
   系统采用语音回放芯片ISD4004, ISD4004系列工作电压3V,单片录放时间8至16分钟,音质好,适用于移动电话及其他便携式电子产品中。芯片采用CMOS技术,内含振荡器、防混淆滤波器、平滑滤波器、音频放大器、自动静噪及高密度多电平闪烁存贮阵列。芯片设计是基于所有操作必须由微控制器控制,操作命令可通过串行通信接口(SPI或Microwire)送入。芯片采用多电平直接模拟量存储技术, 每个采样值直接存贮在片内闪烁存贮器中,因此能够非常真实、自然地再现语音、音乐、音调和效果声,避免了一般固体录音电路因量化和压缩造成的量化噪声和"金属声"。采样频率可为 4.0,5.3,6.4,8.0kHz,频率越低,录放时间越长,而音质则有所下降,片内信息存于闪烁存贮器中,可在断电情况下保存100年(典型值),反复录音10万次。下面对ISD4004的引脚说明:制输入口依次为:SS,MOSI,MISO,RAC,INT,SCLK,VCC,GND。
片选(SS):此端为低,即向该ISD4004 芯片发送指令,两条指令之间为高电平。
串行输入(MOSI):此端为串行输入端,主控制器应在串行时钟上升沿之前半个周期将数据放到本端,供ISD 输入。
串行输出(MISO):ISD 的串行输出端。ISD 未选中时,本端呈高阻态。
串行时钟(SCLK):ISD 的时钟输入端,由主控制器产生,用于同步MOSI 和MISO 的数据传输。
数据在SCLK 上升沿锁存到ISD,在下降沿移出ISD。
行地址时钟(RAC):漏极开路输出。每个RAC 周期表示ISD 存储器的操作进行了一行(ISD4004系列中的存贮器共2400 行)。该信号保持高电平的时间为175ms,低电平时间为25ms。在快进模式,RAC 可保持高电平218.75μs,低电平31. 25μs。该端可用于存储管理技术。
中断(INT):本端为漏极开路输出。ISD 在任何操作(包括快进)中检测到EOM或IVF 时,本端变低并保持。中断状态在下一个SPI周期开始时清除。中断状态也可用RINT 指令读取。
ISD的工作电压是3V,模块中加了分压电路,电源输入5V。
信号输入有两个端口,一个是MIC输入,另一个是模拟信号直接输入。模块采用单端输入,信号由耦合电容输入,最大幅度为峰峰值32mV。
其原理图3.2.2如下:
图3.2.2

3.2.3 语音放大模块
     本系统采用语音放大芯片TDA2030,其原理如图3.2.3所示下:
图3.2.3
3.2.4 电机驱动模块
  系统采用MC3479来驱动步进电机,下面对MC3479的驱动模块做如下说明,MC3479适用于驱动两相电机(四线和六线,尤其适用于四线,),此模块用于驱动我们实验室两相四线的42BYGH103电机。实验室的六线电机还需要调整一下接线,并把两个抽头悬空。该芯片输入端TTL和 CMOS 兼容。
P1_0输出低电平时电机正转,输出高电平时反转。P1_1输出低电平时全步运行,高电平时半步运行。通过读P1_2若为低电平可以知道电机运行到初始A相状态。P1_3输出阻抗选择控制端(只在半步方式有效) , 输入低电平时输出端为高阻抗状态, 输入高电平时输出端为低阻抗状态。P1_7输出一个高电平即可把电机置位到时A相初始状态,就是复位。每次运行前最好先复位,以使运行更精确。在P1_7和6脚之间串联的电阻可以确定芯片的输出电流,其关系为。


我们的模块中设置R=120K,即输出电流为109mA。P1_5为时钟输入。全步状态时,每个时钟电机运行一步,最高频率833Hz。半步状态时,每个时钟电机运行半步,最高频率1250Hz。
应用中的注意点:
1、步进电机应用于低速场合---每分钟转速不超过1000转,(0.9度时6666PPS),最好在1000-3000PPS(0.9度)间使用,可通过减速装置使其在此间工作,此时电机工作效率高,噪音低。
2、步进电机最好不使用整步状态,整步状态时振动大。
3、由于历史原因,只有标称为12V电压的电机使用12V外,其他电机的电压值不是驱动电压伏值,可根据驱动器选择驱动电压(建议:57BYG采用直流24V-36V,86BYG采用直流50V,110BYG采用高于直流80V),当然12伏的电压除12V恒压驱动外也可以采用其他驱动电源,不过要考虑温升。
4、转动惯量大的负载应选择大机座号电机。
5、电机在较高速或大惯量负载时,一般不在工作速度起动,而采用逐渐升频提速,一电机不失步,二可以减少噪音同时可以提高停止的定位精度。
6、高精度时,应通过机械减速、提高电机速度,或采用高细分数的驱动器来解决,也可以采用5相电机,不过其整个系统的价格较贵,生产厂家少,其被淘汰的说法是外行话。
7、电机不应在振动区内工作,如若必须可通过改变电压、电流或加一些阻尼的解决。
8、电机在600PPS(0.9度)以下工作,应采用小电流、大电感、低电压来驱动。
其原理图如下:
图3.2.4
3.2.5 电源模块
  由于系统需要不同的工作电压,因此本系统利用多稳压芯片来实现多电压,首先通过L7812得到稳定的+12V输出,经过滤波后输入到L7805实现+5V电压输出,由于ISD4004工作在+3V电压,所以系统经过LM317可调稳定输出+3V电压,其原理图如下:
图3.2.5
3.2.6 控制模块
   系统采用AT89S52作为控制模块,该芯片前面已经做了详细的说明,这里略到芯片的说明,其原理图如下:
图3.2.6



                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             4 软件系统的设计

4.1 软件系统组成
通过应用C51程序设计的基本的语音和控制程序,各模块源程序的程序设计如下模块所示,各程序设计目的:基本I/O口实验,通过单片机并口的输入、输出功能特点。中断优先级等,实现对各系统的控制。键盘扫描,可以了解扫描操作。实现控制操作。语音控制程序采用先录音再放音的原理。电机控制程序利用先对电机初始化,然后对电机实现转速的控制。显示程序,通过先计算出系统的转数,然后转化为高度,通过串口送数显示。
所有程序均采用标准C语言编写,并加入了适当的注释,增强了程序的可读性和可移殖性。

4.2 键盘显示软件设计
74LS164是一片具有串行接口输入,并行接口输出的芯片,通过从串口连续送8个数据,此时从并口输出数据到数码管显示,其程序框图如4.2.1下所示:
         
                               图4.2.1


  4.3 步进电机程序设计
系统通过对MC3479的操作来实现对电机控制,首先程序对MC3479初始化,将其对应的因脚置电位,让电机先从A相位开始转动。以便对转数的计算,以二相反应式步进电机为例:它的定子上有二磁极,每一对磁极上绕着一相绕组,绕组通电时,这两个磁极的极性相反;二相绕组接成星形,转子铁心及定子极靴上有小齿,定转子齿距通常相等。转子铁心上没有绕组,转自的齿数为40,相邻两个齿之间夹角为9o。当某一相绕组通电时,由于定转子上有齿和槽,所以当转子齿的相对位置不同时,在磁场的作用下,转子将转动一个角度,使转子和定子的齿相互对齐,这就是使步进电机旋转的原因。
步进电机的运转始由脉冲信号控制.通过改变各相通电的次序可以调整步进电机的运转方向。如图4.3.1为步进电机流程图。
图4.3.1步进电机程序流程图

4.4 语音程序设计
  系统采用先对ISD4004初始后,先从地址0000H开始录音,持续一段时间后,根据控制操作实现放音操作,放音从开始录音的地方,连续的播放,直到遇到停止操作,否则一直播放下去,直到最后一个录音地址。其程序流图如下:
               
图4.4.1
5 总结
此开发系统采用Atmel公司生产的AT89S52单片机为核心,通过语音与电机驱动与一体,结构逐步扩展功能模块,采用分开设计,分开调试,然后再进行整机调试和整合的开发方式,成功的实现了各功能。虽然此系统在功能实现了智能升旗的作用,但开发系统还存在一些不足,如:没有合理利用传感器等。
总之,该实验系统还是有许多可取之处的:结构简单而功能丰富。
经过此次硬件系统的设计,不仅对所学专业知识巩固和加深了一遍,更重要的是提高了自己的工程应用能力和科技论文撰写水平,同时更加深刻体会到仅仅拥有理论知识是远远不够的,只有在实践中不断探索,才能真正体会到理论的精华所在,只有将理论和实践有机的结合起来,才能真正掌握知识。

单片机源程序:
  1. #include "reg51.h"
  2. #include "intrins.h"

  3. sbit _cs = P1^6;
  4. sbit _sclk= P1^5;
  5. sbit _mosi= P3^1;
  6. sbit _miso= P3^0;
  7. sbit _rac = P1^7;
  8. sbit _int = P3^2;


  9. void delay(unsigned int i) //延时程序
  10. {
  11.   while(i--);
  12. }

  13. void stopmode() //停止
  14. {
  15.   unsigned char m,i,j;
  16.      _cs=1;
  17.      _sclk=0;
  18.      _cs=0;

  19.      m=0x30;
  20.    for(i=0;i<8;i++)
  21.   {
  22.       m=_cror_(m,1);
  23.       j=m<<1;
  24.       _mosi=CY;
  25.      _sclk=0;
  26.      _sclk=1;
  27.    }
  28. _cs=1;
  29. }
  30. void powerdown() //下电
  31. {
  32.    unsigned char m,i,j;
  33.   _cs=1;
  34.   _sclk=0;
  35.   _cs=0;

  36.    m=0x10;
  37. for(i=0;i<8;i++)
  38.    {
  39.      m=_cror_(m,1);
  40.      j=m<<1;
  41.       _mosi=CY;
  42.       _sclk=0;
  43.       _sclk=1;
  44.     }
  45.   _cs=1;
  46. }

  47. void powerup() //上电
  48. {
  49. unsigned char m,i,j;
  50.      _cs=1;
  51.      _sclk=0;
  52.      _cs=0;

  53.     m=0x20;
  54.    for(i=0;i<8;i++)
  55.    {
  56.         m=_cror_(m,1);
  57.         j=m<<1;
  58.         _mosi=CY;
  59.         _sclk=0;
  60.         _sclk=1;
  61.      }
  62.   _cs=1;
  63. }
  64. void record4004(unsigned int address) //录音 address--录音地址 0---2400
  65. {
  66. unsigned char i,m,j;
  67. unsigned int datasoute=0;


  68.        powerup();
  69.        delay(5118);//上电延时
  70.        powerup();
  71.        delay(5118);//上电延时
  72.        delay(5118);//上电延时
  73.      _cs=1;
  74.      _sclk=0;
  75.      m=0xa0;
  76.     _cs=0;
  77. for(i=0;i<16;i++)
  78. {
  79.   address=_iror_(address,1);
  80.   datasoute=address<<1;
  81.    _mosi=CY;
  82.    _sclk=0;
  83.   _sclk=1;
  84.   }
  85. for(i=0;i<8;i++)
  86. {
  87.   m=_cror_(m,1);
  88.   j=m<<1;
  89.   _mosi=CY;
  90.   _sclk=0;
  91.   _sclk=1;
  92. }
  93.    _cs=1;
  94.    _sclk=0;
  95.    m=0xb0;
  96.   _cs=0;

  97. for(i=0;i<8;i++)
  98. {
  99.   m=_cror_(m,1);
  100.   j=m<<1;
  101.   _mosi=CY;
  102.   _sclk=0;
  103.   _sclk=1;
  104. }
  105.   _cs=1;
  106.   P0=0xff;
  107.   datasoute=0;
  108. while(_int==1) //存储地址换行标志
  109. {
  110. if(_rac) {delay(20000); datasoute++; } //记录本次录音所占的行数(也就是本次录音有多大)
  111. if(P1^3==0)break;
  112. }
  113. }//while end;

  114. void audioout(unsigned int address) //放音程序
  115. {
  116.    unsigned char i,m,j;
  117.    unsigned int datasoute;

  118.     powerup();
  119.    _cs=1;
  120.    _sclk=0;
  121.    _cs=0;
  122.    m=0xe0;
  123. for(i=0;i<16;i++)
  124. {
  125.   address=_iror_(address,1);
  126.   datasoute=address<<1;
  127.   _sclk=0;
  128.   _mosi=CY;
  129.   _sclk=1;
  130. }
  131. for(i=0;i<8;i++)
  132. {
  133.   m=_cror_(m,1);
  134.   j=m<<1;
  135.   _sclk=0;
  136.   _mosi=CY;
  137.   _sclk=1;
  138. }

  139.   _cs=1;
  140.   _sclk=0;
  141.   m=0xf0;
  142.   _cs=0;
  143. for(i=0;i<8;i++)
  144. {
  145.   m=_cror_(m,1);
  146.    j=m<<1;
  147.    _sclk=0;
  148.    _mosi=CY;
  149.   _sclk=1;
  150. }
  151. _cs=1;

  152.   P0=0xff;
  153. while(_int==1)
  154. {;
  155. }//while end;
  156. }
复制代码


附录3系统部分实物图
  • 控制系统



完整的Word格式文档51黑下载地址:
http://www.51hei.com/bbs/dpj-153860-1.html


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表