51单片机PID调增量式光电编码器测速 下载本文

编码器输出的A向脉冲接到单片机的外部中断INT0,B向脉冲接到I/O端口P1.0。当系统工作时,首先要把INT0设置成下降沿触发,并开相应中断。当有有效脉冲触发中断时,进行中断处理程序,判别B脉冲是高电平还是低电平,若是高电平则编码器正转,加1计数;

若是低电平则编码器反转,减1计数。

基于51单片机的直流电机PID闭环调速系统原理详解与程序

(2013-08-04 01:18:15)

转载标签: 51单片机 直流电机 pid pcf8591

分类:单片机

基于51单片机的直流电机PID闭环调速系统

1.电机转速反馈:

原理:利用光电编码器作为转速的反馈元件,设电机转一周光电编码器

发送N个PWM波形,利用测周法测量电机转速。

具体实现:将定时器0设置在计数模式,用来统计一定的时间T内接受到

的脉冲个数M个,而定时器0置在计时模式,用来计时T时间。则如果T时间接受到M个PWM波形,而电机转一圈发出N个PWM波形,则根据测周法原理,电机的实际的转速为:real_speed=M/(N*T),单位转/秒。若将定时器1置在计数模式,则PWM波形应该由P3^3脚输入。

代码实现:

//定时器0初始化,用来定时10ms

void Init_Timer0(void) {

TMOD |= 0x01; //使用模式1,16位定时器 ,且工作在计时模式 TH0=(65536-10000)/256; //定时10ms TL0=(65536-10000)%6; EA=1; //总中断打开 ET0=1; //定时器中断打开 TR0=1; //定时器开关打开 }

// 计数器1初始化,用来统计定时器1计时250ms内PWM波形个数 void Init_Timer1(void) {

TMOD |= 0x50; //使用计数模式1,16位计数器模式 TH1=0x00; //给定初值,由0往上计数 TL1=0x00;

EA=1; //总中断打开 ET1=1; //定时器中断打开 TR1=1; //定时器开关打开 }

//定时器0的中断服务子函数,主要完成脉冲个数的读取,实际转速的计算和PID控制以及控制结 //果输出等工作

void Timer0_isr(void) interrupt 1 {

unsigned char count;

TH0=(65536-10000)/256; //重新赋值 10ms TL0=(65536-10000)%6;

count++;

if (count==25) //如果达到250ms,则计算一次转速并进行一次控制运算 {

count=0;//清零以便于定时下一个250ms TR1=0;//关闭定时器1,统计脉冲个数

real_speed=(256*TH1+TL1)*4/N;//250ms内脉冲个数并由此计算转速 TH1=0x00; //计数器1清零,重新开始计数 TL1=0x00; TR1=1;

OUT=contr_PID();//进入PID控制 ,PID控制子函数代码在后面给出

write_add(0x40,OUT);//进行DA转换,将数字量转换为模拟量,后面会介绍到 } }

2.PID控制:

PID的基本原理在这里不作具体讲解,这里主要给出PID算法的实现,通过调节结构体中比例常数(Proportion)、积分常数(Integral)、微分常数( Derivative)使得转速控制达到想要的精度。

试凑法:注意这里参数调节采用实验凑试法,试凑法也有其规律,下面

做出讲解:

实验凑试法是通过闭环运行或模拟,观察系统的输出结果,然后根据各参数对系统的影响,反复凑试参数,直至出现满意的响应,从而确定PID控制参数。

实验凑试法的整定步骤为\先比例,再积分,最后微分\。 (1)整定比例控制

将比例控制作用由小变到大,观察各次响应,直至得到反应快、超调小的响应曲线。