基于C51单片机的直流电机PWM调速控制(包含原理图及C源代码)
更新时间:2023-08-30 01:31:01 阅读量: 教育文库 文档下载
基于C51单片机的直流电机PWM调速控制(包含原理图及C源代码)
基于C51单片机的直流电机PWM调速控制
--SQ
这是最近一阶段自己学习所获,现分享与大家。
这里采用AT89C52单片机做主控制芯片,实现两路直流电机的PWM调速控制,另外还可以实现转向、显示运行时间、显示档位等
注:考虑小直流电机自身因素,调速范围仅设有四级
电路原理图:
C语言程序源代码:
/********************硬件资源分配*********************/
数码管:
显示电机状态(启停、正反、速度)、运行时间、是否转弯
按键:
K4启动/暂停
K3正反转/转弯允许
K2加速/左转/运行时间清零
K1减速/右转/停止
定时器:
T0数码管动态显示,输出PWM
T1运行时间记录
********************************************************/
/*******主程序文件PWM.c******/
#include<reg52.h>
基于C51单片机的直流电机PWM调速控制(包含原理图及C源代码)
#include"Afx.h"
#include"Config.c"
#defineCIRCLE5//脉冲周期
//按键定义
ucharkey,key_tmp=0,_key_tmp=0;
//显示定义
ucharLedState=0xF0;//LED显示标志,0xF0不显示,Ox00显示ucharcodeLED_code_d[4]={0xe0,0xd0,0xb0,0x70};//分别选通1、2、3、4位uchardispbuf[4]={0,0,0,0};
uchardispbitcnt=0;
ucharmstcnt=0;
ucharCenti_s=0,Sec=0,Min=0;
//程序运行状态标志
bitMotState=0;
bitDirState=0;
ucharState1=-1;
ucharState2=-1;
ucharState3=0;
ucharState4=-1;
ucharLSpeed=0;
ucharRSpeed=0;
//其他
uintRunTime=0;
uintRTime_cnt=0;
uintLWidth;
uintRWidth;
uintWidcnt=1;
uintDispcnt;
//函数声明
voidkey_scan(void);
voidDisBuf(void);
voidK4(void);
voidK3(void);
voidK2(void);
voidK1(void);
voiddisp(ucharH,ucharn);//待显示数组//选通、显示的位//分、秒、1%秒//电机启停标志//方向标志0前,1后//脉宽
基于C51单片机的直流电机PWM调速控制(包含原理图及C源代码)
voidmain(void)
{
P1|=0xF0;
EA=1;
ET0=1;
ET1=1;
TMOD=0x11;
TH0=0xFC;
TL0=0x66;//T0,1ms定时初值TH1=0xDB;
TL1=0xFF;//T1,10ms定时初值TR0=1;
Widcnt=1;
while(1)
{
key_scan();
switch(key)
{
case0x80:K1();break;
case0x40:K2();break;
case0x20:K3();break;
case0x10:K4();break;
default:break;
}
key=0;
DisBuf();
LWidth=LSpeed;
RWidth=RSpeed;
}
}
//按键扫描**模拟触发器防抖
voidkey_scan(void)
{
key_tmp=(~P3)&0xf0;
if(key_tmp&&!_key_tmp)
{
key=(~P3)&0xf0;
}
_key_tmp=key_tmp;
}
//按键功能处理/逻辑控制
voidK4(void)//有键按下
基于C51单片机的直流电机PWM调速控制(包含原理图及C源代码)
{
if(State4==-1)
{
State4=1;
TR1=1;
dispbuf[3]=1;
LedState=0x00;
MotState=1;
LSpeed=1;
RSpeed=1;
}
elseif(State4==1)
{
State4=0;
TR1=0;
MotState=0;
}
elseif(State4==0)
{
MotState=1;
if(State3==0)
{
State4=1;
TR1=1;
}
elseif(State3==1)
{
LSpeed=2;
RSpeed=2;
}
}
}
voidK3(void)
{
if(State4==1)
DirState=!DirState;
if(State4==0)
{
if(State3==0)
{
State3=1;
TR1=1;
dispbuf[3]=9;
MotState=1;//打开LED//打开电机//初速设为1//关闭电机//可以转向标志1可以,0不可以
基于C51单片机的直流电机PWM调速控制(包含原理图及C源代码)
LSpeed=2;
RSpeed=2;
}
elseif(State3==1)
{
State3=0;
TR1=0;
dispbuf[3]=0;
MotState=0;
}
}
}
voidK2(void)
{
if(State4==1&&LSpeed<4&&RSpeed<4){
LSpeed++;
RSpeed++;
}
elseif(State4==0)
{
if(State3==0)
{
//State4=-1;
//LedState=0xF0;
MotState=0;
Sec=0;
Min=0;
}
elseif(State3==1&&LSpeed<4&&RSpeed<4){
//TurnState=0;
LSpeed=2;
RSpeed++;
}
}
}
voidK1(void)
{
if(State4==1&&LSpeed>1&&RSpeed>1){
LSpeed--;
RSpeed--;
基于C51单片机的直流电机PWM调速控制(包含原理图及C源代码)
elseif(State4==0)
{
if(State3==0)
{
State4=-1;
LedState=0xF0;
MotState=0;
}
elseif(State3==1&&LSpeed<4&&RSpeed<4){
//TurnState=1;
LSpeed++;
RSpeed=2;
}
}
}
//显示预处理
voidDisBuf(void)
{
if(RTime_cnt==100)
{
Sec++;
RTime_cnt=0;
}
if(Sec==60)
{
Min++;
Sec=0;
}
if(State4==1)
{
dispbuf[0]=Sec%10;
dispbuf[1]=Sec/10;
dispbuf[2]=Min;
if(!DirState)
dispbuf[3]=LSpeed;
if(DirState)
dispbuf[3]=LSpeed+4;
}
if(State4==0)//正转//反转
基于C51单片机的直流电机PWM调速控制(包含原理图及C源代码)
if(State3==0)
{
dispbuf[0]=Sec%10;
dispbuf[1]=Sec/10;
dispbuf[2]=Min;
dispbuf[3]=0;
}
if(State3==1)
{
dispbuf[0]=RSpeed;
dispbuf[1]=LSpeed;
dispbuf[2]=Min;
dispbuf[3]=9;
}
}
}
//LED驱动
voiddisp(ucharH,ucharn){
P1=n;
P1|=LedState;
P1|=LED_code_d[H];
}
//T0中断**显示/方波输出voidTime_0()interrupt1{
TH0=0xFC;
TL0=0x66;
Widcnt++;
Dispcnt++;
//电机驱动/方波输出
if(Widcnt>CIRCLE)
{
Widcnt=1;
}
if(Widcnt<=LWidth)
LMot_P=!DirState&&MotState;else
LMot_P=DirState&&MotState;LMot_M=DirState&&MotState;
基于C51单片机的直流电机PWM调速控制(包含原理图及C源代码)
if(Widcnt<=RWidth)
RMot_P=!DirState&&MotState;else
RMot_P=DirState&&MotState;RMot_M=DirState&&MotState;//显示
if(Dispcnt==5)
{
disp(dispbitcnt,dispbuf[dispbitcnt]);dispbitcnt++;
if(dispbitcnt==4)
{
dispbitcnt=0;
}
Dispcnt=0;
}
}
//T1中断**运行时间
voidTime_1()interrupt3{
TH1=0xDB;
TL1=0xFF;
RTime_cnt++;
}
/******配置文件Afx.h******/#ifndef_AFX_
#define_AFX_
typedefunsignedcharuchar;typedefunsignedintuint;typedefunsignedlongulong;#endif
/******IO配置文件Config.c******/
基于C51单片机的直流电机PWM调速控制(包含原理图及C源代码)
#ifndef_Config_#define_Config_#include"Afx.h"#include<reg52.h>//显示定义sbitled=P3^2;//电机引脚定义
sbitLMot_P=P2^2;sbitLMot_M=P2^3;sbitRMot_P=P2^0;sbitRMot_M=P2^1;#endif
正在阅读:
基于C51单片机的直流电机PWM调速控制(包含原理图及C源代码)08-30
2018年个人党风廉政建设自查报告精选01-10
医药企业的窜货之治03-12
小学副校长年度述职报告09-26
中国妖怪大百科清理版10-09
数据库期末考试复习题及答案03-08
1.1 菱形的性质与判定(一)09-03
2019-2020学年部编人教版四年级第一学期语文 第一单元试题(含答03-03
小学生二年级写迷人的夏天作文06-13
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 直流电机
- 调速
- 单片机
- 源代码
- 包含
- 原理
- 基于
- 控制
- 图及
- C51
- PWM
- 2015新版PEP六年级英语下册Unit2 A Let's learn
- 《政治学原理》 试题(参考答案)
- 绿之海装饰工程公司介绍卫浴洁具安装工艺流程
- 公司中层管理人员车辆补贴管理办法
- 6《雷锋叔叔_你在哪里》
- 有机米粉加工操作规程
- 麝香心脑乐项目可行性研究报告(技术工艺+设备选型+财务概算+厂区规划)方案设计
- 成语中的文言知识
- 人教版一年级语文上册生字表(一)注音练习
- 2015-2020年中国塑料丝绳市场调查与投资方向研究报告
- 第一单元走进化学世界(测试题)
- 虚拟语气用法及动词形式
- 西安市基本养老保险参保人员转移申请表
- 巧记汉语拼音口诀大全
- 城市人行天桥与地下通道方案设计及比选
- 联合国儿童基金会背景介绍
- 海尔品牌营销策略分析
- 仁爱英语八年级下unit 5 topic 1 why all the smiling faces重要知识点
- 48个国际音标表+中文谐音
- 专业系统清理工具汇总