您好,欢迎来到爱站旅游。
搜索
您的当前位置:首页PWM控制电机转速设计

PWM控制电机转速设计

来源:爱站旅游
四川师范大学成都学院电子工程系嵌入式课程设计

目 录

目 录 ......................................................................................................... - 1 - 一、 前言 .................................................................................................. - 2 - 二、设计任务 ............................................................................................ - 2 - 三、 设计原理 .......................................................................................... - 2 - 3.1 电机调速原理 ..................................................................................... - 2 - 3.2 H 桥功率驱动原理 .......................................................................... - 3 - 3.3 IR2111外围电路及器件选择 .......................................................... - 4 - 3.4 IR2111死区延迟特性 ...................................................................... - 4 - 四、 方案与论证 ...................................................................................... - 4 - 五、 设计内容 .......................................................................................... - 5 - 5.1 系统框图和设计原理图 ..................................................................... - 5 - 5.2 软件设计流程图 ................................................................................. - 7 - 8.1 PWM波形在线仿真效果图 ............................................................... - 8 - 8.2 PWM驱动电机调速PCB图 ............................................................. - 9 - 8.3 PWM驱动电机调速程序 ................................................................. - 10 -

第 - 1 - 页 共 16 页

四川师范大学成都学院电子工程系嵌入式课程设计

一、前言

长期以来,直流电机以其良好的线性特性、优异的控制性能等特点成为大多数变速运动控制和闭环位置伺服控制系统的最佳选择。特别随着计算机在控制领域, 高开关频率、全控型第二代电力半导体器件(GTR、GTO、MOSFET、IGBT 等)的发展, 以及脉宽调制(PWM)直流调速技术的应用, 直流电机得到广泛应用。为适应小型直流电机的使用需求, 各半导体厂商推出了直流电机控制专用集成电路, 构成基于微处理器控制的直流电机伺服系统。但是,专用集成电路构成的直流电机驱动器的输出功率有限, 不适合大功率直流电机驱动需求。因此采用N沟道增强型场效应管构建H 桥, 实现大功率直流电机驱动控制。该驱动电路能够满足各种类型直流电机需求, 并具有快速、精确、高效、低功耗等特点, 可直接与微处理器接口, 可应用PWM技术实现直流电机调速控制。

二、设计任务

1. 设计电机驱动电路,使用PROTEL绘制出电路原理图和PCB,并制作出实物,焊接并调试,确保硬件无误。

2. 使用LM3S62实验板配合自己设计的电机驱动模块,编写程序驱动直流电机。要求具备直流电机调试、正反转、其中,电机正反转状态和当前的转速(档位)通过LM3S62实验板上的液晶模块(LCD1602)显示。

3. 撰写设计报告,要求具备摘要、软硬件设计方案、系统框图、程序流程图、总结等相关内容。

三、设计原理

3.1 电机调速原理

直流电机PWM调速的基本原理图如图1。可控开关S以固定的周期重复地接通和断开,当开关S接通时,直流供电电源U通过开关S施加到直流电机两端,电机在电源作用下转动,同时电机电枢电感储存能量;当开关S断开时,供电电源停止向电动机提供能量,但此时电枢电感所储存的能量将通过续流二极管VD使电机电枢电流继续维持,电枢电流仍然产生电磁转矩使得电机继续旋转。开关S重复动作时,在电机电枢两端就形成了一系列的电压脉冲波形,如图3-1所示。

电枢电压平均值的理论计算式为:

其中:α为占空比,即导通时间与脉冲周期之比。

由式(1)可知,平均电压由占空比及电源电压决定,保持开关频率恒定,改变占空比能够相应地改变平均电压,从而实现了直流电动机的调压调速。

第 - 2 - 页 共 16 页

四川师范大学成都学院电子工程系嵌入式课程设计

图3-1 电机调速原理图

3.2 H 桥功率驱动原理

直流电机驱动使用最广泛的就是H 型全桥式电路, 这种驱动电路方便地实现直流电机的四象限运行, 分别对应正转、正转制动、反转、反转制动。H桥功率驱动原理图如图3-2 所示。

图3-2 H 桥功率驱动原理图

H 型全桥式驱动电路的4 只开关管都工作在斩波状态, S1、S2 为一组, S3、S4 为一组, 这两组状态互补, 当一组导通时, 另一组必须关断。当S1、S2 导通时, S3、S4 关断, 电机两端加正向电压实现电机的正转或反转制动; 当S3、S4 导通时, S1、S2 关断,电机两端为反向电压, 电机反转或正转制动。实际控制中, 需要不断地使电机在四个象限之间切换, 即在正转和反转之间切换, 也就是在S1、S2导通且S3、S4 关断到S1、S2 关断且S3、S4 导通这两种状态间转换。这种情况理论上要求两组控制信号完全互补, 但是由于实际的开关器件都存在导通和关断时间, 绝对的互补控制逻辑会导致上下桥臂直通短路。为了避免直通短路且保证各个开关管动作的协同性和同步性, 两组控制信号理论上要求互为倒相, 而实际必须相差一个足够长的死区时间,这个校正过程既可通过硬件实现, 即在上下桥臂的两组控制信号之间增加延时, 也可通过软件实现。图3-2中、4只开关管为续流二极管, 可为线圈绕组提供续流回路。当电机正常运行时, 驱动电流通过主开关管流过电机。当电机处于制动状态时, 电机工作在发电状态, 转子电流必须通过续流二极管流通, 否则电机就会发热, 严重时甚至烧毁。

第 - 3 - 页 共 16 页

四川师范大学成都学院电子工程系嵌入式课程设计

3.3 IR2111外围电路及器件选择

IR2111外围电路如下图3-3所示。单片机输出的PWM信号经光耦PC817后,输出至IR2111输入端,此处的光耦对PWM信号起到隔离、电平转换和功率放大的作用。图5中,R1、R2为光耦上拉电阻,其值根据所用光耦的输入和输出的电流参数决定;C1为电源滤波电容,C2为自举电容,D1为自举二极管,R3、R4为栅极驱动电阻。

图3-3 IR2111驱动功率MOSFET电路

3.4 IR2111死区延迟特性

实际控制中,需要不断地使电机在正转和反转之间切换,也就是在Q1、Q4导通且Q2、Q3关断到Q1、Q4关断且Q2、Q3导通这两种状态间转换。这种情况理论上要求两组控制信号完全互补,但是由于实际的开关器件都存在导通和关断时间,绝对的互补控制逻辑会导致上下桥臂直通短路。为了避免直通短路且保证各个开关管动作的协同性和同步性,两组控制信号理论上要求互为倒相,而实际必须相差一个足够长的死区时间,即保证在某一功率器件导通的同时,同桥臂的功率器件可靠的截止,防止桥臂直通短路。IR2111内部通过逻辑门器件实现了死区时间的延迟,即由IR2111高端和低端输出的波形如图3-4所示。其中,DT即为定义的死区时间,IR2111典型死区时间是700ns。

图3-4 IR2111死区延时特性

四、方案与论证

该程序中一共七个模块: 模块一:主程序;

模块二:按键中断服务子程序;

模块三:显示子程序;用LCD来进行显示;

模块三_1:LCD显示初始化头文件(h文件);

第 - 4 - 页 共 16 页

四川师范大学成都学院电子工程系嵌入式课程设计

模块三_2:显示电机正反转(用D来表示)子程序;

模块三_3:显示电机转速的的当前档位(用S来表示)子程序; 模块四:KEY1(PC4)键设置电机正反转;

模块五:KEY2(PC5)键,控制电机2档(高速)的调节; 模块六:KEY3(PC6)键,控制电机1档(低速)的调节; 模块七:KEY4(PC7)键,控制电机0档(制动)的调节;

五、设计内容

5.1 系统框图和设计原理图

5.1.1 设计框图:

显示电路 按 键 电 路 H桥驱动电机 电路(大功率 管MOSFET) H桥驱动 (电机)电源 LM3S62 P W M 半桥驱动电路 (IR2111板桥驱动) 半 桥 驱 动 电 源 第 - 5 - 页 共 16 页

四川师范大学成都学院电子工程系嵌入式课程设计

5.1.2 设计原理图:

图5-1 H桥驱动电机电路图

图5-2 半桥驱动电路图

第 - 6 - 页 共 16 页

四川师范大学成都学院电子工程系嵌入式课程设计

5.2 软件设计流程图

开 始 开 始

变量值变化 系统时钟初始化

N PWM 使 能 是否有按键 Y 进入中断处理子程序

PWM 配 置 PWM发 生 器 使 能

按 键 端 口 使 能 按 键 中 断 初 始 化 进入相应的子程序处理

处 理 器 中 断 使 能

按 键 中 断 子 程 序

LCD显 示 子 程 序

主 函 数 结 束

六、总结

电子设计是培养学生综合运用所学知识,发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。

随着科学技术发展的日新日异,电子产品已在我们的生活中扮演着越来越重要的作用,然而,要让这些功能复杂的电子产品给我们带来帮助,直流电机的应用是日常生活和工业运用不可或缺的。回顾起此次直流电机的课程设计,我仍感慨颇多。从选题到定稿,从理论到实践,在接近二星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正提高自己的实际动手能力和思考的能力。

第 - 7 - 页 共 16 页

四川师范大学成都学院电子工程系嵌入式课程设计

在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。

总之,这次嵌入式的课程设计可以说是一场“及时雨”,通过发现问题、面对问题和解决问题的过程让我的实践能力得到了提升。在这次的直流直流电机的设计中,碰到过许多困难的时候,龚老师给了我非常大的帮助,他交给了我们很多课堂上学不到的东西,非常感谢龚老师的帮助。

七、参考文献

[1] 孙立志.PWM与数字化电动机控制技术应用[M].北京:中国电力出版社,2008. [2] 徐德鸿.现代电力电子器件原理与应用技术[M].北京:机械工业出版社,2008. [3] 周志敏,周纪海,纪爱华.IGBT和IPM及其应用电路[M].北京:人民邮电出版社,2006.

[4] 袁涛.H桥功率驱动电路的设计研究[D].电子科技大学,2006.

[5] 宋健,姜军生,赵文亮等.基于单片机的直流电动机PWM调速系统[J].农机化研究,2006,1(1):102-103.

[6] 梁亦铂,王正茂,何涛.全数字直流电机调速系统的原理及数学模型[J].中小型电机,2001,28(6)

八、附录

8.1 PWM波形在线仿真效果图

图8-1 电机正转低速PWM仿真图

图8-2 电机正转高速PWM仿真图

第 - 8 - 页 共 16 页

四川师范大学成都学院电子工程系嵌入式课程设计

图8-3 电机反转低速PWM仿真图

图8-4 电机反转高速PWM仿真图

8.2 PWM驱动电机调速PCB图

图8-5 H桥驱动直流电机PCB图

第 - 9 - 页 共 16 页

四川师范大学成都学院电子工程系嵌入式课程设计

图8-6 板桥驱动电路PCB图

8.3 PWM驱动电机调速程序

8.3.1 PWM控制电机调速C文件

#include

unsigned long TheSysClock=12000000UL; #include\"lcdinit.h\"

#define PB0_PWM2 GPIO_PIN_0 //PWM2、产生正转信号 #define PB1_PWM3 GPIO_PIN_1 //PWM3、产生反转信号

#define KEY_PERIPH SYSCTL_PERIPH_GPIOC #define KEY_PORT GPIO_PORTC_BASE

#define KEY1_PIN GPIO_PIN_4 //正反转切换 #define KEY2_PIN GPIO_PIN_5 //2档 #define KEY3_PIN GPIO_PIN_6 //1档 #define KEY4_PIN GPIO_PIN_7 //制动 unsigned int flag,value,D,S;

/*****************************************************************************/ void clockInit(void) {

SysCtlLDOSet(SYSCTL_LDO_2_50V); // 设置LDO输出电压 SysCtlClockSet(SYSCTL_USE_OSC | // 系统时钟设置 SYSCTL_OSC_MAIN | // 采用主振荡器

第 - 10 - 页 共 16 页

四川师范大学成都学院电子工程系嵌入式课程设计

SYSCTL_XTAL_6MHZ | // 外接6MHz晶振 SYSCTL_SYSDIV_1); // 不分频

TheSysClock = SysCtlClockGet(); // 获取当前的系统时钟频率 }

void GPIO_Port_C_ISR(void) { unsigned long ulStatus; ulStatus = GPIOPinIntStatus(GPIO_PORTC_BASE, true); // 读取中断状态 GPIOPinIntClear(GPIO_PORTC_BASE, ulStatus); // 清除中断状态,重要 if (ulStatus & KEY1_PIN) // 如果PC4的中断状态有效 { SysCtlDelay(200); //消除按键抖动 flag=~flag; } if (ulStatus & KEY2_PIN) // 如果PC5的中断状态有效 { SysCtlDelay(200); value=50; S=2; //S=2表示高速 } if (ulStatus & KEY3_PIN) // 如果PC6的中断状态有效 { SysCtlDelay(200); value=200; S=1; //S=1表示低速 } if (ulStatus & KEY4_PIN) // 如果PC7的中断状态有效 { SysCtlDelay(200); value=300; S=0; //S=0表示制动 } }

/***************************************************************************/ void lcd_disp()

{ lcd_pos(0,0); lcd_strwdat(\"Direct Is:\"); //第一行显示正反转 lcd_pos(0,14); lcd_write(1,D); //LCD写数据 lcd_pos(1,0); lcd_strwdat(\"Now Speed Is:\");//第二行显示转速的档位 lcd_pos(1,14); lcd_write(1,S); //LCD写数据

第 - 11 - 页 共 16 页

四川师范大学成都学院电子工程系嵌入式课程设计

}

void flag_1() //反转 { PWMOutputState(PWM_BASE, PWM_OUT_3_BIT, true); PWMOutputState(PWM_BASE, PWM_OUT_2_BIT, false); //使能或禁止PWM的输出 PWMGenPeriodSet(PWM_BASE, PWM_GEN_1, 300); // 设置PWM发生器1的周期 PWMPulseWidthSet(PWM_BASE, PWM_OUT_3, value); // 设置PWM2输出的脉冲宽度 D=0; //D=0表示反转 }

void flag_0()

{ PWMOutputState(PWM_BASE, PWM_OUT_2_BIT, true); //正转 PWMOutputState(PWM_BASE, PWM_OUT_3_BIT, false); PWMGenPeriodSet(PWM_BASE, PWM_GEN_1, 300); // 设置PWM发生器1的周期 PWMPulseWidthSet(PWM_BASE, PWM_OUT_2, value); // 设置PWM3输出的脉冲宽度 D=1; //D=1表示正转 }

/***************************************************************************/ int main (void) { clockInit(); lcd_init(); SysCtlPeripheralEnable (KEY_PERIPH); // 使能KEY所在的GPIO端口 GPIOPinTypeGPIOInput(KEY_PORT, KEY1_PIN|KEY2_PIN|KEY3_PIN|KEY4_PIN); // 设置key1、key2、key3、key4为输入 GPIOIntTypeSet(KEY_PORT, KEY1_PIN|KEY2_PIN|KEY3_PIN|KEY4_PIN, GPIO_LOW_LEVEL); // 设置KEY1、KEY2、KEY3、KEY4管脚的中断类型 GPIOPinIntEnable(KEY_PORT, KEY1_PIN|KEY2_PIN|KEY3_PIN|KEY4_PIN); // 使能KEY1、KEY2、KEY3、KEY4所在管脚的中断 IntEnable(INT_GPIOC); // 使能GPIOC端口中断

第 - 12 - 页 共 16 页

四川师范大学成都学院电子工程系嵌入式课程设计

SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB); // 使能PWM2和PWM3输出所在GPIO SysCtlPeripheralEnable(SYSCTL_PERIPH_PWM); // 使能PWM模块 SysCtlPWMClockSet(SYSCTL_PWMDIV_1); // PWM时钟配置:不分频 GPIOPinTypePWM(GPIO_PORTB_BASE, PB0_PWM2); // PB0配置为PWM功能 GPIOPinTypePWM(GPIO_PORTB_BASE, PB1_PWM3); // PB1配置为PWM功能 PWMGenConfigure(PWM_BASE, PWM_GEN_1, // 配置PWM发生器1:加减计数 PWM_GEN_MODE_UP_DOWN | PWM_GEN_MODE_NO_SYNC); PWMOutputState(PWM_BASE, PWM_OUT_2_BIT, true); //初始化时flag=0、即电机初始化时是正转 PWMOutputState(PWM_BASE, PWM_OUT_3_BIT, false); PWMGenPeriodSet(PWM_BASE, PWM_GEN_1, 300); // 设置PWM发生器1的周期 PWMPulseWidthSet(PWM_BASE, PWM_OUT_2, value); // 设置PWM3输出的脉冲宽度 PWMGenEnable(PWM_BASE, PWM_GEN_1); // 使能PWM发生器1 IntMasterEnable( ); // 使能处理器中断 while(1) { SysCtlDelay(200); if(flag) { flag_1(); lcd_disp(); } else { flag_0(); lcd_disp(); } } }

/*****************************************************************************/

第 - 13 - 页 共 16 页

四川师范大学成都学院电子工程系嵌入式课程设计

8.3.1 PWM控制电机调速LCD初始化头文件

#define LCD_1602_DATA GPIO_PORTD_BASE //数据口 #define LCD_1602_PORT GPIO_PORTE_BASE //控制口

#define LCD_1602_RS GPIO_PIN_0 #define LCD_1602_RW GPIO_PIN_1

#define LCD_1602_EN GPIO_PIN_2

void delay(unsigned long ulVal) {

ulVal=TheSysClock / 4000; while ( --ulVal != 0 ); }

unsigned char LCD_check_busy(void) //定义LCD_check_busy()返回值是字节 {

unsigned char result=0; // 测试LCD忙碌状态 SysCtlDelay(200); return result; //返回检测信号 }

//向LCD写入数据或者命令CD=0写入命令,CD=1写入数据

void lcd_write(unsigned char cd,unsigned char temp) // 写入指令/数据到LCD 0 {

while(LCD_check_busy()); //LCD_check_busy(); if(cd) //当写数据时使RS=1,当为写指令时RS=0 { GPIOPinWrite(LCD_1602_PORT, LCD_1602_RS, 0x01);} else

{ GPIOPinWrite(LCD_1602_PORT, LCD_1602_RS, 0x00);} //写命令 GPIOPinWrite(LCD_1602_PORT, LCD_1602_RW, 0x00); GPIOPinWrite(LCD_1602_PORT, LCD_1602_EN, 0x00);

GPIOPinWrite(LCD_1602_DATA,0xFF,temp); //送数据到LCD GPIOPinWrite(LCD_1602_PORT, LCD_1602_EN, 0x04);

delay(2); //此延时必须要,不然不能显示

GPIOPinWrite(LCD_1602_PORT, LCD_1602_EN, 0x00); }

//设定显示位置

第 - 14 - 页 共 16 页

四川师范大学成都学院电子工程系嵌入式课程设计

void lcd_pos(unsigned char x,unsigned char y) { if(y<16) { if(x==0) y=0x80+y; else y=0xc0+y; lcd_write(0,y); //写地址 } }

//LCD初始化设定 void lcd_init(void) {

SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE); //使能控制口 SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD); //使能数据口 GPIOPinTypeGPIOOutput(LCD_1602_PORT ,

LCD_1602_RS|LCD_1602_RW|LCD_1602_EN); //设置控制口为输出

GPIOPinTypeGPIOOutput(LCD_1602_DATA , 0XFF); //设置数据口为输出

lcd_write(0,0x38); //写三个0x38是初始化要求 delay(1); lcd_write(0,0x38); delay(1);

lcd_write(0,0x38); delay(1);

lcd_write(0,0x38); // 八位数据数、双行显示、5X7点阵字型体 delay(1);

lcd_write(0,0x0C); // 显示开、关光标

lcd_write(0,0x06); // 数据读、写操作后,AC自动增一

lcd_write(0,0x01); //清除LCD的显示内容 }

//写入字符串显示数据到LCD void lcd_strwdat(unsigned char *str ) { while(*str!='\\0')

第 - 15 - 页 共 16 页

四川师范大学成都学院电子工程系嵌入式课程设计

{ lcd_write(1,*str); str++; } }

/*****************************************************************************/

第 - 16 -

页 共 页

16

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- azee.cn 版权所有 赣ICP备2024042794号-5

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务