基于ATmega8的直流电机PWM调速控制系统设计与实现

嵌入式设计应用

127人已加入

描述

本文将介绍一款以ATmega8为基础,采用数字PID算法的受限单极性可逆PWM系统实现的直流电机调速控制系统,克服了上述难点。

一、引言

直流电机因具有良好的线性调速特性、效率高、控制简单、调速性能好及体积小等优点得到了广泛使用。常规电机调速控制方法中,电机工作不稳定,损耗较大,尤其在低电压轻负荷时情况更为严重,且工作频率受电源频率的限制, 难以满足高精度的调速要求,不利于广泛推广[1]。

如何才能使电路具有成本低、控制精度高、调试修改参数方便,且能方便和灵活地适用于大功率、可靠性高的直流电机控制系统中,是我们研究的目的。
文献[2]和文献[3]中采用了先进算法,用LTM18200和L298作电机控制电路,具有控制精度高、稳定性好、响应速度快等优点,但其驱动能力较低、成本较高。

二、直流电机PWM调速原理

直流电机转速表达式为:

             

式中:U—电枢端电压;I—电枢电流;R—电枢电路总阻;—每极磁通量;K—电机结构参数。
对直流电机的转速控制方法可分为对励磁磁通进行控制的励磁控制法和对电枢电压进行控制的电枢控制方法。目前绝大多数直流电机采用开关驱动方式,它是使半导体功率器件工作在开关状态,通过脉宽调制PWM来控制电机电枢电压,实现调速。

PWM (Pulse Width Modulation)—脉冲宽度调制技术通过对一系列数字脉冲的宽度进行调制, 在脉冲作用下,当电机通电时速度加快, 断电时速度逐渐变慢,只要按一定规律改变通断电时间, 即可对电机的转速控制,实现直流电机调速数字化[4],如图1。

三、控制系统硬件设计

本调速控制系统,主要由ATmega8单片机、驱动电路、转速检测电路和通信接口电路等部分组成,如图2所示。
1.ATmega8单片机简介[5]
ATmega8是增强的AVR RISC结构的CMOS微控制器,具有高速度、低功耗、片内资源丰富、电源抗干扰能力强等优点。ATmega8具有32个通用工作寄存器及丰富的指令集,带有硬件乘法器以及8K的FLASH和1K的SRAM,还带有8路10位ADC以及三通道的PWM输出,支持ISP功能,可以很方便地对器件进行在线编程及修改。

2.ATmega8实现PWM控制
ATmega8的16位T/C可以实现精确的程序定时、波形产生和信号测量。ATmega8波形发生器利用双缓冲输出比较寄存器OCR1A/B与T/C 的值做比较,产生PWM信号,通过输出比较引脚OC1A/B输出无干扰脉冲、相位正确、可变频率的PWM信号。

PWM将占空比(电机电枢电压接通时间与通电周期的比值)不同的脉冲变成不同的电压来驱动直流电机转动,通过改变占空比,得到不同的转速,实现电机启动、停止、和反转等功能。
单片机通过比较预设速度与实测速度的偏差,经PID 算法得出控制量,根据控制量改变PWM 信号的输出脉宽,经驱动电路功率放大后实现对电机速度的控制,然后循环进入下一个控制周期。
3.驱动电路原理
直流电机常要求工作在正反转的场合中,就需要合用可逆PWM系统,可逆PWM系统可分为双极性驱动可逆PWM系统和单极性驱动可逆PWM系统。双极性可逆系统在低速时运行平稳,但电流波动大,功率损耗较大,尤其是必须增加死区来避免开关管直通的危险,限制了开关频率的提高;单极性驱动方式能够避免开关管直通,可以大大提高系统的可靠性,尽管轻载时会出现断流,但可以通过提高开关频率的方法或改进电路设计来克服。

该系统采用受限倍频单极性可逆PWM驱动控制,如图3所示。它可以通过改变对开关管的控制方式,而使直流电机电枢两端获得比PWM控制信号频率高1倍的电压波,可以弥补受限单极驱动所产生的电流断流的问题,具有驱动能力强、控制简单、可靠性高且成本低等优点。

PWM接ATmega8的OCR1A脚PWM信号输出,IN1、IN2接电机正反转控制信号;PWM、IN1和IN2具体逻辑功能见表1:

四、控制系统程序设计

控制程序采用C语言模块化结构。主要包括主程序、PID控制程序、中断服务程序和电机正反转控制程序等部分。
1.主程序流程图
主程序主要完成相关中断初始化、调用显示、判断中断类型和执行相应中断服务程序等功能,其结构如图4 所示:
2.数字PID控制器[1]
在控制系统中,将输出量与给定量之间的偏差的比例P、积分I、微分D通过线性组合构成控制量的PID 控制器获得了广泛的应用,它参数整定方便,结构更改灵活。
PID表达式:

  

其中:u(t)——控制量;KP——比例放大系数;TI——积分时间;TD——微分时间。
本系统采用转子位置传感器,利用传感器输出的脉冲信号来反映电机的转速。将传感器输出的信号经过采样调理电路后送至单片机,该引脚作为外部中断源的输入口,随着电机的转动,单片机将不断接收到脉冲信号,当接收到一个上升沿时将启动定时器T0以开始计时,直至接收到下一个相邻的上升沿为止,定时器T0的计时结果便是电机转动一圈所需的时间,据此即可计算出电机的转速。利用PID算法,将实时采集的电机转速值与设定值进行比较,得出偏差,利用软件编程实现转速调节。
本系统采用位置式数字PID算法,其控制算法简化示意图如图5:
采用全量算法,通过差分代微分,可将表达式化简为:



其中: ; ;
u(k)——第K个采样时刻的控制量;KP——比例放大系数;kI——积分放大系数;kD——微分放大系统;TS——采样周期;u0——控制量的基值,即k=0时的控制。
PID算法流程图如图6所示:
3、控制程序
以下是ATmega8单片机实现电机控制的部分程序:
PWM控制器的初始化:
void timer1_init(void)
{ OCR1A  = 0; //初始化为0,电机停止
  OCR1B  = 0; //初始化为0,电机停止
TCCR1A = (1<TCCR1B = (1<  TCNT1 = 1;
  CLR_IN1;
  SET_IN2;
  CLR_IN3;
  SET_IN4;
}
定时器0中断服务函数,用于控制PWM1A的时间:
SIGNAL(SIG_OVERFLOW0)
{ if(Timer0_Tick < PWM1A_counter)
  { Timer0_Tick++;}
  else{printf("ACK:");
  SET_IN3;
SET_IN4;
  OCR1A = 0;
  TIMSK &= ~_BV(TOIE0);
  }
}
电机正转,speed为速度(0-255可调),choose为电机通道选择(R为右、L为左):
void for_ward(uchar speed,char choose)
{ if(ch =='R')
  { OCR1B = speed; // PWM1B_EN;
  SET_IN1;
  CLR_IN2;     }
  Else
  { OCR1A = speed;  // PWM1A_EN;
  SET_IN3;
  CLR_IN4;     }
}

五、结语

利用ATmega8单片机产生的PWM 信号,加入数字PID算法实现对电机速度的控制,提高了系统的控制精度,保证了电机转速的稳定性;电机的启动、停止、左右转和速度都由程序定义,调试时只需修改PWM信号占空比即可实现速度控制,改变输出口电平即可实现电机正反转,无须改变系统硬件电路,即可实现各种控制,能有效缩短开发周期,提高效率;结合了受限倍频单极性可逆PWM电机驱动电路,增强了系统的驱动能力,提高了系统的可靠性和性价比。电路设计简单,电机控制方便,有利于广泛推广。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
评论(0)
发评论
2011-09-04
0 回复 举报
good 收起回复

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分