1、直流电机PWM调速系统的设计与仿真直流电机 PWM 调速系统的设计与仿真、引言1 本课题设计的目的和要求1. 直流电机 PWM调速系统的目的:( 1) 熟悉直流电机 PWM调速系统的整体运行过程和总体布局( 2) 掌握该硬件电路的设计方法(3) 掌握电机 PWM调速系统程序的设计和调试2. 直流电机 PWM调速系统的要求(1)可输入 01 范围的占空比,占空比可用电位器输入、拨码开关输入或键 盘输入。( 2)设计电机驱动电路,根据输入的占空比控制电机转速。( 3)检测电机转速,并用 LED或 LCD显示。(4)在 PROTUE下S 仿真。二、系统总体框图与原理说明总体方案原理及设计框图本设计是
2、基于 AT89c51 为核心的直流调速器,由单片机控制和产生适合要求的 PWM信号,该 PWM信号通过驱动芯片电路进行直流调速,使输出电压平均值和功率可以 按照 PWM信号的占空比而变化,从而达到对直流电机调速的目的。拨码开关输入 01 范围的占空比,用 LCD1602 作为主液晶显示器,显示 输入的占空比控制电机转速,能够实现 较好的人机交互。拨码开关输入模块总体方案设计框图三、硬件电路图用压控振荡器(可用 555 电 路构成)来模拟直流电机的 运行PWM产生方式( 1)PWM(脉冲宽度调制)是通过控制固定电压的直流电源开关频率,改变负载两 端的电压,从而达到控制要求的一种电压调整方法。 P
3、WM可以应用在很多方面,比如: 电机调速、温度控制、压力控制等等。在 PWM驱动控制的调整系统中,按一个固定的频率来接通和断开的电源,并且根据 需要改变一个周期内“接通”和“断开”时间的长短。通过改变直流电机电枢上电压的 “占空比”来达到改变平均电压大小的目的,从而来控制电动机的转速。正因为如此, PWM又被称为“开关驱动装置” 。PWM波形如图所示:PWM波形图设电机始终接通电路时,电机转速最大为 V max ,设占空比为:D t1T则电机的平均转速为V a V max * D其中V a指的是电机的平均速度,V max 是指电机在全通电时最大速度, D 指的是占空比。 max由上面的公式可见
4、,当改变占空比 D时,就可以得到不同电机平均速度 V a, 从而达到调 速的目的。( 2)单片机片内软件生成 PWM信号 PWM信号采用单片机定时中断的方式软件模拟产生, 这样实现比较容易, 可以节 约硬件成本。VSSVDDVEErsrweDom 皿D3M 仍D6D7-k , XfV21 in co厂Ou厂h/lol 6厂c0a2345丄6Ia70)54co-IO-TW 8 人 -uwx-LM26L八TEXTVpunprenL: 99Z naLgl5pmmcu 25F s D E s D E ss 01234567 V V V R R E DDDDDDDD开始s-OFF ON!=1JQM=1
5、l=Mz3J =1召5L67厂s-DIPSW 8 oow zi SrOr00 QDGOOQ1 4l却16OFF ONI=11= 115 214 313-412=1=1=1=1511 610-798DIPSW 8 -wTEX1周美娟清华大学出版社统设计2.微型计算机控制技术实用教程 潘新民 王燕芳 电子工业出版社附录#include#include#include#include#include/=#define uchar unsigned char #define uint unsigned int /=#define Data_Bus P1sbit PWM=P30;bit PWM_flag
6、=0;unsigned char Time_flag=0;unsigned char DSW_data=0x00;unsigned char PWM_data=0;unsigned int Speed_data=0;unsigned char PWM_Precent5=0x30,0x30,%;unsigned char MotorSpeed5=0x30,0x30,0x30;/ / 函数声明 void delay(uint);void delay_ms(unsigned int ii);/1ms 延时函数void get_PWM(void);void get_Speed(void);/=延时子函
7、数 = void delay(uint z)uint x,y;for(x=z;x0;x-) for(y=110;y0;y-);void delay_ms(unsigned int ii)/1ms 延时函数unsigned int i,x;for (x=0;xii;x+)for (i=0;i200;i+);/=外部中断 0 初始化程序 = void Init_int0(void)EX0=1;/ 开外部中断 0IT0=1;/ 触发EA=1; /=外部中断 0 服务程序 = void Int0_server(void) interrupt 0EA=0;Speed_data+;EA=1; /=定时器
8、0初始化设置 = void Time0_Init() / 定时器 0 初始化函数TMOD=0x01; /定时器 0 为工作方式 1 TH0=(65536-50000)/256;TL0=(65536-50000)%256; / 初始化为定时时间为 50ms ET0=1; / 开定时器 0 中断TR0=1; / 开定时器EA=1; / 开总开关 /=定时器 0中断服务程序 = void Time0_Int() interrupt 1 / 定时器 0 中断子函数TH0=(65536-50000)/256;TL0=(65536-50000)%256; / 初始化为定时时间为 50ms Time_fla
9、g+;if(Time_flag=20)Time_flag=0; get_Speed();/=定时器 1 初始化设置 =计= 算方波数 void init_timer1(void)TMOD|=0x10; / 定时器 1 为工作方式 1 16bitTH1=0xFF;TL1=0xFE;ET1=1; / 开定时器 1 中断TR1=1; / 开定时器EA=1; / 开总开关/=定时器 1中断服务程序 = void timer1_server(void) interrupt 3if(PWM_flag)TH1=(65536-PWM_data*200)/256;TL1=(65536-PWM_data*200)
10、%256;PWM=1;PWM_flag=PWM_flag;elseTH1=(45536+PWM_data*200)/256;TL1=(45536+PWM_data*200)%256; / 初始化为定时时间为 20ms PWM=0;PWM_flag=PWM_flag;/=get_PWM= void get_PWM(void)DSW_data=Data_Bus;if(DSW_data=0x00)TR1=0;PWM=0;PWM_Precent0=0x30;PWM_Precent1=0x30;elsePWM_data=DSW_data*100/256; PWM_Precent0=PWM_data/10
11、+0x30;PWM_Precent1=PWM_data%10+0x30;TR1=1;/=get_Speed= void get_Speed(void)MotorSpeed0=Speed_data/100+0x30; MotorSpeed1=Speed_data/10%10+0x30;MotorSpeed2=Speed_data%10+0x30;Speed_data=0;/ 主函数 void main()PWM=0;get_PWM();Init_int0();Time0_Init();init_timer1();LCD_init(); /LCD1602 初始化LCD_write_command(0x01);/LCD 清屏delay_ms(10);DisplayChar(0,1,PWM_Precent:);DisplayChar(13,1,PWM_Precent);DisplayChar(0,0,Motor_Speed:);DisplayChar(13,0,MotorSpeed);while(1)get_PWM();DisplayChar(13,1,PWM_Precent);DisplayChar(13,0,MotorSpeed);
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1