直流电机调速系统课程设计报告.docx

上传人:b****7 文档编号:23932706 上传时间:2023-05-22 格式:DOCX 页数:24 大小:508.05KB
下载 相关 举报
直流电机调速系统课程设计报告.docx_第1页
第1页 / 共24页
直流电机调速系统课程设计报告.docx_第2页
第2页 / 共24页
直流电机调速系统课程设计报告.docx_第3页
第3页 / 共24页
直流电机调速系统课程设计报告.docx_第4页
第4页 / 共24页
直流电机调速系统课程设计报告.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

直流电机调速系统课程设计报告.docx

《直流电机调速系统课程设计报告.docx》由会员分享,可在线阅读,更多相关《直流电机调速系统课程设计报告.docx(24页珍藏版)》请在冰豆网上搜索。

直流电机调速系统课程设计报告.docx

直流电机调速系统课程设计报告

 

直流电机调速系统

设计报告

 

题目:

H桥&串口输出

 

 

2016年3月

一、设计任务

设计并制作一套直流电机调速系统,主要包括两部分:

主电路部分和以单片机为核心的控制电路部分。

要求设计、制作控制电路和主电路,实现如下功能:

(1)通过码盘和光耦得到一系列脉冲,利用M法、T法或M/T法对这些脉冲在单片机中进行处理得到电机的转速,在液晶或数码管上进行显示;

(2)DC/DC电路能够正常工作,通过旋钮或键盘设定转速,并能够通过电力电子电路输出合适的电压,使电机的转速达到设定转速。

(3)实验室提供24V直流电源为DC/DC电路供电,其余部分电源请利用220V市电自行设计。

图1系统总体框图

二、硬件电路设计与制作

2.1显示部分电路设计

使用计数器采集到电机转速后,需要用数码管进行显示。

我们组选择串口驱动数码管显示电路,74HC595芯片是一种串入并出的芯片,是8位串行输入/输出或者并行输出移位寄存器,具有高阻、关、断状态。

首先使用三极管构成驱动电路,驱动数码管。

采用单片机的P0.0-P0.2作为74HC595时钟信号与输入口,使数码管显示相应转速,具体实现电路如图1。

图1显示电路原理图

 

2.2驱动部分电路设计

驱动部分作为电机与单片机控制器的结合部分,是本次设计的主电路,需要完成DC/DC变化的功能。

单片机产生PWM波送给驱动芯片IR2110,2110通过驱动电路控制MOSFET开关改变加在直流电机上的电压,从而达到改变转速的目的。

单片机产生的PWM1和PWM2波形要相反,控制斩波电路的半桥互补通断。

电路设计图如图2所示。

图2驱动电路原理图

2.3电源部分设计

电源设计部分共分两个部分,一部分是IR2110的供电电压和所有芯片的供电电压,另一部分是USB口供电电部分,使用电脑供电,两部分电路通过拨码开关进行切换。

市电供电电源采用220V交流电变成15V交流电,经整流桥变成直流电,再经7815、7805稳压得到15V和5V直流电,分别给驱动和单片机系统供电。

图3市电电源设计图

图4mini-USB供电接口图

 

2.4单片机系统设计

本设计采用STC15W4K48S4型号单片机,使用它的计数功能、定时器功能、数码管驱动功能、PWM波输出功能进行设计制作。

图5单片机管脚功能图

图6单片机最小系统原理图

图7单片机管脚使用示意图

2.5转速反馈设计

此次设计使用单片机的P3.4口作为计数器使用。

图8A/D采集和转速反馈电路图

2.6硬件电路焊接图

图9硬件电路焊接图

三、软件设计与编程

3.1主要程序流程

图10主要程序流程图

3.2完整程序

见附录

四、测试结果

上电后,电机运转正常,调节键盘后后,电机转速随之变化,数码管显示显示转速也随之变化,但是反转时程序中转速调节的P值过大,导致电机转速正负跳变,没有实现闭环控制。

五、课程设计中遇到的问题及解决方法

问题一整体硬件电路的设计原理不清楚,对于电路设计没有信心。

解决方法:

通过不断查阅资料,焊电路过程中不断修改电路才得到正确的电路。

问题二IR2110的1和7脚PWM波不能正常输出,DC/DC电路不输出。

解决方法:

后来经过排查电路,发现主要有两个问题,第一个问题是芯片的5脚没有和IRF540的半桥臂连起来,另一个问题是24V和5V电源的地没有共起来,把这两个问题解决了,电路可以正常工作。

六、课程设计感悟

本次课程设计是内容是通过单片机控制驱动电路,改变加在直流电机上的电压,从而达到调节电机转速的目的。

通过此次课程设计,使我更加扎实的掌握了有关直流电机调速方面的知识。

在设计过程中遇到了一些问题,比如设计电路不知如何下手,电阻电容的选取只会照搬经典电路,却不会灵活应用,后来经过多次查找资,问题才得到解决。

每次的课程设计都使我感觉到:

我知识掌握的不够扎实,学会的知识不会应用,思想上总是存在侥幸心理,对一个电路不加验证就想着可以应用。

实践出真知,通过亲自动手制作,使我们掌握的知识不再是纸上谈兵,以后要多多联系吧,毕竟这样的机会是少之又少。

我认为,这次课程设计不仅培养了独立思考、动手操作的能力,在各种其它能力上也都有了提高。

这是日后最实用的,真的是受益匪浅。

要面对社会的挑战,只有不断的学习、实践,再学习、再实践。

这对于我们的将来也有很大的帮助。

通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力

此次设计也让我明白了思路即出路,有什么不懂不明白的地方要及时请教或上网查询,只要认真钻研,动脑思考,动手实践,就没有弄不懂的知识。

七、附录

附录1

7.1重要芯片资料

1.74HC595芯片

74HC595芯片是一种串入并出的芯片,在电子显示屏制作当中有广泛的应用。

595是具有8位移位寄存器和一个存储器,三态输出功能。

移位寄存器和存储器是分别的时钟。

数据在SCHcp的上升沿输入,在STcp的上升沿进入到存储寄存器中去。

如果两个时钟连在一起,则移位寄存器总是比存储寄存器早一个脉冲。

移位寄存器有一个串行移位输入(Ds),和一个串行输出(Q7),和一个异步的低电平复位,存储寄存器有一个并行8位的,具备三态的总线输出,当使能OE时(为低电平),存储寄存器的数据输出到总线。

图174HC595引脚图

管脚编号

管脚名

管脚定义功能

1、2、3、4、5、6、7、15

QA—QH

三态输出管脚

8

GND

电源地

9

SQH

串行数据输出管脚

10

SCLR

移位寄存器清零端

11

SCK

数据输入时钟线

12

RCK

输出存储器锁存时钟线

13

OE

输出使能

14

SI

数据线

15

VCC

电源端

图274HC595管脚功能图

2.IR2110芯片

IR2110采用HVIC和闩锁抗干扰CMOS制造工艺,DIP14脚封装。

具有独立的低端和高端输入通道;悬浮电源采用自举电路,其高端工作电压可达500V,dv/dt=+50V/ns,15V下静态功耗仅116mv;输出的电源端电压范围10-20V;逻辑电源电压范围5-15V,可方便的与TTL、CMOS电平相匹配,而且逻辑电源地和功率之间允许有+5V的偏移量;工作频率高,可达500KHz;开通、关断延时小,分别为120ns和94ns;图腾柱输出峰值电流为2A。

图3IR2110直插式管脚图

附录二

7.2程序

7.2.1主程序

#include"config.h"

#include"Exti.h"

#include"timer.h"

#include"delay.h"

#include"GPIO.h"

#include"PWM.h"

/*************功能说明**************

 

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

/*************本地常量声明**************/

//u8codet_display[]={//标准字库

////0123456789ABCDEF

//0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};

u8codet_display[]={//标准字库

//0123456789ABCDEF

0xD7,0x14,0xCD,0x5D,0x1E,0x5B,0xDB,0x15,0xDF,0x5F};//0.1.2.3.4.5.6.7.8.9.-1

unsignedcharcodeT_COM[]={0x80,0x40,0x20,0x10};//位码

 

//=====================================================================

//端口声明

//=====================================================================

 

//595的三个开关

sbitP_HC595_SER=P0^0;//pin14SERdatainput

sbitP_HC595_RCLK=P0^1;//pin12RCLkstore(latch)clock

sbitP_HC595_SRCLK=P0^2;//pin11SRCLKShiftdataclock

//转速测量的中断输入口INT0P3.2

//pwm1路分别为p2.5

//调节按钮,一路加,一路减

sbitadd_zhuansu=P0^3;//接的是第二个按钮,正常为高电平

sbitsub_zhuansu=P0^4;

//=====================================================================

//externbitB_Timer0_1ms;//中断是否结束,,如果时间到了则为1

u8LED8[4];//显示的数据数码管要显示的数据,1300,,,1,3,0,0

u8display_index;//显示位索引4322

 

/*************本地变量声明**************/

longintzhuansu=0;//测量到的转速

longintset_zhuansu=3600;//设定的转速

u8dir=1;//为正转

u16pwm0,pwm1,pwm2;

 

/*************外部函数和变量声明*****************/

externu32Pulse;

externu8PulseTimeOut;

/*******************外中断配置函数*******************************/

voidEXTI_config(void)

{

EXTI_InitTypeDefEXTI_InitStructure;//结构定义

EXTI_InitStructure.EXTI_Mode=EXT_MODE_Fall;//中断模式,EXT_MODE_RiseFall,EXT_MODE_Fall

EXTI_InitStructure.EXTI_Polity=PolityHigh;//中断优先级,PolityLow,PolityHigh

EXTI_InitStructure.EXTI_Interrupt=ENABLE;//中断允许,ENABLE或DISABLE

Ext_Inilize(EXT_INT0,&EXTI_InitStructure);//初始化INT0EXT_INT0,EXT_INT1,EXT_INT2,EXT_INT3,EXT_INT4

}

/*******************定时器配置函数*******************************/

voidTimer_config(void)

{

TIM_InitTypeDefTIM_InitStructure;//结构定义

TIM_InitStructure.TIM_Mode=TIM_16BitAutoReload;//指定工作模式,TIM_16BitAutoReload,TIM_16Bit,TIM_8BitAutoReload,TIM_16BitAutoReloadNoMask

TIM_InitStructure.TIM_Polity=PolityLow;//指定中断优先级,PolityHigh,PolityLow

TIM_InitStructure.TIM_Interrupt=ENABLE;//中断是否允许,ENABLE或DISABLE

TIM_InitStructure.TIM_ClkSource=TIM_CLOCK_12T;//指定时钟源,TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CLOCK_Ext

TIM_InitStructure.TIM_ClkOut=DISABLE;//是否输出高速脉冲,ENABLE或DISABLE

TIM_InitStructure.TIM_Value=65536UL-((MAIN_Fosc)/(50*12));//初值,1000us,,,定时20ms,每秒50次

TIM_InitStructure.TIM_Run=ENABLE;//是否初始化后启动定时器,ENABLE或DISABLE

Timer_Inilize(Timer0,&TIM_InitStructure);//初始化Timer0Timer0,Timer1,Timer2

}

/*********************Timer0中断函数************************/

voidtimer0_int(void)interruptTIMER0_VECTOR

{

u16j,k;

k++;

if(k==50)//20*50ms

{

k=0;

zhuansu=Pulse/110*60;//110为齿轮数

Pulse=0;

j=zhuansu;

//j=pwm0;

//j=1234;

//if(set_zhuansu<0)

//j=-set_zhuansu;

//

//elsej=set_zhuansu;

 

LED8[0]=j/1000;

LED8[1]=j%1000/100;

LED8[2]=j%100/10;

LED8[3]=j%10;

//if(sub_zhuansu==0)

//{

//pwm0=pwm0-1000;

//}

//if(add_zhuansu==0)

//{

//pwm0=pwm0+1000;

//}

if(sub_zhuansu==0)

{

set_zhuansu=set_zhuansu-500;

}

if(add_zhuansu==0)

{

set_zhuansu=set_zhuansu+500;

}

//if(set_zhuansu<-2600)set_zhuansu=-2600;

//if(set_zhuansu>2600)set_zhuansu=2600;

//

//if(set_zhuansu>100)

//{

//pwm0=pwm0+(set_zhuansu-zhuansu)*0.2;//最大为8799

//}

//elseif(set_zhuansu<100)

//{

//pwm0=pwm0+(set_zhuansu+zhuansu)*0.2;

//}

//

//else

//{

//pwm0=0;//最大为8799

//}

if(set_zhuansu<0)set_zhuansu=0;

if(set_zhuansu>5200)set_zhuansu=5200;

pwm0=pwm0+(set_zhuansu-2600-zhuansu)*0.3;//最大为8799

if((set_zhuansu-2600<100)|(2600-set_zhuansu<100))

{

pwm0=0;//最大为8799

}

if(pwm0>8700)pwm0=8700;

if(pwm0<0)pwm0=0;

PWMx_SetPwmWide(PWM2_ID,pwm0,PERIOD);//红色指示灯由亮变暗再由暗变亮

PWMx_SetPwmWide(PWM3_ID,pwm0,PERIOD);//绿色指示灯由亮变暗再由暗变亮

}

}

//========================================================================

//函数:

voidPWM_config(void)

//描述:

PWM配置函数。

//参数:

none.

//返回:

none.

//版本:

VER1.0

//日期:

2014-8-15

//备注:

//========================================================================

voidPWM_config(void)

{

PWMx_InitDefinePWMx_InitStructure;//结构定义

PWMx_InitStructure.PWMx_IO_Select=PWM2_P27;//PWM输出IO选择.PWM6_P16,PWM6_P07,

PWMx_InitStructure.Start_IO_Level=0;//设置PWM输出端口的初始电平,0或1

PWMx_InitStructure.PWMx_Interrupt=DISABLE;//中断允许,ENABLE或DISABLE

PWMx_InitStructure.FirstEdge_Interrupt=DISABLE;//第一个翻转中断允许,ENABLE或DISABLE

PWMx_InitStructure.SecondEdge_Interrupt=DISABLE;//第二个翻转中断允许,ENABLE或DISABLE

PWMx_InitStructure.FirstEdge=PERIOD/2-12;/第一个翻转计数,1~32767

PWMx_InitStructure.SecondEdge=PERIOD/2+1-12;//第二个翻转计数,1~32767

PWMx_Configuration(PWM2_ID,&PWMx_InitStructure);//初始化PWM,PWM6_ID

P2n_standard(1<<7);//IO初始化,上电时为高阻

PWMx_InitStructure.PWMx_IO_Select=PWM3_P45;//PWM输出IO选择.PWM7_P17,PWM7_P06

PWMx_InitStructure.Start_IO_Level=1;//设置PWM输出端口的初始电平,0或1

PWMx_InitStructure.PWMx_Interrupt=ENABLE;//中断允许,ENABLE或DISABLE

PWMx_InitStructure.FirstEdge_Interrupt=ENABLE;//第一个翻转中断允许,ENABLE或DISABLE

PWMx_InitStructure.SecondEdge_Interrupt=DISABLE;//第二个翻转中断允许,ENABLE或DISABLE

PWMx_InitStructure.FirstEdge=PERIOD/2-12;//第一个翻转计数,1~32767

PWMx_InitStructure.SecondEdge=PERIOD/2+1-12;//第二个翻转计数,1~32767

PWMx_Configuration(PWM3_ID,&PWMx_InitStructure);//初始化PWM,PWM7_ID

P4n_standard(1<<5);//IO初始化,上电时为高阻

//TH2=(u8)((65536UL-MAIN_Fosc/500000UL)/256);//波特率使用Timer2

//TL2=(u8)((65536UL-MAIN_Fosc/500000UL)%256);//貌似定时2ms

//AUXR=0x14;//Timer2setAsTimer,Timer2setas1Tmode;

PWM_SourceClk_Duty(PwmClk_1T,PERIOD);//时钟源:

PwmClk_1T,PwmClk_2T,...PwmClk_16T,PwmClk_T2,PWM周期:

1~32767

PWMCR|=ENPWM;//使能PWM波形发生器,PWM计数器开始计数

//PWMCR&=~ECBI;//禁止PWM计数器归零中断

}

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

voidSend_595(unsignedchardat)//发送一个字节,,,,,,//上升沿发送数据

{

unsignedchari;

for(i=0;i<8;i++)

{

dat<<=1;

P_HC595_SER=CY;

P_HC595_SRCLK=1;

P_HC595_SRCLK=0;

}

}

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

#defineLED_TYPE0x00//定义LED类型,0x00--共阴,0xff--共阳这是一个共阳极数码管

voidDisplayScan(void)//显示扫描函数自动扫描的,当接受到数据后把数据更新给LED8[]即可

{

Send_595(T_COM[display_index]);//输出位码display_index=3,第3个位码为高

Send_595(LED_TYPE^t_display[LED8[display_index]]);//输出段码LED8[display_index]LED8[3]第3位的数据,所有的数据提前赋给了LED8[]

P_HC595_RCLK=1;

P_HC595_RCLK=0;//锁存输出数据

if(++displ

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 院校资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1