基于51单片机的直流电机闭环调速控制系统(PID算法)、(L298N)、(直流电机控制)、(PWM调速控制)、(Proteus仿真)

一,电机驱动芯片:L298N简介
L298N 是一种双H桥电机驱动芯片,其中每个H桥可以提供2A的电流,功率部分的供电电压范围是2.5-48v,逻辑部分5v供电,接受5vTTL电平。一般情况下,功率部分的电压应大于6V否则芯片可能不能正常工作。
基本参数
基于51单片机的直流电机闭环调速控制系统(PID算法)、(L298N)、(直流电机控制)、(PWM调速控制)、(Proteus仿真)_第1张图片
内部结构:
基于51单片机的直流电机闭环调速控制系统(PID算法)、(L298N)、(直流电机控制)、(PWM调速控制)、(Proteus仿真)_第2张图片

二,L298N引脚图:
基于51单片机的直流电机闭环调速控制系统(PID算法)、(L298N)、(直流电机控制)、(PWM调速控制)、(Proteus仿真)_第3张图片
详细引脚说明如下:(摘自官方手册)
基于51单片机的直流电机闭环调速控制系统(PID算法)、(L298N)、(直流电机控制)、(PWM调速控制)、(Proteus仿真)_第4张图片
基于51单片机的直流电机闭环调速控制系统(PID算法)、(L298N)、(直流电机控制)、(PWM调速控制)、(Proteus仿真)_第5张图片
基于51单片机的直流电机闭环调速控制系统(PID算法)、(L298N)、(直流电机控制)、(PWM调速控制)、(Proteus仿真)_第6张图片
三:L98N "真值表"

ENA ENB  IN1 IN2 IN3 IN4    OUT1 OUT2 OUT3 OUT4   电机状态
0    0   X.......
0    1   X   X    0   0     X     X     0    0    停止
0    1   X   X    0   1     X     X     0    1    反转
0    1   X   X    1   0     X     X     1    0    正转
0    1   X   X    1   1     X     X     1    1    刹停
1    0  与上类似

四,测速原理:编码器
编码器(encoder)是将信号(如比特流)或数据进行编制、转换为可用以通讯、传输和存储的信号形式的设备。编码器把角位移或直线位移转换成电信号,前者称为码盘,后者称为码尺。按照读出方式编码器可以分为接触式和非接触式两种;按照工作原理编码器可分为增量式和绝对式两类。增量式编码器是将位移转换成周期性的电信号,再把这个电信号转变成计数脉冲,用脉冲的个数表示位移的大小。绝对式编码器的每一个位置对应一个确定的数字码,因此它的示值只与测量的起始和终止位置有关,而与测量的中间过程无关。

五,程序源码:

#include "reg51.h"
#define uchar unsigned char 
#define uint  unsigned int
#define TH0_VALUE 0xF9  
#define TL0_VALUE 0x0F
#define T1_VALUE 0XC0
#define DisplayPORTDAT  P0
#define DisplayPORTSEL  P2
#define COUNTVALUE   1000
#define	 INT0  0
#define	 TIM0  1
#define	 TIM1  3

sbit MotorSpeedADD=P1^1;
sbit MotorSpeedMinus=P1^2;
sbit MotorForward=P1^3;
sbit MotorBackward=P1^4;
sbit MotorStop=P1^5;
sbit L298NIN1=P1^6;
sbit L298NIN2=P1^7;
typedef struct _HANDLER
{
	struct PID
	{
		float MotorSpeedSet;
		float MotorSpeedAct;
		float Kp;
		float T;
		float Ti;
		float Td;
		float Ek; 
		float Kd;
		float Ki;
		float Eklast;
		float Eklastlast;	
		float SEK;
		float OUT0;	
		float OUT;	
		uint Calc_Time;
		uint PWM;
	}pid;
	uint MotorSpeedSetDis;
	uint MotorSpeedActDis;
	uint counter;
	uint PulseIn;
	uchar disBit;
	uchar DisplayDataBuffer[8];
}Handler;
Handler handler;
void delay_ms(uint x)
{
	uint i,j;
	for(i=0;i<x;i++)
		for(j=110;j>0;j--);
}
void Timer1_IRQ(void)interrupt TIM1
{
   	handler.counter++;	
}
int main()
{	
	fp[0]();
	while(1)
	{
		fp[2]();
		fp[3]();
		fp[4]();		
	}
	return 0;
}

仿真视频:

基于51单片机的直流电机闭环调速控制系统设计(PID算法)

你可能感兴趣的:(Proteus仿真)