基于51单片机的闭环控制 附带源程序 - 图文
更新时间:2024-03-04 23:59:01 阅读量: 综合文库 文档下载
- 51单片机控制步进电机推荐度:
- 相关推荐
《电气技术》 研究生课程设计报告
题 目 基于51单片机的直流电机PID调速系统 学 院 机械与汽车工程学院 专业班级 车辆工程 学 号 221601852023 学生姓名 木飞 指导教师 完成日期 2017年01月12日
1 引言
1.1研究对象介绍 1.2选题的目的和意义
直流电动机具有良好的起动、制动性能,宜于在大范围内平滑调速,在许多需要调速或快速正反向的电力拖动领域中得到了广泛的应用。从控制的角度来看,直流调速还是交流拖动系统的基础。早期直流电动机的控制均以模拟电路为基础,采用运算放大器、非线性集成电路以及少量的数字电路组成,控制系统的硬件部分非常复杂,功能单一,而且系统非常不灵活、调试困难,阻碍了直流电动机控制技术的发展和应用范围的推广。
2 设计原理、方法及概述
2.1 设计原理及方法
直流电动机根据励磁方式不同,直流电动机分为自励和他励两种类型。不同励磁方式的直流电动机机械特性曲线有所不同。但是对于直流电动机的转速有以下公式: n=U/Cc?-TR内/CrCc? 其中:U—电压;R内—励磁绕组本身的电阻;?—每极磁通(Wb);Cc—电势常数;Cr—转矩常量。由上式可知,直流电机的速度控制既可采用电枢控制法,改变电枢回路电阻,也可采用磁场控制法。对于要求在
一定范围内无级平滑调速系统来说,以调节电枢供电电压的方式为最好。改变电阻只能是有级调速;减弱磁通虽然能够平滑调速,但是调速范围不大,往往只是配合调压方案,在基速(额定转速)以上做小范围的减弱升速。因此,自动控制的直流调速往往以变压调速为主。
本文主要研究了利用MCS-51系列单片机,通过PWM方式控制直流电机调速的方法。PWM控制技术以其控制简单、灵活和动态响应好的优点而成为电力电子技术最广泛应用的控制方式,也是人们研究的热点。由于当今科学技术的发展已经没有了学科之间的界限,结合现代控制理论思想或实现无谐振软开关技术将会成为PWM控制技术发展的主要方向之一。
2.2 设计总概述
以直流电机电枢上电压的占空比来改变平均电压的大小,从而控制电动机的转速为依据,实现对直流电动机的平滑调速,并通过单片机控制速度的变化。本文所研究的直流电机调速系统主要是由硬件和软件两大部分组成。硬件部分是前提,是整个系统执行的基础,它主要为软件提供程序运行的平台。而软件部分,是对硬件端口所体现的信号,加以采集、分析、处理,最终实现控制器所要实现的各项功能,达到控制器自动对电机速度的有效控制。但是此设计中电机只需要正转,所以相对来说简单点。
3硬件设计
3.1 8051单片机简介
AT89C52是一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,AT89C52单片机在电子行业中有着广泛的应用。
AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2 个读写口线,AT89C52可以按照常规方法进行编程,也可以在线编程。其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的 Flash存储器可有效地降低开发成本。部分功能如下:
(1)8kB可反复擦写(大于1000次)Flash ROM; (2)32个双向I/O口; (3)256x8bit内部RAM;
(4)3个16位可编程定时/计数器中断; (5)时钟频率0-24MHz;
(6)2个串行中断,可编程UART串行通道; (7)2个外部中断源,共8个中断源; (8)2个读写中断口线,3级加密位;
3.2直流电机
设计中采用直流电机,自带高精度的磁编码器,性能介绍如图一所示, 接线说明如图二所示:
性能介绍图一
case(3):
LSA=1;LSB=1;LSC=0; break;//显示第3位 case(4):
LSA=0;LSB=0;LSC=1; break;//显示第4位 case(5):
LSA=1;LSB=0;LSC=1; break;//显示第5位 case(6):
LSA=0;LSB=1;LSC=1; break;//显示第6位 case(7):
LSA=1;LSB=1;LSC=1; break;//显示第7位 }
GPIO_DIG=DisplayData[i];//发送段码
j=50; //扫描间隔时间设定 while(j--);
GPIO_DIG=0x00;//消隐 } }
void exter0() interrupt 0 //外部中断脉冲计数
{ //M法测速度(外部中断0和定时器0用在M法测速上)
Inlpuse++; }
void timer0() interrupt 1 {
TH0 = 0x3c; //重装初值 TL0 = 0xb0; time++;
if(time>=20) //1s钟读取一次转速 (2*60ms) { EX0 = 0; TR0 = 0;
num=Inlpuse; //计算转速 Inlpuse=0;
PIDControl();// 100ms 控制一次 Inlpuse=0; EX0 = 1; TR0 = 1; } }
void T1_time() interrupt 3 {
count1++;
if(count1 >= 100) count1 = 0; //计时100us*100=10ms=100Hz
if(count1 < value) pwm = 1; //占空比 else pwm = 0; }
void SystemInit() {
TMOD = 0x21; //设定时器0为工作方式1,定时器1为工作方式2(自动重装初值)
TH0 = 0x3c; //设定50ms一次中断 TL0 = 0xb0;
TH1 = 0x9c; //设定100us一次中断 TL1 = 0x9c;
EA = 1; //开总中断 ET0 = 1; //开定时器0中断
ET1 = 1; //开定时器1中断 EX0 = 1; //开外部中断0
IT0 = 1; //启动下降沿触发有效
TR1 = 1; //启动定时器1 TR0 = 1; //启动定时器0 }
void main() {
SystemInit(); while(1) {
DigDisplay(); } }
AD采集模块:(这一部分程序只是AD采集模块,用的芯片是XPT2046,用spi通信方式,最后改变电位器可以改变temp的值,这部分程序读者可以自己解决,) #ifndef __XPT2046_H_ #define __XPT2046_H_
//---包含头文件---// #include
//---重定义关键词---// #ifndef uchar
#define uchar unsigned char #endif
#ifndef uint
#define uint unsigned int #endif
#ifndef ulong
#define ulong unsigned long #endif
//---定义使用的IO口---// sbit DOUT = P3^7; //输出 sbit CLK = P3^6; //时钟 sbit DIN = P3^4; //输入 sbit CS = P3^5; //片选 uint Read_AD_Data(uchar cmd); uint SPI_Read(void);
void SPI_Write(uchar dat); #endif
#include\
/**************************************************************************** *函数名:TSPI_Start *输 入:无 *输 出:无
*功 能:初始化触摸SPI
****************************************************************************/
void SPI_Start(void) { CLK = 0; CS = 1; DIN = 1; CLK = 1; CS = 0; }
/**************************************************************************** *函数名:SPI_Write
*输 入:dat:写入数据 *输 出:无
*功 能:使用SPI写入数据
****************************************************************************/
void SPI_Write(uchar dat)
{
uchar i; CLK = 0;
for(i=0; i<8; i++) {
DIN = dat >> 7; //放置最高位 dat <<= 1; CLK = 0; //上升沿放置数据 CLK = 1; } }
/**************************************************************************** *函数名:SPI_Read *输 入:无
*输 出:dat:读取 到的数据 *功 能:使用SPI读取数据
****************************************************************************/
uint SPI_Read(void) { uint i, dat=0; CLK = 0; for(i=0; i<12; i++) //接收12位数据 { dat <<= 1; CLK = 1; CLK = 0; dat |= DOUT; } return dat; }
/**************************************************************************** *函数名:Read_AD_Data
*输 入:cmd:读取的X或者Y
*输 出:endValue:最终信号处理后返回的值 *功 能:读取触摸数据
****************************************************************************/ uint Read_AD_Data(uchar cmd)
{ }
uchar i;
uint AD_Value; CLK = 0; CS = 0;
SPI_Write(cmd);
for(i=6; i>0; i--); //延时等待转换结果
CLK = 1; //发送一个时钟周期,清除BUSY _nop_(); _nop_(); CLK = 0; _nop_(); _nop_();
AD_Value=SPI_Read(); CS = 1;
return AD_Value;
正在阅读:
小学英语韵律诗分享培养语感拓展词汇修订稿04-08
2018-2019小学100以内的减法练习题(100道)-推荐word版(3页)03-10
4个月睡眠倒退怎么办10-12
中考满分作文:书籍里的微感动05-02
平湖市第四届机关运动会各单项比赛团体和个人获奖名单doc01-08
为什么说马克思关于费尔巴哈的提纲是一个包含着新世界观天才萌芽的第一个新文件?09-30
第四章钢筋计算(第3稿)05-02
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 闭环
- 源程序
- 单片机
- 附带
- 基于
- 图文
- 控制
- C语言选择题读程序习题及参考答案
- 陕南地区水稻生产现状及发展粳稻生产展望
- 关于省委书记张宝顺对安全生产的重要批示和省长李斌在2012年省政
- 奥数题目大全
- 马克思读书报告《乌托邦》
- 《数字图像处理》课后作业2015
- 金豆子母婴健康管理有限责任公司培训体系
- 2015四川公务员申论模拟题及答案:有原则的宽容
- 焊锡知识
- 湖北省黄冈中学2015 年秋季高一政治历史地理期末考试试题
- 医疗机构从业人员行为规范试题及答案
- 2019-2020学年度(西师大版)一年级语文下册教案 种水珠-
- ANSYS课设结课报告
- 元觉乡非典型肺炎现场应急处置工作预案
- 2016年《创业创新领导力》试卷及答案
- 第二次工业革命练习
- 操作系统复习终极版
- 生物化学试题及答案(1)
- 小学英语培训心得体会
- 心理学研究方法复习