0 卖盘信息
BOM询价
您现在的位置: 首页 > 电子资讯 >设计应用 > 基于51单片机的设计(花样流水灯、交通灯控制系统、变频调速控制系统、呼吸灯)

基于51单片机的设计(花样流水灯、交通灯控制系统、变频调速控制系统、呼吸灯)

来源:
2024-01-10
类别:设计应用
eye 1
文章创建人 拍明芯城

  基于51单片机设计的花样流水灯设计

  一、项目介绍

  花样流水灯是一种常见的LED灯效果,被广泛应用于舞台表演、节日庆典、晚会演出等场合。在现代智能家居、电子产品中,花样流水灯也被广泛使用,通过调整亮灭顺序和时间,可以实现各种炫酷的灯光效果,增强用户体验。而51单片机作为一种常见的嵌入式开发平台,具有体积小、功耗低、可编程性强等优点,非常适合用于开发花样流水灯及其他嵌入式应用。

image.png

  以下场景中流水灯得到了广泛的应用:

  舞台表演:花样流水灯可用于舞台背景、音乐MV等场合,配合音乐和舞蹈,营造出炫酷、动感的视觉效果。

  节日庆典:在传统节日如春节、中秋节等场合,花样流水灯可以用于灯笼、彩灯等装饰,为节日增添喜庆氛围。

  晚会演出:在各种晚会、派对、聚会等场合,花样流水灯可以用于舞台效果、音乐灯光秀等,增强整个活动的氛围和趣味性。

  智能家居:花样流水灯可以使用在居家灯光控制中,实现远程控制、定时开关、自动调节等功能,提升居住环境的科技感和人性化。

  二、设计原理

  2.1 基本原理

  花样流水灯是一种常见的LED灯效果,通常由多个LED灯组成,通过控制每个LED灯的亮灭顺序和时间,实现花样流水灯的效果。在51单片机中,可以使用定时器和端口控制来实现这一效果。

  2.2 硬件搭建

  为了实现花样流水灯,需要将多个LED灯按照一定的顺序连接到51单片机的IO引脚上。电路设计上,为每个LED灯配备一个电阻,并将它们连接到5V电源引脚和地线上。

  具体硬件搭建方法如下:

  (1)将多个LED灯依次连接起来组成一个电路链,将第一个LED的正极接到P1.0口,第二个LED的正极接到P1.1口,第三个LED的正极接到P1.2口,以此类推,一共连接7个LED灯。

  (2)为每个LED灯配备一个适当的电阻,用来限制电流,防止损坏LED。

  (3)将每个LED的负极连接到5V电源引脚附近的地线上,形成一个完整的电路。

  2.3 软件实现

  在软件实现上,使用51单片机的定时器和端口控制来控制LED灯的亮灭顺序和时间。

  具体方法如下:

  (1)设置一个计数器变量count,用来保存当前亮起的LED灯的编号(从0开始)。

  (2)在定时器中断处理函数中,每次计数器溢出时,将当前亮起的LED灯熄灭,并将count加1;当count等于LED灯总数时,将count重置为0。

  (3)然后,再将下一个LED灯亮起,以此类推。

  (4)通过控制定时器的计数周期和每个灯亮起的时间,可以调整花样流水灯的效果。

  三、代码实现

  3.1 流水灯代码实现1

  #include

  #define LED_NUM 8 // LED灯总数

  #define TIMER_TICK 500 // 定时器计数初值,控制亮灭时间

  #define HIGH 0 // 高电平

  #define LOW 1 // 低电平

  unsigned int count = 0;

  // 定时器中断处理函数

  void TimerInterrupt() interrupt 1

  {

  static unsigned long tick = 0;

  tick++;

  if (tick >= TIMER_TICK)

  {

  P1 &= ~(1 << count); // 熄灭当前LED

  count++; // 切换到下一个LED

  if (count >= LED_NUM)

  {

  count = 0; // 重置计数器

  }

  P1 |= (1 << count); // 亮起下一个LED

  tick = 0; // 重置计时器

  }

  }

  // 主函数

  void main()

  {

  unsigned int i;

  P1 = 0xFF; // 所有IO口初始化为高电平

  TMOD |= 0x01; // 定时器0,模式1,16位自动重载

  TH0 = (65536 - TIMER_TICK) / 256;

  TL0 = (65536 - TIMER_TICK) % 256;

  ET0 = 1; // 定时器中断允许

  EA = 1; // 总中断允许

  TR0 = 1; // 定时器开始计数

  while (1)

  {

  // 等待中断事件

  }

  }

  3.2 流水灯实现效果2

  【1】逐个点亮

  #include

  void Delay(unsigned int t) // 延时函数

  {

  unsigned int i, j;

  for (i = 0; i < t; i++)

  for (j = 0; j < 125; j++);

  }

  void main()

  {

  while (1)

  {

  unsigned char i; // 定义计数器i

  for (i = 0; i < 8; i++) // 循环8次,依次点亮LED灯

  {

  P0 = ~(1 << i); // 通过位运算生成控制信号,输出到P0口,控制LED灯点亮

  Delay(500); // 延时500ms

  }

  }

  }

  【2】逐个熄灭

  #include

  void Delay(unsigned int t) // 延时函数

  {

  unsigned int i, j;

  for (i = 0; i < t; i++)

  for (j = 0; j < 125; j++);

  }

  void main()

  {

  while (1)

  {

  unsigned char i; // 定义计数器i

  for (i = 7; i < 8; i--) // 循环8次,依次熄灭LED灯

  {

  P0 = ~(1 << i); // 通过位运算生成控制信号,输出到P0口,控制LED灯熄灭

  Delay(500); // 延时500ms

  }

  }

  }

  【3】来回流动

  #include

  void Delay(unsigned int t) // 延时函数

  {

  unsigned int i, j;

  for (i = 0; i < t; i++)

  for (j = 0; j < 125; j++);

  }

  void main()

  {

  while (1)

  {

  unsigned char i; // 定义计数器i

  for (i = 0; i < 8; i++) // 循环8次,依次点亮LED灯

  {

  P0 = ~(1 << i); // 通过位运算生成控制信号,输出到P0口,控制LED灯点亮

  Delay(500); // 延时500ms

  }

  for (i = 6; i > 0; i--) // 循环6次,依次熄灭LED灯

  {

  P0 = ~(1 << i); // 通过位运算生成控制信号,输出到P0口,控制LED灯熄灭

  Delay(500); // 延时500ms

  }

  }

  }

  3.3 闪光灯的实现

  下面是三个不同的闪光灯效果的代码,分别为常亮、快闪和慢闪。

  【1】常亮闪光灯

  #include

  sbit LED = P1 ^ 0;

  void main() {

  while (1) {

  LED = 0; // LED常亮

  }

  }

  【2】快闪闪光灯

  #include

  sbit LED = P1 ^ 0;

  void delay(unsigned int i) {

  while (i--);

  }

  void main() {

  while (1) {

  LED = 0; // LED亮

  delay(50000); // 延时一段时间

  LED = 1; // LED灭

  delay(50000); // 延时一段时间

  }

  }

  【2】慢闪闪光灯

  #include

  sbit LED = P1 ^ 0;

  void delay(unsigned int i) {

  while (i--);

  }

  void main() {

  while (1) {

  LED = 0; // LED亮

  delay(100000); // 延时一段时间

  LED = 1; // LED灭

  delay(100000); // 延时一段时间

  }

  }

  以上三个代码中,都使用了P1口的第0位来控制LED灯的亮灭。其中,第一个代码是常亮闪光灯,只需要将LED置为0。第二个代码是快闪闪光灯,使用了一个delay函数来实现延时,每次延时50000个时钟周期,即约为500ms。第三个代码是慢闪闪光灯,与第二个代码类似,只是将延时时间改为了100000个时钟周期,即约为1s。

  基于51单片机的交通灯控制系统设计

  第一章 硬件设计与原理

  以AT89C51单片机为核心,起着控制作用。系统包括数码管显示电路、复位电路、时钟电路、发光二级管电路和按键电路。设计思路分为六个模块:复位电路、晶振电路模块、AT89C51、数码管显示电路、发光二级管电路和按键电路这六个模块。

  1.2 硬件设计分析

  1.2.1 电源的设计

  系统电源使用直流5伏。

  由电脑USB接口提供电源。

  USB是通用串行总线(Universal Serial Bus)接口的简称。它是目前使用比较广泛的电脑接口之一,主要版本有1.0、1.1和最新的2.0三种版本。根据USB总线的工业标准,它可以提供额定功率为5V/500mA的电源供USB设备使用。

  1.2.2 单片机最小系统

  51单片机是对目前所有兼容intel 8031指令系统的单片机的统称。该系列单片机的始祖是intel的8031单片机,后来随着技术的发展,成为目前广泛应用的8为单片机之一。单片机是在一块芯片内集成了CPU、RAM、ROM、定时器/计数器和多功能I/O口等计算机所需要的基本功能部件的大规模集成电路,又称为MCU。51系列单片机内包含以下几个部件:

  一个8位CPU;一个片内振荡器及时钟电路;

  4KB的ROM程序存储器;

  一个128B的RAM数据存储器;

  寻址64KB外部数据存储器和64KB外部程序存储空间的控制电路;

  32条可编程的I/O口线;

  两个16位定时/计数器;

  一个可编程全双工串行口;

  5个中断源、两个优先级嵌套中断结构。

  如图1-2-1所示为AT89C51单片机基本构造,其基本性能介绍如下:

  AT89C51本身内含40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中端口,3个16位可编程定时计数器,2个全双工串行通信口,STC89C51RC可以按照常规方法进行编程,但不可以在线编程。其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。

  AT89C51的主要特性如下表所示:

  AT89C51为40脚双列直插封装的8位通用微处理器,采用工业标准的C51内核,在内部功能及管脚排布上与通用的8xc52相同,其主要用于会聚调整时的功能控制。功能包括对会聚主IC内部寄存器、数据RAM及外部接口等功能部件的初始化,会聚调整控制,会聚测试图控制,红外遥控信号IR的接收解码及与主板CPU通信等。主要管脚有:XTAL1(19脚)和XTAL2(18脚)为振荡器输入输出端口,外接12MHz 晶振。RST/Vpd(9脚)为复位输入端口,外接电阻电容组成的复位电路。VCC(40脚)和VSS(20脚)为供电端口,分别接+5V电源的正负端。P0~P3 为可编程通用I/O脚,其功能用途由软件定义,在本设计中,P0端口(32~39脚)被定义为N1功能控制端口,分别与N1的相应功能管脚相连接,13脚定义为IR输入端,10脚和11脚定义为I2C总线控制端口,分别连接N1的SDAS(18脚)和SCLS(19脚)端口,12脚、27脚及28脚定义为握手信号功能端口,连接主板CPU的相应功能端,用于当前制式的检测及会聚调整状态进入的控制功能。

  P0口:P0口是一组8位漏极开路型双向I/O 口,也即地址/数据总线复用口。作为输出口用时,每位能吸收电流的方式驱动8个TTL逻辑门电路,对端口P0写“1”时,可作为高阻抗输入端用。在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。在Flash 编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。

  P1口:P1是一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。与AT89C51不同之处是,P1.0和P1.1还可分别作为定时/计数器2 的外部计数输入(P1.0/T2)和输入(P1.1/T2EX)。Flash编程和程序校验期间,P1接收低8位地址。

  P2口:P2是一个带有内部上拉电阻的8 位双向I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口P2写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVX @DPTR指令)时,P2口送出高8位地址数据。在访问8位地址的外部数据存储器(如执行MOVX @RI指令)时,P2口输出P2锁存器的内容。Flash编程或校验时,P2亦接收高位地址和一些控制信号。

  P3口:P3口是一组带有内部上拉电阻的8位双向I/O口。P3口输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对P3口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。此时,被外部拉低的P3口将用上拉电阻输出电流(IIL)。P3口除了作为一般的I/O口线外,更重要的用途是它的第二功能P3口还接收一些用于Flash 闪速存储器编程和程序校验的控制信号。

  RST:复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。

  ALE/PROG:当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。一般情况下,ALE仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个AL脉冲。对Flash存储器编程期间,该引脚还用于输入编程脉冲(PROG)。如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。该位置位后,只有一条 MOVX 和MOVC指令才能将ALE激活。此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE禁止位无效。

  PSEN:程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT89C51由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲。在此期间,当访问外部数据存储器,将跳过两次PSEN信号。

  EA/VPP:外部访问允许。欲使CPU仅访问外部程序存储器(地址为0000H—FFFFH),EA端必须保持低电平(接地)。需注意的是:如果加密位LB1被编程,复位时内部会锁存EA端状态。如EA端为高电平(接Vcc端),CPU则执行内部程序存储器中的指令。Flash存储器编程时,该引脚加上+12V的编程允许电源Vpp,当然这必须是该器件是使用12V编程电压Vpp。

  XTAL1:振荡器反相放大器的及内部时钟发生器的输入端。

  XTAL2:振荡器反相放大器的输出端。

  单片机最小系统说明:

  时钟信号的产生:在MCS-51芯片内部有一个高增益反相放大器,其输入端为芯片引脚XTAL1,其输出端为引脚XTAL2。而在芯片的外部,XTAL1和XTAL2之间跨接晶体振荡器和微调电容,从而构成一个稳定的自激振荡器,这就是单片机的时钟振荡电路。

  时钟电路产生的振荡脉冲经过触发器进行二分频之后,才成为单片机的时钟脉冲信号。

  一般地,电容C2和C3取30pF左右,晶体的振荡频率范围是1.2-12MHz。如果晶体振荡频率高,则系统的时钟频率也高,单片机的运行速度也就快。

  单片机复位使CPU和系统中的其他功能部件都处在一个确定的初始状态下,并从这个状态开始工作。单片机复位条件:必须使9脚加上持续两个机器周期(即24个振荡周期)的高电平。

  1.2.3 显示系统

  数码管是一种半导体发光器件,其基本单元是发光二极管。

  数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);按能显示多少个“8”可分为1位、2位、4位等等数码管;按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。当某一字段的阴极为高电平时,相应字段就不亮。。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。当某一字段的阳极为低电平时,相应字段就不亮。

  数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数字,因此根据数码管的驱动方式的不同,可以分为静态式和动态式两类。

  1) 静态显示驱动:静态驱动也称直流驱动。静态驱动是指每个数码管的每一个段码都由一个单片机的I/O端口进行驱动,或者使用如BCD码二-十进制译码器译码进行驱动。静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O端口多,如驱动5个数码管静态显示则需要5×8=40根I/O端口来驱动(要知道一个89C51单片机可用的I/O端口才32个呢),实际应用时必须增加译码驱动器进行驱动,增加了硬件电路的复杂性。

  2) 动态显示驱动:数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。

  本设计中数码管采用的是动态驱动方式。

  1.2.4 发光二级管电路

  1.2.5 按键电路

  第二章 软件设计与分析

  2.1 软件设计的组成

  该系统由延时子函数、数码管显示子函数、定时器0中断子函数、主函数和数据定义这几部分组成。

  //----------------------------------------------------------------------//

  上传过程感觉繁琐,里面可能有不全面的地方,请见谅。下面的是实现的目的。以及电路原理图

  **本次设计的主要目的是设计一个城市十字路口的交通灯控制系统,设计中将交通灯控制系统分为东西方向(主干道)和南北方向(次干道)两个方向,且在东西南北四个路口的每个路口设置红、绿、黄三个交通信号灯(用发光二极管模拟)和一个二位的LED数码显示管。设计的要求是规定在每一段时间内东西和南北两个方向中只有一个方向能够通行,另一个方向处于禁行状态,然后在经过一段时间后,禁行的方向和通行的方向互相转换状态,原来通行的状态变禁行状态,原来禁行的状态变为通行状态,如此循环下去。详细过程如下图2-1:

  状态① 状态②

  状态①:东西方向的交通灯黄灯闪烁3秒后,红灯熄灭,绿灯点亮(东西方向允许车辆和行人通行),同时南北方向绿灯熄灭,红灯点亮(南北方向禁止车辆和行人通行),LED数码管倒计时显示40秒,在倒计时3秒时进入状态②。

  状态②:南北方向黄灯闪烁3秒后,红灯熄灭绿灯点亮(南北允许车辆和行人通行);同时东西方向绿灯熄灭,红灯点亮

  (东西方向禁止车辆和行人通行),LED数码管倒计时显示40秒,在倒计时3秒时进入状态①。

  接下来在没有人为干涉下将会一直按照上述进行循环。设计中还外设6个按键实现对交通灯控制系统的调控作用。

image.png

  采用AT89C51单片机设计的变频调速控制系统

  摘 要:本文介绍了一种由AT89C51单片机为主控制器的变频调速系统,采用SA8281作为正弦波发生器。主回路采用交-直-交电压型变频电路。在论述系统的硬件结构及软件设计基础之上,并给出了主要程序的流程图。实践表明:该系统可靠性高,组配灵活,具有很好的应用前景。

  1.概述

  在电气传动领域中,随着自关断器件技术水平的不断提高,脉宽调制技术(简称PWM技术)也日趋成熟。PMW交流变频调速以其高效率、高功率因数、输出波形好、结构简单等优点,在井下风机、水泵、造纸机等设备中得到了广泛的应用。将单片机应用于交流变频调速系统,可有效地避免传统调速方案中的一些缺点,达到了提高控制精度的目的[1],其特点:

  (1)采用单片机可以使绝大多数控制逻辑通过软件实现,简化了电路。

  (2)单片机具有更强的逻辑功能,运算速度快,精度高,有大容量的存储单元,可以实现较为复杂的控制。

  (3)无零点漂移,控制精度高。

  (4)可以提供人机界面,多机连网工作。

  根据国内外有关变频调速的最新研究成果及研究动向,参阅大量的文献、资料,本着先进性与成熟性兼顾、标准化、可靠性、连续性、及时性的系统设计原则,设计了如图1所示的系统结构框图。

  整个电路分为三大部分:主回路、驱动电路以及用单片机控制PWM产生器的控制电路,另外还有过流检测和保护电路,这样使得系统工作更稳定、可靠。

  2.系统主回路设计

  2.1整流滤波电路的设计

  为了给逆变器提供一个稳定的直流电压,需要将电网输入的交流电进行整流。通常整流电路可分为可控整流和不可控整流。可控整流可以使系统的功率因数接近l,并且具有较小的纹波,频率高,可降低较小幅值的滤波电容。但是采用可控整流电路会使得系统成本上升,并且控制电路复杂。

  目前比较经济可靠的方案,一般都是采用二极管整流,使电网功率因数与逆变输出电压无关而接近于1。在本系统中,我们采用了三相二极管不可控整流,如图2所示,采用它无需控制电路驱动,电路简单、可靠,成本低,缺点就是纹波较大,需采用较大幅值的滤波电容。

  2.2 三相逆变电路的设计

  三相交流负载需要三相逆变器,在三相逆变电路中,应用最广的是三相桥式逆变电路[2]。采用IGBT作为可控元件的电压型三相逆变电路如图3所示,可以看出电路由三个半桥组成。

  电压型三相逆变桥的基本工作方式与单相逆变桥相同,是 导电方式,即每个桥臂的导电角度为 ,同一相(同一半桥)上下两个臂交替导电,各相开始导电的时间依次相差 。这样,在任一瞬间,将有三个桥臂同时导通。可能是上面一个臂,下面两个臂,也可能是上面两个臂下面一个臂同时导通。因为每次换流都是在同一相上下两个桥臂之间进行的,因此,也被称为纵向换流。用T记为周期,只要注意三相之间互隔T/3(T是周期)就可以了,即B相比A相滞后T/3,C相又比B相滞后T/3。

  具体的导通顺序如下:

  第1个T/6:V1,V6,V5导通,V4,V3,V2截至;第2个T/6:Vl,V6,V2导通,V4,V3,V5截至;

  第3个T/6:V1,V3,V2导通,V4,V6,V5截至;第4个T/6:V4,V3,V2导通,V1,V6,V5截至;

  第5个T/6:V4,V3,V5导通,V1,V6,V2截至;第6个T/6:V4,V6,V5导通,V1,V3,V2截至。

  3 驱动电路及系统保护电路的设计

  3.1 驱动电路的设计

  作为功率开关器件,IGBT的工作状态直接关系到整机的性能,所以选择或设计合理的驱动电路显得尤为重要。采用一个性能良好的驱动电路,可使IGBT工作在比较理想的开关状态,缩短开关时间,减小开关损耗,对提高整个装置的运行效率,可靠性和安全性都有重要的意义。

  驱动电路必须具备两个功能:一是实现控制电路与被驱动IGBT栅极的电隔离;二是提供合适的栅极驱动脉冲[ 3]。

  对驱动电路的要求,可归纳如下:

  1)IGBT和MOSFET都是电压驱动,都具有一个2.5~5V值电压,有一个容性输入阻抗,因此IGBT对栅极电荷非常敏感,故驱动电路必须很可靠,要保证有一条低阻抗值的放电回路,即驱动电路与IGBT的连线要尽量短。

  2)用内阻小的驱动源对栅极电容充放电,以保证栅极控制电压Uge,有足够陡的前后沿,使IGBT的开关损耗尽量小。另外,IGBT开通后,栅极驱动源应能提供足够的功率,使IGBT不退出饱和而损坏。

  3)驱动电路要能传递几十kHz的脉冲信号。

  4)在大电感负载下,IGBT的开关时间不能太短,以限制出di/dt形成的尖峰电压,确保IGBT的安全。

  5)IGBT的栅极驱动电路应尽可能简单实用,最好自身带有对IGBT的保护功能,有较强的抗干扰能力。

  本文采用美国IR公司推出的IR21lO集成驱动器来驱动IGBT,它兼有体积小,速度快,电路简单的优点,是中小功率变换装置中驱动器件的首选品种。

  3.2 电流检测及过流保护电路

  当流过IGBT的电流过流,一旦超出安全区,IGBT将永久损坏,因此系统要设置电流过流保护电路,系统在变频器的直流部分串电流互感器将电流转换为电压信号再通过比较器比较,将过流信号检测出来后,送到SA828l的脉冲封锁端(电平信号),那么SA828l就会停止输出PWM脉冲,以保护IGBT。IGBT的过电流保护电路如图5所示。

  其中运放C814组成电压跟随器,其输入来自电流互感器的输出。两个电压比较器C271组成窗口电压比较器,比较器的输出经施密特反相器连接到与门的输入端。当IGBT没有过电流时,C814的输入电压比较低,窗口电压比较器输出高电平,因此EN信号为高电平,使IGBT驱动信号有效;反之,当IGBT过电流时,EN信号变为低电平,封锁了IGBT驱动信号而使IGBT关断,调节电位器RP,可以改变过流阀值的大小。

  过压保护电路的原理与电流保护电路类似,另外在主电路上应配装一个10A的快速熔断保险,当电路发生严重过流时,快速熔断保险烧断切断电网电源,尽可能的保证主电路的安全。

  4.控制电路软硬件设计

  三相SPWM发生器是控制电路的核心部分。在本设计中,我们选用了AT89C51单片机控制英国MITEL公司的专用集成芯片SA8281作为SPWM波形发生器,该芯片与微处理器接口方便,几乎不用加任何的逻辑电路即可构成完整的SPWM控制电路,结构紧凑,提高了系统的集成度和可靠性,利于降低成本。

  4.1 SA8281的功能介绍

  SA8281芯片是MITEL公司设计的专门为交流电机的调速控制,UPS电源以及其他需要脉宽调制作为一种有效电源控制的电力电子器件[4]。引脚如图6所示:

  它可用于三相PWM波形产生的可编程微机外围接口芯片,使用一组标准的MOTEL总线,适用于英特尔和摩托罗拉二种总线接口,接口通用性好,编程和操作简单,方便,快捷。

  SA8281采用常用的对称的双边缘采样法产生全数字化PWM波形,无时漂,无温漂,具有很高的精度和温度稳定性。

  有6个标准的TTL电平输出,用来驱动逆变器的6个功率开关器件。

  工作频率范围宽,精度高,三角载波频率可调。

  工作方式灵活,在电路不变的情况下,直接通过软件设定载波频率、调制频率、调制比、最小脉宽、死区时间等工作参数就可改变逆变器的性能指标,驱动不同负载或工作于不同工况。可通过改变输出SPWM脉冲的相序实现电机的正反转,通过调制达到输出频率为OHz而给电机绕组通一直流电,实现电机的“直流插入制动”。

  独立闭锁端可瞬时闭锁输出SPWM脉冲,可处理电机突发情况的发生。

  波形存储在内部ROM中,可以选择可删除的最小脉宽和死区时间。

  4.2 控制硬件电路的实现

  控制电路部分采用的单片机为ATMEL公司推出的AT89C51,它采用CMOS结构,耗能低,抗干扰能力强,与MCS一5l系列完全兼容,且功能比一般的51系列芯片要强大许多。其内部含有128字节的RAM和4K字节的EPROM完全满足系统需要,不用外加RAM或EPROM存放数据或程序,但需要设定和保存的参数则存放在一片EEPROM中[ 5]。

  正弦波发生器的原理图如图7所示,它以SA828l作为三相正弦波的发生芯片,单片机AT89C51作为SA8281的控制芯片。SA828l将大部分外围电路都集成在芯片内部,可以看出SA8281与微处理器接口简单,控制电路非常简单,结构紧凑,这样做从另一方面来讲对芯片工作的稳定性有很大帮助,提高了可靠性。

  从整个电路来说,实现对SA828l的控制是通过按键输入相应的信息。本电路的设计要对SA8281输入初始化参数和控制参数,所以用到了三个按键0#键、1#键和2#键。在主程序中判断键号用的是查询式,0#键按下转入初始化子程序:l#键按下转入加速子程序:2#键按下转入减速子程序。

  AT89C51是地址与数据总线复用类的单片机,为了隔离潜在的噪音干扰,设置输出断开引脚SETTRIP在通常情况下接地,同时设置了开关,便于在紧急情况下迅速关断所有PWM输出;为使PWM输出处于有效状态,输出关断引脚 接高电平。外部时钟CLK引脚接独立的12M有源晶振为SA8281芯片提供一时钟基准用于控制与PWM有关的各时序。

  4.3控制电路软件设计

  对SA8281芯片的控制是通过微处理器接口将相应的参数送入芯片内部两24位的寄存器R4、R3来实现的,它们是初始化寄存器和控制寄存器。数据先被读入一系列临时寄存器R0~R2中,然后通过一条虚拟的写操作将数据传送至相应的R4,R3寄存器。

  初始化寄存器用于设定和电机及逆变器有关的一些基本参数。在正常情况下,这些参数在电机工作前就被初始化(例.在PWM输出允许前),并且在电机工作时一般不允许改变。

  控制寄存器在工作过程中控制输出脉宽调制波的状态,从而进一步控制电机的运行,比如转速、正/反转、启动和停止等。通常在电机工作时该寄存器内容经常被改写以实现对电机的实时控制。程序流程图下面分别进行说明:

  4.3.1主程序

  主程序判断键号用的是查询式:

  O#键按下转入初始化子程序;1#键按下转入加速子程序;2#键按下转入减速子程序。

  另外为了防止误操作增加了延时去抖动的再次判断键号环节。主程序流程图如图8所示:

  4.3.2初始化子程序

  在初始化子程序要设定的是与电机和变频器有关的基本参数,包括载波频率的设定、调制波频率范围设定、脉冲延迟时间设定、最小删除脉宽的设定、调制波形选择、幅值控制设定等。

  初始化寄存器的数据先以8位格式存入临时寄存器R0,R1和R2中,然后通过虚拟写操作R4再被存入初始化寄存器。

  通常情况下,这些参数在电机工作过程中不要改变。

  4.3.3 调速子程序

  调速子程序包括加速子程序和减速子程序,本文只介绍加速子程序,减速子程序类似于加速子程序。

  控制参数包括调制波频率控制字和调制波幅值控制字,它们要通过计算求得,方法:首先根据电机的U/F曲线得到调制波的频率与幅值,然后通过公式计算出相应的控制字并制成表格,本文的程序设计中利用查表法实现两种控制参数的传送。

  5 总结

  本文中,设计变频调速控制系统时,控制芯片采用单片机AT89C51,采用SA8281作为正弦波发生器,用IR2110芯片来驱动,另外考虑到系统的稳定性,设计了系统的保护电路,这样整个系统有成本低廉,功能齐全的特点,并具有较大的实用价值。目前,我国的变频调速市场逐渐增长,需求量日益广泛。因而,对于变频调速控制系统的研究具有重要的学术意义和应用价值。

  基于51单片机设计的呼吸灯

  一、项目介绍

  呼吸灯是一种常见的LED灯光效果,它可以模拟人类呼吸的变化,使灯光看起来更加柔和和自然。51单片机是一种广泛使用的微控制器,具有体积小、功耗低、成本低等优点,非常适合用于控制LED呼吸灯。本项目的呼吸灯将使用PWM(脉冲宽度调制)技术控制LED亮度,从而实现呼吸灯的效果。

  在本项目中,将使用51单片机作为主控制器,通过编程实现呼吸灯的控制。将使用C语言编写代码,并使用Keil C51集成开发环境进行编译和调试。使用Proteus仿真软件进行电路设计和仿真,确保电路的正确性和稳定性。

  二、设计原理

  2.1 PWM技术

  PWM是脉冲宽度调制(Pulse Width Modulation)的缩写,是一种通过改变脉冲宽度来控制电路的技术。在数字电路中,PWM是一种非常常见的技术,它可以用来控制电机、LED灯等电子设备的亮度、速度等参数。

  PWM技术的基本原理是通过控制脉冲的宽度和周期来控制电路的输出。在一个PWM周期内,电路会以一定的频率(也就是PWM频率)产生一系列脉冲,每个脉冲的宽度和高电平时间占整个周期的比例是由控制器根据需要设定的。通过这种方式,可以实现对电路输出的精确控制。

  在LED呼吸灯项目中,使用定时器模拟PWM技术可以实现呼吸灯效果。具体来说,就是通过定时器产生一定频率的脉冲信号,然后通过改变脉冲的占空比来控制LED灯的亮度。当脉冲的占空比逐渐增大时,LED灯的亮度也会逐渐增强,直到达到最大亮度;当脉冲的占空比逐渐减小时,LED灯的亮度也会逐渐减弱,直到最终熄灭。这样就可以实现类似于人类呼吸的渐变效果。

  2.2 呼吸灯原理

  呼吸灯是一种将 LED 灯光做成渐变效果的技术,可以让 LED 的亮度在一定时间内慢慢地增加和减小,使得 LED 的亮度变化更加自然和柔和,适合用于需要渐变效果的场景,如灯光调节、音响节拍等。

  呼吸灯的原理是通过改变 LED 的 PWM 信号的占空比来控制 LED 的亮度。PWM(Pulse Width Modulation,脉宽调制)是一种调节模拟信号幅度的常用技术,它通过改变信号的脉冲宽度来实现对信号幅度的调节。在呼吸灯中,PWM 信号的频率较高,而占空比则会随着时间的推移而逐渐变化,从而实现 LED 亮度的渐变效果。

  呼吸灯的实现通常需要使用一个定时器和一个 PWM 模块。定时器用来定时触发中断事件,在中断处理函数中改变 PWM 信号的占空比,从而控制 LED 的亮度。在定时器中断处理函数中,可以通过数学函数(如正弦、余弦等)或者简单的数值计算来得到不同的 PWM 占空比,实现不同的呼吸灯效果。

  2.3 51单片机

  51单片机是一种广泛使用的微控制器,具有体积小、功耗低、成本低等优点,非常适合用于控制LED呼吸灯。

  STC89C52是一种基于MCS-51内核的8位单片机,由中国的STC公司生产。具有高性价比、易于编程、广泛应用等特点,在工业控制、通信、家电控制等领域得到了广泛应用。

  STC89C52单片机的主要特点如下:

  采用MCS-51内核,具有8位数据总线和16位地址总线,可以访问64KB的程序存储器和64KB的数据存储器。

  内置12MHz的晶振,可以通过软件设置分频系数来获得不同的系统时钟频率。

  具有多种外设接口,包括UART、SPI、I2C、定时器、中断等,可以方便地实现各种应用。

  支持ISP(In-System Programming)编程方式,可以通过串口或并口进行在线编程,方便快捷。

  具有低功耗模式,可以通过软件设置进入不同的睡眠模式,以节省系统能耗。

  STC89C52单片机可以使用C语言或汇编语言进行编程,编写的程序可以通过编译器生成HEX文件,然后通过编程器烧录到芯片中。由于STC89C52单片机的广泛应用和丰富的资料,因此学习和使用它相对来说比较容易。

  三、代码实现

  3.1 自动呼吸灯

  因为STC89C52单片机没有PWM输出功能,只能使用延时函数实现,以下是基于STC89C52单片机实现呼吸灯效果的完整代码:

  #include < reg52.h >

  

  #define LED P1

  

  void delay(unsigned int xms)

  {

  unsigned int i, j;

  for (i = xms; i > 0; i--)

  for (j = 110; j > 0; j--);

  }

  

  void main()

  {

  unsigned char i;

  while (1)

  {

  for (i = 0; i < 255; i++)

  {

  LED = i;

  delay(10);

  }

  for (i = 255; i > 0; i--)

  {

  LED = i;

  delay(10);

  }

  }

  }

  在这个代码中,使用了STC89C52单片机的P1口来控制LED灯的亮度。通过一个循环,让LED灯的亮度从0到255逐渐增加,再从255到0逐渐减小,这样就实现了呼吸灯的效果。

  在代码中,使用了一个delay函数来控制循环的速度。这个函数可以让程序延时一定的时间,从而控制LED灯的亮度变化速度。在这个代码中,设置了每次延时10毫秒,可以根据需要调整这个值来改变呼吸灯的效果。

  3.2 按键控制灯光亮度

  以下是基于STC89C52单片机的LED灯亮度控制完整代码,其中使用了两个按键分别控制LED的亮度和灭度。

  #include < reg52.h >

  

  #define LED P1

  

  sbit KEY_UP = P3 ^ 2;

  sbit KEY_DOWN = P3 ^ 3;

  

  unsigned char pwm = 0;

  

  void delay(unsigned int i) {

  while (i--);

  }

  

  void key_scan() {

  if (KEY_UP == 0) {

  delay(1000);

  if (KEY_UP == 0) {

  pwm += 10;

  if (pwm >= 100) {

  pwm = 100;

  }

  }

  }

  if (KEY_DOWN == 0) {

  delay(1000);

  if (KEY_DOWN == 0) {

  pwm -= 10;

  if (pwm <= 0) {

  pwm = 0;

  }

  }

  }

  }

  

  void main() {

  TMOD = 0x01; // 设置定时器0为模式1

  TH0 = 0xFC; // 定时器初值,用于产生PWM信号的频率为50Hz

  TL0 = 0x67;

  TR0 = 1; // 启动定时器0

  ET0 = 1; // 允许定时器0中断

  EA = 1; // 开启总中断

  while (1) {

  key_scan();

  }

  }

  

  void timer0() interrupt 1 {

  static unsigned char cnt = 0;

  if (cnt >= 100) {

  cnt = 0;

  }

  if (cnt < pwm) {

  LED = 0;

  } else {

  LED = 1;

  }

  cnt++;

  }

  以上代码中,使用了定时器0来产生PWM信号,控制LED的亮度。使用了两个按键来调整LED的亮度和灭度。其中,KEY_UP按键用于增加LED的亮度,KEY_DOWN按键用于减小LED的亮度。在每次定时器中断时,根据pwm的值来控制LED的亮度。当cnt小于pwm时,LED为低电平,LED亮度较高;当cnt大于等于pwm时,LED为高电平,LED亮度较低。

  采用89C51单片机设计的喷油校泵台调速系统方案

  1 引言

  燃油喷射系统的性能直接影响柴油机的工作过程和性能指标,是柴油机改善排放、降低油耗和提高性能的关键部分。传统的内燃机车柴油喷油校泵台主要用于喷油泵的磨合及性能试验,其驱动部分采用晶闸管电磁转差离合器无级调速系统,控制和显示喷油泵的主轴转速。由于采用分离元件,测试灵敏度低,设定调整不方便且故障率高。目前,国外喷油校泵台采用微机控制及数显系统。为此,按国际标准采用89C51单片机设计了一种新型的校泵台调速系统,能够实时控制主轴转速测试和调节,并将相关测量数据传输给上位PC机进行显示,从而提高测试灵敏度。

  2 系统结构设计

  该系统设计采用转速单闭环凋速系统,如图1所示。驱动电路由晶闸管和电机构成,而控制电路则由转速给定、转速反馈、比例一积分一微分(PID)调节器以及晶闸管脉冲触发电路构成。

  虚线框为软件设计部分,主要完成转速给定、转速反馈、偏差信号的形成和PID运算。

  3 系统硬件电路设计

  系统硬件设计是以89C51单片机为核心,并配以必要的外围设备,如数据采集、电气接口、执行机构、通信接口等电路,如图2所示。选用3CT20/500型晶闸管,由于晶闸管工作于交流电路,不宜与微机直接相接,采用光电耦合器4N25隔离单片机与输出部分(晶闸管一电动机电路)。输出部分的地线接地,而单片机系统的电源地线悬空,不能与交流电源的地线相接,以避免输出部分电源变化对单片机电源的影响。

  使用反相驱动器7406作为4N25输入端的驱动。电磁转差离合器中的励磁线圈采用带续流二极管的晶闸管半波整流电路供电。励磁线圈是电感性负载,线圈两端并联一只续流二极管VD6使电流平滑。调节触发装置采用单结管VBG7。为了实现操作机构的速度闭环控制,需要检测主轴转速。测速传感器采用磁电式转速传感器。测速轮有120个齿,每转过1个齿就在测速传感器上感应一个脉冲信号。这样,主轴每转一周,产生120个脉冲,其表达式为:

  式中:P为测速传感器每转输出的脉冲数;T为规定时间;m1为转速脉冲数。

  取8155的定时器/计数器工作于定时方式,定时时间为lO ms,其输入端接1 MHz时钟信号为计数频率,输出端接89C51的中断INT0申请端。89C51的定时器/计数器T1工作于计数方式,测速传感器经整形后的脉冲输入T1,当输入信号发生负跳变,计数器加1。每当10 ms到,通过INT0申请中断,在中断处理程序中得到Tl计数值。计数值再乘以50,测出电机当前转速。

  喷油校泵台动力系统的主要部件是电磁调速电动机,由单速或多速鼠笼型异步电动机和电磁转差离合器组成,通过控制器可在较大范围内实现无级调速。其转速表达式为:

  式中:n1为同步转速,r/min;f1为电源频率,Hz;p为极对数s为转差率。

  在一定的负载范围内调节励磁线圈中的励磁电流,可以调节转差率s,达到调节转速的目的。励磁电流越大,转速越高;反之则转速越低。

  4 系统软件设计

  系统软件采用模块化结构设计,主要由PC机、89C51单片机和通信3个模块组成嘲。其中PC机模块主要完成主轴转速预置及显示;通信模块实现PC机与单片机之间数据传输;89C51单片机模块完成定时采样和自动控制主轴转速。其系统软件的主程序如图3所示。主程序主要完成系统初始化、与上位机握手、接收预置参数、调用主轴转速程序、调用喷油计数程序以及调用数据采集发送程序。

  由于控制对象是具有纯滞后的一阶惯性环节,所以按要求设计为快速随动系统。为了提高跟踪的快速性,调速范围过大时,在第一拍先使控制器输出逼近给定要求,后启动PI控制算法。第一拍控制模型为:

  式中:U(T)为当前控制器输出值;U(T-1)为上一次控制器输出值;N(T)为当前控制器给定值;N(T-1)为上一次控制器给定值。

  PI控制算法的数学模型为:

  式中:Kp为比例系数;T为采样周期;Ti为积分时间常数。

  第二拍控制模型为:

  式中:K0,K1,K2,K3,P1,P2,P3为系数。

  由于加入了积分环节,影响系统的动态性能,可以消除余差,提高控制精度。

  5 结论

  该设计系统已成功应用在某内燃机车柴油机喷油泵的测试平台。研究表明,该喷油校泵台调速系统可自动控制喷油计数、主轴转速,实现量油时主轴转速的数字显示与屏幕显示,使用维修方便,从而提高检测精度和自动化程度。


责任编辑:David

【免责声明】

1、本文内容、数据、图表等来源于网络引用或其他公开资料,版权归属原作者、原发表出处。若版权所有方对本文的引用持有异议,请联系拍明芯城(marketing@iczoom.com),本方将及时处理。

2、本文的引用仅供读者交流学习使用,不涉及商业目的。

3、本文内容仅代表作者观点,拍明芯城不对内容的准确性、可靠性或完整性提供明示或暗示的保证。读者阅读本文后做出的决定或行为,是基于自主意愿和独立判断做出的,请读者明确相关结果。

4、如需转载本方拥有版权的文章,请联系拍明芯城(marketing@iczoom.com)注明“转载原因”。未经允许私自转载拍明芯城将保留追究其法律责任的权利。

拍明芯城拥有对此声明的最终解释权。

标签: 51单片机

相关资讯