直流无刷电机控制器程序流程图

合集下载

pic单片机 直流无刷电机控制程序

pic单片机 直流无刷电机控制程序

pic单片机直流无刷电机控制程序下载温馨提示:该文档是我店铺精心编制而成,希望大家下载以后,能够帮助大家解决实际的问题。

文档下载后可定制随意修改,请根据实际需要进行相应的调整和使用,谢谢!并且,本店铺为大家提供各种各样类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,如想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by the editor. I hope that after you download them, they can help you solve practical problems. The document can be customized and modified after downloading, please adjust and use it according to actual needs, thank you!In addition, our shop provides you with various types of practical materials, such as educational essays, diary appreciation, sentence excerpts, ancient poems, classic articles, topic composition, work summary, word parsing, copy excerpts, other materials and so on, want to know different data formats and writing methods, please pay attention!Title: PIC单片机直流无刷电机控制程序Introduction在现代工业控制系统中,直流无刷电机的应用越来越广泛。

无刷直流电机运行原理与基本控制方法课件

无刷直流电机运行原理与基本控制方法课件

t
T4 T4 T6 T6 T2 T2 T4
0 60 120 180 240 300 360 420
HALL状态 101 100 110 010 011 001
导通功率管 T4 T4
T6
T6
T2
T2
33
无刷直流电机的制动控制
T1
T3
T5
T1
T3
T5
D1
20
无刷直流电机的电路模型
Halla
ea
t
Hallb
eb
t
Hallc
ec
t
101 100 110 010 011 001 101
PWM a
t
ia
t
PWM b
t
ib
t
PWM c
t
T1T6 T1T2 T3T2 T3T4 T5T4 T5T6 T1T6
ic
t
T1T6 T1T2 T3T2 T3T4 T5T4 T5T6 T1T6
30% 18.5% 33.8% 42.4%
30%
37.5 %
15.4 %
42.4 %
无刷直流电机的换流模式
(1)采用pwm-on方式时,下桥换相和上桥换相的换相转矩脉动相等,且最小;非换 向相电流脉动也是最小的; (2)采用on-pwm方式时,下桥和上桥换相转矩脉动相等且比pwm-on方式大,非换向 相电流脉动也比pwm-on方式时大。 (3)采用H_pwm-L_on方式时,下桥换相转矩脉动和非换向相电流脉动大且与on-pwm 方式时的转矩脉动和电流脉动相等,上桥换相转矩脉动和非换向相电流脉动小且与 pwm-on方式时的转矩脉动和电流脉动相等。 (4)采用H_on-L_pwm方式时,下桥换相转矩脉动和非换向相电流脉动小且与pwm-on 方式时的转矩脉动和电流脉动相等,上桥换相转矩脉动和非换向相电流脉动大且与 on-pwm方式时的转矩脉动和电流脉动相等。 (5)采用H_pwm-L_pwm方式时,换相转矩脉动最大且非换向相电流脉动也最大。

电动车无刷控制器电路图(高清)资料

电动车无刷控制器电路图(高清)资料

今以应用最广泛的以PIC16F72为智能控制中心,350W的整机电路为例,整机电路如图1:(原文件名:1.gif)图1:350W整机电路图整机电路看起来很复杂,我们将其简化成框图再看看:(原文件名:2.gif)图2:电路框图电路大体上可以分成五部分:一、电源稳压,供应部分;二、信号输入与预处理部分;三、智能信号处理,控制部分;四、驱动控制信号预处理部分;五、功率驱动开关部分。

下面我们先来看看此电路最核心的部分:PIC16F72组成的单片机智能处理、控制部分,因为其他电路都是为其服务或被其控制,弄清楚这部分,其它电路就比较容易明白。

(原文件名:3.gif)图3:PIC16F72在控制器中的各引脚应用图我们先来简单介绍一下PIC16F72的外部资源:该单片机有28个引脚,去掉电源、复位、振荡器等,共有22个可复用的IO口,其中第13脚是CCP1输出口,可输出最大分辨率达10BIT的可调PWM信号,另有AN0-AN4共5路AD模数转换输入口,可提供检测外部电路的电压,一个外部中断输入脚,可处理突发事件。

内部软件资源我们在软件部分讲解,这里并不需要很关心。

各引脚应用如下:1:MCLR复位/烧写高压输入两用口2:模拟量输入口:放大后的电流信号输入口,单片机将此信号进行A-D转换后经过运算来控制PWM的输出,使电流不致过大而烧毁功率管。

正常运转时电压应在0-1.5V左右3:模拟量输入口:电源电压经分压后的输入口,单片机将此信号进行A-D转换后判断电池电压是否过低,如果低则切断输出以保护电池,避免电池因过放电而损坏。

正常时电压应在3V以上4:模拟量输入口:线性霍尔组成的手柄调速电压输入口,单片机根据此电压高低来控制输出给电机的总功率,从而达到调整速度的目的。

5:模拟/数字量输入口:刹车信号电压输入口。

可以使用AD转换器判断,或根据电平高低判断,平时该脚为高电平,当有刹车信号输入时,该脚变成低电平,单片机收到该信号后切断给电机的供电,以减少不必要的损耗。

51单片机直流无刷电机控制.

51单片机直流无刷电机控制.

基于MCS-51单片机控制直流无刷电动机学号:3100501044班级:电气1002姓名:王辉军摘要直流无刷电机是同步电机的一种,由电动机本体、位置传感器和电子开关线路三部分组成。

其定子绕组一般制成多相(三相、四相、五相不等),转子由永久磁钢按一定极对数(2p=2,4,…)组成。

电机转子的转速受电机定子旋转磁场的速度及转子极数(P)影响:N=120.f / P。

在转子极数固定情况下,改变定子旋转磁场的频率就可以改变转子的转速。

直流无刷电机即是将同步电机加上电子式控制(驱动器),控制定子旋转磁场的频率并将电机转子的转速回授至控制中心反复校正,以期达到接近直流电机特性的方式。

也就是说直流无刷电机能够在额定负载范围内当负载变化时仍可以控制电机转子维持一定的转速。

MCS-51单片机是美国英特尔公司生产的一系列单片机的总称,是一种集成电路芯片,采用超大规模技术把具有数据处理能力的微处理器(CPU)、随机存储器(RAM)、只读存储器(ROM)、输入输出接口电路、定时计算器、串行通信口、脉宽调制电路、A/D转换器等电路集成到一块半导体硅片上,这些电路能在软件的控制下准确、迅速、高效地完成程序设计者事先规定的任务。

本论文将介绍基于MCS-51单片机控制直流无刷电动机的设计,它可以实现控制直流无刷电动机的启动、停止、急停、正反转、加减速等功能。

关键词:单片机,直流无刷电动机,控制系统直流无刷电动机是在直流电动机的基础之上发展而来的,它是步进电动机的一种,继承了直流电动机的启动转矩大、调速性能好等特点克服了需要换向器的缺点在交通工具、家用电器及中小功率工业市场占有重要的地位。

直流无刷电动机不仅在电动自行车、电动摩托车、电动汽车上有着广泛的应用,而且在新一代的空调机、洗衣机、电冰箱、吸尘器,空气净化器等家用电器中也有逐步采用的趋势,尤其是随着微电子技术的发展,直流无刷电动机逐渐占有原来异步电动机变频调速的领域,这就使得直流无刷电动机的应用范围越来越广。

「图解」电动车无刷电机控制器驱动电路图

「图解」电动车无刷电机控制器驱动电路图

「图解」电动车无刷电机控制器驱动电路图“旺材电机与电控”提醒您不要走开,文末有福利!·无刷直流电动机的组成与工作原理(1)无刷电动机的组成无刷直流电动机由转子和定子两大部分组成,如图3所示。

(2)无刷直流电动机的工作原理无刷直流电动机采用方波自控式永磁同步电动机,以霍尔传感器取代电刷换向器,霍尔传感器的信号线传递电动机里面磁钢相对于绕组线圈的位根据3个霍尔传感器的信号能知道此时应该怎样给电动机的线圈供电(不同的霍尔信应该给电动机绕组提供相对应方向的电流),也就是说霍尔传感器状态不一样,线圈的置号电流方向不一样。

霍尔信号传递给控制器,控制器通过粗线(不是霍尔线)给电动机绕组供电,电动机旋转,磁钢与绕组(准确地说是缠在定子上的线圈,其实霍尔一般安装在定子上)发生转动,霍尔传感器感应出新的位置信号,控制器粗线又给重新改变电流方向的电动机绕组供电,电动机继续旋转(当绕组和磁钢的位置发生变化时,绕组必须对应地改变电流方向,这样电动机才能继续向一个方向运动,否则电动机就会在某一个位置左右摆动,而不是连续旋转),这个过程就是电子换向。

无刷直流电动机由直流电源供电,借助位置传感器来检测转子的位置,所检测出的信号触发相应的电子换相线路,以实现无接触式换相。

无刷直流电动机用电子开关和位置传感器代替电刷及换向器,将直流电转换成模拟三相交流电,通过调制脉宽,改变其电流大小来改变转速。

直流无刷电机的控制结构直流无刷电机是同步电机的一种,也就是说电机转子的转速受电机定子旋转磁场的速度及转子极数(P)影响:N=120.F/P。

在转子极数固定情况下,改变定子旋转磁场的频率就可以改变转子的转速。

直流无刷电机即是将同步电机加上电子式控制(驱动器),控制定子旋转磁场的频率并将电机转子的转速回授至控制中心反复校正,以期达到接近直流电机特性的方式。

也就是说直流无刷电机能够在额定负载范围内当负载变化时仍可以控制电机转子维持一定的转速。

专题7直流无刷电机控制ppt课件

专题7直流无刷电机控制ppt课件
换向器:电枢绕组两端分别接在两个相互绝缘而和绕组同轴旋转的半圆形铜片——换向片上, 组成一个换向器。换向器上压着固定不动的炭质电刷。
电枢:铁心、电枢绕组和换向器所组成的旋转部分称为电枢。
有刷电机定子有两个磁极,小电机直接使用永磁体做励磁磁场,大功率电机用励磁线圈 产生的电磁铁。
使用三极管或者MOS管搭建的H桥驱动电路,可以实现有刷电机速度和方向控制。
电机按一定方向转动时,3个霍尔的输出会按照6步的规律变化,见图
结合之前介绍的BLDC六步控制,在每个霍尔信号都对应一个BLDC控制步,使得BLDC旋 转一个角度,这样可以制作下表:
特别注意,一般BLDC厂家都会给出一个霍尔传感器和绕组得电情况对应关系表,不一定跟上面 两个表都完全对应一致,但是原理分析都是一致的。
然后,MOS管驱动IC这里用到IR2110S。R2110芯片体积小(SOIC-16),集成度高(可驱动同 一桥臂两路),响应快( ton /tof = 120/94 n s ),偏值电压高(<600 V ),驱动能力强,内设
欠压封锁,而且易于调试,并设有外部保护封锁端口。尤其是上管驱动采用外部自举电 容上电,使得驱动电源路数目较其他IC驱动大大减小。对于BLDC驱动需要6个桥臂,需 要用到3片IR2110S来驱动,虽然如此也是仅需要一路10~20V电源,从而大大减小了控制 变压器的体积和电源数目,降低了产品成本,提高了系统的可靠性。 NMOS管的导通基本条件就是VGS大于一定的阈值电压VGS(th),IRF540的VGS(th)是4V(最 大值)。我们为IR2110S设计的电源电压为15V,IR2110S的低端驱动,即驱动Q6的IRF540, 很容易就实现NMOS管驱动条件。对于高端驱动,即驱动Q5的IRF540,就需要“自举电 路”的支持,自举电路通俗点就是升压电路,电路中的D7二极管和C13电容用于自举电 路,简单来说在该电路中,自举电路的作用是使得IR2110S高端驱动,即IR2110S的第8引 脚HO输出信号可以满足大于VGS(th) 。

直流无刷电机控制PIC程序(全部整合)

直流无刷电机控制PIC程序(全部整合)

#include <pic168xa.h> //2008.4.24--14点00分#include <math.h>#include <stdlib.h>int charge_delay,jm,lkk,trial,run_num,protect_num;char m,n,k,s,L,tri;char hall_num; //循环次数char hall_number; //1+3+2+10+8+9=33(一个循环和),hallless_protect()int pwm_hi; // pwm占空比上限int pwm_cycle; // pwm周期int pwm_lo; // pwm占空比下限,由A/D结果确定int pwm_real; // pwm占空比实际int ad_result; // A/D转换结果bit ghy,run_flag; //运行标志---0,未运行,停止bit flag_autohand; //开始为-----自动void delay(delay_num)int delay_num;{int j;for (j=delay_num;j>1;j--){asm("nop");}}union adres{int y1;unsigned char adre[2];}adresult;void para_chushihua(){protect_num=0;trial=0b10110000;tri=0x00;lkk=10;hall_num=0x00;hall_number=0x00;run_flag=0; //运行标志---0,未运行,停止flag_autohand=1; //开始为-----自动pwm_cycle= 240; // pwm周期// pwm_hi=pwm_cycle-5; // pwm占空比上限pwm_hi=pwm_cycle-1; // pwm占空比上限pwm_real=pwm_cycle; // 实际pwm占空比为pwm周期上限pwm_lo=0x0A; //设定下限+++++++++++++++++++++++++++++++++++++++ ++++++++}void nointerupt_chushihua(){INTCON=0X00; //禁止中断}void Io_chushihua(){// ADCON1=0x8e; //RA0/AN0--VOLTAGE 电压采样,右对齐1ADCON1=0x86; //设定RA0--RA6设定为I/O口;TRISA =0x09; //RA0---PROTECT保护(电流保护和过温保护)--输出,0--不保护,1--保护;//RA1----PSW1,继电器,输出,0,电源接通//RA2----指示灯,输出0--->>//RA3----按键,加,输入 1//RA4----指示灯,输出0--->>//RA5----RSW1,继电器,输出0,软启充电PORTA=PORTA&0x09; //RA1=0,----输出低电平,PSW1,继电器断//RA2=0,----输出低电平,指示灯灭//RA4=0,----输出低电平,指示灯灭//RA5=0,----输出低电平,RSW1,继电器断RBPU=0; //RB端口内部弱上拉电路禁止TRISB =0xfe; //RB7=1, 空----输入//RB6=1----HA,输入//RB5=1----HB,输入//RB4=1----HC,输入//RB3=1----停,输入,按钮//RB2=1----启,输入,按钮//RB1=1----自/手选择,输入,开关//RB0=0----ST/STOP,输出,控制GAL PORTB=PORTB&0xfe; //RB0=0,----输出低电平,禁止GAL输出TRISC =0x02; //RC7---A1+,PWMA1+,输出0//RC6---A1, 输出0//RC5---B1+,输出0//RC4---B1,输出0//RC3---C1+,输出0//RC2---CCP1(PWM),输出,死区0//RC1----减,输入,按钮 1//RC0---C1,输出0 PORTC=0x06;}void protect(){ //过流和过温保护GIE=0; //关全局中断pwm_real=pwm_hi; //PWM_real----PWM实时值CCPR1L=pwm_real; //设置PWM输出为最大CCPR1H=0x00; //CCP1CON=0x0c; //CCP1选择为PWM工作方式PR2=pwm_cycle; //设置PWM的周期TRISC=TRISC&0xfb; //设置RC2---PWM输出T2CON=0x00; //分频系数=0x00TMR2ON=1; //启用TMR2PORTC=0x00; //PORTB=PORTB&0xfe; //RB0=0,----输出低电平,禁止GAL输出while(1){PORTA^=0b00010100;delay(15000); //延时}}void protect_run(){ //过流和过温保护GIE=0; //关全局中断pwm_real=pwm_hi; //PWM_real----PWM实时值CCPR1L=pwm_real; //设置PWM输出为最大CCPR1H=0x00; //CCP1CON=0x0c; //CCP1选择为PWM工作方式PR2=pwm_cycle; //设置PWM的周期TRISC=TRISC&0xfb; //设置RC2---PWM输出T2CON=0x00; //分频系数=0x00TMR2ON=1; //启用TMR2PORTC=0x00; //PORTB=PORTB&0xfe; //RB0=0,----输出低电平,禁止GAL输出while(1){// PORTA^=0b00010000; //RA4闪动PORTA^=0b00000100; //RA2闪动delay(15000); //延时}}void PWM_chushihua(){// CCPR1L=0xa0;// CCPR1H=0x00;run_num=0;pwm_real=pwm_hi; //PWM_real----PWM实时值CCPR1L=pwm_real; //设置PWM输出为最大CCPR1H=0x00; //CCP1CON=0x0c; //CCP1选择为PWM工作方式PR2=pwm_cycle; //设置PWM的周期TRISC=TRISC&0xfb; //设置RC2---PWM输出T2CON=0x00; //分频系数=0x00TMR2ON=1; //启用TMR2}void open_loopf() //开环运行50次,启动{k=0b00011000; //5 //HA,HB,HC,s=PORTC&0b00000110; //1 0 1, B-C+PORTC=k|s; //delay(8000); //延时k=0b10010000; //4 //HA,HB,HC,s=PORTC&0b00000110; //1 0 0, A+B-PORTC=k|s; //delay(8000); //延时k=0b10000001; //6 //HA,HB,HC,s=PORTC&0b00000110; //1 1 0, C-A+PORTC=k|s; //delay(8000); //延时k=0b00100001; //2 //HA,HB,HC,s=PORTC&0b00000110; //0 1 0, B+C-PORTC=k|s; //delay(8000); //延时k=0b01100000; //3 //HA,HB,HC,s=PORTC&0b00000110; //0 1 1, A-B+PORTC=k|s; //delay(8000); //延时k=0b01001000; //1 //HA,HB,HC,s=PORTC&0b00000110; //0 0 1, C+A-PORTC=k|s; //delay(8000); //延时}void interrupt RB4_int(){char th;run_num++;if(run_num>10){run_num=10;}m=PORTB;//RB7-HA,RB5-HB,RB4-HCm&=0xB0; //1 0 1 1 m^=0x90;//A=/A,B=B,C=/C //1 1 n=m>>4; //switch(n){ //HA,HB,HC,// case 1: k=0b01001000;break; //0 0 1, C+A-// case 3: k=0b01100000;break; //0 1 1, A-B+// case 2: k=0b00100001;break; //0 1 0, B+C-// case 10:k=0b10000001;break; //1 1 0, C-A+// case 8: k=0b10010000;break; //1 0 0, A+B-// case 9: k=0b00011000;break; //1 0 1, B-C+// default:k=0b00000000; //其它(000,111),0x00,输出为无效case 1: k=0b00011000;break; //1 0 1, B-C+case 3: k=0b01001000;break; //0 0 1, C+A-case 2: k=0b01100000;break; //0 1 1, A-B+case 10:k=0b00100001;break; //0 1 0, B+C-case 8: k=0b10000001;break; //1 1 0, C-A+case 9: k=0b10010000;break; //1 0 0, A+B-default:k=0b00000000; //其它(000,111),0x00,输出为无效}s=PORTC&0b00000110; //取RC1,RC2状态PORTC=k|s; //输出PORTCif (RB7==0) {trial&=0b00110000;} //RB7=0if (RB5==0) {trial&=0b10010000;} //RB5=0if (RB4==0) {trial&=0b10100000;} //RB4=0if (lkk>1) {lkk--;} //每20次测试一次// tri=n;// if ((tri&=0b00001000)==0) {trial&=0b00110000;} //RB7=0// tri=n;// if ((tri&=0b00000010)==0) {trial&=0b10010000;} //RB5=0// tri=n;// if ((tri&=0b00000001)==0) {trial&=0b10100000;} //RB4=0// if (lkk>2) {lkk--;} //每20次测试一次else{while(trial!=0b00000000){GIE=0; //关全局中断pwm_real=pwm_hi; //PWM_real----PWM 实时值CCPR1L=pwm_real; //设置PWM输出为最大CCPR1H=0x00; //CCP1CON=0x0c; //CCP1选择为PWM工作方式PR2=pwm_cycle; //设置PWM的周期TRISC=TRISC&0xfb; //设置RC2---PWM输出T2CON=0x00; //分频系数=0x00TMR2ON=1; //启用TMR2PORTC=0x00; //PORTB=PORTB&0xfe; //RB0=0,----输出低电平,禁止GAL输出while(1){PORTA^=0b00010000; //RA4闪动for (jm=15000;jm>1;jm--){asm("nop");}}}trial=0b10110000;lkk=10;}RBIF=0;}void max_min_compare(){if (pwm_real>pwm_hi) pwm_real=pwm_hi;if (pwm_real<pwm_lo) pwm_real=pwm_lo;}main(void){para_chushihua(); //参数初始化nointerupt_chushihua(); //禁止中断初始化Io_chushihua(); //I/O初始化PWM_chushihua(); //PWM初始化RA1=0; //RA1-PSW1发送低电平,接通电源RA5=0; //RA5-RSW1发送低电平,主电路充电延时RA2=0; //RA2,指示灯灭RA4=0; //RA4,指示灯灭delay(100); //主电路充电延时RB0=0; //ST/(-STOP)发送低电平,禁止GAL输出delay(100);RA1=1; //RA1-PSW1发送高电平,接通电源for(charge_delay=0;charge_delay<50;charge_delay++){delay(15000);}RA5=1; //RA5-RSW1发送高电平,主电路充电延时delay(100); //主电路充电延时PP: asm(" nop"); //RBIF=0; //禁止RB4-7中断,清RBIF 标志设定RBIE=0; //禁止RB4-7中断,RBIE设定GIE=0; //关全局中断RA2=0; //RA2,指示灯灭RA4=0; //RA4,指示灯灭run_flag=0; //运行标志---由RB2按钮设置while(run_flag==0) //----------主程序-------------//{ //RB2启动键,低电平有效if (RB2==0) run_flag=1; //运行标志---由RB2按钮设置delay(100); //延时} //while(run_flag==1) //运行,则执行......{int ope; //设定开环运行次数为12次int openloopn; //RB0=1; //ST/(-STOP)发送高电平,开放GAL输出delay(100); //延时RA4=1;// pwm_real=180;pwm_real=230;delay(500); //延时// ope=10; //设定开环运行次数为20次ope=3; //设定开环运行次数为20次for (openloopn=0;openloopn<=ope;openloopn++){ //0 00000000000000000CCPR1L=pwm_real; //设置开环下PWM输出值----130open_loopf(); //开环运行20次,启动} //----------------------- //000000000000000000delay(6000); //延时RBIF=0; //RB4-7中断,RBIF标志设定RBIE=1; //RB4-7中断,RBIE设定GIE=1; //开全局中断RA2=1; //----------------------- pwm_real=pwm_hi; //-----------------------ghl: asm(" nop"); //if ((pwm_real<110)&&(run_num<10)) //如果pwm_real<140,但是run_num<10,表明未动,则{ //protect_run();protect_run();}while(RA0==1) //RA0=1,过流和过温保护{ //delay(150); //调用延时程序protect_num++; //if (protect_num>30)//如果30次保护,则认为是真正保护(过温和过流保护软件滤波){protect();} //过流和过温保护} //protect_num=0; //if(RB1==1) flag_autohand=1; //自/手标志设定,标志设定else flag_autohand=0; //RB1=1---AUTO;自动//RB1=0---HAND;手动//----------------------- if (flag_autohand==1){ //11 111111111111111111if (pwm_real>pwm_lo) pwm_real-=1; //自动else pwm_real=pwm_lo;}//11111111111111111111else{if(RA3==0) //加(低有效), 则{if (pwm_real<pwm_hi) pwm_real+=1;else pwm_real=pwm_hi;}if(RC1==0) //减(低有效),则{if (pwm_real>pwm_lo) pwm_real-=1;else pwm_real=pwm_lo;}}max_min_compare();CCPR1L=pwm_real; //设置PWM输出delay(4500); //调用延时子程序while(RA0==1) //RA0------过流和过温保护输入,高电平保护{ //protect(); //过流和过温保护} //while(RB3==0){ //RB3停机键,低电平有效run_flag=0; //运行标志---由RB3按钮设置}if (run_flag==0) //停机,则跳转至......{for(;pwm_real<pwm_hi;pwm_real++){delay(2000); //至上限否?CCPR1L=pwm_real; //设置PWM输出为最大}RB0=0; //ST/(-STOP)发送低电平,禁止GAL输出para_chushihua(); //参数初始化nointerupt_chushihua(); //禁止中断初始化PWM_chushihua(); //PWM初始化run_num=0;goto PP;}else{// run_num=0;goto ghl;}}// goto PP;}。

单片机直流电机控制器(附电路图和部分程序)

单片机直流电机控制器(附电路图和部分程序)

单片机直流电机控制器(附电路图和部分程序) 89C52单片机控制PWM调速电路实现小功率直流电机的转速调节,并要将其实时转速用LED管显示出来。

而本系统必须符合以下几点要求:(1) 在(1000—5500)转/分内对直流电机进行任意调速,最小调速级差为1转/分。

(2)电机能在所设速度下稳定运转,运转速度与设定速度之差小于±20转/分。

(3)电机启动和加减80%额定负载时,其转速能迅速回到设定值,转速超调±5%内。

(4)利用按键和LED数码管设置速度,设置方便,快捷。

(5)利用LED数码管实时显示电机速度。

(6)电机能进行正反转控制。

控制方面,本设计是采用定时器控制I/O口输出PWM信号驱动斩波电路控制电机运转和调速;利用单片机外部中断引脚的捕获功能、电机同轴带缺口的圆盘、光电耦合器来测量转速;并将测得转速和设定转速进行PI运算后输出,实现闭环控制;转向调节则是用的桥式电路。

显示是利用8位LED数码管,用按键进行设定。

下面简单介绍下硬件组成和一些软件原理:一、硬件电路。

1、单片机选用的是STC的89C52,20MHz晶振。

2、显示部分比较简单,用的8位7段数码管同时显示设定速度和实时速度。

采用74LS164串行移位输出,只占用单片机3个I/O口,刷新频率100Hz。

3、PWM驱动电路。

使用了9012和8050两个三极管来驱动,相信网上很多的,也不用我多说,只是别忘了加上续流二极管和两个三极管之间的限流电阻就是。

4、测速电路。

测速电路用的是光耦测量转动圆盘引起的脉冲宽度,从而可得单片机的实时速度,精度很高,可达千分之一。

用的是外部中断的。

好像是捕获模式,忘记了~呵呵!5、转向调节电路。

转向调节,由于是后来加上去的,所以就没有使用单片机控制,直接用硬件实现,但其实原理是一样的。

原理是利用开关控制继电器,然后控制桥路对电机实施转向控制。

另外用一个同轴电机按正反方向接2个LED用来指示方向。

无刷直流电机控制器设计程序

无刷直流电机控制器设计程序
{ key=get_char(); switch (key)
{ case 'A': n_ref_key=atoi(str);TIMER1_CONTROL=1;break; case 'B': n_ref_select_flag=~n_ref_select_flag;break;//切换 case 'C': pwm_positive=10000;pwm_negtive=10000;n_ref_key=3000;
set_refled_buf('0',0,4);set_fdbled_buf('0',0,4); TIMER1_CONTROL=0;break;//停止,关转速调节定时器 case '0': get_str(str,4);break; default: ; } } else return; } /*判断是否有键按下函数*/ bit kbd_hit(void) { key_row=0x00;//往键盘行输出 0 if ((key_col&0xff)==0xff)//检测列线 return((bit)0); delay(8);//延时 8ms 消抖 if ((key_col&0xff)==0xff)//再次检测确认 return((bit)0); else return((bit)1); } /*等待按键函数*/ unsigned char get_char(void) { unsigned char row=0,col=0;
ET1=0;//关转速调节中断 ET2=0;//关测速计数器溢出中断 EX0=0;//关 INT0 中断 IT0=1;//INT0 负边沿触发; IT1=1;//INT1 负边沿触发; set_refled_buf('0',0,4); set_fdbled_buf('0',0,4); LastError=0; //Error[-1] Proportion=0.000001; //比例常数 Proportional Const Integral=0.00001; //积分常数 Integral Const pwm_lou=0.5; str[0]='3';str[1]='0';str[2]='0';str[3]='0'; ET1=1;//开转速调节中断 } /*段码查找函数*/ unsigned char get_strokes(unsigned char c) { unsigned char i=0; while (led_strokes[i].ascii!=c) i++; return (led_strokes[i].stroke); } /*将当前给定显示缓冲区字符显示到 LED 上*/ void put_on_refleds(void) { unsigned char pos; unsigned char ledbit=0xfe; for (pos=0;pos<4;pos++)

直流无刷电机控制器程序流程图

直流无刷电机控制器程序流程图
开始初始化同时闪烁一次运行灯延时ad转换读取霍尔元件状态给tmr1赋初值测试电压采集位正常开中断闭环运算寄存器赋值中断到来进入中断主程序流程图中断入口中断保护测试是否为定中断清看门狗定时器1赋初值清空中断标志位采集速度为扩展口输出测试有无达到刹车阀值速度位置传感器信号采集测试速度阀值位是否运行灯常亮ad关扫描状态位测闭环增益处理速度环运算开环设置闭环程序开环程序故障判断程序测试故障位是否被清零运行灯闪烁设置ra为输入端口开始通过查表确定哪个口做ad输入清空结果寄存器采样保持位置位延时程序等待采样结束测试采样保持位是否被清零分时执行不同口的ad采样程序ref模拟量输入处理程序增益调节电位器gain处理程序刹车加速度电位器acc处理程序加速度电位器acc处理程电压监控口adad采样程序流程图测试闭环控制位是否被置位将闭环运算得到的指令值最后两位送到ccp1con开环程序测试ccpr1l是否小于指令值让指令值为0xf7指令值不变让与闭环运算相关的寄存器为初值测试开环占空比的值是否不小于0x08让ccpr1l以小于或等于0x04的步长减比较ccpr1l与开环占空比寄存器的值如果ccpr1l的值大则以0x01的步长减小ccpr1l值小则以同样步长增加相等时结束程序开环占空比寄存器清零开始测试方向位是否被置位测试电压正常位是否被清零测试能使位是否被置位测试故障位是否被清零试刹车设置位是否被置位输入无效位是电压异常处理程序反向运行使能未置位程序故障处理程序刹车处理程序输入无效处理程序状态位测试开环程序闭环程序流程图开始取出霍尔元件的反馈信号测试此次信号与前一次相比有无变化测试反馈信号变化一次经过中断次数是否大于刹车阀值表读出的次数清空中断次数计数器以r2f中的值做偏移量查方向表ladr0x0029定方向霍尔信号变化次数计数器与波形输出计数器r4d都加一更新霍尔信号寄存器以r4d做偏移量查波形表生成输出波形将波形放入portb输出刹车阀值读出的次数刹车阀值标志位置位返回刹车阀值速度测定程序流程图刹车阀值标志位清零开始是否脉冲输入设置位被清零测试此次得到的脉冲数是否与上一次不同差放进寄存器r37更新寄存器输入有效位置位将r37益相乘后右移两位得一16将所得的值累加进一24位寄存器并取其高16达到缓冲的目的pwm入方式每八次进入执行一次将开环占空比放入r3

电动车无刷控制器电路图(高清)

电动车无刷控制器电路图(高清)

今以应用最广泛的以PIC16F72为智能控制中心,350W的整机电路为例,整机电路如图1:(原文件名:1.gif)图1:350W整机电路图整机电路看起来很复杂,我们将其简化成框图再看看:(原文件名:2.gif)图2:电路框图电路大体上可以分成五部分:一、电源稳压,供应部分;二、信号输入与预处理部分;三、智能信号处理,控制部分;四、驱动控制信号预处理部分;五、功率驱动开关部分。

下面我们先来看看此电路最核心的部分:PIC16F72组成的单片机智能处理、控制部分,因为其他电路都是为其服务或被其控制,弄清楚这部分,其它电路就比较容易明白。

(原文件名:3.gif)图3:PIC16F72在控制器中的各引脚应用图我们先来简单介绍一下PIC16F72的外部资源:该单片机有28个引脚,去掉电源、复位、振荡器等,共有22个可复用的IO口,其中第13脚是CCP1输出口,可输出最大分辨率达10BIT的可调PWM信号,另有AN0-AN4共5路AD模数转换输入口,可提供检测外部电路的电压,一个外部中断输入脚,可处理突发事件。

内部软件资源我们在软件部分讲解,这里并不需要很关心。

各引脚应用如下:1:MCLR复位/烧写高压输入两用口2:模拟量输入口:放大后的电流信号输入口,单片机将此信号进行A-D转换后经过运算来控制PWM的输出,使电流不致过大而烧毁功率管。

正常运转时电压应在0-1.5V左右3:模拟量输入口:电源电压经分压后的输入口,单片机将此信号进行A-D转换后判断电池电压是否过低,如果低则切断输出以保护电池,避免电池因过放电而损坏。

正常时电压应在3V以上4:模拟量输入口:线性霍尔组成的手柄调速电压输入口,单片机根据此电压高低来控制输出给电机的总功率,从而达到调整速度的目的。

5:模拟/数字量输入口:刹车信号电压输入口。

可以使用AD转换器判断,或根据电平高低判断,平时该脚为高电平,当有刹车信号输入时,该脚变成低电平,单片机收到该信号后切断给电机的供电,以减少不必要的损耗。

无刷直流电机控制器接线图

无刷直流电机控制器接线图

无刷直流电机控制器接线图
我们介绍一些典型电动自行车控制器接线图,通过这些接线图可以了解电动自行车电机驱动、控制系统的构成。

1.以zkc3615KA型控制器为核心构成的有刷电机驱动、控制系统接线图
由zkc3615KA型控制器、电机、转把、闸把、助力传感器构成的有刷电机驱动、控制系统如图8-4所示。

2.以598系列智能型有刷控制器为核心构成的有刷电机驱动、控制系统接线图
由598智能型有刷控制器、电机、转把、闸把、助力传感器构成的有刷电机驱动、控制系统如图8-5所示。

3.以wzk3610C型无刷控制器为核心的构成无刷电机驱动、控制系统接线图
由wzk361OC型无刷控制器、电机、转把、闸把、助力传感器为核心构成的有刷电机驱动、控制系统如图8-6所示。

4.以1+1助力型36V/250W无刷控制器为核心的无刷电机驱动、控制系统接线图
由l+1助力型36V/250W无刷控制器、电机、转把、闸把、助力传感器构成的有刷电机驱动、控制系统如图8-7所示。

5.以1+1助力型48V/250W无刷控制器为核心的无刷电机驱动、控制系统接线图
由l+1助力型48V/250W无刷控制器、电机、转把、闸把、助力传感器为核心构成的无刷电机驱动、控制系统如图8-8所示。

无刷直流电机控制器接线图

无刷直流电机控制器接线图

无刷直流电机控制器接线图
我们介绍一些典型电动自行车控制器接线图,通过这些接线图可以了解电动自行车电机驱动、控制系统的构成。

1.以zkc3615KA型控制器为核心构成的有刷电机驱动、控制系统接线图
由zkc3615KA型控制器、电机、转把、闸把、助力传感器构成的有刷电机驱动、控制系统如图8-4所示。

2.以598系列智能型有刷控制器为核心构成的有刷电机驱动、控制系统接线图
由598智能型有刷控制器、电机、转把、闸把、助力传感器构成的有刷电机驱动、控制系统如图8-5所示。

3.以wzk3610C型无刷控制器为核心的构成无刷电机驱动、控制系统接线图
由wzk361OC型无刷控制器、电机、转把、闸把、助力传感器为核心构成的有刷电机驱动、控制系统如图8-6所示。

4.以1+1助力型36V/250W无刷控制器为核心的无刷电机驱动、控制系统接线图
由l+1助力型36V/250W无刷控制器、电机、转把、闸把、助力传感器构成的有刷电机驱动、控制系统如图8-7所示。

5.以1+1助力型48V/250W无刷控制器为核心的无刷电机驱动、控制系统接线图
由l+1助力型48V/250W无刷控制器、电机、转把、闸把、助力传感器为核心构成的无刷电机驱动、控制系统如图8-8所示。

一文搞定直流无刷电机

一文搞定直流无刷电机

第1讲无刷直流电动机控制的关键技术1.1无刷直流电动机结构无刷直流电动机是由电动机本体、转子位置传感器和电子开关线路三部分组成,其结构图如图1-1 所示。

图中,直流电源通过开关电路向电动机定子绕组供电,位置传感器随时检测到转子所处的位置,并根据转子的位置信号来控制开关管的导通和截止,从而自动地控制了哪些绕组通电,哪些绕组断电,实现了电子换相。

图1-1 无刷直流电动机结构图图中1为1.2 无刷直流电动机控制系统工作原理图1-2 无刷直流电动机的工作原理示意图如图1-2所示为一无刷直流电动机控制系统的工作原理。

通过安装在直流无刷电动机上的位置传感器测量电动机的转速并将其与给定速度进行比较,得到系统速度偏差。

根据系统速度偏差值的大小,通过相应的控制调节算法调节电动机电枢端电压的大小,使得电动机依照给定的速度运行。

相应的控制系统方框图如图1-3所示。

图1-3 无刷直流电动机控制系统方框图1.3 无刷直流电动机控制器原理PID 控制算法是指依照系统偏差的比例,积分和微分的线性组合进行控制的方法[25]。

PID 控制算法依托其结构简单,鲁棒性较好,可靠性高,参数易于整定的特点,在工业控制中得到了广泛地运用。

近50年来,90%以上的工业控制器均采用了PID 控制算法。

在模拟系统中PID 控制算法的表达式如式(1-1)所示。

0()1()(()())tD PID P I T de t U t k e t e t dt T dt =++⎰ (1-1)其中,U p 为PID 控制算法输出量,e(t)为系统偏差值,K p 为系统比例系数,T i 为系统积分时间常数,T d 为系统微分时间常数。

计算机控制从本质上来说是一种采样控制,需要根据当前时刻系统的采样偏差值计算相应的控制输出量。

在计算机控制系统中,式(1-1)所描述的模拟PID 控制算法不能直接使用,需对其采用离散化的方法进行处理。

一般情况下,可以通过一系列大量的单位时间采样点kT 模拟系统连续时间段[t0,t1];通过矩形法数值积分近似系统积分过程;通过一阶后向差分取代系统微分过程。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档