目录

  • 实验介绍
  • 硬件设计
    • 静态数码管介绍
    • 独立按键介绍
    • 直流电机介绍
    • ULN2003 芯片介绍
  • 硬件实物连接
    • 直流电机连接
    • 按键、数码管连接
  • 软件设计
    • main.c
  • 实验现象
  • 实验总结

实验介绍

通过独立按键控制带风扇叶的直流电机的转速,并在静态数码管上显示风扇的挡数,其中独立按键对应的挡数和关闭键如下:

对应的位置为
关 1挡 2挡 3挡
4挡 5挡

硬件设计

静态数码管介绍

数码管是一种半导体发光器件,其基本单元是发光二极管。按发光二极管单元连接方式可分为共阳极数码管和共阴极数码管。这里我使用的是共阳数码管,共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管,共阳数码管在应用时应将公共极 COM 接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮, 当某一字段的阴极为高电平时, 相应字段就不亮。具体原理可自行百度,网上资料详细。

不同位数的数码管实物图如下所示:

共阳数码管码表
0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92,
0 1 2 3 4 5
0x82, 0xF8, 0x80, 0x90, 0x88, 0x83,
6 7 8 9 A B
0xC6, 0xA1, 0x86, 0x8E, 0xFF,
C D E F 无显示

独立按键介绍

按键是一种电子开关,使用时轻轻按开关按钮就可使开关接通,当松开手时,开关断开。我开发板上使用的按键及内部简易图如下图所示:

由于机械点的弹性作用,按键开关在闭合时不会马上稳定的接通,在断开时也不会一下子断开,因而在闭合和断开的瞬间均伴随着一连串的抖动。抖动时间的长短由按键的机械特性决定的,一般为 5ms 到 10ms。为了确报CPU 对按键的一次闭合仅作一次处理,必须进行消抖。按键消抖有两种方式,一种是硬件消抖,另一种是软件消抖。为了使电路更加简单,通常采用软件消抖。

独立按键检测原理
我们知道单片机的 IO 口既可作为输出也可作为输入使用,当检测按键时用得是它的输入功能,独立按键的一端接地,另一端与单片机的某个 I/O 口相连,开始时先给该 IO 口赋一高电平,然后让单片机不断地检测该 I/O 口是否变为低电平,当按键闭合时,即相当于该 I/O 口通过按键与地相连,变成低电平,程序一旦检测到 I/O 口变为低电平则说明按键被按下,然后执行相应的指令。

直流电机介绍

直流电机是指能将直流电能转换成机械能(直流电动机)或将机械能转换成直流电能(直流发电机)的旋转电机。它是能实现直流电能和机械能互相转换的电机。当它作电动机运行时是直流电动机,将电能转换为机械能;作发电机运行时是直流发电机,将机械能转换为电能。

直流电机没有正负之分,在两端加上直流电就能工作。需要知道直流电机的额定电压和额定功率,不能使之长时间超负荷运作。 在交换接线后,可以形成正反转(风扇向前吹或向后吹)。

开发板配置的直流电机为 5V 直流电机,其主要参数如下:
轴长:8mm
轴径:2mm
电压:1-6v
参考电流:0.35-0.4A
3v 转速:17000-18000 转每分钟
外观实物图如下:

ULN2003 芯片介绍

51 单片机主要是用来控制而非驱动,如果直接使用芯片的GPIO 管脚去驱动大功率器件,要么将芯片烧坏,要么就是驱动不起来。所以要驱动大功率器件,比如电机。就必须搭建外部驱动电路,我使用的驱动芯片是ULN2003,该芯片是一个单片高电压、高电流的达林顿晶体管阵列集成电路。不仅可以用来驱动直流电机,还可用来驱动五线四相步进电机,比如 28BYJ-48 步进电机。

ULN2003芯片内部实际上就相当于非门电路,即输入高输出为低,输入低输出高。使用该芯片驱动直流电机,只可实现单方向控制,电机一端接电源正极,另一端接芯片的输出口。具体原理可自行百度,网上资料详细。

硬件实物连接

直流电机连接

将 P1.0 管脚连接到J46 的 IN1,直流电机的两根线接 J47 端子的 1、2 脚即 5V 和 O1,注意:直流电机无方向,线接反只是转动方向不同而已。

按键、数码管连接

使用一根8Pin排线将单片机的P0管脚与J8端子连接。注意:连接不能交叉,否则数据就会错位。

将 P3.1、P3.2、P3.3、P3.4、P3.5、P3.6管脚分别连接到JP1 的 K1、K2、K3、K4、K5、K6。

以上有的杜邦线我没有分开,连接用到的线就是文字说明里面用到的线。

软件设计

接下来就是在keil uVision4里面实现编代码了。代码中会有相关注释和说明:

main.c

#include "reg52.h"
typedef unsigned int u16;
typedef unsigned char u8;
sbit k1=P3^1;//定义所需的管脚
sbit k2=P3^2;
sbit k3=P3^3;
sbit k4=P3^4;
sbit k5=P3^5;
sbit k6=P3^6;
sbit moto=P1^0;u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0~F的值void delay(u16 i)
{
while(i--);
}void keypros()//按键处理函数
{
if(k2==0)//检测按键是否按下
{
delay(1000);//消除抖动
if(k2==0)
{
P0=~smgduan[1]; //显示挡数
while(1)
{
moto=1;
delay(10);//用延时函数产生pwm波
moto=0;
delay(10);
if(k1==0 || k3==0 || k4==0 || k5==0 || k6==0)//其他按键按下跳出循环
break;
}
}
while(!k2);//检测按键是否松开
}if(k1==0)//按键按下就关
{
delay(1000);
if(k1==0)
{
P0=~smgduan[0];
moto=0;
}
while(!k1);
}//按键操作类似,下面有的就不加以注释说明了
if(k3==0)
{
delay(1000);
if(k3==0)
{
P0=~smgduan[2];
while(1)
{
moto=1;
delay(20);//加长延时来提升直流电机的转速
moto=0;
delay(20);
if(k1==0 || k2==0 || k4==0 || k5==0 || k6==0)
break;
}
}
while(!k3);
}if(k4==0)
{
delay(1000);
if(k4==0)
{
P0=~smgduan[3];
while(1)
{
moto=1;
delay(30);
moto=0;
delay(30);
if(k1==0 || k2==0 || k3==0 || k5==0 || k6==0)
break;
}
}
while(!k4);
}if(k5==0)
{
delay(1000);
if(k5==0)
{
P0=~smgduan[4];
while(1)
{
moto=1;
delay(40);
moto=0;
delay(40);
if(k1==0 || k2==0 || k4==0 || k3==0 || k6==0)
break;
}
}
while(!k5);
}if(k6==0)//按下最大挡
{
delay(1000);
if(k6==0)
{
P0=~smgduan[5];
moto=1;//最大档就不需要延时函数了,直接运转
}
while(!k6);
}}void main()
{
moto=0;//初始化不转
P0=~smgduan[0]; //静态数码管初始化显示为0
while(1)
{
keypros();//调用按键处理函数
}
}

实验现象

51单片机直流电机控制风扇调速

可以明显地听到马达声音的变化,大风扇叶实验效果更棒。

实验总结

上述产生pwm波的方法有明显的缺点,就是占用了大量的机器周期,会影响pwm的准确度。正确的做法是用定时器产生pwm,使用定时器产生占空比可调,频率f为100HZ的pwm波。运用这个实验就可以完成风扇的制作以及可以扩展到智能小车等实验领域。
最后觉得博主不错的可以关注,点赞,评论等,后期可以更新用定时器产生pwm来控制风扇调速哟,坐等各位大佬指点!

普中科技51单片机直流电机控制风扇调速相关推荐

  1. 普中科技51单片机的ADC采样电位器功能实现以及特点

    ADC模数转换的目的: **单片机能够接受和处理的数据都是离散的数字量,而不是连续的模拟量,**就和机器语言不能和普通语言一样通用,要先转换成单片机能够接受的数据,才能进行对模拟量数据(比如,温度,受 ...

  2. 使用普中科技51单片机进行(I^2)C总线操作

    /*C51单片机学习打卡*/ /*观看郭天祥老师教学视频,使用普中科技51单片机开发板进行学习(I^2)C总线操作*/ /*功能:在开发版上进行999秒计时,在单片机掉电情况下可以记录最后一秒的数据* ...

  3. 普中科技51单片机_【笔记】普中科技-51单片机-静态数码管显示

    #include <reg51.h> #include <intrins.h> typedef unsigned char u8; typedef unsigned int u ...

  4. 基于普中科技的单片机开发实验仪编写的数字表

    基于普中科技的单片机开发实验仪编写的数字表 1.项目简单说明 一.显示日期,对ds1302芯片进行计时所得的日期用数码管进行显示: 二.显示温度,对18B20芯片测量所得的温度用数码管进行显示: 三. ...

  5. 【电路】基于单片机智能睡眠枕系统设计-基于单片机音乐喷泉制作设计-基于单片机智能温控风扇调速系统设计-基于单片机智能自动循迹小车控制系统设计-基于数字电路的4人投票系统设计(仿真,报告)毕设课设资料

    1620基于单片机智能睡眠枕系统设计-文档+PPT+PCB图+原理图+源码 智能睡眠枕主要由lcd屏幕.蓝牙.压力传感器.蜂鸣器.单片机等等组成,用户可通过四个独立按键进行操控(四个按键从左至右为1. ...

  6. 普中科技stc89c52rc单片机烧写失败

    我在使用普中的stc89c52rc单片机时候遇到了烧写失败的情况,如图所示 尝试使用stc-isp 进行烧写时候一直显示正在检测目标单片机 我的解决办法: STC-ISP勾选使能6T(双倍速)模式 , ...

  7. 基于单片机的智能风扇调速系统毕业设计

    文末下载完整资料 总体设计框图   系统电路设计总体设计方框图所示,控制器采用单片机AT89S52,温度传感器采用DS18B20,用2位LED数码管以串口传送数据实现温度显示. 主控制器   单片机s ...

  8. 【Proteus仿真】【51单片机】PWM电机调速系统设计

    文章目录 一.主要功能 二.硬件资源 三.软件设计 1.主机程序 四.实验现象 联系作者 一.主要功能 本项目使用Proteus8仿真51单片机控制器,使用L298N电机模块.数码管模块.按键模块.L ...

  9. 普中科技89c51单片机工程实训--音乐播放器

    对基于单片机的音乐播放器可应用于 mp3, MP4, 扩音器等很多 方面, 并可作为很多系统的辅助功能, 作为单片机的重要硬件资 源之一, 利用定时器可以产生各种固定频率的方波信号, 也可以 产生包括 ...

  10. 学习普中的51单片机TFT彩屏篇中遇到的问题和解决办法

    如果你出现了把程序下载到单片机中,但是TFT彩屏显示白屏,那你可以试试这个解决办法 检查一下该屏的驱动C文件中的tftlcd.H文件,看一下里面宏定义的显示屏型号是否跟你手中的显示屏型号一致,如果不一 ...

最新文章

  1. 京津冀青少年网球分级赛总决赛开打 118名选手对决
  2. Netty基础系列(1) --linux网路I/O模型
  3. [POJ 2329] Nearest number-2
  4. Web Socket/Stomp——整合Spring Session【Header Token模式】解决方案
  5. c 怎么连接mysql博客_C连接MySql数据库
  6. 《构建之法》阅读笔记02
  7. python之模块calendar(汇集了日历相关的操作)
  8. 鼠标图标怎么自定义_酷鱼魔鼠——给鼠标添加酷炫的特效
  9. IIAI CVPR 2019 跟踪、检测、分割论文荐读
  10. oracle两个date相减_从 Oracle 到 PostgreSQL:从 Uptime 到数据库实例运行时间
  11. Android 隐藏ImageView
  12. 指数分布族(The Exponential Family)与广义线性回归(Generalized Linear Model GLM)
  13. win10 android fastboot usb驱动
  14. 计算机基础知识经典问答题,计算机基础知识问答题和答案一.doc
  15. 插帧补帧DAIN算法,让电影、视频、动漫变丝滑顺畅
  16. Word自定义宏实现全文拼音标注
  17. Vue实现点击上传图片预览图片功能
  18. python爬微信公众号视频_python爬虫公众号所有信息,并批量下载公众号视频
  19. 华为、苹果、高通,谁在领跑?全面解读清华AI芯片报告
  20. 直方图均衡--对比度调整和去雾效果

热门文章

  1. 基于FFT的平面阵列方向图综合
  2. 阵列天线方向图-均匀直线/平面阵列matlab仿真
  3. 会员制营销与EMAIL营销
  4. python选股软件编写
  5. 禁止横竖屏切换、强制横竖屏
  6. Python绘制XRD图谱和对应pdf卡片堆叠图
  7. 商业计划书 创业者的“必修课程”
  8. 常用MATLAB工具箱下载地址
  9. html变形金刚代码,百度变形金刚JS特效
  10. 计算机组成bcd码,bcd码怎么换算(8421bcd码计算器)