目录
[代码《基于Keil C51》](#代码《基于Keil C51》)
[控制代码《基于Keil C51》](#控制代码《基于Keil C51》)
|----------|----------|
| 直流电机 | 步进电机 |
[## 电机类型]
51 单片机对直流电机的控制
直流电机:
定义输出或输入为直流电能的旋转电机,称为直流电机,它是能实现直流电能和机械能互相转换的电机。当它作电动机运行时是直流电动机,将电能转换为机械能;作发电机运行时是直流发电机,将机械能转换为电能。
直流电机的控制 :
1 、方向控制 : 直流电机只有正负极,只需交换正负极就可以调节正反转。
2 、转速控制 : 在负载变化不大的时候,加在直流电动机两端的电压大小与其速度近似成正比。
|-------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------|
| PWM 技术 | |
| 电动机的电枢绕组两端的电压平均值 U U =( t1/T) XUs=D*Us 其中 D 为 PWM 信号的占空比 : D= t1/T | |
|-----------|-----------|---|---|-----------|
| L293D 功能表 |||||
| 1A/3A | 2A/4A | EN || 电机状态 |
| X | X | 0 || 停止 |
| 1 | 0 | 1 || 顺时针转动 |
| 0 | 1 | 1 || 逆时针转动 |
| 0 | 0 | 1 || 停止 |
| 1 | 1 | 1 || 刹停 |
| L293D 引脚图 ||| L293D 真值表 ||
| |||
||
| ### 基于 89C51 主控的直流电机控制电路仿真 |||||
代码《基于Keil C51》
/*************** writer:shopping.w ******************/
#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit K1 = P3^0;
sbit K2 = P3^1;
sbit K3 = P3^2;
sbit LED1 = P0^0;
sbit LED2 = P0^1;
sbit LED3 = P0^2;
sbit MA = P1^0;
sbit MB = P1^1;
void main(void)
{
LED1 = 1;
LED2 = 1;
LED3 = 0;
while(1)
{
if(K1 == 0)
{
while(K1 == 0);
LED1 = 0;
LED2 = 1;
LED3 = 1;
MA = 0;
MB = 1;
}
if(K2 == 0)
{
while(K1 == 0);
LED1 = 1;
LED2 = 0;
LED3 = 1;
MA = 1;
MB = 0;
}
if(K3 == 0)
{
while(K1 == 0);
LED1 = 1;
LED2 = 1;
LED3 = 0;
MA = 0;
MB = 0;
}
}
}
51 单片机对步进电机的控制
L298是步进电机控制芯片(也可以驱动直流电机)
L298引脚定义:

1)引脚 1(Current SensingA) 和引脚 15 (CurrentSensingB):电流监测端,分别为两个H桥的电流反馈脚不用时可以直接接地
2)引脚 2(OUTPUT1) 和引脚 3(OUTPUT2) **:**电机驱动输出端
3)引脚 4(SUPPLY VOLTAGE VS) **:**功率电源电压,此引脚须并接100nF电容器
4)引脚 5(INPUT1) 和引脚 7(INPUT2) **:**电机控制信号输入端,TTL电平兼容
5)引脚 6(Enable A) 和引脚 11(Enable B) **:**TTL电平兼容输入使能端,低电平禁止输出
6)引脚 8(GND) **:**接地端
7)引脚 9(VSS) **:**逻辑电源电压端。此引脚须并接100nF电容器
8)引脚 10(INPUT3) 和引脚 12(INPUT4) **:**电机控制信号输入端,TTL电平兼容
9)引脚 13(OUTPUT3) 和引脚 14(0UTPUT4):电机驱动输出端
|-----|-----|-----|--------|
| L298 逻辑功能表 ||||
| IN1 | IN2 | ENA | 电机工作状态 |
| X | X | 0 | 停止 |
| 1 | 0 | 1 | 顺时针转动 |
| 0 | 1 | 1 | 逆时针转动 |
| 0 | 0 | 1 | 停止 |
| 1 | 1 | 1 | 刹停 |

|----------------------------------------------------------------------------------------|---|-------------------------------------------------------------------------------------------|
| |
||
| 通过Mos管的不同打开方式,让磁铁分别停在不同的位置 | 如果能任意调节两个线圈的磁场强度,就能合成不同的磁场方向→让磁铁停留在任意位置 ||
| 如何改变磁场强度B |||
| 线圈产生磁场强度的公式 |
||
| → 精准控制线圈电流I,如何控制电流呢? |||
| 线圈中有寄生电阻、电感, 上电:电流慢慢抬升,电压直接为U 下电:电流慢慢下降,电压直接为0 ||
导通时电路等效为上述 |
| | | |
|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 直流电机和步进电机的区别 |
| ### 控制代码《基于Keil C51》 |
| #include <reg52.h> unsigned char code F_Rotation[4]={0x02,0x04,0x08,0x10};//正转表格 unsigned char code B_Rotation[4]={0x10,0x08,0x040,0x02};//反转表格 void Delay(unsigned int i)//延时 {while(--i);} main(){ unsigned char i; while(1) {for(i=0;i<4;i++) //4相 { P1=F_Rotation[i]; //输出对应的相 Delay(500); //调整电机转速} } } |
