这是我大三做的运动控制系统课程设计,对直流电机速度、电流双闭环pid控制,有程序源码,还有自己做的上位机,也包括源码,上位机可显示速度和电流曲线,并且可以设置速度,里面也有自己的设计文档,里面也有演示视频
制作出来的实物图如下:
拖动系统课程设计报告书
题目: 直流电机速度电流双闭环控制器设计
任务书 | | | 随着社会的发展,各种智能化的产品日益走入寻常百姓家。为了实现产品的便携性、低成品以及对电源的限制,小型直流电机应用相当广泛。对直流电机的速度调节,可分为励磁控制法与电枢电压控制法两类。随着电力电子技术的进步,发展了许多新的电枢电压控制方法。其中,PWM斩波器进斩波调压的驱动装置与传统晶闸管驱动装置比较,具有下列优点:需用的大功率可控器件少,线路简单;调速范围宽:电流波形系数好,附加损耗小;功率因数高。可以广泛应用于现代直流电机伺服系统中。为抑制负载扰动,同时提高启动制动性能,闭环控制的PWM直流调速系统成为研究热点。
一、该同学的主要任务 1、查找文献,掌握直流电动机PWM调速的基本工作原理; 2、设计直流电动机双闭环调速系统,建立系统模型并进行仿真试验; 3、设计并调试基于51单片机的H桥驱动控制电路; 4、设计速度调节器算法,对闭环系统进行负载试验;
二、功能测评要求 1、能独立设置电机速度(按键设置或滑动变阻器设置或上位机设置); 2、能显示当前电机的实际速度(单位为:r/min); 3、能控制电机启动、停止、正反转、软启动和软制动; 4、给电机加载后,速度能迅速调节回给定值; 5、对电流能进行截止负反馈控制,抑制电流冲击。
三、提供波形数据: 1、不同速度下的PWM波形; 2、加载后的速度波形;
| |
本课题主要研究直流电动机的闭环控制的调压调速系统,采用PWM调压控制方案,该同学主要工作是双闭环调速系统建模与仿真,实际速度闭环PWM调速系统的设计与实现。
基本内容: 1、设计直流电动机双闭环调速系统总体方案; 2、建立系统数学模型,并设计电流调节器和转速调节器算法; 3、直流电机的控制电路、驱动电路、保护电路及其检测电路设计 4、 基于单片机的闭环调速系统软件程序设计; 5、分别对空载、负载和变给定工况进行调速系统实验与分析; 6、记录波形分析数据。
| | 一、主要参考文献 1、电机原理与设计的matlab分析,戴文进,电子工业出版社; 2、电气传动的脉宽调制控制技术,吴守,机械工业出版社; 3、电力电子技术,浣喜明,高等教育出版社; 4、电动机的单片机控制,王晓明,北京航空航天出版社; 5、电机与拖动基础,李发海,清华大学出版社;
| | | | | | | | | | | | | | | | | | | | | | | | | | | |
一、 双闭环调速系统1.1双闭环调速系统概述在许多场合,为了充分发挥生产机械的效能,提高生产率,速度控制系统经常处于起动、制动、反转以及突加负载等过渡过程中,所以要求速度控制系统有较好的动态性能。 对高性能、静态的速度控制系统的要求是具有快速跟随特性(起制性)、较好的抗干扰性和高可可靠性(可瞬态过载但不过流)。因此引入了转速、电流双闭环调速系统。 转速负反馈和比例积分调节器的单闭环调速系统能够保证系统在稳定的条件下实现转速无静差调节。但是该控制系统也有自身的缺点,比如要求快速启动、突加负载动态速降等。 这种单闭环系统就难以满足要求,这是因为在单闭环调速系统中尚不能按要求来控制动态过程的电流和转速。为解决这一矛盾,电流截止负反馈环节,它与转速负反馈调速系统结合在一起,可以专门用来控制电流,从工作原理上分析,它只能是在超过临界电流值以后,才能靠强烈的负反馈作用限制电流的冲击,由于电流截止负反馈只能限制最大电流,电机转矩也随着电流减小而下降,使启动加速过程变慢,启动的时间也比较长,带电流截止负反馈单闭环调速系统。为了能够实现在允许条件下最快启动,依照反馈控制规律,验证与实践,采用转速、电流双闭环调速系统就能达到上述要求。 1.2双闭环调速系统电路原理如下图为转速、电流的双闭环调速系统的原理图。图中两个调节器ASR和ACR分别为转速调节器和电流调节器,二者串级连接,即把转速调节器的输出作为电流调节器的输入,在用电流调节器的输出去控制晶闸管整流器的触发装置。电流环在内,称之为内环;转速环在外,称之为外环。 两个调节器输出都带有限幅,ASR的输出限幅Uim决定了电流调节器ACR的给定电压最大值Uim,对就电机的最大电流,电流调节器ACR输出限幅电压Ucm限制了整流器输出最大电压值,限最小触发角a。 双闭环调速系统电路原理图
1.3双闭环调速系统动态结构图双闭环调速系统的动态结构如下图所示,电流采样模块采用2欧姆的碳膜电阻,根据驱动的设计我们把碳膜电阻加在MOS管和GND相连的地方,因为电流不管换向与否碳膜电阻采样到的电流方向不变,所以给ADC采样带来了极大的方便,而且碳膜电阻功率比较大,当电机堵转导致电流比较大的时候不至于烧坏。 由编码器得到电机的转速,,通过编码器反馈脉冲信号,本次采用的编码器精度为344,电机转一圈产生344个脉冲。 双闭环调速系统的动态结构图
1.4双闭环算法结构实现本次课程设计算法的实现分为如下几个部分ADC采样实现,中断脉冲计数,定时器计算速度,定时器产生两路PWM,通过这两路PWM占空比的差值调节电机的转速,一个串级PI调节器。 ADC采样开了一路采样,设置ARM采样转化时间为1微秒,设置PWM周期为5ms为了减小电流波动带来的采样误差我采集到10000个数字电压然后计算平均电压,采集到10000个点正好是两个PWM周期,计算值有效而且响应快速。中断系统配置成上升沿触发,当来一次脉冲count会加1,开启另外一个定时器50ms获取一次count的值,然后求的这50ms电机的转速,及时与设定速度调节,计算速度误差通过PI调节器调节速度和电流双闭环,PI调节器采用位置式写法,位置式PI需要注意的地方是一个积分饱和,如果不设定积分限制PI调节器会跑飞,带来很大的问题,外环PI调节器的积分限制我采用分级控制的方式,当速度误差大于500时设定积分限制为电机堵转时能够达到的最大电流积分限制设置为8000,根据pi参数计算的得出,当速度误差大于300时设定积分限制为5000,当速度误差小于300时,设定积分限制为2000最小,计算得到PID值为速度稳定是的ADC的值,这样设计的好处就是不但能减小系统的超调量而且能够加速系统的响应时间。
二、转速、电流双闭环调速系统电气设计2.1驱动电路设计驱动电路的设计采用双路PWM,采用MOS管搭建H桥,采用2104芯片,芯片的IN端输入高电平时HO输出端输出高端平,左上角的MOS管导通,LO端输出低电平左下角MOS管关断,上下MOS管导通和关断够成互补,当芯片IN端输入低电平输出电平相反MOS管的导通关断相反。 驱动电路
2.2过流保护电路设计过流保护的电路设计如下图所示,过流保护电路的功能当电机两端短路时继电器断开,电路断开不供电。当电机堵转时继电器也断开。过流保护电路设计如下:本电路设计的主要核心元件是比较器、555定时器、继电器。比较器的正向输入端设置一个比较电压,反向输入端输入采样电阻得到的电压,如果电机堵转或者电机两端短路会导致采样电阻的电压值变得很大,反向输入电压大于正向输入电压比较器输出低电平,555定时输出高电平,继电器采用常闭型当为高电平时继电器断开。通过电阻和电容的值设定555定时器的输出高电平时间。 2.3上位机控制系统设计上位机的设计主要是为了显示速度和电流的变化曲线,蓝色线为实时速度的显示,红色线是设定速度的曲线显示,黑色线是电流变化的曲线,本次电流的值用ADC的值统一表示,本上位机的功能涵盖了所有电机控制的功能,可以通过上位机控制电机的正转、反转、和停止。基本的功能,同时还可以加速减速,每次按键加速或者减速10r,设定速度标度窗口输入所要标定的速度然后点击设置按钮,红色曲线便可按照设置的数值显示曲线,上面还有两个显示速度和电流具体数值的窗口。
stm32单片机源程序如下: - #include "led.h"
- #include "delay.h"
- #include "key.h"
- #include "sys.h"
- #include "usart.h"
- #include "timer.h"
- #include "UserConfiguration.h"
- #include "UserFunction.h"
- #include "lcd.h"
- #include "exti.h"
- #include "adc.h"
- #include "PID_Current.h"
- //PWM输出实验
-
- u32 spd_now=0;
- u32 set_spd=3300,set_vol=300,PwmOne_Set,adcx;
- float av;
-
- enum
- {
- flag_add,flag_minus,flag
- }FLAG_SPEED;
- enum
- {
- flag_zheng,flag_fan,flag_stop
- }FLAG_DIR;
-
- int main(void)
- {
- // u8 i=0,key;
-
- delay_init(); //延时函数初始化
- KEY_Init();
- NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
- uart_init(9600); //串口初始化为9600
- LED_Init(); //LED端口初始化
- Adc_Init(); //ADC初始化
- TIM1_PWM_Init(4999,71);
-
- EXTIX_Init();
- LCD_Init();
-
- POINT_COLOR=RED;
- TIM3_Int_Init(9999,719);
-
- FLAG_DIR=flag_zheng; //开始是正转
- FLAG_SPEED=flag;
- while(1)
- {
-
-
-
-
- // UserPIDCurrentControl(set_vol) ;
- av=adcx*3.3/4096;
- LCD_ShowxNum(130,100,spd_now,8,16,0); //nowspd;时时速度
- LCD_ShowxNum(130,130,set_spd,8,16,0); //设定速度
- LCD_ShowxNum(130,160,3600,8,16,0); //电机最大速度
- LCD_ShowxNum(130,190,adcx,8,16,0);
- LCD_ShowxNum(130,230,av*1000,8,16,0);
- LCD_ShowxNum(130,250,PwmOne_Set,8,16,0);
- LCD_ShowString(50,160,100,12,16,"Max_Speed:");
- LCD_ShowString(50,100,100,12,16,"Now_Speed:");
- LCD_ShowString(50,130,100,12,16,"Set_Speed:");
- LCD_ShowString(50,190,100,12,16,"ADC:");
- LCD_ShowString(50,230,100,12,16,"Voltage:");
- adcx=Get_Adc_Average(ADC_Channel_2,10000);
- //按键设置标量速度
-
- if(FLAG_SPEED==flag_add)
- {
- FLAG_SPEED=flag;
- set_spd+=10; //加速
- }
- else if(FLAG_SPEED==flag_minus)
- {
- FLAG_SPEED=flag;
- set_spd-=10; //减速
- }
- if(set_spd>=3600)
- {
- set_spd=3600;
- }
- if(set_spd<=0)
- {
- set_spd=0;
- }
-
- }
- }
复制代码vb上位机源码如下:
所有资料51hei提供下载:
|