郭天祥51单片机电子元件篇
1 运放电路
基础知识
- 放大倍数
倍数 = OUTPUT / INPUT - 增益(单位:分贝dB)
- 电压(电流)的增益 = 20lg(倍数)
- 功率的增益 = 10lg(倍数)
我们希望输入阻抗高,而输出阻抗低。原因见书本9.4电压跟随器最后一段。
如果有如下极端考虑:当输入阻抗很高时,相当于对前级电路开路;当输出阻抗很低时,相当于给后级电路一个恒压源,即输出电压不受后级电路阻抗的影响。对前级电路相当于开路,输出电压又不受后级阻抗影响的电路也就具备了隔离作用,即使前、后级电路之间互不影响。
1.1 反向放大器
原理图
- 单电源运放反向放大器电路
- 双电源运放反向放大器电路
- 单电源运放反向放大器电路
输入与输出的关系
- 推荐的放大倍数$A_{u}<30dB$(约33倍)其中,$R{1}\in[1,20]k\Omega$,$R{f}\in[1R{1},33R{1}]$。如果放大倍数超过33倍,超出运放的线性范围,不可取。
1.2 同向放大器
- 原理图
- 输入与输出的关系
1.3 电压跟随器
原理图
输入与输出的关系
特点:输入高阻抗(对前级开路),输出低阻抗(对后级相当于恒压源)——可以起到缓冲、隔离、提高带载能力的作用。
1.4 加法器
原理图
输入与输出的关系
- 特点
- 反向放大器的一种形式,注意事项与反向放大电路相同,各输入之间互不影响,求和或取平均的功能容易实现。
1.5 差分放大器
解释:一种将两个输入端电压的差以一固定增益放大的电子放大器。
原理图
输入与输出的关系
通用公式
当$R_1 = R_3$且$R_2 = R_4$时,有
作用
- 差分对单端的转换——将双端的差动信号转换为单端信号
- 抑制共模信号
特点
- 是求和电路的发展,与反向放大器有内在联系
- 使用时尽量使电路对称,否则共模抑制比大幅降低
1.6 微分器
参考
原理图
输入与输出的关系
特别的,微分器对高频噪声敏感,因此需要对其添加高频衰减网络如图9.7.2所示。
1.7 积分器
原理图
- 积分器必须加入初始化电路(S置于1),以给电路创造积分的初始条件。
- 当S置于2时,输出是输入信号电压幅度对时间的积分与一个常数之积
输入与输出的关系
1.8 比较器
比较器是将一个模拟电压信号与一个基准电压相比较的电路。
1.8.1 简单电压比较器
过零比较器(阈值电压(基准电压)$U_{TH}=0V$ —— 当输入电压从负到正,等于0时,输出电压跳变)
- 如果在输出端接两个稳压二极管,则可将输出高低电平稳定在$\pm U_z$
- 如果在输出端接两个稳压二极管,则可将输出高低电平稳定在$\pm U_z$
电压比较器(阈值电压(基准电压)$U_{TH}=U_r$ —— 当输入电压从负到正,等于$U_r$时,输出电压跳变)
1.8.2 滞回比较器(施密特触发器)
- 原理图及特性曲线
输入的$U_i$逐渐增大或逐渐减小时,有两个阈值使输出$U_o$跳变,且它们不相等。
- 各元件电气参数之间的联系
设$Ur$是某一固定电压,改变$U_r$值能改变阈值及回差大小。$U{oH} = +Uz$为输出高电平,$U{oL} = -U_z$为输出低电平,则
- 作用
- 提高了电路的抗干扰能力;$\Delta U_{TH}$越大,抗干扰能力越强。
- 能将连续变化的周期信号变换为矩形波
2 常用电子元件
3 直流稳压电源
直流稳压电源是将交流电转变为稳定的、输出功率符合要求的直流电的设备。
包含电源变压器、整流电路、滤波电路和稳压电路四格部分。
原理图:
3.1 整流电路
整流电路的功能是利用二极管的单向导电性将正弦交流电压转换成单向脉动电压。
单向桥式整流电路的原理图
其中,$D_1$、$D_3$和$D_2$、$D_4$两两轮流导通——$D_1$、$D_3$导通时,$D_2$、$D_4$截止,反之亦然。技术指标
整流电路的技术指标包括整流电路的工作性能指标和整流二极管的性能指标。
整流电路的工作性能指标有输出电压$U_o$和脉动系数S。
关于脉动系数,书中如是说:图21.1.3中整流输出电压波形中包含的若干偶次谐波分量称为纹波,它们叠加在直流分量上。我们把最低次谐波幅值与输出电压平均值之比定义为脉动系数。全波整流电压的脉动系数约为0.67,故需用滤波电路滤除$U_o$中的纹波电压。
二极管的性能指标有流过二极管的平均电流$TD$和所承受的最大反向电压$U{DRM}$。
常见整流电路原理图、整流电压波形和计算公式如下
3.2 滤波电路
包括负载并联电容滤波、负载串联电感滤波以及符合滤波,书中主要介绍了电容滤波。
3.2.1 电容滤波
如下图所示,电容C并联于负载$R_L$之上。
滤波过程摘录如下(书P354下方起):
电气特性:
输出电压$U_o$的大小与元件的选择
输出电压的大小(输入输出关系)
C的选择
- 二极管的最高反向工作电压都是$\sqrt{2} U_2$;电容器一般在几十微法到几千微法,耐压也应为$\sqrt{2} U_2$。
- 电容滤波电路结构简单,输出电压较高,脉动较小,但电路的带负载能力不强,因此电容滤波通常适合在小电流,且变动不大的电子设备中使用。
3.2.2 电感滤波
输入输出关系
特点:
优点:整流管的导电角较大(电感L的反电势使整流管导电角增大),峰值电流很小,输出特性比较平坦。
缺点:铁芯存在笨重、体积大的问题,易引起电磁干扰,一般只适用于大电流的场合。
3.2.3 复合式滤波
- LC适用于高频或负载电流较大并要求脉动很小的电子设备中
- 进一步提高输出电压的平滑性
- $\pi RC$在小功率电子设备中广泛采用。
3.3 稳压电路
4 STC8系列单片机
5 电机
5.1 直流电机
通常有3种驱动方式,书中主要讲了使用达林顿驱动器,如上图ULN2803所示。
每一个io口控制一个电机,通过调节不同占空比的PWM波形来控制电机转速。
所述占空比为,高电平持续时间在一个周期时间内的百分比。
通过延时控制高低电平时间 或 使用PWM控制器
示例:
1 | // P392节选 |
5.2 步进电机
5.2.1 工作原理
- 将电脉冲信号转变为角位移或线位移的开环控制元件。
- 电机的转速和停止位置只取决于脉冲信号的频率和脉冲数
步进电机的正反转由励磁脉冲产生的顺序来控制;每出现一个脉冲,步进电机只走一步;
假设旋转一圈需要200和脉冲信号来励磁,可以计算出每个励磁信号使步进电机前进1.8°。- 如图所示六线四相步进电机
- 如图所示六线四相步进电机
励磁方式
- 一相励磁:在每一瞬间,步进电机只有一个线圈导通;正向励磁顺序为1->2->3->4,4回到1.
- 二相励磁:……,……有两个线圈同时导通;正向励磁顺序为1->2->3->4,4回到1.
- 一-二相励磁:一相励磁和二相励磁交替导通;正向励磁顺序为1->2->3->4->5->6->7->8,8回到1.
5.2.2 六线四相步进电机与单片机连接
1、原理图
2、一相励磁示例代码节选(书P399)
1 | //... |
5.3 舵机(伺服机)
5.3.1 工作原理
- 通过控制pwm的占空比来改变舵机的位置(如图24.3.4所示)。
- 产生基本pwm周期信号
- 调整脉宽
单片机控制单个舵机的原理
单片机控制单个舵机比较简单,利用一个定时器即可。假设仅控制舵机5个角度转动其控制思路如下:
只利用一个定时器T0,定时时间为0.5ms;定义一个角度标识(jd,有几次0.5ms),数值可以为1、2、3、4、5,实现 0.5、1、1.5、2、2.5 ms 高电平的输出;再定义一个变量(count,当前第几个0.5ms),数值最大为 40,实现周期为 20ms。
每次进入定时中断,判断此时的角度标识,进行相应的操作。比如,此时为5,则进入前5次中断期间,信号输出为高电平,即为2.5ms的高电平;剩下的35 次中断期间,信号输出为低电平,即17.5ms的低电平。总的时间是 20 ms,为一个周期。
5.3.2 舵机与单片机连接
- 原理图
- 示例代码节选(P407)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64// 主要理解jd和count的含义
//...
void Time0_init()
{
TMOD = 0x01; // 定时器0工作在t1方式
IE = 0x82;
TH0 = 0xfe;
TL0 = 0x33; // 0.5ms
TR0=1;
}
void Time0_int() interrupt 1
{
TH0 = 0xfe;
TL0 = 0x33; // 0.5ms
if(count < jd) // 判断0.5ms的次数是否小于角度标识
pwm = 1; // 确实小于,则继续输出高电平
else
pwm = 0;
count = (count +1); // 0.5ms次数+1
count = count % 40; // 次数始终保持在40内,即保持周期为20ms
}
void keyscan() // 按键扫描——人为控制舵机角度加减
{
if(jia == 0) // "加"按键按下
{
delay(10);
if(jia == 0)
{
jd++; // jd*0.5ms的高电平,控制舵机角度变大
count=0; // 按键按下,则20ms周期重新开始
if(jia == 6) jia = 5; // 已是108°,则保持
while(jia == 0); // 等待按键放开
}
}
if(jian == 0)
{
delay(10);
if(jian == 0)
{
jd--;
count = 0;
if(jd=0) jd =1;
while(jian == 0);
}
}
}
//...
void main()
{
jd = 1;
count = 0;
Time0_init();
while(1)
{
keyscan();
//...
}
}
- 补充:控制8个舵机(P406第二段)