130 likes | 197 Views
直流电机调速控制系统设计. 5 、直流电机调速控制系统设计. PWM 是脉冲宽度调制的简称。实际上, PWM 波也是一个连续的方波,但在一个周期中,其高电平和低电平的占空比是不同的。一个典型 PWM 的波形如图所示。. 图中, T 是 PWM 波的周期, T1 是高电平的宽度, Vcc 是高电平值。当该 PWM 波通过一个积分器后(低通滤波器)后,我们可以得到其输出的平均电压为:
E N D
5、直流电机调速控制系统设计 PWM是脉冲宽度调制的简称。实际上,PWM波也是一个连续的方波,但在一个周期中,其高电平和低电平的占空比是不同的。一个典型PWM的波形如图所示。
图中,T是PWM波的周期,T1是高电平的宽度,Vcc是高电平值。当该PWM波通过一个积分器后(低通滤波器)后,我们可以得到其输出的平均电压为:图中,T是PWM波的周期,T1是高电平的宽度,Vcc是高电平值。当该PWM波通过一个积分器后(低通滤波器)后,我们可以得到其输出的平均电压为: 式中,T1/T称为PWM波的占空比。调节和改变T1的宽度,即改变PWM的占空比,就可以得到不同的平均电压输出。因此在实际应用中,常利用PWM波的输出,实现D/A转换,调节电压或电流改变马达的转速,实现变频控制等功能。
5.1 T/C0相关寄存器 T/C控制寄存器-TCCR0 Bit6,3–WGM01:0:波形产生模式 这几位控制计数器的计数序列,计数器的最大值TOP,以及产生何种波形。T/C0支持的模式有:普通模式,比较匹配发生时清除计数器模式(CTC),以及两种PWM模式(快速PWM和相位修正PWM)。 在本项目中我们使用快速PWM模式,即WGM0[1:0]=3。
快速PWM模式可用来产生高频的PWM波形。快速PWM模式与其他PWM模式的不同之处是其单斜坡工作方式。快速PWM模式可用来产生高频的PWM波形。快速PWM模式与其他PWM模式的不同之处是其单斜坡工作方式。 计数器从BOTTOM计到MAX,然后立即回到BOTTOM重新开始。 对于普通的比较输出模式,输出比较引脚OC0在TCNT0与OCR0匹配时清零,在BOTTOM时置位。 对于反向比较输出模式,输出比较引脚OC0在TCNT0与OCR0匹配时置位,在BOTTOM时清零。 由于使用了单斜坡模式,快速PWM模式的工作频率比使用双斜坡的相位修正PWM模式高一倍。此高频操作特性使得快速PWM模式十分适合于功率调节,整流和DAC应用。
工作于快速PWM模式时,比较单元可以在OC0引脚上输出PWM波形。设置COM01:0为2可以产生普通的PWM信号;为3则可以产生反向PWM波形。工作于快速PWM模式时,比较单元可以在OC0引脚上输出PWM波形。设置COM01:0为2可以产生普通的PWM信号;为3则可以产生反向PWM波形。 要想在引脚上得到输出信号还必须将OC0的数据方向设置为输出。。 输出的PWM频率可以通过如下公式计算得到: 变量N代表分频因子(1、8、64、256或1024)。
输出比较寄存器-OCR0 输出比较寄存器包含一个8位的数据,不间断地与计数器数值TCNT0进行比较。匹配事件可以用来产生输出比较中断,或者用来在OC0引脚上产生波形。
从图中可以看出: 除了直流电机外,还在T/C0的OCR0的输出管脚上连接了示波器,用来观察PWM波形的占空比。 使用了两个按键用来调节占空比。
5.3 软件设计 /****************************************************************************** *作 者:电子工程学院 *功 能:T0快速PWM初始化函数 *入口参数:占空比 *返 回 值:无 ******************************************************************************/ void T0_FastPWM_Init(uint8 pwm_duty) { uint8 duty_temp; duty_temp=(uint8)((float)(pwm_duty)*256/100); TCCR0=0x00; TCNT0=0x00; //设置占空比 OCR0=duty_temp; //WGM01:0=3:设置T/C的工作模式为快速PWM模式,TOP值为0xFF //COM01:0=2:比较匹配发生时OC0A清零,计数到TOP时OC0置位 //CS02:0=1:时钟不分频,PWM频率为1000000/1/256=3906.25Hz TCCR0=0x69; }
/**************************************************************/************************************************************** *作 者:电子工程学院 *功 能:INT0中断服务函数 *入口参数:无 *返 回 值:无 *注意事项:1、中断向量号:2 **************************************************************/ #pragma interrupt_handler INT0_isr:2 void INT0_isr(void) { TC0_PWM_Duty+=5; if(TC0_PWM_Duty>95) TC0_PWM_Duty=95; T0_FastPWM_Init(TC0_PWM_Duty); }
/**************************************************************/************************************************************** *作 者:电子工程学院 *功 能:INT1中断服务函数 *入口参数:无 *返 回 值:无 *注意事项:1、中断向量号:3 **************************************************************/ #pragma interrupt_handler INT1_isr:3 void INT1_isr(void) { TC0_PWM_Duty-=5; if(TC0_PWM_Duty==0) TC0_PWM_Duty=5; T0_FastPWM_Init(TC0_PWM_Duty); }