《直流电机调速系统课程设计报告(共25页).doc》由会员分享,可在线阅读,更多相关《直流电机调速系统课程设计报告(共25页).doc(25页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上直流电机调速系统设计报告题目:H桥&串口输出 2016年3月一、 设计任务设计并制作一套直流电机调速系统,主要包括两部分:主电路部分和以单片机为核心的控制电路部分。要求设计、制作控制电路和主电路,实现如下功能:(1) 通过码盘和光耦得到一系列脉冲,利用M法、T法或M/T法对这些脉冲在单片机中进行处理得到电机的转速,在液晶或数码管上进行显示;(2) DC/DC电路能够正常工作,通过旋钮或键盘设定转速,并能够通过电力电子电路输出合适的电压,使电机的转速达到设定转速。(3) 实验室提供24V直流电源为DC/DC电路供电,其余部分电源请利用220V市电自行设计。图1 系统总体
2、框图二、 硬件电路设计与制作2.1 显示部分电路设计使用计数器采集到电机转速后,需要用数码管进行显示。我们组选择串口驱动数码管显示电路,74HC595芯片是一种串入并出的芯片,是8位串行输入/输出或者并行输出移位寄存器,具有高阻、关、断状态。首先使用三极管构成驱动电路,驱动数码管。采用单片机的P0.0-P0.2作为74HC595时钟信号与输入口,使数码管显示相应转速,具体实现电路如图1。图1 显示电路原理图2.2 驱动部分电路设计驱动部分作为电机与单片机控制器的结合部分,是本次设计的主电路,需要完成DC/DC变化的功能。单片机产生PWM波送给驱动芯片IR2110,2110通过驱动电路控制MOS
3、FET开关改变加在直流电机上的电压,从而达到改变转速的目的。单片机产生的PWM1和PWM2波形要相反,控制斩波电路的半桥互补通断。电路设计图如图2所示。图2 驱动电路原理图2.3 电源部分设计 电源设计部分共分两个部分,一部分是IR2110的供电电压和所有芯片的供电电压,另一部分是USB口供电电部分,使用电脑供电,两部分电路通过拨码开关进行切换。市电供电电源采用220V交流电变成15V交流电,经整流桥变成直流电,再经7815、7805稳压得到15V和5V直流电,分别给驱动和单片机系统供电。图3 市电电源设计图图4 mini-USB供电接口图2.4 单片机系统设计本设计采用STC15W4K48S
4、4型号单片机,使用它的计数功能、定时器功能、数码管驱动功能、PWM波输出功能进行设计制作。图5 单片机管脚功能图图6 单片机最小系统原理图图7 单片机管脚使用示意图2.5 转速反馈设计此次设计使用单片机的P3.4口作为计数器使用。 图8 A/D采集和转速反馈电路图2.6 硬件电路焊接图图9 硬件电路焊接图三、 软件设计与编程3.1主要程序流程图10 主要程序流程图3.2完整程序见附录四、 测试结果 上电后,电机运转正常,调节键盘后后,电机转速随之变化,数码管显示显示转速也随之变化,但是反转时程序中转速调节的P值过大,导致电机转速正负跳变,没有实现闭环控制。五、 课程设计中遇到的问题及解决方法
5、问题一 整体硬件电路的设计原理不清楚,对于电路设计没有信心。 解决方法:通过不断查阅资料,焊电路过程中不断修改电路才得到正确的电路。 问题二 IR2110的1和7脚 PWM波不能正常输出,DC/DC电路不输出。 解决方法:后来经过排查电路,发现主要有两个问题,第一个问题是芯片的5脚没有和IRF540的半桥臂连起来 ,另一个问题是24V和5V电源的地没有共起来,把这两个问题解决了,电路可以正常工作。 六、 课程设计感悟本次课程设计是内容是通过单片机控制驱动电路,改变加在直流电机上的电压,从而达到调节电机转速的目的。通过此次课程设计,使我更加扎实的掌握了有关直流电机调速方面的知识。在设计过程中遇到
6、了一些问题,比如设计电路不知如何下手,电阻电容的选取只会照搬经典电路,却不会灵活应用,后来经过多次查找资,问题才得到解决。每次的课程设计都使我感觉到:我知识掌握的不够扎实,学会的知识不会应用,思想上总是存在侥幸心理,对一个电路不加验证就想着可以应用。实践出真知,通过亲自动手制作,使我们掌握的知识不再是纸上谈兵,以后要多多联系吧,毕竟这样的机会是少之又少。我认为,这次课程设计不仅培养了独立思考、动手操作的能力,在各种其它能力上也都有了提高。这是日后最实用的,真的是受益匪浅。要面对社会的挑战,只有不断的学习、实践,再学习、再实践。这对于我们的将来也有很大的帮助。通过这次课程设计使我懂得了理论与实际
7、相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力此次设计也让我明白了思路即出路,有什么不懂不明白的地方要及时请教或上网查询,只要认真钻研,动脑思考,动手实践,就没有弄不懂的知识。七、 附录附录17.1重要芯片资料1. 74HC595芯片74HC595芯片是一种串入并出的芯片,在电子显示屏制作当中有广泛的应用。595是具有8位移位寄存器和一个存储器,三态输出功能。 移位寄存器和存储器是分别的时钟。数据在SCHcp的上升沿输入,在STcp的上升沿进入到存储寄存器中去。如果两个时钟连在一
8、起,则移位寄存器总是比存储寄存器早一个脉冲。 移位寄存器有一个串行移位输入(Ds),和一个串行输出(Q7),和一个异步的低电平复位,存储寄存器有一个并行8位的,具备三态的总线输出,当使能OE时(为低电平),存储寄存器的数据输出到总线。 图1 74HC595引脚图管脚编号 管脚名 管脚定义功能1、2、3、4、5、6、7、15 QAQH 三态输出管脚 8 GND 电源地 9 SQH 串行数据输出管脚 10 SCLR 移位寄存器清零端 11 SCK 数据输入时钟线 12 RCK 输出存储器锁存时钟线 13 OE 输出使能 14 SI 数据线 15 VCC 电源端 图2 74HC595管脚功能图2.
9、IR2110芯片IR2110采用HVIC和闩锁抗干扰CMOS制造工艺,DIP14脚封装。具有独立的低端和高端输入通道;悬浮电源采用自举电路,其高端工作电压可达500V,dv/dt=+50V/ns,15V下静态功耗仅116mv;输出的电源端电压范围10-20V;逻辑电源电压范围5-15V,可方便的与TTL、CMOS电平相匹配,而且逻辑电源地和功率之间允许有+5V的偏移量;工作频率高,可达500KHz;开通、关断延时小,分别为120ns和94ns;图腾柱输出峰值电流为2A。图3 IR2110直插式管脚图附录二7.2 程序7.2.1主程序#includeconfig.h#includeExti.h#
10、includetimer.h#includedelay.h#includeGPIO.h#includePWM.h/*功能说明*/*本地常量声明*/u8 code t_display=/标准字库/ 0 1 2 3 4 5 6 7 8 9 A B C D E F/0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F; u8 code t_display=/标准字库/ 0 1 2 3 4 5 6 7 8 9 A B C D E F0xD7,0x14,0xCD,0x5D,0x1E,0x5B,0xDB,0x15,0xDF,0x5F;/0. 1. 2. 3.
11、4. 5. 6. 7. 8. 9. -1unsigned char code T_COM=0x80,0x40,0x20,0x10;/位码/=/ 端口声明/=/595的三个开关sbitP_HC595_SER = P00;/pin 14SERdata inputsbitP_HC595_RCLK = P01;/pin 12RCLkstore (latch) clocksbitP_HC595_SRCLK = P02;/pin 11SRCLKShift data clock/转速测量的中断输入口 INT0 P3.2/pwm 1路 分别为p2.5 /调节按钮,一路加,一路减sbit add_zhuansu
12、 = P03; /接的是第二个按钮,正常为高电平sbit sub_zhuansu = P04; /=/externbitB_Timer0_1ms; /中断是否结束,如果时间到了则为1u8 LED84;/显示的数据 数码管要显示的数据,1300,1, 3, 0, 0u8display_index;/显示位索引 4 3 2 2/*本地变量声明*/long int zhuansu=0; /测量到的转速long int set_zhuansu=3600; /设定的转速u8 dir=1; /为正转u16pwm0,pwm1,pwm2;/* 外部函数和变量声明 */externu32Pulse;extern
13、u8PulseTimeOut;/* 外中断配置函数 */voidEXTI_config(void)EXTI_InitTypeDefEXTI_InitStructure;/结构定义EXTI_InitStructure.EXTI_Mode = EXT_MODE_Fall;/中断模式, EXT_MODE_RiseFall, EXT_MODE_FallEXTI_InitStructure.EXTI_Polity = PolityHigh;/中断优先级, PolityLow,PolityHighEXTI_InitStructure.EXTI_Interrupt = ENABLE;/中断允许, ENABL
14、E或DISABLEExt_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_16BitAutoRelo
15、adNoMaskTIM_InitStructure.TIM_Polity = PolityLow;/指定中断优先级, PolityHigh,PolityLowTIM_InitStructure.TIM_Interrupt = ENABLE;/中断是否允许, ENABLE或DISABLETIM_InitStructure.TIM_ClkSource = TIM_CLOCK_12T;/指定时钟源, TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CLOCK_ExtTIM_InitStructure.TIM_ClkOut = DISABLE;/是否输出高速脉冲, ENABLE或DISA
16、BLETIM_InitStructure.TIM_Value = 65536UL - ( MAIN_Fosc) / (50*12);/初值, 1000us,定时20ms,每秒50次 TIM_InitStructure.TIM_Run = ENABLE;/是否初始化后启动定时器, ENABLE或DISABLETimer_Inilize(Timer0,&TIM_InitStructure);/初始化Timer0 Timer0,Timer1,Timer2/* Timer0中断函数*/void timer0_int (void) interrupt TIMER0_VECTORu16 j,k;k+;if
17、(k=50) /20*50msk=0;zhuansu=Pulse/110*60; /110为齿轮数 Pulse=0;j=zhuansu;/j = pwm0;/j=1234;/if(set_zhuansu0)/j= -set_zhuansu;/else j=set_zhuansu;LED80 = j / 1000;LED81 = j % 1000 / 100;LED82 = j % 100 / 10;LED83 = j % 10 ;/ if(sub_zhuansu=0)/pwm0=pwm0-1000;/if(add_zhuansu=0)/pwm0=pwm0+1000;/if(sub_zhuans
18、u=0)set_zhuansu=set_zhuansu-500;if(add_zhuansu=0)set_zhuansu=set_zhuansu+500;/if(set_zhuansu2600) set_zhuansu = 2600 ;/if(set_zhuansu100)/pwm0=pwm0+(set_zhuansu-zhuansu)*0.2; /最大为8799/else if(set_zhuansu100)/pwm0=pwm0+(set_zhuansu+zhuansu)*0.2;/else /pwm0=0; /最大为8799/if(set_zhuansu5200) set_zhuansu
19、= 5200 ;pwm0=pwm0+(set_zhuansu-2600-zhuansu)*0.3; /最大为8799if(set_zhuansu-2600100)|(2600-set_zhuansu8700) pwm0 = 8700;if(pwm00) pwm0 = 0 ;PWMx_SetPwmWide(PWM2_ID, pwm0, PERIOD); /红色指示灯由亮变暗再由暗变亮PWMx_SetPwmWide(PWM3_ID, pwm0, PERIOD); /绿色指示灯由亮变暗再由暗变亮/=/ 函数: voidPWM_config(void)/ 描述: PWM配置函数。/ 参数: none.
20、/ 返回: 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或1PWMx_InitStructure.PWMx_Interrupt = DISABLE;/中断允许, ENABLE或DISA
21、BLEPWMx_InitStructure.FirstEdge_Interrupt = DISABLE;/第一个翻转中断允许, ENABLE或DISABLEPWMx_InitStructure.SecondEdge_Interrupt = DISABLE;/第二个翻转中断允许, ENABLE或DISABLEPWMx_InitStructure.FirstEdge = PERIOD/2-12;/第一个翻转计数, 132767PWMx_InitStructure.SecondEdge = PERIOD/2+1-12;/第二个翻转计数, 132767PWMx_Configuration(PWM2_I
22、D, &PWMx_InitStructure);/初始化PWM, PWM6_IDP2n_standard(17);/IO初始化, 上电时为高阻 PWMx_InitStructure.PWMx_IO_Select = PWM3_P45;/PWM输出IO选择. PWM7_P17,PWM7_P06PWMx_InitStructure.Start_IO_Level = 1;/设置PWM输出端口的初始电平, 0或1PWMx_InitStructure.PWMx_Interrupt = ENABLE;/中断允许, ENABLE或DISABLEPWMx_InitStructure.FirstEdge_Int
23、errupt = ENABLE;/第一个翻转中断允许, ENABLE或DISABLEPWMx_InitStructure.SecondEdge_Interrupt = DISABLE;/第二个翻转中断允许, ENABLE或DISABLEPWMx_InitStructure.FirstEdge = PERIOD/2-12;/第一个翻转计数, 132767PWMx_InitStructure.SecondEdge = PERIOD/2+1-12;/第二个翻转计数, 132767PWMx_Configuration(PWM3_ID, &PWMx_InitStructure);/初始化PWM, PWM
24、7_IDP4n_standard(15);/IO初始化, 上电时为高阻/TH2 = (u8)(65536UL - MAIN_Fosc / UL) / 256);/波特率使用Timer2/TL2 = (u8)(65536UL - MAIN_Fosc / UL) % 256); /貌似定时2ms/AUXR = 0x14;/Timer2 set As Timer, Timer2 set as 1T mode;PWM_SourceClk_Duty(PwmClk_1T, PERIOD);/时钟源: PwmClk_1T,PwmClk_2T, . PwmClk_16T, PwmClk_T2, PWM周期:
25、132767PWMCR |= ENPWM;/ 使能PWM波形发生器,PWM计数器开始计数/ PWMCR &= ECBI;/禁止PWM计数器归零中断/*/void Send_595(unsigned char dat)/发送一个字节, ,/上升沿发送数据unsigned chari;for(i=0; i8; i+)dat = 4)display_index = 0;/8位结束回0/* task A */void main(void)P2M1 &= (0xe0);/P2.7 P2.6 P2.5 设置为推挽输出 P4M1 &= (0x20);/P4.5 设置为推挽输出/P4M0 |= (0x20);
26、P0M1 &= (0x07);/P0.0 P0.1 P0.2 设置为推挽输出P0M0 |= (0x07);Timer_config();PWM_config();EXTI_config();EA = 1;pwm0 = PERIOD/2;/给PWM一个初值/PWMx_SetPwmWide(PWM2_ID, pwm0, 236); /红色指示灯由亮变暗再由暗变亮/PWMx_SetPwmWide(PWM3_ID, pwm0, 236); /绿色指示灯由亮变暗再由暗变亮while(1)DisplayScan(); /不断进行扫描7.2.2定时器程序/*-*/* - STC MCU Internatio
27、nal Limited -*/* - STC 1T Series MCU RC Demo -*/* - Mobile: (86) -*/* - Fax: 86-0513-, -*/* - Tel: 86-0513-, -*/* - Web: www.GXWMCU.com -*/* - QQ: -*/* If you want to use the program or the program referenced in the */* article, please specify in which data and procedures from STC */*-*/*功能说明*本文件为ST
28、C15xxx系列的定时器初始化和中断程序,用户可以在这个文件中修改自己需要的中断程序.*/#includetimer.hbitB_Timer0_1ms;/* Timer0中断函数*/void timer0_int (void) interrupt TIMER0_VECTOR/B_Timer0_1ms = 1;/产生1ms标志/zhuansu=/P25 = P25;/* Timer1中断函数*/void timer1_int (void) interrupt TIMER1_VECTOR P26 = P26;/* Timer2中断函数*/void timer2_int (void) interru
29、pt TIMER2_VECTORP10 = P10;/=/ 函数: u8Timer_Inilize(u8 TIM, TIM_InitTypeDef *TIMx)/ 描述: 定时器初始化程序./ 参数: TIMx: 结构参数,请参考timer.h里的定义./ 返回: 成功返回0, 空操作返回1,错误返回2./ 版本: V1.0, 2012-10-22/=u8Timer_Inilize(u8 TIM, TIM_InitTypeDef *TIMx)if(TIM Timer2)return 1;/空操作if(TIM = Timer0)TR0 = 0;/停止计数if(TIMx-TIM_Interrupt
30、 = ENABLE)ET0 = 1;/允许中断elseET0 = 0;/禁止中断if(TIMx-TIM_Polity = PolityHigh)PT0 = 1;/高优先级中断elsePT0 = 0;/低优先级中断if(TIMx-TIM_Mode TIM_16BitAutoReloadNoMask)return 2;/错误TMOD = (TMOD & 0x03) | TIMx-TIM_Mode;/工作模式,0: 16位自动重装, 1: 16位定时/计数, 2: 8位自动重装, 3: 16位自动重装, 不可屏蔽中断if(TIMx-TIM_ClkSource = TIM_CLOCK_12T)AUXR
31、 &= 0x80;/12Tif(TIMx-TIM_ClkSource = TIM_CLOCK_1T)AUXR |= 0x80;/1Tif(TIMx-TIM_ClkSource = TIM_CLOCK_Ext)TMOD |= 0x04;/对外计数或分频elseTMOD &= 0x04;/定时if(TIMx-TIM_ClkOut = ENABLE)INT_CLKO |= 0x01;/输出时钟elseINT_CLKO &= 0x01;/不输出时钟TH0 = (u8)(TIMx-TIM_Value 8);TL0 = (u8)TIMx-TIM_Value;if(TIMx-TIM_Run = ENABLE
32、)TR0 = 1;/开始运行return0;/成功if(TIM = Timer1)TR1 = 0;/停止计数if(TIMx-TIM_Interrupt = ENABLE)ET1 = 1;/允许中断elseET1 = 0;/禁止中断if(TIMx-TIM_Polity = PolityHigh)PT1 = 1;/高优先级中断elsePT1 = 0;/低优先级中断if(TIMx-TIM_Mode = TIM_16BitAutoReloadNoMask)return 2;/错误TMOD = (TMOD & 0x30) | TIMx-TIM_Mode;/工作模式,0: 16位自动重装, 1: 16位定
33、时/计数, 2: 8位自动重装if(TIMx-TIM_ClkSource = TIM_CLOCK_12T)AUXR &= 0x40;/12Tif(TIMx-TIM_ClkSource = TIM_CLOCK_1T)AUXR |= 0x40;/1Tif(TIMx-TIM_ClkSource = TIM_CLOCK_Ext)TMOD |= 0x40;/对外计数或分频elseTMOD &= 0x40;/定时if(TIMx-TIM_ClkOut = ENABLE)INT_CLKO |= 0x02;/输出时钟elseINT_CLKO &= 0x02;/不输出时钟TH1 = (u8)(TIMx-TIM_Value 8);TL1 = (u8)TIMx-TIM_Value;if(TIMx-TIM_Run = ENABLE)TR1 = 1;/开始运行return0;/成功if(TIM = Timer2)/Timer2,固定为16位自动重装, 中断无优先级AUXR &= (1TIM_Interrupt = ENABLE)IE2 |= (12);/允许中断elseIE2 &= (1TIM_ClkSource TIM_CLOCK_Ext)return 2;if(TIMx-TIM_ClkSource = TIM_CLO
限制150内