课程设计题目
《计算机控制技术》
课程设计报告
题 目: 基于单片机的直流伺服电机速度控制系统
姓 名:
学 号:
专 业: 自动化
年 级:
指导教师:
2012年 12月 7日
目录
任务书………………………………………………………………………………………..….2
参考资料…………………………………………………………………………………..……3
设计步骤与内容………………………………………………………………………………7
设计总结…………………………………………………………………………………..…...12
任务书
一、设计题目
基于单片机的直流伺服电机速度控制系统
二、设计目的
1.加深理解和掌握计算机控制系统的组成结构和原理。
2.学习并掌握基于状态空间的状态控制器的原理和设计方法。
3.学习并掌握数字控制器的仿真和实验研究方法。
三、设计任务
1.设计任务:
基于单片机设计一个直流伺服电机闭环调速系统,利用电机上光电编码器所提供的转速脉冲信号,通过选择合适的数字控制算法,实现对给定的直流伺服电机的速度调节,要求在选定的目标转速范围(60—1800RPM)内,调速系统都具有较为快速、平稳和准确的响应性能。提交一份课程设计报告,其中包含的主要内容:总体设计思路,测速算法的设计,控制算法的选择,系统工作流程,实验测试结果,分析讨论,程序源代码。
2.实验设备:
参考资料
Copal直流伺服电机:
L298N直流电机\步进电机两用驱动模块:
具体设计内容步骤与程序等:
步骤:
程序:
#include "main.h"
#define Kp 0.05
#define Ki 0.05
#define Kd 0.03
#define Kt 0
uchar code table[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar code LED_W[8] = {0,1,2,3,4,5,6,7};
uchar code smd[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6,0xff};
uchar code number[]={0,1,2,3,4,5,6,7,8,9};
uchar code smgm[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
uchar code smgw[]={0,0,1,2,3,4,5,6,7};
uint pulse,jj;
float pre_err=0,last_err=0;
float Up=0,Ui=0,Ud=0,Uout=0;
uchar P2state,control_out;
float speed_set=500,speed_measure;
uint value1,value2,value3,value4;
void Delay1(uint i)
{
uchar x,j;
for(j=0;j=255)Uout=255;
if(Uout<=0)Uout=0;
control_out=(uchar)(Uout);
value3=(uint)(control_out);
}
void delay(uint i)
{
uint j,k;
for(j=i;j>0;j--)
{for(k=255;k>0;k--)PWM_out(control_out);}
}
/*void keyscan()
{
P2state=P2;
if((P2state&0x01)==0)
{delay(250);P2state=P2;if((P2state&0x01)==0){speed_set+=10;}}
if((P2state&0x02)==0)
{delay(250);P2state=P2;if((P2state&0x02)==0){speed_set+=50;}}
if((P2state&0x04)==0)
{delay(250);P2state=P2;if((P2state&0x04)==0){speed_set+=100;}}
if((P2state&0x08)==0)
{delay(250);P2state=P2;if((P2state&0x08)==0){speed_set+=500;}}
if((P2state&0x10)==0)
{delay(250);P2state=P2;if((P2state&0x10)==0){speed_set-=10;}}
if((P2state&0x20)==0)
{delay(250);P2state=P2;if((P2state&0x20)==0){speed_set-=50;}}
if((P2state&0x40)==0)
{delay(250);P2state=P2;if((P2state&0x40)==0){speed_set-=100;}}
if((P2state&0x80)==0)
{delay(250);P2state=P2;if((P2state&0x80)==0){speed_set-=500;}}
}*/
void main()
{
ECT_init();
PWM_init();
SCI_init();
motor_H=1;
motor_L=0;
while(1)
{
//keyscan();
value1=(uint)(speed_set);
PWM_out(control_out);
//send_scope(value1,value2,value3,value4);
//P0=0X00;
xianshi();
}
}
void int0() interrupt 0
{
pulse++;
}
void time0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
speed_measure=pulse*15/2;//pulse/160/0.01*60
jj=speed_measure;
value2=(uint)(speed_measure);
pid();
pulse=0;
}
设计总结:
这是一次关于xxx同学跟xxx同学一起合作的计控课程设计,我们是这样分工的:xxx主要是负责硬件调试这一块,xxx主要是负责软件与程序这一块,经过我们的通力合作,终于完成了这次课设,但是其中也遇到种种挫折,比如xxx同学的程序有些小问题,但是经过与同学们的对比跟互相讨论,我们也得到了修正,又比如xxx同学在调试过程中遇到电机在旋转,但是数码管显示的是乱码等情况,经验证程序跟接线都无问题,我们猜测是实验室提供的数码管有问题,于是我们找人换了个板,最终在规定时间内完成了这次课设。
经过这次课程设计,我们不仅加深了对计算机控制系统的组成结构和原理的理解和掌握,学习并掌握了基于状态空间的状态控制器的原理和设计方法,还学习并掌握了数字控制器的仿真和实验研究方法;而且大大的提高了我们的实践能力,与同学交流的交际能力,和提升了我们互帮互助,团结友爱的精神以及我们实践操作水平的自信心。
展开阅读全文