基于微控制器的系统设计
微处理器和微控制器可以用来设计一些工具或系统来执行一些特殊任务。使用微控制器,我们可以制作不同类型的模块或系统。以下是一些可以使用微控制器设计的系统列表:
电子投票机
基于RFID的访问控制系统
心率监测系统
自动植物浇水系统
超声波测距系统
水位控制系统
燃气泄漏检测系统
频率计
温度测量系统
还有许多其他可以使用微控制器制作的系统。
为了设计一个系统,我们必须遵循一些基本步骤。我们必须设计系统的概述,以及一些功能模块设计,以便轻松构建系统。然后,我们必须设计电路图,并在进行一些计算后应用元件值。然后,在检查整个电路图之后,最后我们应该开始实际工作。在这个阶段,我们将使用所需的组件来实现电路。
在本文中,我们将了解如何使用微控制器设计数字转速表。这里我们使用的是Intel 8051微控制器。
转速表基本上是一个可以测量某些旋转轮、圆盘、轴等的每秒转数的系统。我们的转速表可以以每秒1转的精度测量高达每秒255转的转速。
现在让我们看看这个数字转速表的电路图。
我们可以将此电路分为几个部分。在第一部分中,我们将了解电路如何物理地获取信息。有两个组件Q4和D4。Q4是一个光电晶体管(2N5777),D4是一个红色LED。如果光线进入这个光电晶体管,它的集电极电流会降至0。首先,我们必须在轴上安装一个旋转圆盘,上面有一个冲孔。当圆盘旋转时,LED安装在圆盘的上部,光电晶体管安装在下部。当圆盘处于同一条线上时,光线照射到光电晶体管上,集电极电流下降到零。下图显示了使用示波器观察到的情况。
在下一部分中,我们可以看到电路中有一个运算放大器(OPAMP)。对于运算放大器,我们使用了LM234芯片。该芯片包含四个运算放大器,但这里我们只使用了一个。在这个电路中,运算放大器连接为电压比较器。这里的参考电压为3.5V。因此,如果光电晶体管的输出电压大于3.5V,则它将产生高脉冲,否则将产生0电平信号。从这个比较器我们将得到前面输出的方波脉冲。
从这个下降沿我们可以理解孔已经出现,所以有一次旋转。这个时钟脉冲被送入微控制器。此信号可用于计算旋转次数。
在第三部分,微控制器正在工作。这个微控制器同时执行两项任务。这两项任务是:
计算来自比较器输出的负边沿的数量。
进行必要的数学运算,并在七段显示阵列上显示计数。
为了计算转速,我们使用了8085的两个定时器(Timer0和Timer1)。这里Timer1配置为自动重载8位计数器,用于将进入的零的数量存储到Timer0中。Timer0设置为16位定时器,它为Timer1计数生成必要的1秒时间跨度。
8051数字转速表程序
ORG 000H MOV DPTR,#LUT ; Loads the address of LUT to DPTR MOV P1,#00000000B ; Sets P1 and P0 as an output port MOV P0,#00000000B MAIN: MOV R6,#14D SETB P3.5 MOV TMOD,#01100001B ; Sets Timer1 as Mode2 & Timer0 as Mode1 timer MOV TL1,#00000000B ; loads starting value to TL1 MOV TH1,#00000000B ; loads starting value to TH1 SETB TR1 ; starts Timer1 (counter) BACK: MOV TH0,#00000000B ; loads starting value to TH0 MOV TL0,#00000000B ; loads starting value to TL0 SETB TR0 ; starts Timer0 HERE: JNB TF0,HERE ; checks for Timer 0 roll over CLR TR0 ; stops Timer0 CLR TF0 ; clears Timer Flag 0 DJNZ R6,BACK CLR TR1 ; stops Timer1 (counter) CLR TF0 ; clears Timer Flag 0 CLR TF1 ; clears Timer Flag 1 ACALL DLOOP ; Calls subroutine DLOOP for displaying the count SJMP MAIN ; jumps back to the main loop DLOOP: MOV R5,#100D BACK1: MOV A,TL1 ; loads the count to the accumulator MOV B,#100D DIV AB ; isolates the first digit of the count SETB P1.0 ACALL DISPLAY ; converts the 1st digit to 7 seg-display pattern MOV P0,A ; puts the pattern to Port 0 ACALL DELAY ; 1mS delay ACALL DELAY MOV A,B MOV B,#10D DIV AB ; isolates the second digit of the count CLR P1.0 SETB P1.1 ACALL DISPLAY ; converts the 2nd digit to 7 seg-display pattern MOV P0,A ACALL DELAY ACALL DELAY MOV A,B ; Loads the last digit of the count to accumulator CLR P1.1 SETB P1.2 ACALL DISPLAY ; converts the 3rd digit to 7 seg-display pattern MOV P0,A ACALL DELAY ACALL DELAY CLR P1.2 DJNZ R5,BACK1 ; repeats the subroutine DLOOP 100 times RET DELAY: MOV R7,#250D ; Subroutine to generate 1mS delay DEL1: DJNZ R7,DEL1 RET DISPLAY: MOVC A,@A+DPTR ; gets 7 seg digit drive pattern for current value in A CPL A RET LUT: DB 3FH ; Look up table for 7-seg-display DB 06H DB 5BH DB 4FH DB 66H DB 6DH DB 7DH DB 07H DB 7FH DB 6FH END