直流电机PWM调速电路汇编
PWM型直流风扇速度控制电路

V (脚 3):与 外 置 电 阻分 压 器 相 连 ,通 过 设 定 最 小 占空 比来 确定 最 小 风扇速 度 ,当 0≤V姗≤V 时 ,MC642进 入 关 断模 式 。在 关 断模 式 ,FAULT的 输 出 不 起 作 用 ,此 时 的 输 出 电 流 降 至 25 F;当 V帽 ≥V吼 时 ,MC642退 出 关 断 模 式 。 (VSnDN=0.13 VDD,VRⅡ O.19 VDD)。
2.2 启 动 定 时 器 为 了保 证风 扇 能够 可靠 地工 作,如果风 扇 由静
』E启 动 ,启 动定 时器 将 在 32个 PWM 周 期 后 输 出 V(1Ⅲ。如果 PWM 的 工作 频 率 为 30 Hz,则 启动 时 间 大 约为 1 S。一旦 检测 到故 障信 号 ,器 件立 即触 发启 动定 时器 ,并 进入 关断 状 态 。
攮 圆瘗
PWM 型直流风扇速度控制 电路
索正 军
(西 安 远 方航 空 技 术 发 展 总 公 司 ,陕 西 西 安 710075) 摘 要 :介 绍 了脉 宽调 制 直 流 电机 风扇 转速 控 制 ICMC642的功 能及 工作 原理 .讨 论 了它的 外 围 电 路 的 设 计 方 法 ,并 介 绍 了几 个 典 型 的 应 用 电路 。 关 键 词 :PW M ;风 扇 ;转 速 ;控 制 器 ;M C642
2 工 作 原 理
MC642的工 作原 理及 引 脚排 列 图如 图 1所 示 。 下 面对 其 内部 的组成 原理 加 以说 明 。
2.1 PW M 电 路
PWM 电路 由斜 波发 生器 和 阈值检 测器 组成 。其 PWM 频 率 由 输 入脚 上 的电 容决定 。在 30 Hz频 率 时 ,推荐 使用 1 F的 cF 同时 ,该 PWM 频率 也是 启 动 和故 障定 时器 的 时基 。
基于LM324的PWM直流电机调速电路图

基于LM324的PWM直流电机调速电路图基于LM324的PWM直流电机调速电路图它主要由U1(LM324)和Q1组成。
图1中,由U1a、U1d组成振荡器电路,提供频率约为400Hz的方波/三角形波。
U1c产生6V的参考电压作为振荡器电路的虚拟地。
这是为了振荡器电路能在单电源情况下也能工作而不需要用正负双电源。
U1b 这里接成比较器的形式,它的反相输入端(6脚)接入电阻R6、R7和VR1,用来提供比较器的参考电压。
这个电压与U1d的输出端(14脚)的三角形波电压进行比较。
当该波形电压高于U1b的6脚电压。
U1b的7脚输出为高电平;反之,当该波形电压低于U1b的6脚电压,U1b的7脚输出为低电平。
由此我们可知,改变U1b的6脚电位使其与输入三角形波电压进行比较。
就可增加或减小输出方波的宽度,实现脉宽调制(PWM)。
电阻R6、R7用于控制VR1的结束点,保证在调节VR1时可以实现输出为全开(全速或全亮)或全关(停转或全灭),其实际的阻值可能会根据实际电路不同有所改变。
图1中,Q1为N沟道场效应管,这里用作功率开关管(电流放大),来驱动负载部分。
前面电路提供的不同宽度的方波信号通过栅极(G)来控制Q1的通断。
LED1的亮度变化可以用来指示电路输出的脉冲宽度。
C3可以改善电路输出波形和减轻电路的射频干扰(RFI)。
D1是用来防止电机的反电动势损坏Q1. 当使用24v的电源电压时,图1电路通过U2将24V转换成12V供控制电路使用。
而Q1可以直接在21v电源上,对于Q1来讲这与接在12v 电源上没有什么区别。
参考图1,改变J1、J2的接法可使电路工作在不同电源电压(12V或24V)下。
当通过Q1的电流不超过1A时,Q1可不用散热器。
但如果Q1工作时电流超过1A时,需加装散热器。
如果需要更大的电流(大于3A),可采用IRFZ34N等替换Q1.。
基于C51单片机的直流电机PWM调速控制(包含原理图及C源代码)

基于C51单片机的直流电机PWM调速控制--SQ这是最近一阶段自己学习所获,现分享与大家。
这里采用A T89C52单片机做主控制芯片,实现两路直流电机的PWM调速控制,另外还可以实现转向、显示运行时间、显示档位等注:考虑小直流电机自身因素,调速范围仅设有四级电路原理图:C语言程序源代码:/******************** 硬件资源分配*********************/数码管:显示电机状态(启停、正反、速度)、运行时间、是否转弯按键:K4 启动/暂停K3 正反转/转弯允许K2 加速/左转/运行时间清零K1 减速/右转/停止定时器:T0 数码管动态显示,输出PWMT1 运行时间记录********************************************************//*******主程序文件PWM.c******/#include <reg52.h>#include "Afx.h"#include "Config.c"#define CIRCLE 5 //脉冲周期//按键定义uchar key,key_tmp=0, _key_tmp=0;//显示定义uchar LedState=0xF0; //LED显示标志,0xF0不显示,Ox00显示uchar code LED_code_d[4]={0xe0,0xd0,0xb0,0x70}; //分别选通1、2、3、4位uchar dispbuf[4]={0,0,0,0}; //待显示数组uchar dispbitcnt=0; //选通、显示的位uchar mstcnt=0;uchar Centi_s=0,Sec=0,Min=0; //分、秒、1%秒//程序运行状态标志bit MotState=0; //电机启停标志bit DirState=0; //方向标志0前,1后uchar State1=-1;uchar State2=-1;uchar State3=0;uchar State4=-1;uchar LSpeed=0;uchar RSpeed=0;//其他uint RunTime=0;uint RTime_cnt=0;uint LWidth;uint RWidth; //脉宽uint Widcnt=1;uint Dispcnt;//函数声明void key_scan(void);void DisBuf(void);void K4(void);void K3(void);void K2(void);void K1(void);void disp( uchar H, uchar n );void main(void){P1|=0xF0;EA=1;ET0=1;ET1=1;TMOD=0x11;TH0=0xFC;TL0=0x66; //T0,1ms定时初值TH1=0xDB;TL1=0xFF; //T1,10ms定时初值TR0=1;Widcnt=1;while(1){key_scan();switch(key){case 0x80: K1(); break;case 0x40: K2(); break;case 0x20: K3(); break;case 0x10: K4(); break;default:break;}key=0;DisBuf();LWidth=LSpeed;RWidth=RSpeed;}}//按键扫描**模拟触发器防抖void key_scan(void){key_tmp=(~P3)&0xf0;if(key_tmp&&!_key_tmp) //有键按下{key=(~P3)&0xf0;}_key_tmp=key_tmp ;}//按键功能处理/逻辑控制void K4(void){if(State4==-1){State4=1;TR1=1;dispbuf[3]=1;LedState=0x00; //打开LEDMotState=1; //打开电机LSpeed=1;RSpeed=1; //初速设为1}else if(State4==1){State4=0;TR1=0;MotState=0; //关闭电机}else if(State4==0){MotState=1;if(State3==0){State4=1;TR1=1;}else if(State3==1){LSpeed=2;RSpeed=2;}}}void K3(void){if(State4==1)DirState=!DirState;if(State4==0){if(State3==0){State3=1; //可以转向标志1可以,0不可以TR1=1;dispbuf[3]=9;MotState=1;LSpeed=2;RSpeed=2;}else if(State3==1){State3=0;TR1=0;dispbuf[3]=0;MotState=0;}}}void K2(void){if(State4==1&&LSpeed<4&&RSpeed<4){LSpeed++;RSpeed++;}else if(State4==0){if(State3==0){//State4=-1;//LedState=0xF0;MotState=0;Sec=0;Min=0;}else if(State3==1&&LSpeed<4&&RSpeed<4){//TurnState=0;LSpeed=2;RSpeed++;}}}void K1(void){if(State4==1&&LSpeed>1&&RSpeed>1){LSpeed--;RSpeed--;}else if(State4==0){if(State3==0){State4=-1;LedState=0xF0;MotState=0;}else if(State3==1&&LSpeed<4&&RSpeed<4){//TurnState=1;LSpeed++;RSpeed=2;}}}//显示预处理void DisBuf(void){if(RTime_cnt==100){Sec++;RTime_cnt=0;}if(Sec==60){Min++;Sec=0;}if(State4==1){dispbuf[0]=Sec%10;dispbuf[1]=Sec/10;dispbuf[2]=Min;if(!DirState) //正转dispbuf[3]=LSpeed;if(DirState) //反转dispbuf[3]=LSpeed+4;}if(State4==0){if(State3==0){dispbuf[0]=Sec%10;dispbuf[1]=Sec/10;dispbuf[2]=Min;dispbuf[3]=0;}if(State3==1){dispbuf[0]=RSpeed;dispbuf[1]=LSpeed;dispbuf[2]=Min;dispbuf[3]=9;}}}//LED驱动void disp( uchar H, uchar n ){P1=n;P1|=LedState ;P1|=LED_code_d[H];}//T0中断**显示/方波输出void Time_0() interrupt 1{TH0=0xFC;TL0=0x66;Widcnt++;Dispcnt++;//电机驱动/方波输出if(Widcnt>CIRCLE){Widcnt=1;}if(Widcnt<=LWidth)LMot_P=!DirState&&MotState;elseLMot_P=DirState&&MotState;LMot_M=DirState&&MotState;if(Widcnt<=RWidth)RMot_P=!DirState&&MotState;elseRMot_P=DirState&&MotState;RMot_M=DirState&&MotState;//显示if(Dispcnt==5){disp(dispbitcnt,dispbuf[dispbitcnt]);dispbitcnt++;if(dispbitcnt==4){dispbitcnt=0;}Dispcnt=0;}}//T1中断**运行时间void Time_1() interrupt 3{TH1=0xDB;TL1=0xFF;RTime_cnt++;}/******配置文件Afx.h******/#ifndef _AFX_#define _AFX_typedef unsigned char uchar;typedef unsigned int uint;typedef unsigned long ulong;#endif/******IO配置文件Config.c******/#ifndef _Config_#define _Config_#include "Afx.h"#include <reg52.h>//显示定义sbit led=P3^2;//电机引脚定义sbit LMot_P=P2^2; sbit LMot_M=P2^3; sbit RMot_P=P2^0; sbit RMot_M=P2^1;#endif。
pwm电机调速程序

PWM电机调速程序*******************************************************************/ /* 程序名:PWM直流电机调速 *//* 晶振:11.00592 MHz CPU型号:AT89C51 *//* 直流电机的PWM波控制,可以直接的调速从0到20级的调速 *//*****************************************************************/ #include<reg51.h>#define TH0_TL0 (65536-1000)//设定中断的间隔时长unsigned char count0 = 50;//低电平的占空比unsigned char count1 = 0;//高电平的占空比bit Flag = 1;//电机正反转标志位,1正转,0反转sbit Key_add=P2 ^ 0; //电机减速sbit Key_dec=P2 ^ 1; //电机加速sbit Key_turn=P2 ^ 2; //电机换向sbit PWM1=P2^6;//PWM 通道 1,反转脉冲sbit PWM2=P2^7;//PWM 通道 2,正转脉冲unsigned char Time_delay;/************函数声明**************/void Delay(unsigned char x);void Motor_speed_high(void);void Motor_speed_low(void);void Motor_turn(void);void Timer0_init(void);/****************延时处理**********************/void Delay(unsigned char x){Time_delay = x;while(Time_delay != 0);//等待中断,可减少PWM输出时间间隔}/*******按键处理加pwm占空比,电机加速**********/void Motor_speed_high(void)//{if(Key_add==0)Delay(10);if(Key_add==0){count0 += 5;if(count0 >= 100){count0 = 100;}}while(!Key_add);//等待键松开}}/******按键处理减pwm占空比,电机减速*****/ void Motor_speed_low(void){if(Key_dec==0){Delay(10);if(Key_dec==0){count0 -= 5;if(count0 <= 0){count0 = 0;}}while(!Key_dec );}}/************电机正反向控制**************/ void Motor_turn(void){if(Key_turn == 0){Delay(10);if(Key_turn == 0){Flag = ~Flag;}while(!Key_turn);}/***********定时器0初始化***********/void Timer0_init(void){TMOD=0x01; //定时器0工作于方式1TH0=TH0_TL0/256;TL0=TH0_TL0%256;TR0=1;ET0=1;EA=1;}/*********主函数********************/void main(void){Timer0_init();while(1){Motor_turn();Motor_speed_high();Motor_speed_low();}}/**************定时0中断处理******************/ void Timer0_int(void) interrupt 1 using 1{TR0 = 0;//设置定时器初值期间,关闭定时器TL0 = TH0_TL0 % 256;TH0 = TH0_TL0 / 256 ;//定时器装初值TR0 = 1;if(Time_delay != 0)//延时函数用{Time_delay--;}if(Flag == 1)//电机正转{PWM1 = 0;if(++count1 < count0)PWM2 = 1;}elsePWM2 = 0;if(count1 >= 100){count1=0;}}else //电机反转{PWM2 = 0;if(++count1 < count0){PWM1 = 1;}elsePWM1 = 0;if(count1 >= 100){count1=0;}}}//-----------------------------------------------------------------------------#include <c8051f330.h> // SFR declarations#include <math.h>// Function Prototypes//-----------------------------------------------------------------------------#define CMD_RESET 0xA4 //HD7279复位#define DECODE1 0xc8 //方式0译码sbit cs=P1^3;sbit clk=P1^2;sbit dat=P1^1;sbit key=P1^0;sbit led_D1003=P0^7;sbit sw1=P1^7;sbit sw2=P1^6;sbit sw3=P1^5;sbit sw4=P1^4;void long_delay(void); //延时函数void short_delay(void);void delay10ms(unsigned char);void write7279(unsigned char,unsigned char); //HD7279写指令void send_byte(unsigned char);void delay(unsigned char);void disp1(unsigned int);void OSCILLATOR_Init (void);void PORT_Init (void);void PCA0_Init (void);void Timer0_Init(void);void Ext_Interrupt_Init (void);//-----------------------------------------------------------------------------// Global Variables//-----------------------------------------------------------------------------//-----------------------------------------------------------------------------// main() Routine//-----------------------------------------------------------------------------unsigned int CEX0_Compare_Value; // Holds current PCA compare valueunsigned int tmr,Speed_evaluate;unsigned char num,num1,num2,num3,a;unsigned int Speed,pi,Speed2;unsigned int Speed1[10];typedef struct {double SetPoint; /* 设定目标Desired Value */double Proportion; /* 比例常数Proportional Const */double Integral; /* 积分常数Integral Const */double Derivative; /* 微分常数Derivative Const */double LastError; /* 前一项误差*/double PrevError; /* 前第二项误差*/double SumError; /* 误差和*/} PID;double PIDCalc( PID *pp, double NextPoint ){double dError,Error,Pout;Error = pp->SetPoint - NextPoint; /* */pp->SumError += Error; /* /dError = pp->LastError - pp->PrevError; /* */pp->PrevError = pp->LastError;pp->LastError = Error; /* */Pout= pp->Proportion * Error + pp->Integral * pp->SumError +pp->Derivative * dError ;if(Pout>1100)Pout=1000;if(Pout<100)Pout=100;return (Pout);}PID sPID; //定义PID结构体变量double rOut; //PID响应输出unsigned char rIn; //设置PID反馈值double x;double sumout;unsigned char dd;//设置PID输出void main (void){sPID.Proportion = 0.44; //设置PsPID.Integral = 0.70; //设置IsPID.Derivative = 0.0; //设置D//sPID.SetPoint = CEX0_Compare_Value;//sPID.SetPoint = CEX0_Compare_Value; //设置PID输出PCA0MD = 0x00; // Disable watchdog timerled_D1003=0;PORT_Init (); // Initialize crossbar and GPIOOSCILLATOR_Init (); // Initialize oscillatorPCA0_Init (); // Initialize PCA0IP=0x82; //定时器中断0高于外部中断0Timer0_Init();Ext_Interrupt_Init ();for (tmr=0;tmr<0x2000;tmr++);send_byte(CMD_RESET);//HD7279复位// Globally enable interruptsEA = 1;sPID.SetPoint=70;while (1){delay10ms(100);//键盘程序 -------------------------------------------------------------if(sw1==0) //按键1是否按下{if(sw1==0)//再次检查按键{num++; //若按键按下,num加1if(num==1) //到9归0{num=0;}while(sw1==0);//按键释放}// delay10ms(100);}write7279(DECODE1+4,num); //将num写入HD7279第1位 delay10ms(1);if(sw2==0){if(sw2==0){num1++;if(num1==2){num1=0;}while(!sw2);}// delay10ms(100);}write7279(DECODE1+5,num1);//将num1写入HD7279第2位delay10ms(1);if(sw3==0){if(sw3==0){num2++;if(num2==10){num2=0;}while(!sw3);}// delay10ms(100);}write7279(DECODE1+6,num2);//将num1写入HD7279第2位delay10ms(1);if(sw4==0){if(sw4==0){num3++;if(num3==10){num3=0;}while(!sw4);}// delay10ms(100);}write7279(DECODE1+7,num3);//将num1写入HD7279第2位delay10ms(1);Speed_evaluate=num*1000+num1*100+num2*10+num3;sPID.SetPoint=Speed_evaluate;//控制程序-----------------------------------------------------------------//---------------------------------------------------------------------------}}void OSCILLATOR_Init (void){OSCICN = 0x83; // Set internal oscillator torun// at its maximum frequencyCLKSEL = 0x00;}void PORT_Init (void){XBR0 = 0x00;XBR1 = 0x41;// Enable crossbar and weak pull-upsP0MDOUT |= 0x10; // Set CEX0 (P0.4) to push-pull P0SKIP |=0x0F; //P1SKIP = 0x00;P1MDOUT= 0x0f;}void PCA0_Init (void){PCA0CN = 0x00; // Stop counter; clear allflagsPCA0MD = 0x01; // Use Ettern ime basePCA0CPM0 = 0xCB; // Module 0 = 16-bit PWM modeand// enable Module 0 Match and Interrupt// Flags// Configure initial PWM duty cycle = 50%CEX0_Compare_Value = 65536 - (65536 * 0.15);PCA0CPL0 = (CEX0_Compare_Value & 0x00FF);PCA0CPH0 = (CEX0_Compare_Value & 0xFF00)>>8;EIE1 |= 0x10; // Enable PCA interrupts// Start PCA counterCR = 1;}void Ext_Interrupt_Init (void){TCON |= 0x05; // /INT 0 and /INT 1 are edge triggeredIT01CF = 0x10; // /INT0 active low; /INT0 on P0.0;// /INT1 active low; /INT1 on P0.1EX0 = 1; // Enable /INT0 interrupts}void Timer0_Init(void){TH0 = 0 ; // Init Timer0 High registerTL0 = 0 ; // Init Timer0 Low registerTMOD |= 0x01; // Timer0 in 16-bit mode方式1CKCON |= 0x02; // Timer0 uses a 1:48 prescalerET0 = 1; // Timer0 interrupt enabledTCON|=0x10;// Timer0 ON}// PCA0_ISR//-----------------------------------------------------------------------------void PCA0_ISR (void) interrupt 11{CCF0 = 0; // Clear module 0 interrupt flag.PCA0CPL0 = (CEX0_Compare_Value & 0x00FF);PCA0CPH0 = (CEX0_Compare_Value & 0xFF00)>>8;}void Timer0_ISR (void) interrupt 1{int j,sum;TF0=0;// Clear interrupt flag.a++;if (a==4){Speed1[pi]=Speed;if(pi>=3){ EX0 = 0;for(j=0;j<=3;j++){sum=sum+Speed1[j];Speed2=sum/4;disp1(Speed2);Speed=0;pi=0;EX0 = 1;}a=0;sum=0;if(pi>=3)pi=0;elsepi++;TH0 = 0; // Reinit Timer0 High register TL0 = 0; // Reinit Timer0 Low registerif(abs( sPID.SetPoint-Speed2)<=5) {CEX0_Compare_Value=CEX0_Compare_Value;}else{rIn =Speed2;for(dd=0;dd<50;dd++)x=rIn;//x = 5.0 * (double)rIn / 256.0;rOut = PIDCalc ( &sPID,x );// sumout=rOut*256/5;if(rOut==100)sumout=0;elsesumout= (0.85/1000.0)*rOut;//CEX0_Compare_Value=CEX0_Compare_Value-sumout;CEX0_Compare_Value = 65536 - (65536 * ( sumout+0.15));}}else{TH0 = 0; // Reinit Timer0 High registerTL0 = 0; // Reinit Timer0 Low register}}void INT0_ISR (void) interrupt 0{IE0=0; // // Clear interrupt flag.Speed++;}void write7279(unsigned char cmd, unsigned char dta) {send_byte(cmd);send_byte(dta);}void send_byte( unsigned char out_byte){unsigned char i;cs=0;long_delay();for (i=0;i<8;i++){if (out_byte&0x80){dat=1;}else{dat=0;}clk=1;short_delay();clk=0;short_delay();out_byte=out_byte*2; }dat=0;}void long_delay(void){unsigned char i;for (i=0;i<0x30;i++);}void short_delay(void){unsigned char i;for (i=0;i<8;i++);}void delay10ms(unsigned char time) {unsigned char i;unsigned int j;for (i=0;i<time;i++){for (j=0;j<0x390;j++);}}void disp1(unsigned int date){unsigned char d0, d1, d2 , d3; d0=date / 1000;d1=(date-d0*1000)/100;d2=(date-d0*1000-d1*100)/10 ;d3= date-d0*1000-d1*100-d2*10;write7279(DECODE1,d0);delay10ms(1);write7279(DECODE1+1,d1);delay10ms(1);write7279(DECODE1+2,d2);delay10ms(1);write7279(DECODE1+3,d3);delay10ms(1);}。
1-3 直流电动机的脉宽调制(PWM)调速

若VT1关断时间长,在t=t2时,电枢电流ia衰减 到零,那么在电动机内电势Ea的作用下,VT2导通, 电枢电流ia 将沿着相反的方向从B点流入A点,电机 进入能耗制动。通过控制VT2的时间间隔可以控制电 机的制动转矩 注意:在VT1重新导通之间,必须先关闭VT2, 让电枢电流经过VD1续流,电机短时进入再生制动状 态,否则在VT2还没有完全关断之前就让VT1导通, 电源经过VT2、VT1直接短路,损坏开关元件。
1、单极性脉宽调制方式 系统输出电压UA的极性是通过一个控制电压Uc 来改变的。 Uc为正,VT1与VT2交替导通,VT4一直导通, VT3关断,此时,B点总是为正,A点总是为负 Uc为负,VT3与VT4交替导通,VT2一直导通, VT1关断,此时,B点总是为负,A点总是为正
工作原理: Uc为正时 0<t<t1时,VT1导通,VT2关断,若Us>Ea, 电枢电流经VT1、VT4从B流到A,电机处在电动 机状态。 在t1<t<T时,VT1关闭,VD2与VT4续流,电枢 电流方向不变,电机仍处在电动机状态。 若在t1<t<T期间的某一时刻t2电枢电流衰减到 零,那么在t2<t<T期间,Ea使VT2导通,电枢电 流反向,经VT2、VD4从A流到B,电机进入能耗 制动状态 若Ea>Us,在VT2关断期间,电枢电流经VD1 和VD4输回电网,电机作再生制动 Uc为负时,原理与此类似,电机反向
如果电流连续,则电机始终处于电动状态 若在t1<t<T期间的某一时刻t2电枢电流衰减到 零,那么在t2<t<T期间,Us和Ea共同作用,使 VT2、VT3导通,电枢电流反向,经VT2、VT3从A 流到B,电机进入反接制动状态 在VT1、VT4再次导通之前,必须关断VT2、 VT3,电枢电流VD1、VD4续流,电机进入再生制 动
sg3525pwm直流电机电路图

采用SG3525的直流电机驱动电路图收藏 | 分类: | 查看: 599 | 评论(0)下图是一采用SG3525的理想控制直流电动机精确控制电路,以及照明度等和小型加热器等其他应用电路转换成一系列脉冲,这样,在脉冲持续时间直接成正比的直流电压。
该电路同时还可防止过载,短路,PWM(脉宽) 调制范围可从0-100%的调整,PWM频率在100Hz- 5KHZ调节。
工作电压从+8 V?35V之间,最低电流消耗约为35毫安。
最大电流可以达到6.5A。
效率优于90%满负荷。
三只电位器的功能如下:VR1:确定最低输出电压VR3:设置最大输出电压VR2:设置输出频率。
1.1 PWM控制芯片SG3525功能简介随着电能变换技术的发展,功率MOSFET在开关变换器中开始广泛使用,为此美国硅通用半导体公司(Silicon General)推出SG3525。
SG3525是用于驱动N沟道功率MOSFET。
其产品一推出就受到广泛好评。
SG3525系列PWM控制器分军品、工业品、民品三个等级。
下面我们对SG3525特点、引脚功能、电气参数、工作原理以及典型应用进行介绍。
SG3525是电流控制型PWM控制器,所谓电流控制型脉宽调制器是按照接反馈电流来调节脉宽的。
在脉宽比较器的输入端直接用流过输出电感线圈的信号与误差放大器输出信号进行比较,从而调节占空比使输出的电感峰值电流跟随误差电压变化而变化。
由于结构上有电压环和电流环双环系统,因此,无论开关电源的电压调整率、负载调整率和瞬态响应特性都有提高,是目前比较理想的新型控制器。
1.1.1 SG3525引脚功能及特点简介其原理图如图4.13下:1.Inv.input(引脚1):误差放大器反向输入端。
在闭环系统中,该引脚接反馈信号。
在开环系统中,该端与补信号输入端(引脚9)相连,可构成跟随器。
2.Noninv.input(引脚2):误差放大器同向输入端。
在闭环系统和开环系统中,该端接给定信号。
LM324直流电机调速电路

LM324组成的PWM直流电机产生电路它主要由U1(LM324)和Q1组成图4.1中,由U1a、U1d组成振荡器电路,提供频率约为400Hz的方波/三角形波。
U1c产生6V的参考电压作为振荡器电路的虚拟地。
这是为了振荡器电路能在单电源情况下也能工作而不需要用正负双电源。
U1b这里接成比较器的形式,它的反相输入端(6脚)接入电阻R6、R7和VR1,用来提供比较器的参考电压。
这个电压与U1d的输出端(14脚)的三角形波电压进行比较。
当该波形电压高于U1b 的6脚电压.U1b的7脚输出为高电平;反之,当该波形电压低于U1b的6脚电压,U1b的7脚输出为低电平。
由此我们可知,改变U1b的6脚电位使其与输入三角形波电压进行比较。
就可增加或减小输出方波的宽度,实现脉宽调制(PWM)。
电阻R6、R7用于控制VR1的结束点,保证在调节VR1时可以实现输出为全开(全速或全亮)或全关(停转或全灭),其实际的阻值可能会根据实际电路不同有所改变。
图4.1中,Q1为N沟道场效应管,这里用作功率开关管(电流放大),来驱动负载部分。
前面电路提供的不同宽度的方波信号通过栅极(G)来控制Q1的通断。
LED1的亮度变化可以用来指示电路输出的脉冲宽度。
C3可以改善电路输出波形和减轻电路的射频干扰(RFI)。
D1是用来防止电机的反电动势损坏Q1。
当使用24v的电源电压时,图1电路通过U2将24V转换成12V供控制电路使用。
而Q1可以直接在21v电源上,对于Q1来讲这与接在12v电源上没有什么区别。
参考图1,改变J1、J2的接法可使电路工作在不同电源电压(12V或24V)下。
当通过Q1的电流不超过1A时,Q1可不用散热器。
但如果Q1工作时电流超过1A时,需加装散热器。
如果需要更大的电流(大于3A),可采用IRFZ34N等替换Q1。
更换大功率场效应管,如IRF360等可驱动10A以上直流电机。
图4.1 LM324组成的PWM直流电机产生原理图工作原理脉冲宽度调制(PWM)是英文“Pulse Width Modulation”的缩写,简称脉宽调制。
PWM信号控制直流电机调速的源代码

if(index==1) /*电机1的处理*/
{
m1=abs(speed); /*取速度的绝对值*/
if(speed<0) /*速度值为负则反转*/
{
s1=0;
s2=1;
}
else /*不为负数则正转*/
{
s1=1;
s2=0;
}
}
if(index==2) /*电机2的处理*/
{
m2=abs(speed); /*电机2的速度控制*/
{
motor(1,i);
motor(2,i);
delay(5000);
}
for(i=0;i<=100;i++) /*反转加速*/
{
motor(1,-i);
motor(2,-i);
delay(5000);
}
for(i=100;i>0;i--) /*反转减速*/
{
motor(1,-i);
motor(2,-i);
uchar m2=0; /*电机2速度值*/
uchar tmp1,tmp2; /*电机当前速度值*/
/*电机控制函数index-电机号(1,2); speed-电机速度(-100—100) */
void motor(uchar index, char speed)
{
if(speed>=-100 && speed<=100)
if(speed<0) /*电机2的方向控制*/
{
s3=0;
s4=1;
}
else
{
s3=1;
s4=0;
}
}
}
}
void delay(uint j) /*简易延时函数*/
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《电子技术》课程设计报告课题:直流电机PWM调速电路
班级电气1107 学号 1101205712学生姓名王海彬
专业电气信息类
学院电子与电气工程学院
指导教师电子技术课程设计指导小组
淮阴工学院
电子与电气工程学院
2012年05月
直流电机PWM调速电路
一)设计任务与要求:
1.设计电机驱动主回路,实现直流电机的正反向转动;
2.设计PWM驱动信号发生电路;
3.设计电机转速显示电路;
4.设计电机转速调节电路,可以按键或电位器调节电机转速;
5.安装调试。
二)系统原理及功能概述
1)直流电机脉宽调速电路原理
对小功率直流电机调速系统,使用单片机是极为方便的。
其方法是通过改变电机电枢电压接通时间与通电周期的比值(即占空比)来控制电机速度。
这种方法称为脉冲宽度调制(Pulse Width Modulation),简称 PWM。
改变占空比的方法有 3 种:
(1)定宽调频法,这种方法是保持 t1 不变,只改变 t2 ,这样周期 T(或频率)也随之改变;
(2)调宽调频法,保持 t1 不变,而改变 t2 ,这样也使周期 T(或频率)改变;
(3)定频调宽法,这种方法是使周期 T(或频率)不变,而同时改变 t2 和 t1 由,当控制频率与系统的固有频率接近于前两种方法都改变了周期(或频率)时,将会引起振荡,用的比较少,因此本系统用的是定频调宽法。
在脉冲作用下,当电机通电时,速度增加。
电机断电时,速度逐渐减小。
只要按一定规律,改变通断电时间,即可实现对电机的转速控制。
设电机永远接通电源时,其最大转速为 Vmax,设占空比 D= t1 /T ,则电机的平均速度为 Vd,平均速度 Vd 与占空比 D 的函数曲线如图 1-2 所示,从图可以看出,VD 与占空比 D 并不是完全线性关系(图中实线),当系统允许时,可以将其近似的看成线性关系(图中虚线),本系统采用近似法。
平均速度与占空比的关系
2)比例积分控制规律
系统的控制算法主要采用了 PI 控制算法。
其控制算法为:
其中 Kp 为比例系数,Ti 为积分系数。
若单片机的采样周期为 T,则上式可近似为:
上式即为位置式 PI 控制算法。
这里我们采用其增量式控制算法,根据递推原理可得:
则增量式控制算法为:
其中 Kp 为控制器比例系数,Ki 为积分时间常数。
由于系统采用了比例积分调节器简称 PI 调节器,使系统在扰动的作用下,通过 PI 调节器的调节作用使电动机的转速达到静态无差,从而实现了静态无差。
无静差调速系统中,比例积分调节器的比例部分使动态响应比较快无滞后,积分部分使系统消除静差。
3)直流电机调速原理
直流电机转速 n 的表达式为:
式中:U-电枢端电压;I-电枢电流;R-电枢电路总电阻;Φ-每极磁通量;K-与电机结构有关的常数,因此直流电机转速 n 的控制方法有三种,主要以调压调速为主。
本控制器主要通过脉宽调制 PWM 来控制电动机电枢电压,实现调速。
调脉宽的方式有三种:定频调宽、定宽调频和调宽调频。
本系统采用了定频调脉宽方式的 PWM 控制,因为采用这种方式,电动机在运转时比较稳定;并且在采用单片机产生 PWM 脉冲的软件实现上比较方便。
对直流电机转速的控制即可采用开环控制,也可采用闭环控制。
与开环控制相比,速度控制闭环系统的机械特性有以下优越性:闭环系统的机械特性与开环系统机械特性相比,其性能大大提高;理想空载转速相同时,闭环系统的静差率(额定负载时电机转速降落与理想空载转速之比)要小得多;当要求的静差率相同时, 闭环调速系统的调速范围可以大大提高。
转速设定值
偏差转速输出
直流电机速度闭环控制方案
三)脉宽可调方波发生电路
四)硬件设计与分析
1)系统硬件组成
图 2-1 为该系统硬件电路设计框图。
根据本系统要求通过软件编程定义键盘各键的功能及显示控制。
有关驱动及主回路控制电路见下几节。
整个系统控制过程为:键盘输入控制信号、参数及速度给定值,单片机经过速度闭环、运算,控制 P 口(自行定义)输出脉冲的占空比,从而控制电机的转速,并经显示电路显示出来。
驱动控制电路见图 2-3。
将单片机软件产生的 PWM 信号经并联使用的施密特反相器,对 IGBT 进行驱动。
2)驱动控制电路
驱动控制电路见图 2-3。
将单片机软件产生的 PWM 信号经并联使用的施密特反相器,对 IGBT 进行驱动。
驱动控制电路
3)主回路控制电路
主电路控制电路见图 2-2。
220 交流电压经过桥式整流电路的整流,再经过电容滤波,经过 IGBT 元件的功率放大,加到直流电机的两端控制电机。
主电路控制电路
4)测速电路
测速电路
5)显示电路
显示电路见图 2-5。
选用共阴 8 段数码管,采用 MAX7219 驱动。
MAX7219 是一种高集成化的串行输入/输出的共阴极 LED 显示驱动器。
每片可驱动 8 位 7 段加小数点的共阴极数码管,可以数片级联,而与微处理器的连接只需 3 根线。
MAX7219 内部设有扫描电路,除了更新显示数据时从单片机接收数据外,平时独立工作,极大地节省了 MCU 有限的运行时间和程序资源。
MAX7219 芯片上包括 BCD 译码器、多位扫描电路、段驱动器、位驱动器和用于存放每个数据位的8×8 静态 RAM 以及数个工作寄存器。
通过指令设置这些工作寄存器,可以使 MAX7219 进入不同的工作状态。
MAX7219 的详细资料请参考其他书籍,这里不再赘述。
MAX7219 驱动显示电路
按键电路见图 2-6。
52 单片机的 P 口在悬空时默认是高电平,每个按钮通过一个上拉电阻接到+5V 电源,按下按钮,则 P 口变成低电平,这样就可以通过 P 口的状态来反映按钮的按下情况。
按键通过并联电容 C 进行防抖动,无需通过软件部分实现。
五)电机测速
信号调理电路主要利用 LM324 运算放大器设计的比较器,调节比较器偏置电压使脉冲最接近于方波且幅度大于 3.3V。
为了提高测速的精度,在信号后级
添加比较器调理信号为标准的方波,调节比较器运放的偏置电压使方波信号最适合于测速。
在脉冲作用下,当电机通电时,速度增加;电机断电时,速度逐渐减少。
只要按一定规律改变通、断电的时间,即可让电机转速得到控制。
PWM 波产生的思想是,固定 PWM 的周期为 PWMT,t 时间内输出高电平,则剩下 PWMT-t 时间就输出低电平。
通过控制定时器 T1,从而可以实现从 8051 的任意输出口输出不同占空比的脉冲波形。
由于 PWM 信号软件实现的核心是单片机内部的定时器,而不同单片机的定时器具有不同的特点,即使是同一台单片机由于选用的晶振不同,选择的定时器工作方式不同,其定时器的定时初值与定时时间的关系也不同。
因此,首先必须明确定时器的定时初值与定时时间的关系。
如果单片机的时钟频率为f,定时器/计数器为 N 位,则定时器初值与定时时间的关系为:
式中,Tw —定时器定时初值;N —一个机器周期的时钟数。
N 随着机型的不同而不同。
在应用中,应根据具体的机型给出相应的值。
这样,我们可以通过设定不同的定时初值 Tw,从而改变占空比 D,进而达到控制电机转速的目的。
此次实验采用 12MHz 晶振,计数频率为 1MHz,即每微秒计数器加一,设置PMW 脉冲周期固定为 PWMT10000,即 0.01s。
在实际的直流电机调速系统中,电机的测速由测速电机完成,本次实验系统,由电机自带的霍尔元件完成测速,电机每转一圈,霍尔元件就送出一个脉冲,我们设计的程序是将测速部分嵌套在 PWM 函数里,这样就节省了一个定时器资源。
PWM 脉冲周期为 0.01s,一个周期定时器 T1 中断 2 次,设置定时器每中断200 次,即每 1s 对电机进行一次测速,测速完毕后计数器 T0 归零,重新对霍尔脉冲计数。
参考文献
童诗白,华成英.模拟电子技术基础.北京:高等教育出版社,2006
欧阳昌华.电机及电力拖动系统实验指导书(综合部分).北京:高等教育出版社,2005
廖力清.微机测控保护装置与电站.北京:人民出版社, 2003
康华光.电子技术基础(数字部分).北京:高等教育出版社,2005。