86.基于51单片机的电机功率测量【直流】(仿真)

86.基于51单片机的电机功率测量【直流】(仿真)

86.基于51单片机的电机功率测量【直流】(仿真)

电机功能测量:

1、测量直流电机的电压电流,计算功率

2、设计采样电路,通过AD芯片测量参数

3、LCD显示测量结果

4、按键控制电机转速

资料包括:

image.png

原理图:

image.png

仿真图:

image.png

程序运行图:

image.png

efine uint unsigned int
#define THC0 0xf8
#define TLC0 0x50   //2ms,0x30,含中断处理时间时,0x50
#include "LCD.H"
#include "delay.h"
#include"TLC1543.h"
sbit sw=P2^7;//切换

unsigned char aa[]={'S','e','t','u','p',':',' ',' ',' ',' ',' ','r','/','m','i','n'};  //目标转速。 	   r/min
unsigned char cc[]={' ',' ',' ',' ',' ',' ',' ',' ','r','/','m','i','n',' ',' ',' '};	   //实测转速:       r/min
																												 
uchar i=0,n;
sbit AddSpeed=P3^6;
sbit SubSpeed=P3^7;
sbit PWM_FC=P1^0;
uchar flag=0;

int e ,e1 ,e2 ;//pid 偏差
float uk ,uk1 ,duk ;//pid输出值
float Kp=0.1,Ki=0.05,Kd=0.016;//pid控制系数	10,12,1.5

float current=0;//电流
float volt=0;//电压
uchar disp[]="00.0V";
/*
PID的参数设置可以参照以下来进行:  
     参数整定找最佳,从小到大顺序查;  
	 先是比例后积分,最后再把微分加;  
	 曲线振荡很频繁,比例度盘要放大;  
	 曲线漂浮绕大湾,比例度盘往小扳;  
	 曲线偏离回复慢,积分时间往下降;  
	 曲线波动周期长,积分时间再加长;  
	 曲线振荡频率快,先把微分降下来;  
	 动差大来波动慢。微分时间应加长;  
	 理想曲线两个波,前高后低4比1 ; 
	 一看二调多分析,调节质量不会低;

PID调节器各校正环节的作用

a、比例环节:即时成比例地反应控制系统的偏差信号e(t),偏差一旦产生,
   调节器立即产生控制作用以减小偏差。

b、积分环节:主要用于消除静差,提高系统的无差度。积分作用的强弱取
   决于积分时间常数TI,TI越大,积分作用越弱,反之则越强。

c、微分环节:能反应偏差信号的变化趋势(变化速率),并能在偏差信号的
   值变得太大之前,在系统中引入一个有效的早期修正信号,从而加快系
   统的动作速度,减小调节时间。


*/

int out=0;
uint SpeedSet=3000;
uint cnt=0;
uint Inpluse=0,num=0,zs;//脉冲计数
uint PWMTime=100;//脉冲宽度
void PIDControl();
void SystemInit();
void delay(uchar x);
void PWMOUT();
void SetSpeed();
/**************主函数************/
void main()
{
	uchar i=0;
	uint j;
	float k=0;
	SystemInit();
 	init();
 	LCD_Write_String(0,0,aa);
	zs=1;
	n=60;                    //实物制作时,需要根据你自己选择的码盘电机码盘数修改该值
	while(1)
	{
		SetSpeed();
		//切换控制
		if(sw &&(flag==0))
		{
			flag=1;
			write_com(1);
		}
		if(!sw &&(flag==1))
		{
			flag=0;
			write_com(1);
		}
		if(zs==1)
		{
		    zs=0;
			k=num;
			j=k/2.2;
			cc[4]=j/1000+'0';
			cc[5]=j/100%10+'0';
			cc[6]=j/10%10+'0';
			cc[7]=j%10+'0';
			if(sw)
			LCD_Write_String(0,1,cc);
			//测量电压
			for(i=0;i<8;i++)
			{
				j=TLC1543_read(0);
			}
			volt=j;
			volt=volt*5/4096;
			volt=volt*12;//校准
			//测量电流
			for(i=0;i<8;i++)
			{
				j=TLC1543_read(1);
			}
			current=j;
			current=current*5/4096;
			current=current*1.5;//校准
			if(!sw)
			{
			//显示电压
			j=volt*10;
			disp[0]=j/100+0x30;
			disp[1]=j%100/10+0x30;
			disp[2]='.';
			disp[3]=j%10+0x30;
			disp[4]='V';
			LCD_Write_String(0,0,"U:");
			LCD_Write_String(2,0,disp);
			//显示电流

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值