目录

直流电机介绍

电机的驱动电路

PWM介绍

PWM重要参数

PWM的产生方法

代码演示

1,调速电机

2,呼吸灯


直流电机介绍

直流电机是一种将电能转换为机械能的装置。一般的直流电机有两个电极,当电极正接时,电机正转,当电极反接时,电机反转

直流电机主要由永磁体(定子)、线圈(转子)和换向器组成

除直流电机外,常见的电机还有步进电机、舵机、无刷电机、空心杯电机等

步进电机:构造上角度上有磁铁,可以精确到角度

舵机:控制方向的电机

无刷电机空心杯电机:都是高速电机,但是空心杯电机更加的小巧,灵活

电机的驱动电路

这里的代码演示的是将电机一头接在VCC电源端口,另一端接在P1^0口

PWM介绍

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

PWM重要参数:

频率 = 1 / TS            占空比 = TON / TS           精度 = 占空比变化步距

PWM的产生方法

类似的应用还有我们手机上的呼吸灯,也是采用了PWM的技术,我们控制不同的占空比来实现灯的亮度不同,而要实现从亮到暗,那么就要在规定的时间内改变比较值的大小,从而使占空比也随时间的变化而变化。

代码演示

1,调速电机

主函数

#include <REGX52.H>
#include "Delay.h"
#include "Key.h"
#include "Nixie.h"
#include "Timer0.h"sbit Motor=P1^0;unsigned char Counter,Compare;    //计数值和比较值,用于输出PWM
unsigned char KeyNum,Speed;void main()
{Timer0_Init();while(1){KeyNum=Key();if(KeyNum==1){Speed++;Speed%=5;if(Speed==0){Compare=0;}   //设置比较值,改变PWM占空比if(Speed==1){Compare=40;}if(Speed==2){Compare=60;}if(Speed==3){Compare=80;}if(Speed==4){Compare=100;}}Nixie(1,Speed);}
}void Timer0_Routine() interrupt 1 //中断周期为100x100us=10ms
{TL0 = 0x9C;       //设置定时初值TH0 = 0xFF;        //设置定时初值Counter++;Counter%=100;//**计数值变化范围限制在0~99等价于if(Counter==100){Counter=0;}if(Counter<Compare)    //计数值小于比较值{Motor=1;        //输出1}else              //计数值大于比较值{Motor=0;        //输出0}
}

按键函数

unsigned char Key()
{unsigned char KeyNumber=0;if(P3_1==0){Delay(20);while(P3_1==0);Delay(20);KeyNumber=1;}if(P3_0==0){Delay(20);while(P3_0==0);Delay(20);KeyNumber=2;}if(P3_2==0){Delay(20);while(P3_2==0);Delay(20);KeyNumber=3;}if(P3_3==0){Delay(20);while(P3_3==0);Delay(20);KeyNumber=4;}return KeyNumber;
}

定时器函数

void Timer0_Init(void)
{TMOD &= 0xF0;     //设置定时器模式TMOD |= 0x01;     //设置定时器模式TL0 = 0x9C;       //设置定时初值TH0 = 0xFF;        //设置定时初值TF0 = 0;       //清除TF0标志TR0 = 1;      //定时器0开始计时ET0=1;EA=1;PT0=0;
}

数码管函数

unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};void Nixie(unsigned char Location,Number)
{switch(Location)       //位码输出{case 1:P2_4=1;P2_3=1;P2_2=1;break;case 2:P2_4=1;P2_3=1;P2_2=0;break;case 3:P2_4=1;P2_3=0;P2_2=1;break;case 4:P2_4=1;P2_3=0;P2_2=0;break;case 5:P2_4=0;P2_3=1;P2_2=1;break;case 6:P2_4=0;P2_3=1;P2_2=0;break;case 7:P2_4=0;P2_3=0;P2_2=1;break;case 8:P2_4=0;P2_3=0;P2_2=0;break;}P0=NixieTable[Number]; //段码输出Delay(1);             //显示一段时间P0=0x00;               //段码清0,消影
}

Delay延时函数

void Delay(unsigned int xms)
{unsigned char i, j;while(xms--){i = 2;j = 239;do{while (--j);} while (--i);}
}

2,呼吸灯

主函数

#include <REGX52.H>sbit LED=P2^0;void Delay(unsigned int t)
{while(t--);
}void main()
{unsigned char Time,i;while(1){for(Time=0;Time<100;Time++)        //改变亮灭时间(比较值),由暗到亮{for(i=0;i<20;i++)//计次延时:让每一个亮度停留一段时间,不至于变化的太快{LED=0;                 //LED亮Delay(Time);          //延时TimeLED=1;                 //LED灭Delay(100-Time);      //延时100-Time,**保证周期恒定**,都是100}}for(Time=100;Time>0;Time--)       //改变亮灭时间(比较值),由亮到暗{for(i=0;i<20;i++)           //计次延时{LED=0;                  //LED亮Delay(Time);          //延时TimeLED=1;                 //LED灭Delay(100-Time);      //延时100-Time}}}
}

STC89C52单片机可调速电机及呼吸灯(PWM)代码演示相关推荐

  1. STC89C52单片机I2C通信以及AT24C02介绍使用代码演示

    目录 AT24C02引脚介绍与使用 AT24C02介绍 ​I2C通信介绍 I2C通信时序 起始条件与终止条件 发送一个字节(主机发送到从机) 接受一个字节(从机发送到主机) 发送应答与接受应答 I2C ...

  2. 单片机蓝桥杯--LED呼吸灯

    在CT107D单片机综合训练平台实现LED的基本控制和其他单片机开发平台不一样,不单单是控制几个LED实现跑马灯这么简单.因为在这个平台上要掌握74CH138译码器和74HC573锁存器的使用才能实现 ...

  3. 树莓派呼吸灯python代码

    点灯 from machine import Pin import time LED = Pin(25,Pin.OUT) if __name__ == '__main__':while True:LE ...

  4. 【跟着江科大学Stm32】STM32F103C6T6_实现呼吸灯_代码

    PWM.h #ifndef __PWM_H #define __PWM_Hvoid PWM_Init(); void PWM_SetCompare1(uint16_t Compare);#endif ...

  5. 安卓 呼吸灯效果--代码实现

    android 三步代码创建呼吸灯效果 如图:这里介绍的是怎么完全用代码创建一个这样的效果; –bug及解决方式:类似于在不同选项卡的界面之间来回切换时,缩放动画的相对位置发生错乱(本来).解决办法是 ...

  6. 呼吸灯51单片机c语言编程,51单片机基于定时器实现呼吸灯(C8051F020单片机)

    一.实现思路 原理:利用PWM信号控制LED灯的亮暗程度,实现LED灯由暗到亮又由亮到暗的渐变过程. 方法:通过定时器设置LED所接引脚的高低电平持续时间,模拟出PWM波. 二.关键问题--PWM的频 ...

  7. STC89C52单片机 使用定时器使LED灯闪烁

    #include <reg52.h> #include <intrins.h>#define uint unsigned int #define uchar unsigned ...

  8. 51单片机的仿真实验——交通灯(十字路口演示)

    学习目标: 1.了解交通灯的基本工作原理: 2.用multisim模拟实现交通灯控制: 3.用Keil C51编程实现上述功能: 4.用Keil与multisim联调 学习内容: 通过AT89C51实 ...

  9. 【C51单片机学习笔记----DS18B20温度传感器LCD1602液晶屏直流电机调速与呼吸灯AD模数转换红外外部中断】

    文章目录 一.DS18B20温度传感器 1.DS18B20温度传感器连接原理图 2.DS18B20温度传感器单总线通信时序 3.DS18B20温度传感器代码模块 二.LCD1602液晶屏 1.LCD1 ...

最新文章

  1. 【IBM Tivoli Identity Manager 学习文档】3 系统部署
  2. 初探性能优化——2个月到4小时的性能提升
  3. align=absmiddle 是什么意思
  4. 泊位调度问题 matlab,流水线车间调度问题matlab源程序.doc
  5. C 为什么非要引入那几种类型转换?
  6. 技术博客么?开始每天一更
  7. 服务器传输文件损坏,使用ftplib将文件传输到FTP服务器后,文件已损坏
  8. 机器学习的1000+篇文章总结
  9. 徐州市建筑物矢量数据(Shp格式+带高度)
  10. Android性能测试之fps获取
  11. stm32f103测脉冲数用于带霍尔编码器的电机测速
  12. Spring Boot日志格式化JSON方案
  13. iReport报表Detail设置自适应高度
  14. SAP项目上的疑难杂症-(制品区分)如何处理?
  15. 关于SSL认证的小坑 SSLPeerUnverifiedException
  16. 计算机专业参赛口号,参赛口号
  17. Linux 路由表和静态路由
  18. 安卓(Android)手机如何安装APK?
  19. 海思3516, 单摄像头接hdmi,并输出h.265文件
  20. 教育部明确:坚持普职分流非常必要

热门文章

  1. rk809-code喇叭耳机调试分享
  2. 运用aspose的dll将word或excel转化图片并且拼接成为单张大图
  3. [Visio]平行四边形在Word中模糊问题解决
  4. 10千瓦光伏一天能发多少电?
  5. 23种设计模式(通俗易懂,白话翻译)
  6. 联想助BHG Mall构建智慧商城 为新商业赋能
  7. 数组元素求和的几种方法
  8. 神经网络 和 NLP —— 神经网络入门
  9. Java中Lambda表达式使用前提及省略规则
  10. 在线诉讼区块链证据规则的理论逻辑与制度体系