基于51单片机的闭环控制 附带源程序 - 图文
更新时间:2023-12-20 08:35: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;
正在阅读:
西蒙波伏娃经典语录02-06
我最喜欢的一位唐朝诗人作文600字06-29
关于社会组织登记的有关问题06-03
陈振明《公共政策分析》配套题库-课后习题(结论:走向公共决策的科学化、民主化和法制化)05-06
2014年广西第八届大学生电子设计竞赛(校内选拔赛--文化月电赛赛题)05-15
期末作业《心理学》11-09
《电子系统综合训练》开题报告 - 图文06-23
中小学班主任网络知识竞赛(资料库)04-28
SXMX5项目管理制度汇编(线路工程)05-08
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 闭环
- 源程序
- 单片机
- 附带
- 基于
- 图文
- 控制
- 医疗机构从业人员行为规范试题及答案
- 焊锡知识
- 陕南地区水稻生产现状及发展粳稻生产展望
- 浙江省丽水市莲都区处州中学2017届九年级科学上学期开学检测试题(答案不全)浙教版
- 光缆迁改合同111
- 计算机网络作业参考答案
- 2012-2013学年度石家庄高二第一学期期末数学理科试题 - 图文
- 钢筋焊接 培训资料
- 不要再闹出这样的笑话 - 兼谈范蠡故里争论的由来和发展
- H5实例2-级联菜单
- Caché学习资料整理
- 绿博会参观考察材料
- 《数字图像处理》课后作业2015
- 装修工程技术标
- 2015四川公务员申论模拟题及答案:有原则的宽容
- 门户网站基础:统一认证身份平台
- 马克思读书报告《乌托邦》
- 厦门大学远程教育项目管理专业第二学期测试题及答案 - 英语
- 2018届人教版八年级数学上册专题训练:第十三章 13.1-13.2 轴对称与轴对称图形(无答案)
- chengshi