无刷直流电动机_第1页
无刷直流电动机_第2页
无刷直流电动机_第3页
无刷直流电动机_第4页
无刷直流电动机_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

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

文档简介

1、 基于STM32的BLDC控制系统设计孙李涛(安阳师范学院 物理与电气工程学院, 河南 安阳 455002)摘要:结合BLDC控制原理,设计了基于IR2110的BLDC驱动电路,实现对由IRF540搭建的主电路的驱动,通过安装在BLDC中的霍尔传感器反馈信号,结合STM32单片机高级定时器TIM1以及普通定时器TIM2采集的霍尔传感器状态产生六路带死区互补的PWM波,实现对BLDC电机控制,并用液晶nokia5110实时显示电机转速。关键词:STM32;IR2110;无刷直流电机;有位置传感器;IRF540;Nokia51101 引言无刷直流 (Brushless Direct Current

2、,BLDC)电机是一种正快速普及的电机类型,它可在家用电器、汽车、航空航天、消费品、医疗、工业自动化设备和仪器等行业中使用。根据BLDC主控制器的性能不同,其控制技术大致有以下几种。(1)根据定子绕组中线圈的互联方式不同,带有输入捕捉、中断、三相电机控制PWM定时器功能的主控制器可以通过梯形波驱动控制无刷直流电机。带有输入捕捉、中断、三相电机控制PWM定时器功能的主控制器可以通过正弦波驱动控制无刷直流电机。(2)具有输入捕捉、中断、三相电机控制的带死区PWM定时器若控制器带死区时间也可以通过简单矢量控制来控制无刷直流电机驱动信号。(3)若是高性能MCUMAC、高速A/D转换器、输入捕捉、中断、

3、三相电机带控制的死区PWM定时器的控制器可以通过矢量控制(FOC)。(4)输入捕捉、高速A/D 转换器、中断、三相电机控制PWM定时器无传感器梯形波驱动控制。(5)高性能MCUMAC、 高速A/D转换器、中断、三相电机带控制的死区PWM定时器无传感器矢量控制。本文正是设计开发基于STM32的有位置传感器无刷直流电机的控制系统。2 系统方案设计2.1方案论证方案1:当前计算机技术的空前发展为智能控制提供了良好的工作平台,通过计算机我们可以控制高度复杂的系统,但随之而来的是高成本,高技术含量,需要匹配高技术人才。方案2:STC51单片机具有可靠性高,配套齐全,功能完善,适用性强易学易用,抗干扰能力

4、强,系统的设计建造工作量小,维护方便,容易改造体积小,重量轻,能耗低。但是51单片机资源太少,若想实现无刷直流电机的控制需要外接庞大的外围电路,性价比不高。方案3:当前工业现场广泛使用的PLC可编程逻辑控制器,具有功能完善,组合灵活,扩展方便,实用性强 ,使用方便,编程简单,采用简明的梯形图,安装简单,容易维修 抗干扰能力和可靠性能力都非常强,但是它的成本非常高。方案4:STM32单片机拥有集成了AD、高级定时器TIM1等外设,拥有高性能MCUMAC、高速A/D转换器、输入捕捉、中断、三相电机带控制的死区PWM定时器等诸多外设,足以完成无刷直流电机的控制。根据系统设计要求用方案4已能基本完成对

5、无刷直流电机的控制,并且此方案用到的芯片数量少,易于控制,维护性强。2.2方案选择本设计是基于单片机的无刷直流电机控制的系统,主要由主控制装置、驱动装置、信息通道三部分构成。主控制装置是整个系统的核心装置,主要实现无刷直流电机换相、计算无刷直流电机转速等功能,位置传感器霍尔传感器装置安装在无刷直流电机内,主要用来采集信息用于判断换相和计算无刷直流电机转速。按键模块用来修改无刷直流电机设定速度,matlab gui用显示电机转速变化趋势,nokia5110用来实时显示无刷直流电机转速。系统框图如图1所示。图1系统框图3 无刷直流电机系统的工作原理和控制方法3.1 无刷直流电机的基本工作原理3.1

6、.1无刷直流电机的数学模型经典的无刷直流电机的三相桥式驱动电路设计等效电路如图2所示。图2无刷直流电机等效电路图根据电机的等效电路图,可知三相绕组的电压方程,如下:=+p+(1)该式中 ua、ub、uc 和 ia、ib、ic 分别为三相相电压和电流;un 为中性电压。计算可以得到电压方程为公式(2)=+p+ (2)可以计算出电机的反电动势方程为: (3)其中为电势常数, ,为每极的磁通量。可以计算出电机的转矩方程为: (4)其中为转矩常数,为电枢电流。3.1.2换相原理永磁无刷直流电机的换相电路是实现其平稳换相的关键,用来控制着无刷直流电机三相绕组通电依次顺序和时间。常见的通电换相顺序如图3所

7、示:图3通电换相顺序图常用无刷直流电机的逆变器采用三相桥式主回电路的控制方式一般是二二导通模式。根据上图换相时序图可知,一个周期都存在 6 种导通状态,以 60°电角度为间隔改变。本系统设计采用的是传 统的二二导通模式,即任意时刻都有而且只有 2 只开关管导通。每个功率管导通 120°电角度,之间间隔 60°电角度,并处于关断状 态,可以很好的避免死区的产生而发生主回路直通短路,此种工作方式称为两相导通星型三相6状态方式。 由此可见逆变器功率管的换相时刻精准确定就成为了调速控制的重中之重。下面将主要介绍常用有位置传感器检测技术来确定换相时刻。3.2 有位置传感器无

8、刷直流电机的控制法无刷直流电动机的位置检测主要分为采用霍尔传感器检测方法和无位置传感器检测两大类。本系统主要采用霍尔传感器检测无刷直流电机运行状态,实现采集换相信息。3.2.1霍尔传感器状态检测法 当电机工作在两相导通星型三相6状态方式时反电动势波形与功率开关的导通关系如下图4和图5所示。图4 霍尔传感器状态图5功率管导通顺序图无刷直流电机按照上述顺序给驱动器通适当的信号,可正常顺时针转动。第 4 页4 系统设计4.1 硬件设计4.1.1主要模块设计 (1)主控制:STM32F103VET6单片机是 32位基于ARM核心的带闪存、USB、CAN的微控制器C,7个16位定时器、2个ADC、9个通

9、信接口。LQFN100封装。其引脚排列图参见附录图1。 (2)无刷直流电机驱动模块: IR2110既有驱动能力,又有光电隔离的效果。MOSFET管IRF540开关管,用来给无刷直流电机换相驱动。STM32单片机输出的信号只能作为信号而不能驱动无刷直流电机,所以需要一个驱动电路,把信号放大到可以驱动无刷直流电机。其电路如图6所示: 图6 BLDC驱动电路(3)位置传感器采集模块:无刷直流电机霍尔传感器采集换相信号经过滤波和加上拉电阻处理后,传给STM32单片机。电路如图7所示:图7 位置传感器采集电机换相信号电路(4)RS232通信模块:max3232收发器采用专有的低压差发送器输出级,利用双电

10、荷泵在3.0V至5.5V电源供电时能够实现真正的RS-232性能。介于matlab gui和微控制器STM32之间的信息传递处理电路。电路如图8所示:图8 RS232通信电路 (5)辅助电源:为微控制器、Nokia5110、max3232等电路提供工作电压。其电路如图9所示:图9 辅助电源 (6)液晶Nokia5110显示:Nokia5110是一款采用串行接口与主处理器进行通信,支持SPI通信协议,接口信号线数量少,包括电源和地在内的信号线仅有8条。传输速率高达4Mbps,可以全速写入显示数据,无需等待时间。用来实时显示电机运行状况。其电路如图10所示:图10 液晶Nokia5110显示电路

11、(7)按键模块:用来设置电机转速。其电路如图11所示:图11 按键模块4.1.2 系统原理图见附录图2。4.2 软件设计4.2.1 程序设计思想系统程序设计思想采用模块化编程,根据STM32系统要求和各电路工作要求模块主要涉及:Nokia5110显示、TIM1配置为产生6路互补PWM波、TIM2配置为霍尔传感器接口、Systick时钟延时、中断模块、串口模块、PID算法模块等。图12 程序流程图4.2.2 模块程序设计 (1)Nokia5110显示模块程序Nokia5110是SPI协议的显示屏。 图13 发送一个字节图14 发送字符串 图15 程序流水线程序见附录图4。(2)TIM1配置为产生

12、6路互补PWM波高级定时器TIM1的结构图如下图所示,TIM1的主要作用就是产生6路带死区时间、互补的PWM波,并且带有刹车功能。图16 高级定时器TIM1结构图(3)TIM2配置霍尔接口普通定时器TIM2的结构图如下图所示,TIM2的主要作用是计算无刷直流电机转速,触发COM事件超前改变驱动状态。图17 普通定时器TIM2结构图5 系统调试5.1 无刷直流电机测试无刷直流电机的棕、白、黄分别对应着霍尔传感器A、B、C,手动顺时针转动无刷直流电机一周,霍尔传感器状态为(CBA):001、101、100、110、010、011、001、101、100、110、010。即直流无刷电机转动一周,霍尔

13、传感器状态变化2个周期。表1:控制字表CBA控制字00101H10105H10004H11006H01002H01103H5.2 软硬件调试遇到问题及解决方法(1)由于画PCB时,STM32核心板与外围接口板连接线太细,再加上没有阻焊层,致使信号线短路和虚焊。结果导致三相驱动电路,有一路没能正常工作。将虚焊和短路解决掉后,电机可以正常转动。(2)加上nokia5110液晶屏实时显示无刷直流电机转速,转速变化范围很大,由于霍尔传感器外围接口电路受到了外界干扰,影响了普通定时器TIM2的CNT计数误差。将外围电路影响因素消除,液晶屏显示电机转速稳定了。6 结论该课题的主要任务是设计一个以STM32

14、单片机为处理器及以IR2110驱动IRF540组成的主控制电路的无刷直流电机控制系统。本设计主要分为硬件部分和软件部分,硬件部分着重考虑硬件电路的可靠性性,故尽可能加保护电路,节省线路板的空间,达到硬件电路最优化设计。软件采用C语言编写,采用模块化设计思想,程序可读性强。通实验验证了系统的可行,能满足设计要求,达到设计的指标,实现对无刷直流电机的驱动,并实时显示电机转速。本次毕设使我将大学四年所学的知识进行了汇总,在收集资料,确定方案的过程中,我学到许多知识,也弄懂了许多以前不是很清楚的问题。在做毕业设计的过程中,是我们所学知识的一次升华,把理论知识运用到了实际当中。也使我们从中得到了锻炼。致

15、谢 在本论文完成之际,谨向所有指导、关心和帮助过我的老师、同学和亲人表达由衷的感激之情。 首先,将最诚挚的感谢献给导师丁电宽副教授、还有神方康复机器人公司赵宗红经理和阿莫论坛以及阿莫论坛那些开源BLDC的网友们。在自己写的程序始终无法驱动无刷直流电机的时候,赵宗红经理雪中送炭送我一份无刷直流电机演示程序。在整个课题研究与设计过程中,每每遇到问题的时候,总是可以在阿莫论坛搜到解决那些问题的方法和途径,使我最终能够顺利的完成课题中自己负责的设计工作。其次,要感谢闫迎利副教授、李建法高级实验师、李艾华高级工程师、苗风东老师、孙志富老师、陈永超老师、郭季老师等所有教授我知识的老师,在他们的引导下,我才

16、能有机会并爱上电子设计。还要感谢赵晓慧老师、来建民老师,在他们提供元器件和制板的帮助下我可以按时完成硬件设计与制作。衷心感谢我的父母,他们的全力支持和殷切关怀一直是我奋发向上的源泉,他们最深切的爱给予了作者战胜一切困难的勇气。感谢关心爱护我的亲朋好友,他们的关爱和鼓励也给了我攀登高峰的勇气和动力。最后,谨将此文献给所有关心和帮助过我的老师、同学、亲人和朋友,再次向他们致以崇高的敬意和诚挚的谢意!参考文献1 Microchip.AN885CN无刷直流(BLDC)电机基础. 2 3 PHILIPS.DATA SHEET PCD8544.4 ST.Refernce Manual(RM0008).5

17、谢杨梅. 无刷直流电动机(BLDCM)转矩脉动抑制的电流跟踪型 PWM 控制J安徽 电子信息职业技术学院学报, 2007,(01).6 王向超.永磁同步电机无位置传感器控制及自适应转速控制D. 天津大学,2007,(04).7 8 9 International Rectifier.Application Note AN-985.10 International Rectifier.Application Note AN-978.11 楚斌.IR2110功率驱动集成芯片应用.南京康尼机电新技术有限公司,江苏省南京市21 001The Design of Control System of ST

18、M32 Based on BLDC SUN Li-tao(College of Physics & Electrical Engineering, Anyang Normal University, Anyang 455002,China)Abstract:Principle of combination of BLDC control motors based on BLDC drive motors of IR2110 circuit, implement of IRF540 structures of main circuit of the drive, by installin

19、g in BLDC hall sensor feedback signal of the motors, combining with senior STM32 microcontroller timer TIM1 according to the state of hall sensor to produce general TIM2 timer gathering all dead zone complementary PWM wave, realize the BLDC motor control motors, with LCD nokia5110 the motor speed in

20、 real time.Keywords: STM32; IR2110; brushless DC motor; position sensor; IRF540; Nokia5110 附录:图1 STC51单片机引脚排列图图2系统原理图图3 实物图图4 nokia5110部分程序void Nokia5110WriteEnglishString(uint8_t X,uint8_t Y,uint8_t *s)Nokia5110DisplayPosition(X,Y);/定位到x列y行while (*s) Nokia5110WriteChar(*s);s+;void Nokia5110WriteByt

21、e(uint8_t dat,uint8_t com)uint8_t i;Nokia5110_CE_Rest;if(com=0)Nokia5110_DC_Rest;elseNokia5110_DC_Set;for(i=0;i<8;i+)if(dat&0x80)Nokia5110_SDIN_Set;elseNokia5110_SDIN_Rest;Nokia5110_SCLK_Rest;dat=dat<<1;Delay_us(2);Nokia5110_SCLK_Set;Nokia5110_CE_Set;高级定时器TIM1和普通定时器TIM2外设设置程序#include &q

22、uot;stm32f10x.h"#include "LCD5110.h"#include "usart1.h"#include "SysTick.h"#include "pid.h"#define PWM_DeadTime 100typedef unsignedint INT32U;/uint32_t step;uint8_t speed4;uint8_t speed_wan,speed_qian,speed_bai,speed_shi,speed_ge;enum MotorDirectionMotorR

23、everseFlag,MotorForwardFlag;enum MotorDirection direction_flag=(enum MotorDirection)(1);volatile uint32_t feedback_value;/输出速度反馈值int PWM_Freq_Value1;int16_t Huoer_Cnt;void RCC_Configuration(void)RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOA |RCC_APB2Periph_GPIOB | RCC_APB2Periph_G

24、PIOC |RCC_APB2Periph_TIM1 |RCC_APB2Periph_ADC1, ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 |RCC_APB1Periph_USART3, ENABLE);void NVIC_Configuration(void)NVIC_InitTypeDef NVIC_InitStructure;/?NVIC? /USART3/NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;/NVIC_InitStructure.NVIC_IRQChannelPree

25、mptionPriority = 0;/NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;/NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;/NVIC_Init(&NVIC_InitStructure);/TIM1 NVIC_InitStructure.NVIC_IRQChannel = TIM1_TRG_COM_IRQn;/?TIM1?NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;NVIC_InitStructure.NV

26、IC_IRQChannelSubPriority = 1;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);/TIM2NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;/?TIM2?NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;NVIC_InitStructure.NVI

27、C_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure); void BSP_PWM_Init (void) /PWMGPIO_InitTypeDef GPIO_InitStructure;TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;/基本结构体变量定义TIM_OCInitTypeDef TIM_OCInitStructure;/输出结构体变量定义TIM_BDTRInitTypeDef TIM_BDTRInitStructure;/死区刹车结构体变量定义/RCC_ClocksTypeD

28、ef RCC_Clocks;/电机时钟结构体变量定义GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2; /TIM2GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10; /TIM1正通道GPIO_InitStructure.GPIO_Mode = GPIO_

29、Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;/TIM1负通道GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPI

30、O_InitStructure);/定时器1基本配置 TIM_DeInit(TIM1);TIM_TimeBaseStructure.TIM_Prescaler = 1;/TIM /不分频(赵)TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;/向上计数 TIM_TimeBaseStructure.TIM_Period =2999; / ARR PWM=12kHz/CR1 定时器时钟频率和数字滤波器使用的采样频率之间的分频比例TIM_TimeBaseStructure.TIM_ClockDivision = 0;/*每次从零开始

31、计数时,产生更新事件(UEV)*/TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure);TIM_ARRPreloadConfig(TIM1,ENABLE); / 启用了ARR的影子寄存器(直到产生中断时才能更新) /PWM波输出/*in upcounting mode,channelx is active as long as TIM1_CNT<TIM1_CCR1,else inactive*/TIM_OCInitStructure.TIM_OCM

32、ode = TIM_OCMode_PWM1;/*OC1 signal is output on the corresponding output pin depending on MOE,OSSI, OSSR, OIS1, OIS1N and CC1NE bitsOC1N signal is output on the corresponding output pin depending on MOE, OSSI, OSSR, OIS1, OIS1N and CC1E bits*/TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Ena

33、ble; TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable; TIM_OCInitStructure.TIM_Pulse =1400;/ CCR1(CCR2、CCR3)/*as output OC1,OC1N active high*/TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;/High; TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCPolarity_High;/High;/*set OIS1 bit,O

34、C1=1 (after a dead-time if OC1N is implemented) when MOE=0 reset OIS1N bit,OC1N=0 after a dead-time when MOE=0*/TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset;TIM_OC1Init(TIM1,&TIM_OCInitStructure); /输出通道1/* set OC1P bit,Pre

35、load register on TIMx_CCR1 enabled. Read/Write operations access the preload register. TIMx_CCR1 preload value is loaded in the active register at each update event*/TIM_OC1PreloadConfig(TIM1,TIM_OCPreload_Enable); /使能捕获比较寄存器预装载(通道1)TIM_OC2Init(TIM1,&TIM_OCInitStructure);/输出通道2TIM_OC2PreloadConf

36、ig(TIM1,TIM_OCPreload_Enable);/使能捕获比较寄存器预装载(通道2)TIM_OC3Init(TIM1,&TIM_OCInitStructure); /输出通道3 TIM_OC3PreloadConfig(TIM1,TIM_OCPreload_Enable);/使能捕获比较寄存器预装载(通道3) /刹车和死区功能设置/*set OSSR bit,This bit is used when MOE=1 on channels having a complementary output which are configured as outputs. OSSR i

37、s not implemented if no complementary output is implemented in the timer.When inactive, OC/OCN outputs are enabled with their inactive level as soon as CCxE=1 or CCxNE=1. Then, OC/OCN enable output signal=1*/TIM_BDTRInitStructure.TIM_OSSRState = TIM_OSSRState_Enable;/*set OSSI bit,This bit is used w

38、hen MOE=0 on channels configured as outputsWhen inactive, OC/OCN outputs are forced first with their idle level as soon as CCxE=1 or CCxNE=1. OC/OCN enable output signal=1)*/TIM_BDTRInitStructure.TIM_OSSIState = TIM_OSSIState_Enable;TIM_BDTRInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_OFF; /TIM_LOCKL

39、evel_1;TIM_BDTRInitStructure.TIM_DeadTime =PWM_DeadTime; /0x75; 1.65us TIM_BDTRInitStructure.TIM_Break = TIM_Break_Disable; TIM_BDTRInitStructure.TIM_BreakPolarity = TIM_BreakPolarity_Low ;/High;/*AOE=1*/TIM_BDTRInitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable;/自动输出使能TIM_BDTRConfig(TIM

40、1, &TIM_BDTRInitStructure);/TIM2->BDTR |=1<<14; /AOE?1 TIM_SelectInputTrigger(TIM1, TIM_TS_ITR1); / TIM1->SMCR |=0x0010;/*trigger interrupt enable*/ TIM1->DIER |=0x0040;/set TIETIM_Cmd(TIM1,ENABLE); /TIM1->CR1 |= 0x0001; TIM_CtrlPWMOutputs(TIM1, ENABLE);/MOE位置1 /TIM1->BDTR|=

41、1<<15;/启动TIM1和TIM2定时器void start(void)/*Trigger Mode - The counter starts at a rising edge of the trigger TRGI (but it is not reset). Only the start of the counter is controlled*/TIM1->SMCR |=0x0016; /开TIM1计数器触发/*Trigger interrupt enabled*/TIM1->DIER |=0x0040; /开TIM1触发中断 / huan_xiang(); /

42、*Counter enable*/TIM2->CR1|=0x0001; /开TIM2/*Trigger and Update interrupt enabled*/TIM2->DIER|=0x0041; /开TIM2中断 void huan_xiang()step = GPIO_ReadInputData(GPIOA)&0x0007;if(direction_flag=MotorForwardFlag)switch(step)/根据转子位置,决定CCER输出相位和转子偏移量case 0x06: /*0011 0100 0010 0000reset CC3NP CC3P CC

43、3E CC2NP CC2NE CC2E CC1NP CC1NE CC1P CC1Eset CC2P OC2 active low,set CC3NE OC3N signal is output on the corresponding output pin depending on MOE, OSSI, OSSR, OIS3, OIS3N and CC3E bitsset CC4P OC4 active low,set CC4E OC4 signal is output on the corresponding output pin depending on MOE, OSSI, OSSR,

44、OIS4, OIS4N and CC4NE bits*/TIM1->CCER =0x3420;/;break;case 0x04:/*0011 0000 0010 0100set CC2P OC2 active low,set CC1NE OC1N signal is output on the corresponding output pin depending on MOE, OSSI, OSSR, OIS1, OIS1N and CC1E bitsset CC4P OC4 active low,set CC4E OC1 signal is output on the corresp

45、onding output pin depending on MOE, OSSI, OSSR, OIS4, OIS4N and CC4NE bits*/TIM1->CCER =0x3024;/;break;case 0x05:/*0011 0010 0000 0100set CC3P OC3 active low,set CC1NE OC1N signal is output on the corresponding output pin depending on MOE, OSSI, OSSR, OIS1, OIS1N and CC1E bitsset CC4P OC4 active

46、low,set CC4E OC1 signal is output on the corresponding output pin depending on MOE, OSSI, OSSR, OIS4, OIS4N and CC4NE bits*/TIM1->CCER =0x3204;/;break; case 0x01: /*0011 0010 0100 0000set CC3P OC3 active low,set CC2NE OC2N signal is output on the corresponding output pin depending on MOE, OSSI, O

47、SSR, OIS2, OIS2N and CC2E bitsset CC4P OC4 active low,set CC4E OC1 signal is output on the corresponding output pin depending on MOE, OSSI, OSSR, OIS4, OIS4N and CC4NE bits*/TIM1->CCER =0x3240;/;break;case 0x03:/*0011 0000 0100 0010set CC1P OC3 active low,set CC2NE OC2N signal is output on the co

48、rresponding output pin depending on MOE, OSSI, OSSR, OIS2, OIS2N and CC2E bitsset CC4P OC4 active low,set CC4E OC1 signal is output on the corresponding output pin depending on MOE, OSSI, OSSR, OIS4, OIS4N and CC4NE bits*/TIM1->CCER =0x3042;/;break;case 0x02: /*0011 0100 0000 0010set CC1P OC1 act

49、ive low,set CC3NE OC3N signal is output on the corresponding output pin depending on MOE, OSSI, OSSR, OIS3, OIS3N and CC3E bitsset CC4P OC4 active low,set CC4E OC1 signal is output on the corresponding output pin depending on MOE, OSSI, OSSR, OIS4, OIS4N and CC4NE bits*/TIM1->CCER =0x3402;/;break

50、;else/倒转switch(step)/ case 0x06: TIM1->CCER =0x3420; / 3?2;break;case 0x04:TIM1->CCER =0x3024; / 3?6 ;break;case 0x05:TIM1->CCER =0x3204; / 1?6;break;case 0x01: TIM1->CCER =0x3240; / 1?4;break;case 0x03:TIM1->CCER =0x3042;break;case 0x02: TIM1->CCER =0x3402;break;default:TIM1->C

51、CER =0x0000;break;/定时器2采集霍尔信号,产生六步换向的触发中断条件void TIM2_Configuration(void)TIM_TimeBaseInitTypeDef TIM_HALLTimeBaseInitStructure;TIM_ICInitTypeDef TIM_HALLICInitStructure;TIM_OCInitTypeDef TIM_HALLOCInitStructure;/*Deinitializes the TIM2 peripheral registers to their default reset values*/TIM_DeInit(TI

52、M2); /*Fills each TIM_TimeBaseInitStruct member with its default valueSet the default configuration TIM_TimeBaseInitStruct->TIM_Period = 0xFFFF;TIM_TimeBaseInitStruct->TIM_Prescaler = 0x0000;TIM_TimeBaseInitStruct->TIM_ClockDivision = TIM_CKD_DIV1;TIM_TimeBaseInitStruct->TIM_CounterMode = TIM_CounterMode_Up;TIM_TimeBaseInitStruct->TIM_Repetiti

温馨提示

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

评论

0/150

提交评论