求一个电动自行车控制器的proteus仿真。。。控制器主要是无刷直流电机...有程序,电路图什么的最好啊...

求一个电动自行车控制器的proteus仿真。。。控制器主要是无刷直流电机...有程序,电路图什么的最好啊...,第1张

基于Proteus的无刷直流电机控伏裂搭制器仿真设计

宛铮(嘉兴学院机电工程学院,浙江 嘉兴314001)

摘要:在Proteus仿真环境下结合Mplab开发平台,设计了以DSPIC33FJ12MC202为主控制器的无刷直流电机仿真控制系统。该系统采用转速电流双闭环PID控制策略,实现了对无刷直流电机的调速控制。实验结果表明,所设计的系统能够满足无刷直流电机转速控制的设计要求,稳定可靠,对实际硬件电路的设计具有很大的辅助作用。

关键词:Proteus;DSPIC33FJ12MC202;无刷直流电机;仿真;控制源哪系统

引言

无刷直流电机具有调速范围广、过载能力强、低电压特性好、启动转矩大(堵转特性)、启动电流小等优点,已在各个经济领域和人们的日常生活得到广泛的应用。研究无刷直流电机的驱动控制技术具有重要的实际应用价值。

与Matlab等仿真工具相比,利用Proteus可以在虚拟环境中完成硬件电路的设计,并通过对微处理器编程,实现各种控制算法,可以直观观测到控制效果。在实际应用系统的设计开发中,有助于降低开发成本和开发周期,提高设计效率。基于此,本文采用Proteus仿真平台设计了以DSPIC33单片机为控制核心的无刷直流电机仿真控制器,完成了硬件电路设计和程序调试,实现了转速电流双闭环PID控制策略,为实际系统的设计提供了有效的理论实践基础。

1无刷直流电机的Proteus仿真模型

Proteus软件的无刷直流电机模型建立在直流电机模型基础之上,可以根据应用需要设定额定电压、空载转速、负载阻抗、转动惯量、绕组阻抗、绕组间互感等参数。模型中带有三个霍尔位置传感器,TTL输出,用于转子位置检测。

在设计中,在Proteus的Motors库里有三相星型联接和三相角型联接两种无刷直流电机模型可供用户选择,两种模型的输入输出引脚一致,区别仅在于绕组联接方式。模型的引脚中,a、b、c分别为绕组线圈输入端,sa、sb、sc分别为霍尔位置传感器输出端,load为仿真负载输入端,omega为转子角速率输出端,单位为弧度/秒。

2硬件电路设计

系统的硬件组成框图如图1所示。主要包括主控制器硬件电路、功率驱动电路、功率逆变电路、电流检测电路、转速检测电路等。

主控制器通过功率驱动电路缺拿输出PWM,控制功率逆变器,实现对电机的驱动。为了实现转速、电流双闭环控制,电机的转速由电机转子位置传感器获得,母线电流通过霍尔电流传感器测量.主控制器电路

主控制器采用美国Microchip公司的DSPIC芯片DSPIC33FJ12MC202。该芯片是一款16位的高性能数字信号控制器,具有8路电机控制PWM输出通道,1路正交编码接口QEI,非常适合用于无刷直流电机控制。主控制器电路如图2所示。

DSPIC33FJ12MC202控制器具有输入电平变化告知功能,当检测到一个特定数字输入引脚上电平状态的变化就会产生中断。系统设计时将霍尔传感器A,B,C分别接入RB0,RB1,RB2或CN4,CN5,CN6引脚,当发生CNxInterrupt中断时,会读取全部3个霍尔输入引脚,然后可通过查表得到当前需要换相的信息,从而实现对BLDC电机进行换相控制。同时,可以利用控制器的输入捕获功能对电机进行比较准确的测速。

2.2功率驱动电路功率驱动采用三相全桥驱动[2],使用三片IR2101驱动3个桥臂,由6个N沟道功率MOSFET管SMP60N06构成三相桥式逆变器。采用二二导通六状态导通方式。图3所示为一路桥臂的功率驱动电路。PWMH1和PWML1是由主控制器输出的PWM脉冲方波,通过功率驱动芯片IR2101驱动相应功率MOSFET管的通断。D1是快恢复二极管BYT30,C2为自举电容,选取C2的电容值为2.2u电流采样电路设定无刷直流电机模型的额定工作电流为10 A,采用霍尔电流传感器ACS755串入全桥公共端来检测相电流。由于ACS755额定输入电流为0~50 A,输出电压范围是0.6V~3.6V,而DSPIC33FJ12MC202的AD转换参考电压设置为3.3V和地,因此必须对霍尔传感器得到的电压进行调理。为此,使用LM358产生2.4V基准电压,再通过1%的高精度碳膜电阻分压获得0.6V基准电压。然后将霍尔电流传感器输出电压与0.6V基准电压通过减法电路,从而获得0V~3V的电压范围。随后将调理后的电压送给控制器A/D采集输入端,经A /D转换完成电流采样。电流采样电路如图4所示。为了保护控制器的AD端口,在AD输入端并入3.3V稳压管。2.4位置检测电路

Proteus的无刷直流电机模型带有3个霍尔传感器,霍尔传感器的输出信号两相间相差120度。与此对应的是电机转子每旋转一周霍尔传感器就能输出6种编码状态,如图5所示。从图可见,霍尔传感器输出状态变化一次,就意味着电机转子转过了60度。据此,可以根据单位时间T内捕获的霍尔传感器输出变化的个数n计算出电机的转速V=60n/T。根据这一原理,通过控制器的输入捕获功能IC获取到其中一相霍尔传感器输出信号的周期,就可以比较准精确地测量到控制器控制策略系统采用转速电流双闭环增量式PID控制策略[3],结构原理图如图6所示,其中电流内环和速度外环均采用PI控制。考虑到在实际工程应用中对电流和转速进行调节时希望静态误差小并且具有较小的超调量,因此在工程上可以把电流环校正为典型Ⅰ型系统,把速度环校正为典型Ⅱ型系统。实际设计时先按照最佳二阶系统整定电流环,然后按最佳整定设计法整定转速环[4]。4 Proteus仿真结果及分析

在Mplab集成开发环境下使用C语言进行程序设计。Mplab支持与Proteus进行联合调试。在安装了vdmmplab.exe文件后,在Mplab的debug工具上会出现Proteus VSM,这样在完成程序编译后,即可与Proteus下设计的硬件电路进行联合仿真调试,开发过程与硬件设计过程类似。

仿真时,设定目标转速转度为170r/min,逆时针旋转。仿真运行结果如图。从仿真结果可以看到,经过短暂的电机启动过程,电机转速能够稳定在170r/min。图中左侧波形时稳态运行时3路霍尔传感器输出信号,右侧波形为三路相电压波形。在设定转速速度为1000r/min,电机转速转度能够稳定在999r/min。在仿真中电机的转速与设定的转速存在一定误差,这是由于在PROTEUS仿真软件环境下造成了系统的实时性降低,从而一定程度上造成了延时,导致了误差产生本文利用Proteus仿真软件设计了无刷直流电机仿真控制系统,完成了主控制器硬件电路、功率驱动电路、功率逆变电路、电流检测电路、转速检测电路的设计,通过C语言编程在控制器实现了转速电流双闭环增量PID控制,实现了对设定转速的恒速控制。实验结果表明,所设计的系统能够满足无刷直流电机转速控制的设计要求,取得了良好的效果,对实际硬件电路的设计具有很大的辅助作用。

参考文献[1]李晓斌,张辉,刘建平.利用DSP实现无刷直流电机的位置控制[J].机电工程, 2005,(03)[2]刘宏.基于DSP的直流无刷电机电子调速器系统设计[J].黑龙江科技信息, 2009,(16)

[3]叶小霞,徐烟红,郝洁.无刷直流电机的双闭环控制仿真[J].科技创业月刊, 2010,(12)

[4]张争争,任永德,谢宝昌.基于DSP的无刷直流电动机控制系统[J].微特电机, 2001,(02)

基金项目:浙江省大学生科技创新活动计划(新苗人才计划)项目资助,项目编号2011R417004”作者简介:宛铮(1990-),男,汉族,安徽庐江人,嘉兴学院2008级本科生,电子信息工程专业

你重新写一个test函数,这是四相的,你这样驱动电机,P2=0x08,delay()P2=0x04delay()P2=0x02

delay()P2=0x01delay()

这个delay()的时间长短是控制转速的,有一定范围的,在一定范围内,越小越快,超过了的话,电机识别不了脉冲就不转了。

#include<reg52.h>

#define uchar unsigned char

#define uint unsigned int

#define MotorData P0//步进电机控制接口定义

uchar phasecw[4] ={0x08,0x04,0x02,0x01}//正转 电机导通相序 D-C-B-A

uchar phaseccw[4]={0x01,0x02,0x04,0x08}//反转 电机导通相序 A-B-C-D

//ms延时函数

void Delay_xms(uint x)

{

uint i,j

for(i=0i<xi++)

for(j=0j<112j++)

}

//顺时针转动

void MotorCW(void)

{

uchar i

for(i=0i<4i++)

{

MotorData=phasecw[i]

Delay_xms(400)//转速调节

}

}

//逆时针转动

void MotorCCW(void)

{

uchar i

for(i=0i<4i++)

{

MotorData=phaseccw[i]

Delay_xms(40)//转速调节

}

}

//停止野洞辩转动

void MotorStop(void)

{

MotorData=0x00

}

//主函数

void main(void)

{

uint i

Delay_xms(50)//等待系统稳定

while(1)

{

for(i=0i<500i++)

{

MotorCW() //顺时针转动

}

MotorStop() //停止转动

Delay_xms(500)

for(i=0i<500i++)

{

MotorCCW() //逆时针转动

}

MotorStop() //停止转动

Delay_xms(500)

}

}

上面这个给你参考,你先不加按键调试先,这个模块颂缺完成了再加按键颤衫进行调试。

Proteus的51单片机控制步进电机,一般是控制其相序分配租滑的顺逆从而控制正反转,一般而言,步进电机相序分配可以做成一个数组比如step[]={0x03,0x06,0x0c,0x09},这样来说可以假设P0口是步进电机控制口,槐型携那么可以按如下方式来控制:

while(1)

{

for(i=0i<4i++)

{

if(fx==1)P0=step[i]//正向

else P0=step[3-i]//反向

delay(x)//x大小决定电机速度。铅伏


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12399474.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存