• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

【工程师6】+实践类+电动自行车BLDC无刷电机控制保护的模拟仿真

感谢电源网给我们提供这样一个平台,下面介绍一下电动自行车BLDC无刷电机控制保护的模拟仿真系统主要设计要求

主要指标:

1.对于无刷直流电机进行实物仿真搭建并通过模拟控制器采集主要参数信息

2.模拟控制器能够将数据传输出去并在主控面板上实时显示

3.主控制器和模拟控制可以进行数据传输,数据传输模式不限

4.主控制模块实现对采样数据的处理并显示

5.当电动自行车电机失压、负载过轻、超额定转速后控制器执行相应动作并让模拟器执行相应机构

下附原理图

全部回复(28)
正序查看
倒序查看
薄浩楠
LV.5
2
2019-08-27 23:54

本次设计在电动自行车bldc直流电机的控制的基础上,主要利用BLDC无刷直流电机建立对电动自行车电机的仿真;通过各类传感器、信号调理电路以及AD转换电路等将采集量转换成数字量并送至模拟控制器中;模拟控制器将采集量记录并保存在EEPROM中并通过异步串口协议将采集量传输至终端控制器中;终端控制器处理模拟调节器发来的信息并下达保护控制信号,完成对发电机的控制检测显示和保护。

搭建模型如图所示

1
回复
薄浩楠
LV.5
3
2019-08-27 23:55
@薄浩楠
本次设计在电动自行车bldc直流电机的控制的基础上,主要利用BLDC无刷直流电机建立对电动自行车电机的仿真;通过各类传感器、信号调理电路以及AD转换电路等将采集量转换成数字量并送至模拟控制器中;模拟控制器将采集量记录并保存在EEPROM中并通过异步串口协议将采集量传输至终端控制器中;终端控制器处理模拟调节器发来的信息并下达保护控制信号,完成对发电机的控制检测显示和保护。搭建模型如图所示[图片]

为保障电动自行车电机性能的实时监测与维护,因此搭建模拟电动自行车的BLDC电机,模拟电动自行车电机模型如下图所示。

0
回复
薄浩楠
LV.5
4
2019-08-27 23:55
@薄浩楠
为保障电动自行车电机性能的实时监测与维护,因此搭建模拟电动自行车的BLDC电机,模拟电动自行车电机模型如下图所示。[图片]
型号是A2212航模BLDC无刷电机
0
回复
薄浩楠
LV.5
5
2019-08-27 23:56
@薄浩楠
型号是A2212航模BLDC无刷电机

介绍一下电动自行车无刷直流电机仿真采样的硬件电路和具体实施方案

1.本系统需要对汽车车载三相发电机的电压、电流以及转速进行实时在线采集。针对此系统三相交流电压的采集,可通过DL-PT202G型电压互感器将电压变为低压可测的范围之内,将电压互感器二次侧得到的电压经过整流桥以及电解电容的整流滤波之后输出一个脉动较小的直流电压,这个直流电压由于在0~5V可被STC12C5A60S2单片机AD采样模块准确检测到。

2.针对此系统电流的采样,采用微电阻压降放大的间接采样法,主要原因是因为STC12C5A60S2单片机AD采样模只识别电压信号不识别电流等其他类型的信号。其具体做法是在系统主功率回路中串入一个阻值较小的康铜丝或者水泥电阻,在功率电流流向这个阻值较小的电阻时会产生一个微小的压降,通过类似LM358之类的运算放大器将其电压放大再送至STC12C5A60S2单片机AD采样模块,来实现对系统主回路电流的测量。

3.针对此系统汽车三相交流发电机的转速测量,在考虑到安装体积以及其他综合因素情况之下,本次采集选用电机码轮以及以LM393为核心的光电门检测模块作为检测发电机转速的传感器,通过间接测量光电门测速模块的下降沿频率来进一步测出发电机的转速。

下图是电压采样电路

0
回复
薄浩楠
LV.5
6
2019-08-27 23:57
@薄浩楠
介绍一下电动自行车无刷直流电机仿真采样的硬件电路和具体实施方案1.本系统需要对汽车车载三相发电机的电压、电流以及转速进行实时在线采集。针对此系统三相交流电压的采集,可通过DL-PT202G型电压互感器将电压变为低压可测的范围之内,将电压互感器二次侧得到的电压经过整流桥以及电解电容的整流滤波之后输出一个脉动较小的直流电压,这个直流电压由于在0~5V可被STC12C5A60S2单片机AD采样模块准确检测到。2.针对此系统电流的采样,采用微电阻压降放大的间接采样法,主要原因是因为STC12C5A60S2单片机AD采样模只识别电压信号不识别电流等其他类型的信号。其具体做法是在系统主功率回路中串入一个阻值较小的康铜丝或者水泥电阻,在功率电流流向这个阻值较小的电阻时会产生一个微小的压降,通过类似LM358之类的运算放大器将其电压放大再送至STC12C5A60S2单片机AD采样模块,来实现对系统主回路电流的测量。3.针对此系统汽车三相交流发电机的转速测量,在考虑到安装体积以及其他综合因素情况之下,本次采集选用电机码轮以及以LM393为核心的光电门检测模块作为检测发电机转速的传感器,通过间接测量光电门测速模块的下降沿频率来进一步测出发电机的转速。下图是电压采样电路[图片]

下图是电流采样电路

有in282组成

0
回复
薄浩楠
LV.5
7
2019-08-27 23:59
@薄浩楠
下图是电流采样电路有in282组成[图片]

下图是测速模块接线图

下图是测速电路

0
回复
薄浩楠
LV.5
8
2019-08-28 00:00
@薄浩楠
下图是测速模块接线图[图片]下图是测速电路[图片]

下图是测量传感电路实物

0
回复
薄浩楠
LV.5
9
2019-08-28 00:00
@薄浩楠
下图是测量传感电路实物[图片]

此图是当时测得电机的两相波形

0
回复
薄浩楠
LV.5
10
2019-08-28 00:03
@薄浩楠
此图是当时测得电机的两相波形[图片]

总体设计方案介绍

本系统利用DL-PT202G型电压互感器作为电动自行车电机电压采样传感器,采用码盘和基于宽电压比较器LM393的电机测速模块来实现对电机速度的测量。保护电路采用JQC-3F(T73)5VDC型继电器作为保护器件。显示报警电路由液晶显示屏LCD1604、LED发光二极管和有源蜂鸣器组成。模拟控制模块拟采用STC12C5A60S2作为电压调节电路的主控核心芯片并将采样回来的电机、电压、电流和速度参数进行数字化处理通过异步串口通信发送给主控制器。主控制电路核心控制芯片采用PIC18F2580单片机,通过PIC18F2580单片机将采样值进行处理并发出相应执行命令给相应被控元件。由于本系统需要模拟发电机以及要求负载三相相对对称的特殊性,现采用A2212无刷直流电机模拟电动自行车电机,通过简易电子负载电路实现负载的三相对称要求。

电子负载电路通过三相全桥整流电路和滤波电路将三相交流电压转化为直流电压,通过简易负载电路调节一路负载便可实现三相电流的均衡调节。

模拟电子负载电路是下图

下图是简易电子负载电路实物图

0
回复
薄浩楠
LV.5
11
2019-08-28 00:09
@薄浩楠
总体设计方案介绍本系统利用DL-PT202G型电压互感器作为电动自行车电机电压采样传感器,采用码盘和基于宽电压比较器LM393的电机测速模块来实现对电机速度的测量。保护电路采用JQC-3F(T73)5VDC型继电器作为保护器件。显示报警电路由液晶显示屏LCD1604、LED发光二极管和有源蜂鸣器组成。模拟控制模块拟采用STC12C5A60S2作为电压调节电路的主控核心芯片并将采样回来的电机、电压、电流和速度参数进行数字化处理通过异步串口通信发送给主控制器。主控制电路核心控制芯片采用PIC18F2580单片机,通过PIC18F2580单片机将采样值进行处理并发出相应执行命令给相应被控元件。由于本系统需要模拟发电机以及要求负载三相相对对称的特殊性,现采用A2212无刷直流电机模拟电动自行车电机,通过简易电子负载电路实现负载的三相对称要求。电子负载电路通过三相全桥整流电路和滤波电路将三相交流电压转化为直流电压,通过简易负载电路调节一路负载便可实现三相电流的均衡调节。模拟电子负载电路是下图[图片]下图是简易电子负载电路实物图[图片]

保护电路是由JQC-3F(T73)5VDC型继电器作为主要器件构成的,继电器在高压高功率场合下可起到对控制回路以及单片机之间的隔离和驱动保护,其在125V交流电压条件下可承受10A的电流、在240V交流电压条件下可承受7A的电流,可满足本次毕业设计的需求。

下图保护电路

0
回复
薄浩楠
LV.5
12
2019-08-28 00:09
@薄浩楠
保护电路是由JQC-3F(T73)5VDC型继电器作为主要器件构成的,继电器在高压高功率场合下可起到对控制回路以及单片机之间的隔离和驱动保护,其在125V交流电压条件下可承受10A的电流、在240V交流电压条件下可承受7A的电流,可满足本次毕业设计的需求。下图保护电路[图片]

显示模块采用lcd1604,用法和1602类似但是比之前多了俩行

原理图如下

0
回复
薄浩楠
LV.5
13
2019-08-28 00:10
@薄浩楠
显示模块采用lcd1604,用法和1602类似但是比之前多了俩行原理图如下[图片]

报警电路采用有源蜂鸣器来作为主要报警器件,有源蜂鸣器配合一个NPN型三极管实现了单片机控制电路与蜂鸣器电路的隔离,等效增大了单片机的驱动能力。值得一提是单片机I/O接口与三极管基极之间一般需要增设一个1K左右的电阻,否则基极电流过大会影响单片机的正常工作。这主要是由于单片机I/O输出口灌电流比较弱的原因驱动不了较大负载,这也是在单片机和有源蜂鸣器之间需要三极管的主要原因。另外在此基础上加了绿、蓝、红色三路指示灯,所选LED发光二极管由于通过电流较分别在电小可用单片机直接进行控制。报警电路如图所示。

0
回复
薄浩楠
LV.5
14
2019-08-28 00:11
@薄浩楠
报警电路采用有源蜂鸣器来作为主要报警器件,有源蜂鸣器配合一个NPN型三极管实现了单片机控制电路与蜂鸣器电路的隔离,等效增大了单片机的驱动能力。值得一提是单片机I/O接口与三极管基极之间一般需要增设一个1K左右的电阻,否则基极电流过大会影响单片机的正常工作。这主要是由于单片机I/O输出口灌电流比较弱的原因驱动不了较大负载,这也是在单片机和有源蜂鸣器之间需要三极管的主要原因。另外在此基础上加了绿、蓝、红色三路指示灯,所选LED发光二极管由于通过电流较分别在电小可用单片机直接进行控制。报警电路如图所示。[图片]

显示报警电路实物如下

0
回复
薄浩楠
LV.5
15
2019-08-28 00:12
@薄浩楠
显示报警电路实物如下[图片]

掉电储存模块

AT24C02作为掉电记忆8端口芯片,有2048bit的记忆容量。其可通过端口A0、A1、A2三个电平状态检测引脚组合成8种地址,可以让模拟电压调节模块最大识别8个AT24C02芯片。AT24C02记忆芯片通过IIC总线通信协议与模拟电压调节器进行同步通信,其供电电源可由系统辅助电源模块的5V供电。AT24C02外围电路电路如图所示。

0
回复
薄浩楠
LV.5
16
2019-08-28 00:14
@薄浩楠
掉电储存模块AT24C02作为掉电记忆8端口芯片,有2048bit的记忆容量。其可通过端口A0、A1、A2三个电平状态检测引脚组合成8种地址,可以让模拟电压调节模块最大识别8个AT24C02芯片。AT24C02记忆芯片通过IIC总线通信协议与模拟电压调节器进行同步通信,其供电电源可由系统辅助电源模块的5V供电。AT24C02外围电路电路如图所示。[图片][图片]

控制模块的硬件电路主要是针对通信协议选定的

STC12C5A60S2采用11.0592mhz晶振。

PIC18F2580采用22.1184mhz晶振

下图是硬件原理图

下图是实物

0
回复
薄浩楠
LV.5
17
2019-08-28 00:15
@薄浩楠
控制模块的硬件电路主要是针对通信协议选定的STC12C5A60S2采用11.0592mhz晶振。PIC18F2580采用22.1184mhz晶振下图是硬件原理图[图片][图片]下图是实物[图片]

通信选择选异步串口通信主要是由于异步串口通信建立过程简便便于实施

核心:串口通信

串口通信的硬件联调,

介于对系统参数采样稳定的要求,本系统采用9600bps波特率的串口通信速率,最大可传输76米的直线距离。硬件需要外接11.0592MHz的外部无源晶振,由于无源晶振需要起振电容,故选30pF的瓷片电容作为起振电容。由于模拟电压调节器内部没有专用波特率生成的寄存器,因此,需要通过软件算法配置T1定时器和TMOD寄存器。

终端控制器主要是由PIC18F2580单片机组成,由于终端控制器仅有一个异步串口通信接口引脚,因此其终端控制器的工作仅负责对模拟电压调节器的信号进行处理,并控制显示和发出控制命令。终端控制器有内部自带的增强型USART模块,增强型USART的操作主要由三个寄存器控制,分别是传输状态和控制寄存器、接收状态和控制寄存器、波特率控制寄存器。EUSART串口控件将根据需要自动将引脚从输入端配置到输出端。

0
回复
yujunice
LV.5
18
2019-08-28 11:28

对于无刷直流电机进行实物仿真搭建并通过模拟控制器采集主要参数信息,可提供下吗?

0
回复
其乐518
LV.2
19
2019-08-28 19:13
我无法评论,只能崇拜,你太棒了
0
回复
薄浩楠
LV.5
20
2019-08-28 23:30
@yujunice
对于无刷直流电机进行实物仿真搭建并通过模拟控制器采集主要参数信息,可提供下吗?
好的,等我整理一下马上发
0
回复
薄浩楠
LV.5
21
2019-08-30 22:11
@其乐518
我无法评论,只能崇拜,你太棒了[图片]
谢谢
0
回复
薄浩楠
LV.5
22
2019-08-30 22:15
@薄浩楠
谢谢

对于无刷直流电机进行实物仿真搭建并通过模拟控制器采集主要参数信息是电压电流以及转速

0
回复
薄浩楠
LV.5
23
2019-08-30 22:17
@薄浩楠
对于无刷直流电机进行实物仿真搭建并通过模拟控制器采集主要参数信息是电压电流以及转速

这是当时对串口数据传输的调试照片

0
回复
薄浩楠
LV.5
24
2019-08-30 22:21
@薄浩楠
这是当时对串口数据传输的调试照片[图片][图片]

接下来是介绍一下主要软件设计,主要的软件流程图

ad采样程序

0
回复
薄浩楠
LV.5
25
2019-08-30 22:22
@薄浩楠
接下来是介绍一下主要软件设计,主要的软件流程图ad采样程序[图片]

按键程序

0
回复
薄浩楠
LV.5
26
2019-08-30 22:22
@薄浩楠
按键程序[图片]

低速报警程序

0
回复
薄浩楠
LV.5
27
2019-08-30 22:23
@薄浩楠
低速报警程序[图片]

轻载报警程序

0
回复
薄浩楠
LV.5
28
2019-08-30 22:23
@薄浩楠
轻载报警程序[图片]

串口传输程序

0
回复
薄浩楠
LV.5
29
2019-08-30 22:24
@薄浩楠
串口传输程序[图片][图片]
这是数据采样的程序
#include   
#include 
#include 
#define uint unsigned int
#define uchar unsigned char	  
#define ADC_FLAG      0X10

 #define VCC    220		
uchar code SMGduan[]= {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F,};		//数码管位选码
uchar code SMGwei[] = {0xfe, 0xfd, 0xfb};

unsigned char pdata bufRxd[64];  //接收字节缓冲区




/***********************延时函数*******************************/
void delay(uint z)
{
	uint x,y;
	for(x = z; x > 0; x--)
		for(y = 114; y > 0 ; y--); 		
} 



/************************采用器初始化******************************/
void InitADC(void) 
{
	
	P1M1=0xff;					//1^012开启高阻态
	P1M0=0x00;					//其余端口当普通端口使用
	P1ASF=0Xff;					//P^1 DC_V
	ADC_RES=0;
	ADC_CONTR=0X80;	   	//1000 0000	  开电源,最低速
	delay(50);	
}
/**************************采样函数******************************/
uint GetADC(uchar ch)
{
	uint result=0;
	ADC_CONTR=0x88|ch;	  		  			//选择通道	开始AD转换e8 ADC最快,88,ADC最慢
	_nop_();  _nop_();  
	_nop_();  _nop_(); 
	while(!(ADC_CONTR&ADC_FLAG)); 			//查询ADC_FLOG是否置位1  转换结束
    ADC_CONTR&=!ADC_FLAG; 		  			//清除ADC中断标志
	result=ADC_RES;	 						//(ADC_RES<<2)+ADC_RESL		(<<2)+ADC_RESL;
	aa[ss++]=	ADC_RES;
	if(ss==6)ss=2;	
	return(result);
}

/**********************定时器0初始化****************************/
void timer0Init()
{
	EA = 1;	//打开总中断
	ET0 = 1;//打开定时器0中断
	TR0 = 1;	 //启动定时器0
	REN = 1;//允许串口接收
	TMOD |= 0X01; //定时器工作模式1,16位定时模式
	TH0 = 0xED;
	TL0 = 0xFF; //定时5ms
}	



/***********************串口初始化*********************************/
void UARTInit()
{
	EA = 1;	//打开总中断
	ES = 1; //打开串口中断
	SM0 = 0;	SM1 = 1;//串口工作方式1,8位UART波特率可变
	
}








void main()//main函数自身会循环
{
	InitADC();	  //采样初始化
	timer0Init();//定时器0初始化
	UARTInit();//串口初始化
	bb=0;
	while(mode)
	{	 
	
		
		}	
    }
	while(mode==0)
	{
		EA=0;	 //关总中断
		bb=0;
		while(sw_up==1&sw_down==1&sw_mune0==1&sw_mune1==1&sw_mune2==1)if(mode)break;
		
		if(sw_mune1==0)			aa[9]=4;
		if(sw_mune2==0)			aa[9]=5;
		while(sw_up==0|sw_down==0|sw_mune0==0|sw_mune1==0|sw_mune2==0)if(mode)break;
		if(mode)break;
		else
			EA=1;     //开总中断
		delay(300);
	}
} 





/****************************串口通信中断*****************************/
void UART() interrupt 4
{	
	

   				 SBUF=0xff; 
	if(TI)//判断是否发送完成
	{
		
		bb++;
	
		if(bb>=10&&aa[9]==0xff)	
		{	bb=0; 	 delay(1000);		   }
	}	
	if(RI==1)//判断接收是否完成
	{
	  
	  	  int nu;
	 	nu =SBUF	;//读SBUF,读出串口接收到的数据
		   	   //第0号数据不是帧头,跳过
		switch(nu)
			{
				case 1:{LED2=1;LED1=0;LED0=1;wmq=0;JDQ=0;}break;	 //过压
				case 2:{LED2=1;LED1=0;LED0=1;wmq=0;JDQ=0;}break;	 //过流
				case 3:{LED2=0;LED1=1;LED0=1;wmq=1;JDQ=1;}break;	 //低速
				case 0:{LED2=1;LED1=1;LED0=0;wmq=1;JDQ=1;}break;	 //正常
			}
		RI = 0;//软件清零接收标志位
		cc++;														
		if(cc==1)cc=0;
	}
}
0
回复