基于STM32的直流电机PWM调速控制_第1页
基于STM32的直流电机PWM调速控制_第2页
基于STM32的直流电机PWM调速控制_第3页
基于STM32的直流电机PWM调速控制_第4页
基于STM32的直流电机PWM调速控制_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、式修理)火挈(嵌入式系统及接口技术课程大作业)课程名称:嵌入式系统及接口技术班级专业:_姓名学号:指导老师:电动摩托车控制器中的电机PWM调速摘要:随着“低碳”社会理念的深入,新型的电动摩托车发展迅速,逐渐成为人们主要的代步工具之一,由于直流无刷电机的种种优点,在电动摩托车中也得到了广泛应用,因此,本文控制部分主要介绍一种基于STM32F10*片的新型直流无刷电机调速控制系统,这里主要通过PWMfc术来进行电机的调速控制,且运行稳定,安全可靠,成本低,具有深远的意义。1 .总体设计概述1.1 直流无刷电机及工作原理直流无刷电机(简称BLDCM,由于利用电子换向取代了传统的机械电刷和换向器,使得

2、其电磁性能可靠,结构简单,易于维护,既保持了直流电机的优点又避免了直流电机因电刷而引起的缺陷,因此,被广泛应用。另外,由于直流无刷电机专用控制芯片价格昂贵,本文介绍了一种基于STM32W新型直流无刷电机控制系统,既可降低直流无刷电机的应用成本,又弥补了专用处理器功能单一的缺点,具有重要的现实意义和发展前景。工作原理:直流无刷电机是同步电机的一种,具转子为永磁体,而定子则为三个按照星形连接方式连接起来的线圈,根据同步电机的原理,如果电子线圈产生一个旋转的磁场,则永磁体的转子也会随着这个磁场转动因此,驱动直流无刷电机的根本是产生旋转的磁场,而这个旋转的磁场可以通过调整A、B、C三相的电流来实现,其

3、需要的电流如图1所示随着我国经济和文化事业的发展,在很多场合,都要求有直流电机PWMS速系统来进行调速,诸如汽车行业中的各种风扇、刮水器、喷水泵、熄火器、反视镜、宾馆中的自动门、自动门锁、自动窗帘、自动给水系统、柔巾机、导弹、火炮、人造卫星、宇宙飞船、舰艇、飞机、坦克、火箭、雷达、战车等场合。1.2 总体设计方案总体设计方案的硬件部分详细框图如图1所示ADC模块图1总体方案系统框图该方案主要运行状况如下:通过摩托车车把的转动来改变其机械位置,然后这个变量通过ADC专换后,传送其调速信号给STM32F103另外,霍尔传感器将其对电机速度的检测信号也传送给STM32在STM32,首先根据ADC勺值

4、改变PW极形,并且与霍尔传感器的检测信号进行叠加,最终输出叠加后的PWMfc形给功率驱动电路,从而驱动电机并对其进行速度的控制和调节。2 .系统硬件设计2.1 总体硬件框图系统的硬件电路选用STM32F103J主控芯片,作为电机控制的核心,通过霍尔位置传感器检测位置信号,结合功率驱动电路以实现对电机的驱动。止匕外,还有电流检测电路可根据电机的状态以调整转速和实现过流保护功能系统的硬件框图如图2所示:图2系统硬件框图直流无刷电机是将直流有刷电机的机械换向改进成电子换向而来的,要使其转动,就必须通过电子换向的方法调整电流,按照转子所在的位置产生转动磁场,主控芯片控制H半桥驱动电路产生电机转动的换向

5、电流,以产生转动的磁场,驱动电路如图3所示驱动电路的作用是将控制电路输出的脉冲放大到足以驱动功率晶体管或MOSFETt,所以单从原理上讲,驱动电路主要起开关功率放大作用,即脉冲放大器。但随着开关工作频率的提高,驱动电路的优化设计显得越来越重要。驱动电路的最佳驱动特性应具有:功率管开通时,驱动电路提供的基极电流应有快速的上升沿,并一开始有一定的过冲,以加速开通过程,并在集电极电流尖峰时开启驱动基极,从而减小开通损耗;功率管导通期间,驱动电路提供的基极电流在任何负载情况下都能保证功率管处于饱和导通状态,使功率管的饱和压降较低,以保证低的导通损耗;关断瞬时,驱动电路应提供足够的反向基极驱动,以迅速抽

6、出基区的剩余载流子,并加反偏截止电压,使集电极电流迅速下降以减少下降时间。为了增加系统的抗干扰能力,STM32输出的6路PWM&号首先必须经隔离再送到IR2136进行驱动,由于开关速度达到20KHz左右,故设计中选用高速光耦器件HCPL4504见图3,其最高速度可达1Mbit/s,内部的噪声抑制电路可提供高于15kVZus的共模抑制。IR2136是IR公司的一款功率MOSFETIGBT专用栅极驱动集成电路,独有的I-IVIC(Highvoltageintegratedcircuit)技术使得它可用作驱动工作在母线电压高达600V的电路中的功率MO端件。其内部采用自举技术,使得功率驱动元

7、件驱动电路仅需输入一个直流电源,使其实现对功率MOSFE和IGBT的最优驱动,并且它还具有完善的保护功能包括欠压保护和过流保护,以便保证系统安全稳定的工作。故本文选用IR2136作为主功率部分的MOSFE驱动,如图3所示:图3中经IR2136驱动的6路PwMW号被直接送到由6个MOSFE管组成的主功率电路。如图所示,该功率驱动采用三相全控电路,电动机的三相绕组为Y型联结。MOSFE管选用IR公司的IRFZ48,该管导通电阻较低,当连续流过10A电流时,功耗才1.2w,根本不需要散热片就可以稳定工作。图3功率驱动电路2.3直流无刷电机的调速直流无刷电机调速的原理就是在驱动电机转动的基础上,将驱动

8、电流由PWM信号来控制,改变PWMB号的脉冲宽度,即通过调节MOSFET断的时间来调节提供给电机三相的电流大小,从而对电机进行调速控制。本方案中MOSFET的导通是通过STM32勺PWMW号来才5制的,STM32内部的普通的定时器TIM3和TIM4,每个可以产生四路PWMS:生器,这里用TIM3产生4路,TIM4产生两路,共六路可编程的PWM1号,驱动H桥。直流无刷电机的电子换向是基于转子的位置来控制的,本系统采用3个霍尔传感器对直流无刷电机进行位置测量霍尔传感器安装在电机的内部,将转子的位置转换为三路数字信号直接输出到STM32GPIO口在本设计中可方便地用于通过检测霍尔位置传感器的信号来实

9、现检测转子的位置,然后据此输出相应的PWMJ号控制功率管的导通或关断,从而实现电流的换向,在电机内部产生一个转动的磁场,进而驱动电机旋转。另外,车把转动的时候会通过一个DA转换,然后得到调速的标志flag的值,从而根据这个flag值来改变PWMO勺占空比,从而进行电机的调速。直流无刷电机旋转时三个霍尔传感器的信号值和输出的PWM1号之间的对应关系如图4所小图4相位与PWM信号的对应关系霍尔传感器的位置反馈信号在可以确定转子位置的同时,也可用来测量电机的转速电机每转动一周,每个霍尔传感器即会产生两次换向,三个霍尔传感器共会有6次换相,这六次换相之间的时间差即为电机运转一周所需的时间,继而可计算出

10、电机的转速根据计算出的电机转速,调整PWM1号的脉冲宽度,从而达到调速的目的3 .系统软件设计本系统编程部分工作在keil4开发环境下完成,采用模块化的设计方法,与各子程序作为实现各部分功能和过程的入口,完成PW做宽调速的控制。STM32F10赘源分配如下表:表1芯片的资源分配GPIOD4霍尔传感器输出端GPIOA6利用定时器TIM3,TIM4产生的六路PWM输出GPIOA7GPIOD5GPIOB0GPIOB1GPIOD6GPIOB6GPIOB71.PWMF生程序:本设计中采用STM32F103勺定时器TIM3,TIM4两个定时器来产生PW极形,程序函数如下:#include"tim

11、er.h"通用定时器中断初始化这里时钟选择为APB1的2倍,而APB1为36Marr:自动重装值。psc:时钟预分频数这里使用的是定时器3voidTimerx_Init(u16arr,u16psc)一RCC->APB1ENR|=1<<1;/TIM3时钟使能TIM3->ARR=arr;设定计数器自动重装值刚好1msTIM3->PSC=psc;预分频器7200,得到10Khz的计数时钟这两个东东要同时设置才可以使用中断TIM3->DIER|=1<<0;允许更新中断TIM3->DIER|=1<<6;允许触发中断TIM3-&g

12、t;CR1|=0x01;使能定时器3MY_NVIC_Init(1,3,TIM3_IRQChannel,2);/抢占1,子优先级3,组2voidPWM1_1_Init(u16arr1,u16psc1)一一此部分需手动修改IO口设置RCC->APB1ENR|=1<<1;/TIM3时钟使能GPIOA->CRL&=0XF0FFFFFF;/PA6输出GPIOA->CRL|=0X0B000000;/复用功能输出GPIOA->ODR|=1<<6;/PA6上拉TIM3->ARR=arr1;/设定计数器自动重装值TIM3->PSC=psc1;/

13、预分频器不分频TIM3->CCMR1|=7<<4;/CH1PWM2模式TIM3->CCMR1|=1<<3;/CH1预装载使能TIM3->CCER|=1<<0;/OC1输出使能TIM3->CR1=0x8000;/ARPE使能TIM3->CR1|=0x01;使能定时器3voidPWM1_2_Init(u16arr2,u16psc2)此部分需手动修改IO口设置RCC->APB1ENR|=1<<1;/TIM3时钟使能GPIOA->CRL&=0X0FFFFFFF;/PA7输出GPIOA->CRL|=0

14、XB0000000;复用功能输出GPIOA->ODR|=1<<7;PA7上拉TIM3->ARR=arr2;/设定计数器自动重装值TIM3->PSC=psc2;/预分频器不分频TIM3->CCMR1|=7<<12;/CH2PWM2模式TIM3->CCMR1|=1<<11;/CH2预装载使能TIM3->CCER|=1<<4;/OC2输出使能TIM3->CR1=0x8000;/ARPE使能TIM3->CR1|=0x01;使能定时器3voidPWM1_3_Init(u16arr3,u16psc3)此部分需手

15、动修改IO口设置RCC->APB1ENR|=1<<1;/TIM3时钟使能GPIOB->CRL&=0XFFFFFFF0;PB0输出GPIOB->CRL|=0X0000000B;/复用功能输出GPIOB->ODR|=1<<0;/PB0上拉TIM3->ARR=arr3;/设定计数器自动重装值TIM3->PSC=psc3;/预分频器不分频TIM3->CCMR2|=7<<4;/CH3PWM2模式TIM3->CCMR2|=1<<3;/CH3预装载使能TIM3->CCER|=1<<8;/

16、OC3输出使能TIM3->CR1=0x8000;/ARPE使能TIM3->CR1|=0x01;使能定时器3voidPWM1_4_Init(u16arr4,u16psc4)一一/此部分需手动修改IO口设置RCC->APB1ENR|=1<<1;/TIM3时钟使能GPIOB->CRL&=0XFFFFFF0F;/PB1输出GPIOB->CRL|=0X000000B0;/复用功能输出GPIOB->ODR|=1<<1;PB1上拉TIM3->ARR=arr4;/设定计数器自动重装值TIM3->PSC=psc4;/预分频器不分频T

17、IM3->CCMR2|=7<<12;/CH4PWM2模式TIM3->CCMR2|=1<<11;/CH4预装载使能TIM3->CCER|=1<<12;/OC4输出使能TIM3->CR1=0x8000;/ARPE使能TIM3->CR1|=0x01;使能定时器3voidPWM2_1_Init(u16arr5,u16psc5)/此部分需手动修改IO口设置RCC->APB1ENR|=1<<2;/TIM4时钟使能GPIOB->CRL&=0XF0FFFFFF;/PB6输出GPIOB->CRL|=0X0B0

18、00000;/复用功能输出GPIOB->ODR|=1<<6;/PB6上拉TIM4->ARR=arr5;/设定计数器自动重装值TIM4->PSC=psc5;/预分频器不分频TIM4->CCMR1|=7<<4;/CH1PWM2模式TIM4->CCMR1|=1<<3;/CH1预装载使能TIM4->CCER|=1<<0;/OC1输出使能TIM4->CR1=0x8000;/ARPE使能TIM4->CR1|=0x01;使能定时器4voidPWM2_2_Init(u16arr6,u16psc6)此部分需手动修改I

19、O口设置RCC->APB1ENR|=1<<2;/TIM4时钟使能GPIOB->CRL&=0X0FFFFFFF;/PB7输出GPIOB->CRL|=0XB0000000;复用功能输出GPIOB->ODR|=1<<7;/PB7上拉TIM4->ARR=arr6;设定计数器自动重装值TIM4->PSC=psc6;/预分频器不分频TIM4->CCMR1|=7<<12;/CH2PWM2模式TIM4->CCMR1|=1<<11;/CH2预装载使能TIM4->CCER|=1<<4;/OC2

20、输出使能TIM4->CR1=0x8000;/ARPE使能TIM4->CR1|=0x01;使能定时器42、霍尔传感器部分的程序#include"huoer.h"voidhuoer_Init(void)一RCC->APB2ENR|=1<<5;使能PORTD时钟GPIOD->CRL&=0XF000FFFF;/PD4,5,5设置成输入GPIOD->CRL|=0X08880000;GPIOD->ODR|=1<<4;/PD4上拉GPIOD->ODR|=1<<5;/PD5上拉GPIOD->ODR|

21、=1<<6;/PD6上拉3、延时程序#include<stm32f10x_lib.h>#include"delay.h"staticu8fac_us=0;/us延时倍乘数staticu16fac_ms=0;/ms延时倍乘数初始化延迟函数/SYSTICK的时钟固定为HCLK时钟的1/8/SYSCLK:系统时钟voiddelay_init(u8SYSCLK)SysTick->CTRL&=0xfffffffb;/bit2清空,选择外部时钟HCLK/8fac_us=SYSCLK/8;fac_ms=(u16)fac_us*1000;一一/延时nm

22、s/SysTick->LOAD为24位寄存器,所以,最大延时为:/nms<=0xffffff*8*1000/SYSCLK/对72M条件下,nms<=1864voiddelay_ms(u16nms)一u32temp;SysTick->LOAD=(u32)nms*fac_ms;/时间加载(SysTick->LOAD为24bit)SysTick->VAL=0x00;清空计数器SysTick->CTRL=0x01;开始倒数dotemp=SysTick->CTRL;while(temp&0x01&&!(temp&(1<

23、<16);等待时间到达SysTick->CTRL=0x00;关闭计数器SysTick->VAL=0X00;清空计数器延时nus/nus为要延时的us数.voiddelay_us(u32nus)一u32temp;SysTick->LOAD=nus*fac_us;/时间加载SysTick->VAL=0x00;/清空计数器SysTick->CTRL=0x01;开始倒数dotemp=SysTick->CTRL;while(temp&0x01&&!(temp&(1<<16);等待时间到达SysTick->CTRL

24、=0x00;关闭计数器SysTick->VAL=0X00;清空计数器4、主程序#include<stm32f10x_lib.h>#include"sys.h"#include"delay.h"#include"timer.h"#include"huoer.h"intmain(void)u8flag;/DA转换过来的调速标志Stm32_Clock_Init(9);/系统时钟设置delay_init(72);延时初始化PWM1_1_Init(900,0);/不分频。PWM频率=72000/900=8K

25、hzPWM1_2_Init(900,0);PWM1_3_Init(900,0);PWM1_4_Init(900,0);PWM2_1_Init(900,0);PWM2_2_Init(900,0);while(1)switch(flag)case0:PWM1_VAL=900;PWM2_VAL=900;PWM3_VAL=900;PWM4_VAL=900;PWM5_VAL=900;PWM6_VAL=900;break;case 1: if(huoer1=1)&&(huoer3=0)elseif(huoer1=0)&&(huoer2=1)elseif(huoer2=0)&

26、amp;&(huoer3=1)elseif(huoer1=0)&&(huoer3=1)elseif(huoer1=1)&&(huoer2=0)elseif(huoer2=1)&&(huoer3=0)elsebreak;case 2: if(huoer1=1)&&(huoer3=0)elseif(huoer1=0)&&(huoer2=1)elseif(huoer2=0)&&(huoer3=1)elseif(huoer1=0)&&(huoer3=1)elseif(huoer1=1

27、)&&(huoer2=0)elseif(huoer2=1)&&(huoer3=0)elsebreak;case 3: if(huoer1=1)&&(huoer3=0)elseif(huoer1=0)&&(huoer2=1)elseif(huoer2=0)&&(huoer3=1)elseif(huoer1=0)&&(huoer3=1)elseif(huoer1=1)&&(huoer2=0)elseif(huoer2=1)&&(huoer3=0)elsebreak;PWM

28、1_V AL=300;PWM1_VAL=900;PWM2_V AL=300;PWM2_V AL=900;PWM3_V AL=300;PWM3_V AL=900;PWM4_V AL=300;PWM4_V AL=900;PWM5_V AL=300;PWM5_V AL=900;PWM6_V AL=300;PWM6_V AL=900;PWM1_V AL=350;PWM1_V AL=900;PWM2_V AL=350;PWM2_V AL=900;PWM3_V AL=350;PWM3_VAL=900;PWM4_V AL=350;PWM4_V AL=900;PWM5_V AL=350;PWM5_V AL=9

29、00;PWM6_V AL=350;PWM6_V AL=900;PWM1_V AL=400;PWM1_V AL=900;PWM2_V AL=400;PWM2_V AL=900;PWM3_V AL=400;PWM3_V AL=900;PWM4_V AL=400;PWM4_V AL=900;PWM5_V AL=400;PWM5_V AL=900;PWM6_V AL=400;PWM6_V AL=900;case 4: if(huoer1=1)&&(huoer3=0)PWM1_VAL=450;elseif(huoer1=0)&&(huoer2=1)elseif(huoer

30、2=0)&&(huoer3=1)elseif(huoer1=0)&&(huoer3=1)elseif(huoer1=1)&&(huoer2=0)elseif(huoer2=1)&&(huoer3=0)elsebreak;case 5: if(huoer1=1)&&(huoer3=0)elseif(huoer1=0)&&(huoer2=1)elsePWM1_V AL=900;PWM2_V AL=450;PWM2_V AL=900;PWM3_V AL=450;PWM3_V AL=900;PWM4_V A

31、L=450;PWM4_V AL=900;PWM5_V AL=450;PWM5_V AL=900;PWM6_V AL=450;PWM6_V AL=900;PWM1_V AL=500;PWM1_V AL=900;PWM2_V AL=500;PWM2_V AL=900;PWM3_V AL=500;if(huoer2=0)&&(huoer3=1)elseif(huoer1=0)&&(huoer3=1)elseif(huoer1=1)&&(huoer2=0)elseif(huoer2=1)&&(huoer3=0)elsebreak;case

32、 6: if(huoer1=1)&&(huoer3=0)elseif(huoer1=0)&&(huoer2=1)elseif(huoer2=0)&&(huoer3=1)elseif(huoer1=0)&&(huoer3=1)elseif(huoer1=1)&&(huoer2=0)elseif(huoer2=1)&&(huoer3=0)elsebreak;case 7: if(huoer1=1)&&(huoer3=0)elseif(huoer1=0)&&(huoer2=1)elseif(huoer2=0)&&(huoer3=1)elseif(huoer1=0)&&(huoer3=1)elseif(huoer1=1)&&(huoer2=0)elseif(huoer2=1)&&(huoer

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论