51单片机——直流电机调速
目录
1.前言
1.1 直流电机介绍
1.2 PWM介绍
2.源码
2.1 main.c
2.2 key.c
2.3 key.h
2.4 Nixie.c
2.5 Nixie.h
2.6 Timer0.c
2.7 Timer0.h
1.前言
1.1 直流电机介绍
直流电机是一种将电能转换为机械能的装置。一般的直流电机有两个电极,当电极正接时,电机正转,当电极反接时,电机反转
直流电机主要由永磁体(定子)、线圈(转子)和换向器组成
除直流电机外,常见的电机还有步进电机、舵机、无刷电机、空心杯电机等
1.2 PWM介绍
PWM(Pulse Width Modulation)即脉冲宽度调制(如电机:转5ms停1ms还是转5ms停2ms),在具有惯性的系统中,可以通过对一系列脉冲的宽度进行调制,来等效地获得所需要的模拟参量,常应用于电机控速、开关电源等领域。LED没有电的时候也不是马上熄灭的,尽管很快(余晖);这里只做简单介绍,具体原理可以自己上网查找;
PWM重要参数:
频率 = 1 / TS 占空比 = TON / TS 精度 = 占空比变化步距
频率低电机抖动明显,启动 停止 启动...频率越高越平缓
占空比1%—>2%—>3%...精度就为1%
2.源码
下面的代码基本都是前面几章写过的代码,模块化编程大大的节省了我们编程的时间,当我们要用的话,直接复制一下之前的代码就ok了;这里就不过多介绍了;
2.1 main.c
#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%=4;if(Speed==0){Compare=0;} //设置比较值,改变PWM占空比if(Speed==1){Compare=50;}if(Speed==2){Compare=75;}if(Speed==3){Compare=100;}}Nixie(1,Speed);}
}void Timer0_Routine() interrupt 1
{TL0 = 0x9C; //设置定时初值TH0 = 0xFF; //设置定时初值Counter++;Counter%=100; //计数值变化范围限制在0~99if(Counter<Compare) //计数值小于比较值{Motor=1; //输出1}else //计数值大于比较值{Motor=0; //输出0}
}
2.2 key.c
#include <REGX52.H>
#include "Delay.h"/*** @brief 获取独立按键键码* @param 无* @retval 按下按键的键码,范围:0~4,无按键按下时返回值为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;
}
2.3 key.h
#ifndef __KEY_H__
#define __KEY_H__unsigned char Key();#endif
2.4 Nixie.c
#include <REGX52.H>
#include "Delay.h"//数码管段码表
unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};/*** @brief 数码管显示* @param Location 要显示的位置,范围:1~8* @param Number 要显示的数字,范围:段码表索引范围* @retval 无*/
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,消影
}
2.5 Nixie.h
#ifndef __NIXIE_H__
#define __NIXIE_H__void Nixie(unsigned char Location,Number);#endif
2.6 Timer0.c
#include <REGX52.H>/*** @brief 定时器0初始化,100us@12.000MHz* @param 无* @retval 无*/
void Timer0_Init(void)
{TMOD &= 0xF0; //设置定时器模式TMOD |= 0x01; //设置定时器模式TL0 = 0x9C; //设置定时初值TH0 = 0xFF; //设置定时初值TF0 = 0; //清除TF0标志TR0 = 1; //定时器0开始计时ET0=1;EA=1;PT0=0;
}
2.7 Timer0.h
#ifndef __TIMER0_H__
#define __TIMER0_H__void Timer0_Init(void);#endif
51单片机——直流电机调速相关推荐
- 直流电机调速c语言程序,分享一个51单片机直流电机调速源程序
/*******************************************************************/ /* 程序名:PWM直流电机调速 */ /* 晶振:11.0 ...
- 51单片机直流电机调速c语言,51单片机直流电机调速程序
#includereg52.h>本文引用地址:http://www.eepw.com.cn/article/170917.htm sbit KEY1 = P3^1; //定义调速按键 sbit ...
- 51单片机PWM调速风扇转速显示转速设置
实践制作DIY- GC0029-PWM调速风扇 一.功能说明: 基于51单片机设计-PWM调速风扇 二.功能介绍: STC89C52单片机(AT89C52)+5V4线PWM风扇+LCD1602显示器+ ...
- 51单片机-PWM调速(直流电机,智能小车的电机调速)
文章目录 前言 一.PWM 二.产生PWM的方法 使用定时器产生一个恒定的周期 中断服务子程序里设置比较值 三.实验 使用PWM对直流电机调速 使用PWM对智能小车的电机调速 总结 前言 这次来对PW ...
- 51 单片机 PWM调速基本原理
/******************************************************************************** * 标题: 恒速运行 ******* ...
- 基于51单片机直流电机PWM调速设计
具体实现功能 系统由STC89C52单片机.LCD1602液晶显示屏.霍尔测速传感器.3V直流电机.按键模块构成. 具体功能: 1.采用霍尔传感器非接触式测电机转速: 2.LCD1602液晶显示当前的 ...
- 【Proteus仿真】51单片机+直流电机PWM调速实验
[Proteus仿真]51单片机+直流电机PWM调速实验 Proteus仿真 采用L293驱动直流电机 -PWM是采用定时器中断实现 /******************************** ...
- 51单片机+直流电机PWM 10级调速控制
51单片机+直流电机PWM 10级调速控制 Proteus仿真演示 示例程序代码 #include <STC89C5xRC.H> typedef unsigned char u8; typ ...
- 基于51单片机的L298N直流电机调速系统Proteus仿真程序
基于51单片机的L298N直流电机调速系统Proteus仿真程序 本此设计选择STC89C52单片机作为主控芯片,选取带有光电编码器的直流电机作为被控对象,利用单片机的T0定时器产生PWM信号并送到直 ...
最新文章
- mybatis-plus AutoGenerator
- Faster R-CNN理解、讨论
- F1.4大光圈专业相机-海鸥CF100
- java数组的api_java程序员常用的11个API,赶紧收藏
- SQL Server where和having区别
- alter table *** add constraint *** 用法---约束
- eclipse 配色方案
- 马云:大部分失败企业都是因为不够专注
- Battle Zone 战争地带
- nginx 常用配置说明
- mysql8+maven+mybatis
- 详述 MySQL 中的行级锁、表级锁和页级锁
- 应用计算机测定伏安特性实验,实验25应用计算机测电阻伏安特性.doc
- IO、文件、NIO【草案三】
- python代码手机壁纸_70行python代码实现壁纸批量下载
- 06-jQuery的文档操作***
- 在PPT中显示时间以提醒演讲者控制时间
- windows下查看和关闭端口
- QQ,TIM 如何设置代理
- sas java_Sas java环境变量配置