51单片机

您所在的位置:网站首页 51单片机电机正反转 51单片机

51单片机

2024-07-17 07:14| 来源: 网络整理| 查看: 265

写在前面:在51单片机应用中,电机控制的应用十分多;本节我们学习使用通过PWM控制直流电机的使用;在实现直流电机之前,我们先软件模拟实现呼吸灯的实现,再去实现直流电机的使用;

本节实现的内容:

1、LED1进行呼吸灯方式点亮;

2、直流电机的控制(调速);

目录

 一、直流电机介绍

 二、ULN2003芯片介绍

三、PWM介绍

四、硬件设计 

五、软件设计

1、LED1进行呼吸灯方式点亮

2、直流电机的控制

 一、直流电机介绍

        直流电机是指能将直流电能转换成机械能(直流电动机)或将机械能转换成直流电能(直流发电机)的旋转电机。它是能实现直流电能和机械能互相转换的电机。

        直流电机的结构是有定子和转子组成。直流电机运动时,不动的部分称为定子,定子的主要作用是产生磁场,由机座、主磁极、 换向极、 端盖、 轴承和电刷装置等组成。运行时转动的部分称为转子,其主要作用是产生电磁转 矩和感应电动势,是直流电机进行能量转换的枢纽,所以通常又称为电枢,由转轴、电枢铁心、电枢绕组、换向器和风扇等组成。

        直流电机没有正负之分,在两端加上直流电就能工作。交换电极可以改变电机旋转的方向;

        电机的实物图为:

 二、ULN2003芯片介绍

         51单片机作为一个开发板,起到的主要作用是控制,而直流电机作为一个较大功率的器件,当然不能通过51单片机的IO引脚进行驱动,需要使用一些驱动电路或者芯片进行驱动;开发板上板载的驱动芯片是 ULN2003, 该芯片是一个单片高电压、高电流的达林顿晶体管阵列集成电路。不仅可以用来驱动直流电机,还可用来驱动五线四相步进电机。

        ULN2003 是一个单片高电压、高电流的达林顿晶体管阵列集成电路。它是由 7 对 NPN 达林顿管组成的,它的高电压输出特性和阴极二极管可以转换感应负载。单个达林顿对的集电极电流是 500mA。达林顿管并联可以承受更大的电流。

        其内部相当于非门电路,即输入高输出为低,输入为低输出是高。

        若使用该芯片驱动直流电机,只可实现单方向控制,电机一端接电源正极, 另一端接芯片的输出口。

三、PWM介绍

        PWM(脉冲宽度调制),在具有惯性的系统中,可以通过对一系列脉冲进行调制来等效的获得所需要的模拟参量,常应用于电机控速,开关电源等领域。

        简单来说,PWM是一组脉冲(连续的高低),那如何通过这组脉冲来控制电机的速度呢?这就得说说电机是一个惯性系统,何为惯性系统?即在通电的时候电机就会转,断开电后,电机不会立马停下来。那这样的话,在一个很短的时间的内(一个周期)通过控制电机转的时间与电机不转的时间的比率,就可以控制电机的速度了。 

        在PWM波形中有几个重要的参数,分别是:频率、占空比以及精度;

频率:是指一个PWM波形周期的倒数;一个周期即为高低电平的总和;

占空比:即高电平占据整个周期的比值,占空比越大,高电平时间越长,其转速越高;

精度:即占空比变化的步距,占空比变化的步距越小,速度改变的每次就越小,其精度就越高;

产生PWM波形的方法:

        通过计数器计数的功能,使其同比较值进行比比较,大于比较值输出1,小于比较值输出0;即可产生PWM波形;调节计数器的计数范围可以改变PWM的周期频率(一般不变);调节比较值大小可以调节PWM的占空比(用于调节转速);精度是指:比较值的变化步距,每次最少调节多少;

四、硬件设计 

 本次所涉及的硬件主要包括:

1、步进电机驱动模块;

2、直流电机;

步进电机的驱动模块电路图如下所示:

        从上图可知,ULN2003D 的输入口与单片机的 P1.0-P1.3 连接,对应输出则是 OUT1-OUT4,而 J47 则是提供给外部连接电机的接口,可以支持直流电机、五线四相步进电机 28BYJ-48 连接。本实验使用的是直流电机,电机的一根线连接在 VCC 上,另一根连接在 OUT1 上,因此可通过单片机 P1.0 口输出高电平来控制电机旋转,输出低电源控制电机停止. 输入高输出为低,输入为低输出是高。

五、软件设计 1、LED1进行呼吸灯方式点亮

实验要求:LED1进行呼吸灯的方式点亮;

实验思路:led并不属于惯性系统,可以通过点亮和点灭的时间(模拟PWM波形)来控制亮灭,而亮灭周期较短,人眼就能实现呼吸灯模式;

源码:

#include //包含51头文件 sbit LED=P2^0;//设置对应的端口 unsigned char time,j;//定义需要的变量 //延时函数 void Delay10us(unsigned char t) //@11.0592MHz { while(t--) { unsigned char i; i = 2; while (--i); } } void main() { while(1) { for(time=0;time


【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3