版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、(嵌入式系统及接口技术课程大作业)课程名称: 嵌入式系统及接口技术 班级专业: 姓名学号:指导老师: 电动摩托车控制器中的电机pwm调速摘要:随着“低碳”社会理念的深入,新型的电动摩托车发展迅速,逐渐成为人们主要的代步工具之一,由于直流无刷电机的种种优点,在电动摩托车中也得到了广泛应用,因此,本文控制部分主要介绍一种基于stm32f103芯片的新型直流无刷电机调速控制系统,这里主要通过pwm技术来进行电机的调速控制,且运行稳定,安全可靠,成本低,具有深远的意义。1. 总体设计概述1.1 直流无刷电机及工作原理直流无刷电机(简称bldcm),由于利用电子换向取代了传统的机械电刷和换向器,使得其电
2、磁性能可靠,结构简单,易于维护,既保持了直流电机的优点又避免了直流电机因电刷而引起的缺陷 ,因此,被广泛应用。另外,由于直流无刷电机专用控制芯片价格昂贵,本文介绍了一种基于stm32的新型直流无刷电机控制系统,既可降低直流无刷电机的应用成本,又弥补了专用处理器功能单一的缺点,具有重要的现实意义和发展前景。工作原理:直流无刷电机是同步电机的一种,其转子为永磁体,而定子则为三个按照星形连接方式连接起来的线圈,根据同步电机的原理,如果电子线圈产生一个旋转的磁场,则永磁体的转子也会随着这个磁场转动因此,驱动直流无刷电机的根本是产生旋转的磁场,而这个旋转的磁场可以通过调整a、b、c三相的电流来实现,其需
3、要的电流如图1所示随着我国经济和文化事业的发展,在很多场合,都要求有直流电机pwm调速系统来进行调速,诸如汽车行业中的各种风扇、刮水器、喷水泵、熄火器、反视镜、宾馆中的自动门、自动门锁、自动窗帘、自动给水系统、柔巾机、导弹、火炮、人造卫星、宇宙飞船、舰艇、飞机、坦克、火箭、雷达、战车等场合。1.2 总体设计方案总体设计方案的硬件部分详细框图如图1所示。adc模块电机功率驱动电路霍尔传感器stm32f103图1 总体方案系统框图该方案主要运行状况如下:通过摩托车车把的转动来改变其机械位置,然后这个变量通过adc转换后,传送其调速信号给stm32f103,另外,霍尔传感器将其对电机速度的检测信号也
4、传送给stm32,在stm32中,首先根据adc的值改变pwm波形,并且与霍尔传感器的检测信号进行叠加,最终输出叠加后的pwm波形给功率驱动电路,从而驱动电机并对其进行速度的控制和调节。2. 系统硬件设计2.1 总体硬件框图系统的硬件电路选用stm32f103为主控芯片,作为电机控制的核心,通过霍尔位置传感器检测位置信号,结合功率驱动电路以实现对电机的驱动。 此外,还有电流检测电路可根据电机的状态以调整转速和实现过流保护功能 系统的硬件框图如图2所示: stm32f103功率驱动电路bldcm pwm电流检测三相控制霍尔检测图2 系统硬件框图2.2 电机功率驱动电路设计直流无刷电机是将直流有刷
5、电机的机械换向改进成电子换向而来的,要使其转动,就必须通过电子换向的方法调整电流,按照转子所在的位置产生转动磁场,主控芯片控制h半桥驱动电路产生电机转动的换向电流,以产生转动的磁场,驱动电路如图3所示驱动电路的作用是将控制电路输出的脉冲放大到足以驱动功率晶体管或mosfet管,所以单从原理上讲,驱动电路主要起开关功率放大作用,即脉冲放大器。但随着开关工作频率的提高,驱动电路的优化设计显得越来越重要。驱动电路的最佳驱动特性应具有:功率管开通时,驱动电路提供的基极电流应有快速的上升沿,并一开始有一定的过冲,以加速开通过程,并在集电极电流尖峰时开启驱动基极,从而减小开通损耗;功率管导通期间,驱动电路
6、提供的基极电流在任何负载情况下都能保证功率管处于饱和导通状态,使功率管的饱和压降较低,以保证低的导通损耗;关断瞬时,驱动电路应提供足够的反向基极驱动,以迅速抽出基区的剩余载流子,并加反偏截止电压,使集电极电流迅速下降以减少下降时间。为了增加系统的抗干扰能力,stm32 输出的6路pwm信号首先必须经隔离再送到ir2136进行驱动,由于开关速度达到20khz左右,故设计中选用高速光耦器件hcpl4504,见图3,其最高速度可达1mbits,内部的噪声抑制电路可提供高于15kvus的共模抑制。ir2136是ir公司的一款功率mosfet、igbt专用栅极驱动集成电路,独有的i-ivic(high
7、voltage integrated circuit)技术使得它可用作驱动工作在母线电压高达600v的电路中的功率mos器件。其内部采用自举技术,使得功率驱动元件驱动电路仅需输入一个直流电源,使其实现对功率mosfet和igbt的最优驱动,并且它还具有完善的保护功能包括欠压保护和过流保护,以便保证系统安全稳定的工作。故本文选用ir2136作为主功率部分的mosfet驱动,如图3所示:图3中经ir2136驱动的6路pwm信号被直接送到由6个mosfet管组成的主功率电路。如图所示,该功率驱动采用三相全控电路,电动机的三相绕组为y型联结。mosfet管选用ir公司的irfz48,该管导通电阻较低,
8、当连续流过10a电流时,功耗才12w,根本不需要散热片就可以稳定工作。图3 功率驱动电路2.3 直流无刷电机的调速直流无刷电机调速的原理就是在驱动电机转动的基础上,将驱动电流由pwm 信号来控制,改变pwm 信号的脉冲宽度,即通过调节mosfet通断的时间来调节提供给电机三相的电流大小,从而对电机进行调速控制。本方案中mosfet管的导通是通过stm32的pwm 信号来控制的, stm32内部的普通的定时器tim3和tim4,每个可以产生四路pwm发生器,这里用tim3产生4路,tim4产生两路,共六路可编程的pwm信号,驱动h桥 。直流无刷电机的电子换向是基于转子的位置来控制的,本系统采用3
9、个霍尔传感器对直流无刷电机进行位置测量 霍尔传感器安装在电机的内部,将转子的位置转换为三路数字信号直接输出到stm32的gpio口 在本设计中可方便地用于通过检测霍尔位置传感器的信号来实现检测转子的位置,然后据此输出相应的pwm信号控制功率管的导通或关断,从而实现电流的换向,在电机内部产生一个转动的磁场,进而驱动电机旋转。另外,车把转动的时候会通过一个da转换,然后得到调速的标志flag的值,从而根据这个flag值来改变pwm波的占空比,从而进行电机的调速。直流无刷电机旋转时三个霍尔传感器的信号值和输出的pwm信号之间的对应关系如图4所示图4 相位与pwm信号的对应关系霍尔传感器的位置反馈信号
10、在可以确定转子位置的同时,也可用来测量电机的转速 电机每转动一周,每个霍尔传感器即会产生两次换向,三个霍尔传感器共会有6次换相,这六次换相之间的时间差即为电机运转一周所需的时间,继而可计算出电机的转速 根据计算出的电机转速,调整pwm信号的脉冲宽度,从而达到调速的目的3. 系统软件设计 本系统编程部分工作在keil4开发环境下完成,采用模块化的设计方法,与各子程序作为实现各部分功能和过程的入口,完成pwm脉宽调速的控制。stm32f103资源分配如下表:表1 芯片的资源分配gpiod4霍尔传感器输出端gpioa6 利用定时器tim3,tim4产生的六路pwm输出gpioa7gpiod5gpio
11、b0gpiob1gpiod6gpiob6gpiob71. pwm产生程序:本设计中采用stm32f103的定时器tim3,tim4两个定时器来产生pwm波形,程序函数如下:#include timer.h /通用定时器中断初始化/这里时钟选择为apb1的2倍,而apb1为36m/arr:自动重装值。/psc:时钟预分频数/这里使用的是定时器3void timerx_init(u16 arr,u16 psc)rcc-apb1enr|=1arr=arr; /设定计数器自动重装值/刚好1ms tim3-psc=psc; /预分频器7200,得到10khz的计数时钟/这两个东东要同时设置才可以使用中断
12、tim3-dier|=1dier|=1cr1|=0x01; /使能定时器3 my_nvic_init(1,3,tim3_irqchannel,2);/抢占1,子优先级3,组2 void pwm1_1_init(u16 arr1,u16 psc1) /此部分需手动修改io口设置rcc-apb1enr|=1crl&=0xf0ffffff;/pa6输出gpioa-crl|=0x0b000000;/复用功能输出 gpioa-odr|=1arr=arr1;/设定计数器自动重装值 tim3-psc=psc1;/预分频器不分频tim3-ccmr1|=7ccmr1|=1ccer|=1cr1=0x8000; /
13、arpe使能 tim3-cr1|=0x01; /使能定时器3 void pwm1_2_init(u16 arr2,u16 psc2) /此部分需手动修改io口设置rcc-apb1enr|=1crl&=0x0fffffff;/pa7输出gpioa-crl|=0xb0000000;/复用功能输出 gpioa-odr|=1arr=arr2;/设定计数器自动重装值 tim3-psc=psc2;/预分频器不分频tim3-ccmr1|=7ccmr1|=1ccer|=1cr1=0x8000; /arpe使能 tim3-cr1|=0x01; /使能定时器3 void pwm1_3_init(u16 arr3,
14、u16 psc3) /此部分需手动修改io口设置rcc-apb1enr|=1crl&=0xfffffff0;/pb0输出gpiob-crl|=0x0000000b;/复用功能输出 gpiob-odr|=1arr=arr3;/设定计数器自动重装值 tim3-psc=psc3;/预分频器不分频tim3-ccmr2|=7ccmr2|=1ccer|=1cr1=0x8000; /arpe使能 tim3-cr1|=0x01; /使能定时器3 void pwm1_4_init(u16 arr4,u16 psc4) /此部分需手动修改io口设置rcc-apb1enr|=1crl&=0xffffff0f;/pb
15、1输出gpiob-crl|=0x000000b0;/复用功能输出 gpiob-odr|=1arr=arr4;/设定计数器自动重装值 tim3-psc=psc4;/预分频器不分频tim3-ccmr2|=7ccmr2|=1ccer|=1cr1=0x8000; /arpe使能 tim3-cr1|=0x01; /使能定时器3 void pwm2_1_init(u16 arr5,u16 psc5) /此部分需手动修改io口设置rcc-apb1enr|=1crl&=0xf0ffffff;/pb6输出gpiob-crl|=0x0b000000;/复用功能输出 gpiob-odr|=1arr=arr5;/设定
16、计数器自动重装值 tim4-psc=psc5;/预分频器不分频tim4-ccmr1|=7ccmr1|=1ccer|=1cr1=0x8000; /arpe使能 tim4-cr1|=0x01; /使能定时器4 void pwm2_2_init(u16 arr6,u16 psc6) /此部分需手动修改io口设置rcc-apb1enr|=1crl&=0x0fffffff;/pb7输出gpiob-crl|=0xb0000000;/复用功能输出 gpiob-odr|=1arr=arr6;/设定计数器自动重装值 tim4-psc=psc6;/预分频器不分频tim4-ccmr1|=7ccmr1|=1ccer|
17、=1cr1=0x8000; /arpe使能 tim4-cr1|=0x01; /使能定时器4 2、霍尔传感器部分的程序#include huoer.hvoid huoer_init(void)rcc-apb2enr|=1crl&=0xf000ffff; /pd4,5,5设置成输入 gpiod-crl|=0x08880000; gpiod-odr|=1odr|=1odr|=16; /pd6上拉3、延时程序#include #include delay.hstatic u8 fac_us=0;/us延时倍乘数static u16 fac_ms=0;/ms延时倍乘数/初始化延迟函数/systick的时
18、钟固定为hclk时钟的1/8/sysclk:系统时钟void delay_init(u8 sysclk)systick-ctrl&=0xfffffffb;/bit2清空,选择外部时钟 hclk/8fac_us=sysclk/8; fac_ms=(u16)fac_us*1000; /延时nms/systick-load为24位寄存器,所以,最大延时为:/nms=0xffffff*8*1000/sysclk/对72m条件下,nmsload=(u32)nms*fac_ms;/时间加载(systick-load为24bit)systick-val =0x00; /清空计数器systick-ctrl=0
19、x01 ; /开始倒数 dotemp=systick-ctrl;while(temp&0x01&!(temp&(1ctrl=0x00; /关闭计数器systick-val =0x00; /清空计数器 /延时nus/nus为要延时的us数. void delay_us(u32 nus)u32 temp; systick-load=nus*fac_us; /时间加载 systick-val=0x00; /清空计数器systick-ctrl=0x01 ; /开始倒数 dotemp=systick-ctrl;while(temp&0x01&!(temp&(1ctrl=0x00; /关闭计数器systi
20、ck-val =0x00; /清空计数器 4、主程序#include #include sys.h#include delay.h#include timer.h #include huoer.hint main(void) u8 flag; /da转换过来的调速标志 stm32_clock_init(9); /系统时钟设置delay_init(72); /延时初始化 pwm1_1_init(900,0); /不分频。pwm频率=72000/900=8khzpwm1_2_init(900,0);pwm1_3_init(900,0);pwm1_4_init(900,0);pwm2_1_init(
21、900,0);pwm2_2_init(900,0); while(1) switch(flag)case 0: 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) pwm1_val=300; else pwm1_val=900; if(huoer1=0)&(huoer2=1) pwm2_val=300; else pwm2_val=900; if(huoer2=0)&(huoer3=1) pwm3_val
22、=300; else pwm3_val=900; if(huoer1=0)&(huoer3=1) pwm4_val=300; else pwm4_val=900; if(huoer1=1)&(huoer2=0) pwm5_val=300; else pwm5_val=900; if(huoer2=1)&(huoer3=0) pwm6_val=300; else pwm6_val=900; break; case 2: if(huoer1=1)&(huoer3=0) pwm1_val=350; else pwm1_val=900; if(huoer1=0)&(huoer2=1) pwm2_val
23、=350; else pwm2_val=900; if(huoer2=0)&(huoer3=1) pwm3_val=350; else pwm3_val=900; if(huoer1=0)&(huoer3=1) pwm4_val=350; else pwm4_val=900; if(huoer1=1)&(huoer2=0) pwm5_val=350; else pwm5_val=900; if(huoer2=1)&(huoer3=0) pwm6_val=350; else pwm6_val=900; break;case 3: if(huoer1=1)&(huoer3=0) pwm1_val=
24、400; else pwm1_val=900; if(huoer1=0)&(huoer2=1) pwm2_val=400; else pwm2_val=900; if(huoer2=0)&(huoer3=1) pwm3_val=400; else pwm3_val=900; if(huoer1=0)&(huoer3=1) pwm4_val=400; else pwm4_val=900; if(huoer1=1)&(huoer2=0) pwm5_val=400; else pwm5_val=900; if(huoer2=1)&(huoer3=0) pwm6_val=400; else pwm6_
25、val=900; break; case 4: if(huoer1=1)&(huoer3=0) pwm1_val=450; else pwm1_val=900; if(huoer1=0)&(huoer2=1) pwm2_val=450; else pwm2_val=900; if(huoer2=0)&(huoer3=1) pwm3_val=450; else pwm3_val=900; if(huoer1=0)&(huoer3=1) pwm4_val=450; else pwm4_val=900; if(huoer1=1)&(huoer2=0) pwm5_val=450; else pwm5_
26、val=900; if(huoer2=1)&(huoer3=0) pwm6_val=450; else pwm6_val=900; break;case 5: if(huoer1=1)&(huoer3=0) pwm1_val=500; else pwm1_val=900; if(huoer1=0)&(huoer2=1) pwm2_val=500; else pwm2_val=900; if(huoer2=0)&(huoer3=1) pwm3_val=500; else pwm3_val=900; if(huoer1=0)&(huoer3=1) pwm4_val=500; else pwm4_v
27、al=900; if(huoer1=1)&(huoer2=0) pwm5_val=500; else pwm5_val=900; if(huoer2=1)&(huoer3=0) pwm6_val=500; else pwm6_val=900; break;case 6: if(huoer1=1)&(huoer3=0) pwm1_val=550; else pwm1_val=900; if(huoer1=0)&(huoer2=1) pwm2_val=550; else pwm2_val=900; if(huoer2=0)&(huoer3=1) pwm3_val=550; else pwm3_val=900; if(huoer1=0)&(huoer3=1) pwm4_val=550; else pwm4_val=900; if(huoer1=1)&(huoer2=0) pwm5_val=550; else pwm5_val=900; if(huoer2=1)&(huoer3=0) pwm6_val=550; else pwm6_val=900; break; case 7: if(huoer1=1)&(huoer3=0) pwm1_val=600; else pwm1_val=900; if(huo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年市场营销策略与风险防范试题
- 2026年能源科学考试石油天然气工程知识与分析题
- 2026年化学元素周期表及性质解析练习题
- 2026年环境监测站岗位考试空气质量监测标准及应用题
- 2026年历史学研究生入学考试历史常识题库
- 2026年环境评估师水污染防治技术及措施题库
- 移动学习在高中化学教学中的应用与创新模式探索教学研究课题报告
- 初中化学溶液pH微型化实验与实验合作意识培养课题报告教学研究课题报告
- 工地物料质量追溯系统方案
- 2026年市场营销市场调查品牌策略推广题库
- 粉尘职业病(尘肺病、皮肤病)危害应急预案
- 2026年江苏苏北四市高三一模高考英语试卷试题(答案详解)
- 实验室安全培训P53
- 2026年安徽省江淮粮仓融资担保有限公司(筹)招聘考试参考试题及答案解析
- 广东省广州市海珠区2026年九年级上学期期末物理试题附答案
- 2026中好建造(安徽)科技有限公司招聘45人笔试备考试题及答案解析
- 2025年辅警面试考试复习题库目及解析答案
- 北师大版三年级数学(上)期末家长会-三载深耕学有所成【课件】
- 风机安全链课件
- 2025年企业设备故障处理手册
- 维修班组安全培训课件
评论
0/150
提交评论