雷竞技注册

微控制器原则

数字电路

  • 问题1

    阅读下面的引文,然后研究这个术语微控制器看它对Quote有什么相关性:

    我大约20年前在纽约希尔顿举行的第一台电脑会议。当有人预测微处理器市场最终会在数百万里,别人说:“他们都去哪儿了?这不像你在每一个Doorknob中需要一台电脑!“ 多年以后,我又回到了同一家旅馆。我注意到房间钥匙已经换成了电子卡片,你可以把卡片插进门上的槽里。 每个门窗里有一台电脑。- Danny Hillis.
    揭示答案
  • 问题2

    一种微控制器单元, 或者单片机是一种专门的数字计算机,用于提供自动排序或系统控制。微控制器与普通数字计算机的不同之处在于它非常小(通常是一个单一集成电路芯片),有几个专用的引脚用于数字信号的输入和/或输出,并且内存有限。编入微控制器内存的指令告诉它如何对输入条件作出反应,以及发送什么类型的信号到输出。

    微控制器的最简单的信号“理解”是离散电压电平:在芯片上的指定引脚上测量的“高”(大约V)或“低”(大致地电位)。微控制器内部的晶体管在输出引脚中产生这些“高”和“低”信号,它们由SPDT开关为简单的SAKE建模的动作:



    可以对微控制器进行编程为模拟数字逻辑门(以及,或,NAND,NOR等)的功能,除了各种组合和多脉线功能之外。微控制器可以做的是存储器的唯一真实限制是存储器(可以存储程序中的大量)和MCU芯片上的输入/输出引脚。

    然而,微控制器本身是由数千(或数百万)个逻辑门电路组成的。为什么使用微控制器来执行逻辑功能,它的一小部分组成门可以直接完成?换句话说,当人们可以用更少的门电路来建立他们所需要的逻辑网络时,为什么还要费心去给微控制器编程来执行数字功能呢?

    揭示答案
  • 问题3.

    一个学生决定用一个微控制器来建造一个闪光电路,而不是555定时器或其他一些硬接线的不稳定电路。不幸的是,有些地方出了问题。第一次通电时,LED灯亮1秒,然后熄灭,永不再亮。LED重新亮起的唯一方式是MCU复位或电源循环关闭并亮起:



    Pseudocode列表将PIN0声明为输出

    开始

    设置PIN0高

    暂停1秒

    设置PIN0 LOW.

    结尾

    一位同学在被请求帮助时,修改了程序列表,并通过编程电缆从正在编辑程序的个人电脑重新发送到微控制器。程序列表现在是这样的:

    Pseudocode列表将PIN0声明为输出

    环形

    设置PIN0高

    暂停1秒

    设置PIN0 LOW.

    endloop.

    使用新程序重置MCU时,LED开始闪烁打开和关闭。。。有点。LED大多数时间是“开启”,但一旦每秒都关闭,然后立即回来。事实上,“关闭”时期是如此简短,它几乎没有明显。

    这个学生想要的是50%的占空比:“开”1秒,然后“关”1秒,无限重复这个循环。首先说明同学程序修改的意义,然后再修改程序列表,让LED做学生想做的事情。

    揭示答案
  • 问题4.

    学生决定使用微控制器构建光闪光灯电路。LED仅在按下按钮开关时才能闪烁和关闭。当释放交换机时,它应该关闭:



    Pseudocode列表将PIN0声明为输出

    将Pin1声明为输入

    虽然pin1很高

    设置PIN0高

    暂停0.5秒

    设置PIN0 LOW.

    暂停0.5秒

    ENDWHILE

    只要按住MCU通电或重置时,只要按住PUSHBUTTON开关即可,LED闪烁即可。一旦开关释放,LED就会关闭,从未重新启动。如果在启动期间从未按下交换机,则LED永远不会出现!解释发生的事情,并根据需要修改程序以解决此问题。

    揭示答案
  • 问题5.

    检查以下示意图和程序列表(以“伪代码”而非正式编程语言编写),以确定在此微控制器单元中正在实现哪种类型的基本逻辑功能:



    Pseudocode列表将PIN0声明为输出

    将PIN1和PIN2声明为输入

    环形

    如果PIN1高,请设置PIN0高

    elestif pin2高,设置pin0高

    否则设置PIN0低

    ENDIF

    endloop.

    揭示答案
  • 问题6.

    检查以下示意图和程序列表(以“伪代码”而非正式编程语言编写),以确定在此微控制器单元中正在实现哪种类型的基本逻辑功能:



    Pseudocode列表将PIN0声明为输出

    将PIN1和PIN2声明为输入

    环形

    如果PIN1低,请将PIN0低

    ELSEIF Pin2为LOW,则设置Pin0为LOW

    否则设置PIN0高

    ENDIF

    endloop.

    揭示答案
  • 问题7.

    检查以下示意图和程序列表(以“伪代码”而非正式编程语言编写),以确定在此微控制器单元中正在实现哪种类型的基本逻辑功能:



    Pseudocode列表将PIN0声明为输出

    将PIN1和PIN2声明为输入

    环形

    如果Pin1为“低”,则将Pin0设置为“高”

    ELSEIF Pin2为LOW,则将Pin0设置为HIGH

    否则设置PIN0低

    ENDIF

    endloop.

    揭示答案
  • 问题8.

    检查以下示意图和程序列表(以“伪代码”而非正式编程语言编写),以确定在此微控制器单元中正在实现哪种类型的基本逻辑功能:



    Pseudocode列表将PIN0声明为输出

    将PIN1和PIN2声明为输入

    环形

    如果PIN1高,请设置PIN0低电平

    ELSEIF Pin2为高,则Pin0为低

    否则设置PIN0高

    ENDIF

    endloop.

    揭示答案
  • 问题9.

    检查以下示意图和程序列表(以“伪代码”而非正式编程语言编写),以确定在此微控制器单元中正在实现哪种类型的基本逻辑功能:



    Pseudocode列表将PIN0声明为输出

    将PIN1和PIN2声明为输入

    环形

    若Pin1和Pin2相同,则将Pin0设置为“LOW”

    否则设置PIN0高

    ENDIF

    endloop.

    揭示答案
  • 问题10.

    一种微控制器是一种专用类型的数字计算机,用于提供系统的自动排序或控制。微控制器与普通数字计算机的不同之处在于它非常小(通常是一个单一集成电路芯片),有几个专用的引脚用于数字信号的输入和/或输出,并且内存有限。编入微控制器内存的指令告诉它如何对输入条件作出反应,以及发送什么类型的信号到输出。

    微控制器的最简单的信号“理解”是离散电压电平:在芯片上的指定引脚上测量的“高”(大约V)或“低”(大致地电位)。微控制器内部的晶体管在输出引脚中产生这些“高”和“低”信号,它们由SPDT开关为简单的SAKE建模的动作:



    它不需要许多想象力来可视化微控制器如何在实际系​​统中使用:根据输入引脚和/或时间条件打开和关闭外部设备。示例包括器具控制(烤箱定时器,温度控制器),汽车发动机控制(燃料喷射器,点火正时,自诊断系统)和机器人(伺服驱动,感官处理,导航逻辑)。事实上,如果你住在一个工业化的国家,你可能拥有几十个微控制器(嵌入各种设备),甚至没有意识到这一点!

    但是,微控制器的实际限制之一是它们的低输出驱动电流限制:通常小于50 mA。微控制器的内部电路的小型化禁止包含具有任何显着额定功率的输出晶体管,因此我们必须将晶体管连接到输出引脚,以驱动任何显着的负载。

    假设我们希望用一个微控制器驱动一个需要2安培24伏特电流的直流驱动电磁阀。一个简单的解决方案是在微控制器和电磁阀之间使用一个NPN晶体管作为“插入”装置,就像这样:



    不幸的是,单个BJT不提供足够的电流增益来致动电磁阀。通过微控制器引脚的输出电流和仅为25的β(典型的电源晶体管),这仅提供大约500 mA到电磁阀。

    对此问题的解决方案涉及两个双极晶体管达林顿对安排:



    然而,还有另一种解决方案——用一个MOSFET来替换单个BJT,它完全不需要驱动电流。说明如何做到这一点:



    揭示答案
  • 问题11.

    微控制器用于为AC负载提供自动功率因数校正:



    检查此示意图,然后回答以下问题:

    单片机如何感知交流负载的功率因数?
    微控制器可以通过其四个输出引脚进行多少个离散步骤?
    MCU的输出是什么,以校正负载图15安培与滞后功率因数0.77?假设线频率为60hz,并使用一种校正算法进行最佳调整滞后功率因数(即它永远不会过于纠正并产生前导功率因数)。
    使用这些电容器后,修正后的(总)功率因数是多少?
    揭示答案
  • 问题12.

    该微控制器被编程为通过PIN 0输出的脉冲宽度调制(PWM)控制来改变LED的感知亮度:



    Pseudocode列表将PIN0声明为输出

    将X声明为整数变量

    环形

    设置PIN0 LOW.

    暂停100 - x微秒

    设置PIN0高

    暂停x微秒

    endloop.

    确定价值X必须以80%设置LED的亮度,以及PWM信号的频率是多少。

    揭示答案
  • 问题13.

    许多微控制器都配有内置的PWM功能,这样你就不必自己编写自定义的PWM算法。这一事实表明脉宽调制作为一种控制方案的流行。解释为什么PWM如此流行,并给出一些如何使用它的实际例子。

    揭示答案
  • 问题14.

    脉宽调制(PWM)不仅适用于用微控制器产生模拟输出,而且也适用于通过只处理开-关(高-低)数字电压水平的引脚接收模拟输入。下面的电路将模拟电压信号送入比较器,产生PWM,然后将该PWM信号发送到微控制器的输入端:



    Pseudocode列表将PIN0声明为输入

    声明Last_Pin0为布尔变量

    将Time_High声明为整数变量

    将Time_Low声明为整数变量

    将DUTED_CYCLE声明为浮点变量

    将Time_High和Time_Low都设置为0

    环形

    设置Last_Pin0等于Pin0

    如果PIN0高,则递增Time_high

    如果PIN0低,则递增Time_low

    如果last_pin0不等于pin0,则转到子程序

    endloop.

    子例程

    设置职责等于(time_high /(time_high time_low))

    将Time_High和Time_Low都设置为0

    返回调用循环

    tendubroutine.

    解释这个程序是如何工作的。提示:last_pin0.布尔变量用于检测何时的状态Pin0已从0变为1或1到0。

    揭示答案
  • 问题15.

    数字计算机与外部设备通过港口:通常以4,8,16或更多组排列的终端(4位= 1)nybble., 8位= 1字节,16位= 2个字节)。这些终端可以被设置为高或低的逻辑状态,通过为计算机编写一个程序,发送一个数值到端口。例如,这是一个微控制器被指示发送十六进制数的图解F3港口A和2C到B港:



    假设我们希望在八步序列中使用PORT A(引脚7,6,5和4)的较高四位,以驱动步进电机的线圈:

    步骤1:
    0001.
    步骤2:
    0011
    第3步:
    0010
    第4步:
    0110.
    步骤5:
    0100.
    步骤6:
    1100
    第7步:
    1000
    第8步:
    1001.

    当每个引脚走高,它驱动功率MOSFET上,它发送电流通过相应的线圈步进电机。按照下图所示的“移位”顺序,电机将在每个周期内旋转少量。

    以十六进制方式,写要发送到端口A的必要的数字序列,以生成这个特定的位移位顺序。保持端口A的低四位都处于低逻辑状态。

    揭示答案
  • 问题16.

    检查以下示意图和程序列表(以“伪代码”而非正式编程语言编写),以确定在此微控制器单元中正在实现哪种类型的基本逻辑功能:



    Pseudocode列表将PIN0声明为输出

    将PIN1和PIN2声明为输入

    环形

    如果PIN1与PIN2相同,请设置PIN0高

    否则设置PIN0低

    ENDIF

    endloop.

    揭示答案
  • 问题17.

    数字计算机与外部设备通过港口:端子组通常按4组、8组、16组或更多组排列。这些终端可以被设置为高或低的逻辑状态,通过为计算机编写一个程序,发送一个数值到端口。例如,这是一个微控制器被指示发送十六进制数的图解2B.港口A和A9到B港:



    假设我们希望使用每个端口的前七位(引脚0到6)来驱动两个7段,共阴极显示器,而不是使用BCD-to-7段解码器IC:



    在端口A和B处写出要输出的必要的十六进制值,以在两个7段显示单元中生成显示“42”。

    揭示答案
  • 问题18.

    在基于网格的显示器中驱动像素的一种方法是将像素组织成行和列,然后通过特定行线和特定列线的交叉点选择用于照明的单独像素。在此示例中,我们通过微控制器的两个8位(1字节)端口控制了8×8网格的LED:



    注意A.在Port B的PIN中需要状态,以激活一行,以及低的激活柱子需要端口A的一个引脚的状态,因为LED的阳极连接端口A, LED的阴极连接端口B。

    确定我们需要在端口A和B处输出的十六进制代码,以激励8×8电网的远左下角的LED。

    PORT A =

    港口B =

    揭示答案
  • 问题19.

    检查以下示意图和程序列表(以“伪代码”而非正式编程语言编写),以确定在此微控制器单元中正在实现哪种类型的基本逻辑功能:



    Pseudocode列表将PIN0声明为输出

    将Pin1、Pin2和Pin3声明为输入

    环形

    如果PIN1高,请设置PIN0高

    elestif pin2高,设置pin0高

    ELSEIF Pin3为高,请将Pin0设置为高

    否则设置PIN0低

    ENDIF

    endloop.

    揭示答案
  • 问题20.

    学生建立一个微控制器电路,用于打开LED一次,用于输入开关的每五个动力。电路很简单,使用条件循环的微控制器每次按下交换机时都会增加变量:



    Pseudocode列表将PIN0声明为输出

    将Pin1声明为输入

    将X声明为整数变量

    环形

    虽然pin1很高

    添加1到x(x = x 1)

    ENDWHILE

    如果x等于5,请将pin0设置为高并设置x到0

    否则设置PIN0低

    ENDIF

    endloop.

    不幸的是,程序没有按照计划执行。LED不是每五个开关启动一次,而是在开关释放时随机启动。有时,LED在第一个开关驱动后就会打开,而其他时候,需要推5次以上的开关才能打开。

    经过一些仔细的分析,它发生在学生中,问题在于尽管环形。由于微控制器比人类的手要快得多,因此该循环执行多次,而交换机被按下而不是一次,这意味着变量X对于每个开关致动,从0到5次计数。那么,它只是偶然的X等于5尽管循环退出。

    学生需求的是切换只能递增1,仅用于关闭开关转换:在积极的边缘输入脉冲的。问题是如何使用编程来做到这一点。

    另一个学生,当面对同样的问题时,选择用这种方法来解决,而且效果很好:

    Pseudocode列表将PIN0声明为输出

    将Pin1声明为输入

    声明作为布尔(0或1)变量切换

    将Last_Switch声明为布尔(0或1)变量

    将X声明为整数变量

    环形

    设置Last_Switch等于交换机

    设置开关等于PIN1

    如果switch = 1 and last_switch = 0,则添加1到x(x = x 1)

    别的什么都不做x

    ENDIF

    如果x等于5,请将pin0设置为高并设置x到0

    否则设置PIN0低

    ENDIF

    endloop.

    解释这个程序如何成功增量X只有在按钮交换机的每次离外转换,而其他程序增量X在整个过程中快速按下按钮开关。

    揭示答案