51系列单片机直流电机闭环调速实验

上传人:鲁** 文档编号:431737241 上传时间:2023-06-01 格式:DOC 页数:15 大小:357KB
返回 下载 相关 举报
51系列单片机直流电机闭环调速实验_第1页
第1页 / 共15页
51系列单片机直流电机闭环调速实验_第2页
第2页 / 共15页
51系列单片机直流电机闭环调速实验_第3页
第3页 / 共15页
51系列单片机直流电机闭环调速实验_第4页
第4页 / 共15页
51系列单片机直流电机闭环调速实验_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《51系列单片机直流电机闭环调速实验》由会员分享,可在线阅读,更多相关《51系列单片机直流电机闭环调速实验(15页珍藏版)》请在金锄头文库上搜索。

1、word指导教师评定成绩:审定成绩:自 动 化 学 院综合实验报告综合实验(1):51系列单片机直流电机闭环调速实验基于Protuse仿真实验平台实现专业: 电气工程与自动化 班级:某某:学号:时间: 2013.10-2013.12 一、设计要求1设计硬件电路:(1) 直流电机采用编码器测速(2) 直流电机速度给定采用电位器进展模拟电压给定,05V(3) AD转采用12位转换(4) 显示采用8位LED,或者LCD1602显示(5) 键盘4X4,PID等参数通过键盘设置。2软件(1) 控制算法:数字PID,参数在线修改。(2) 显示窗口:显示速度的设置值SV、速度的实际值PV。(3) 实际速度值

2、,速度峰值、峰值时间等通过串口上传到上位机(选做)二、实验内容直流电机PWM控制系统的主要功能包括:直流电机的加速、减速以与电机的正转和反转,并且可以调整电机的转速,还可以方便的读出电机转速的大小,能够很方便的实现电机的智能控制。其间,还包括直流电机的直接清零、启动置数、暂停、连续功能。该直流电机系统由以下电路模块组成:振荡器和时钟电路:这局部电路主要由AT89C52、些电容、晶振组成。设计输入局部:这一模块主要是利用带中断的独立式键盘来实现。设计控制局部:主要由AT89C52单片机的外部中断扩展电路组成。设计液晶显示局部由LCD1602液晶显示模块组成。直流电机PWM控制实现局部:主要由一些

3、二极管、电机和L298直流电机驱动模块组成。1主控电路主控型号:AT89C52图2-1单片机最小系统2电机驱动电路电机的驱动芯片选用L298N 作为驱动芯片,工作稳定电机驱动信号由单片机提供,信号经过光耦隔离后,通过L298N的输出脚与两个电机相连,L298N内部包含4通道逻辑驱动电路,可以方便的驱动两个直流电机,或一个两相步进电机。L298N可承受标准TTL逻辑电平信号VSS,VSS可接457 V电压。4脚VS接电源电压,VS电压X围VIH为2546 V。输出电流可达25 A,可驱动电感性负载。L298N的 OUT1,OUT2和OUT3,OUT4之间可分别接电动机,该4个端口用来控制电机的转

4、向,L298的另外两个使能端是用来通过调节占空比控制电机转速。图2-2电机驱动电路3键盘输入电路采用键盘4X4,进PID等参数通过键盘设置图2-3输入电路4AD采集电路型号:TLC2543,为12位AD图2-4AD采集电路5显示电路采用LCD1602液晶进展信息显示图2-5LCD1602显示电路三、PID算法将偏差的比例Proportion、积分Integral和微分Differential通过线性组合构成控制量,用这一控制量对被控对象进展控制,这样的控制器称PID控制器。PID控制分为模拟PID控制和数字PID控制。而单片机PID控制属于数字PID控制,数字式PID控制算法可以分为位置式PI

5、D和增量式PID控制算法。经典算法如下:float MaxValue=100;/上限float MinValue=0;/下限/*PID参数定义*/struct PID sPID;/PID Control Structurestruct PID *sptr = &sPID;/PID 地址指针/*PID初始化*/void PID_Init() sptr-SetPoint = 100;sptr-Output = 0;/输出值sptr-LastError = 0;/Error-1sptr-PrevError = 0;/Error-2sptr-SumError = 0;sptr-Proportion =

6、 0.5;/比例常数 Proportional Constsptr-Integral = 0;/积分常数 Integral Constsptr-Derivative = 0;/微分常数 Derivative Const/*PID位置式*/float LocPIDCalc(float NextPoint) float iError,dError;iError = sptr-SetPoint - NextPoint;/偏差sptr-SumError += iError;/积分dError = iError - sptr-LastError; /微分sptr-LastError = iError;s

7、ptr-Output = sptr-Proportion * iError/比例项+ sptr-Integral * sptr-SumError/积分项+ sptr-Derivative * dError;/微分项if(sptr-Output MaxValue) sptr-Output = MaxValue;/上限控制if(sptr-Output Output = MinValue;/下限控制printf(PIDOUT=%frnrn,sptr-Output);return sptr-Output;/*PID增量式*/float IncPIDCalc(float NextPoint)float

8、iError;iError = sptr-SetPoint - NextPoint;sptr-Output = sptr-Proportion * iError/E0- sptr-Integral * sptr-LastError/E-1+ sptr-Derivative * sptr-PrevError;/E-2sptr-PrevError = sptr-LastError;sptr-LastError = iError;if(sptr-Output MaxValue) sptr-Output = MaxValue;/上限控制if(sptr-Output Output = MinValue;

9、/下限控制printf(PIDOUT=%frnrn,sptr-Output);return(sptr-Output);四、整体电路图4-1整体电路五、结论本课题的目的在于利用单片机实现PID算法产生PWM脉冲来控制电机转速。归纳起来主要做了如下几方面的工作:1、PID算法与PWM控制技术有机的结合;2、设计了电机调速电路;3、利用C语言进展程序设计,并通过仿真源程序见附录。根据上面论述结合测试数据可以看出本次设计根本完成了设计任务和要求。通过此次设计,掌握了数字PID算法的使用与编程方法,学习了如何进展系统设计与相关技巧,为今后的工作和学习奠定了坚实的根底。六、控制程序代码#include #

10、include delay.h#include 1602.h#include PID.h#include timer.h#includekeyboard.h#include /*- 主程序-*/main() unsigned char temp7;/定义显示区域临时存储数组 unsigned char key; /按键 LCD_Init(); /初始化液晶 DelayMs(20); /延时有助于稳定 LCD_Clear(); /清屏 init(); while (1) /主循环 sprintf(temp, %5.1f ,(float)speed);/float是强制转换符号,用于将结果转换成浮

11、点型,%5.0f 表示浮点输出,共5位数,小数点后0位 LCD_Write_String(0,0,temp); key = KeyPro(); #include #include timer.h#include 1602.h#include PID.h#include unsigned int init_count;/中断次数unsigned int count,count1;/定时溢出次数unsigned int speed0,speed;/速度unsigned long time;/脉冲周期char spwm = 10;/pwm值/*定时器初始化*/void init_clock()TMO

12、D = 0x21;/设定时器0为工作方式1,定时器1为工作方式2(自动重装初值)TH0 = 0x3c;/设定50ms一次中断TL0 = 0xb0;TH1 = 0x9c;/设定100us一次中断TL1 = 0x9c;EA = 1;/开总中断ET0 = 1;/开定时器0中断TR0 = 1;/启动定时器0/TR0 = 0;/关闭定时器0ET1 = 1;/开定时器1中断TR1 = 1;/启动定时器1/*外部中断初始化*/void init_int()EA = 1;/开总中断EX0 = 1;/开外部中断0IT0 = 1;/启动下降沿触发有效/*总初始化*/void init()init_int();init_clock();/*中断服务程序*/void into() interrupt 0init_count+;void T0_time() interrupt 1TH0 = 0x3c;/重装初值TL0 = 0xb0;count+;if(count=20)/50ms*20=1sEX0 = 0;TR0 = 0;led = led;speed = init_count;/电机转速spwm = pidcontrol(speed);count = 0;init_

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号