1.直流电机
一、基本工作原理
直流电机是一种能量转换装置,它有两种工作模式:
- 电动机模式:消耗电能转动(如电动车电机)
- 发电机模式:转动产生电能(如风力发电机)
二、核心组成结构
固定部分(定子)
- 外壳:电机的支撑骨架
- 磁铁:产生稳定磁场(分为主磁铁和辅助磁铁)
- 电刷装置:连接外部电源的导电部件
旋转部分(转子)
- 转轴:带动外部设备旋转的轴芯
- 铁芯:安装绕组的金属支架
- 绕组:通电后产生电磁力的线圈
- 换向器:确保电流方向交替变化的装置
三、使用注意事项
电源特性
- 不需要区分正负极,直接连接直流电源即可工作
- 必须匹配额定电压(如 12V 电机不能接 24V 电源)
运行要求
- 避免长时间超载运行(会导致电机过热)
- 通过交换两根电源线即可实现正反转
典型应用
- 电动车驱动
- 小型风扇电机
- 自动门控制装置
- 发电机系统
提示:可通过观察电机铭牌获取额定参数,使用时建议搭配合适的调速电路,并注意电机散热条件。正反转切换时只需交换任意两根电源线,无需复杂操作。
四、外观、内部
外观
内部
2.ULN2003
一、为什么需要驱动芯片?
51单片机的输出能力有限(约20mA),直接连接电机等大功率设备会导致:
- 单片机烧毁
- 设备无法正常工作
因此需要专用驱动电路,开发板上的ULN2003就是为此设计的。
二、ULN2003基本功能
这是一种高电压大电流驱动芯片,内部集成7组驱动单元,每组包含:
- 两个三极管组成的达林顿管
- 2.7kΩ 输入电阻
- 续流二极管(保护电路)
.
三、核心参数
- 最大负载能力:
- 单路输出电流:500mA
- 最高工作电压:50V
- 输入兼容性:
- 可直接连接 51 单片机 IO 口
- 兼容 TTL/CMOS 电平
四、工作原理示意图
输入信号 → 内部反相器 → 达林顿管放大 → 驱动负载
(注意:输出端需外接上拉电阻才能输出高电平)
五、典型应用场景
- 继电器控制
- 步进电机驱动(如 28BYJ-48)
- 直流电机调速
- 大电流 LED 控制
- 电磁锁驱动
六、使用注意事项
-
接线规则:
- 电机正极接电源
- 电机负极接芯片输出
- 芯片电源引脚接驱动电源(与单片机电源可不同)
-
正反转控制:
- 直流电机:需配合 H 桥电路
- 步进电机:通过顺序控制四路输出
-
保护措施:
- 驱动感性负载时必须接续流二极管
- 避免长时间超负载运行
- 建议添加散热片(大电流应用时)
3.步进电机
一、步进电机的分类
1. 单极性电机(如 28BYJ-48)
- 结构特点:5 根引线(4 相 + 公共端)
- 电流方向:电流只能从公共端流向各相绕组(单行道)
- 驱动方式:通过公共端供电,控制各相轮流导通
- 优点:驱动电路简单
- 缺点:转矩较小
2. 双极性电机
- 结构特点:4 根引线(2 相)
- 电流方向:电流可双向流动(双向车道)
- 驱动方式:通过改变绕组电流方向改变磁场极性
- 优点:转矩较大
- 缺点:需专用驱动电路
二、核心驱动原理
1. 整步驱动(大步走)
- 步距角:电机每接收一个脉冲转动的角度(如 1.8°)
- 旋转方式:单相通电→换相→单相通电
- 特点:速度快但震动大
2. 半步驱动(半步走)
- 步距角减半:将整步分成两个半步(如 0.9°)
- 旋转方式:单相→双相交替通电
- 特点:运行更平稳,精度提高一倍
3. 细分驱动(微步走)
- 步距角细分:将整步分成 32/64 等份(如 0.056°)
- 控制方式:精确调节各相电流比例
- 优点:超平滑运行,定位精度大幅提升
三、关键技术参数
1. 静态指标
- 相数:电机绕组组数(常见 2/4 相)
- 步距角:每个脉冲对应转角(如 1.8°/3.6°)
- 静转矩:电机锁定时的最大扭矩(单位:N・m)
2. 动态指标
- 空载启动频率:能直接启动的最高脉冲频率
- 运行转矩特性:转速与负载的关系曲线
- 失步:因负载过大导致的脉冲丢失现象
四、28BYJ-48 电机详解
1. 核心参数
- 减速比:1:64(电机转速降低 64 倍)
- 实际步距角:5.625°/64 ≈ 0.0879°
- 转一圈所需脉冲:4096 个(360° ÷ 0.0879°)
2. 接线方式
- 5 根引线:红色(公共端)+ 黄 / 粉 / 蓝 / 橙(四相)
- 驱动电路:ULN2003 芯片 + 4 个 IO 口控制
3. 旋转方向控制
- 正转顺序:A→B→C→D
- 反转顺序:D→C→B→A
五、应用场景
- 3D 打印机喷头定位
- 智能窗帘控制
- 自动门锁系统
- 工业设备传动
- 机器人关节驱动
(提示:建议使用专用步进电机驱动器如 TB6600,可实现更高精度控制和更大转矩输出)
4.PWM脉宽调制
一、PWM 是什么?
PWM 全称脉冲宽度调制,简单来说就是:
- 数字控制模拟量的魔法:用 0 和 1 的组合来模拟各种电压值
- 电子水龙头:通过快速开关调节 "水流" 大小(电流 / 电压)
- 占空比:通电时间占整个周期的比例(类似调节水龙头开合度)
二、核心工作原理
-
方波信号:
- 高电平(ON):完全导通
- 低电平(OFF):完全断开
- 周期:完成一次开关所需时间(决定频率)
-
等效模拟信号:
- 例如要输出 1.5V:
- 5V 电压时 ON 30% 时间
- 0V 电压时 OFF 70% 时间
- 平均值 = 5V × 占空比(0.3)= 1.5V
- 例如要输出 1.5V:
-
关键参数:
- 频率:每秒开关次数(Hz)
- 占空比:ON 时间比例(0%-100%)
三、为什么需要 PWM?
传统模拟控制 | PWM 控制 |
---|---|
需复杂电路 | 仅需数字 IO |
能耗高 | 效率更高 |
响应慢 | 动态响应快 |
成本高 | 成本更低 |
四、51 单片机实现 PWM
-
定时器配置:
- 设置计数周期(决定 PWM 频率)
- 设定比较值(决定占空比)
-
简单示例:
c
sbit Motor=P1^0; unsigned char Counter,Compare; void Timer0_Init() //100us@11.0592MHz { TMOD &= 0xF0; //设置定时器模式 TMOD |= 0x01; //设置定时器模式 TL0 = 0xA4; //设置定时器初始值 TH0 = 0xFF; //设置定时器初始值 TF0 = 0; //清除TF0标志 TR0 = 1; //定时器0开始计时 ET0=1; EA=1; PT0=0; } void Timer0_Routine() interrupt 1 { TL0 = 0xA4; // 设置定时初始值 TH0 = 0xFF; // 设置定时初始值 Counter++; Counter%=100; if(Counter<Compare) { Motor=1; } else { Motor=0; } }
五、常见应用场景
-
电机调速:
- 改变占空比控制电机转速
- 优点:平滑调速、低发热
-
LED 调光:
- 高频 PWM 控制亮度
- 人眼无法分辨闪烁,看到连续调光效果
-
电源管理:
- 开关电源(SMPS)效率可达 90% 以上
- 实现降压 / 升压功能
-
温度控制:
- 调节加热丝供电时间
- 配合温度传感器实现精确控温
六、PWM 的优缺点
优点:
- 数字控制抗干扰能力强
- 高效节能
- 无需数模转换芯片
- 适用范围广
缺点:
- 高频噪声可能影响其他电路
- 需要合理设计滤波电路
- 最低频率受限于硬件性能
七、快速入门技巧
-
实验器材:
- 51 开发板
- LED + 220Ω 电阻
- 杜邦线
-
测试步骤:
- 连接 LED 正极到 P1.0
- 负极接 GND
- 烧录 PWM 控制程序
- 观察 LED 亮度变化
-
调试方法:
- 使用示波器观察波形
- 通过串口输出占空比值
- 逐步调整频率和占空比
八、生活中的 PWM
- 微波炉:通过 PWM 控制磁控管加热时间
- 电动车调速:调节电机供电脉冲宽度
- 空调温控:控制压缩机启停时间比例
- 手机快充:智能调节充电电流脉冲
(提示:掌握 PWM 技术后,可尝试结合传感器实现智能调光、温控等项目,例如制作自动亮度台灯或智能温控风扇)
5.直流电机调速
#include <REGX52.H>
#include "Delay.h"
#include "key.h"
#include "Timer0.h"
#include "Nixie.h"
sbit Motor=P1^0;
unsigned char Counter,Compare;
unsigned char KeyNum,Speed=0;
void main()
{
Timer0_Init();
Motor=0;
while(1)
{
KeyNum=Key_GetState();
if(KeyNum == 1)
{
Speed++;
Speed%=4;
if(Speed == 0){Compare=0;}
if(Speed == 1){Compare=25;}
if(Speed == 2){Compare=50;}
if(Speed == 3){Compare=100;}
}
Nixie(8,Speed);
}
}
void Timer0_Routine() interrupt 1
{
TL0 = 0xA4; // 设置定时初始值
TH0 = 0xFF; // 设置定时初始值
Counter++;
Counter%=100;
if(Counter<Compare)
{
Motor=1;
}
else
{
Motor=0;
}
}