编码器输出的A向脉冲接到单片机的外部中断INT0,B向脉冲接到IO端口P10。当系统工作时,首先要把INT0设置成下降沿触发,并开相应中断。当有有效脉冲触发中断时,进行中断处理程序,判别B脉冲是高电平还是低电平,若是高电平则编码器正转,加1计数;
若是低电平则编码器反转,减1计数。
基于51单片机的直流电机PID闭环调速系统原理详解与程序
20180804011815
转载
标签:51单片机直流电机pidpcf8591分类:单片机
基于51单片机的直流电机PID闭环调速系统
1电机转速反馈:
原理:利用光电编码器作为转速的反馈元件,设电机转一周光电编码器发送N个PWM波形,利用测周法测量电机转速。b5E2RGbCAP具体实现:将定时器0设置在计数模式,用来统计一定的时间T内接受到的脉冲个数M个,而定时器0置在计时模式,用来计时T时间。则如果T时间接受到M个PWM波形,而电机转一圈发出N个PWM波形,则根据测周法原理,电机的实际的转速为:real_speedMNT),单位转秒。若将定时器1置在计数模式,则PWM波形应该由P33脚输入。p1Ea
qFDPw代码实现:定时器0初始化,用来定时10ms110
fvoidI
it_Timer0voidTMOD0x01。使用模式1,16位定时器,且工作在计时模式定时10ms
DXDiTa9E3d
TH06553610000256。TL065536100006。EA1。ET01。TR01。RTCrpUDGiT
总中断打开定时器中断打开定时器开关打开
计数器1初始化,用来统计定时器1计时250ms内PWM波形个数voidI
it_Timer1voidTMOD0x50。TH10x00。TL10x00。EA1。ET11。TR11。
5PCzVD7HxA
使用计数模式1,16位计数器模式给定初值,由0往上计数
总中断打开定时器中断打开定时器开关打开
定时器0的中断服务子函数,主要完成脉冲个数的读取,实际转速的计算和PID控制以及控制结果输出等工作
voidTimer0_isrvoidi
terrupt1u
sig
edcharcou
t。TH06553610000256。TL065536100006。重新赋值10ms
jLBHr
AILg
210
fcou
t。
ifcou
t25如果达到250ms,则计算一次转速并进行一次控制运算cou
t0。清零以便于定时下一个250msTR10。关闭定时器1,统计脉冲个数real_speed256TH1TL14N。250ms内脉冲个数并由此计算转速xHAQX74J0XTH10x00。TL10x00。TR11。
LDAYtRyKfE
计数器1清零,重新开始计数
OUTco
tr_PID。进入PID控制,PID控制子函数代码在后面给出write_add0x40OUT。进行DA转换,将数字量转换为模拟量,后面会介绍到
2PID控制:PID的基本原理在这里不作具体讲解,这里主要给出PID算法的实现,通过调节结构体中比例常数Proportio
)、积分常数I
tegral)r