基于单片机的PWM调速系统设计毕业设计论文 下载本文

湖南科技大学本科生毕业设计(论文)

3.1.4 伺服电机介绍

伺服电动机又称执行电动机,在自动控制系统中,用作执行元件,把所收到的电信号转换成电动机轴上的角位移或角速度输出。分为直流和交流伺服电动机两大类,其主要特点是,当信号电压为零时无自转现象,转速随着转矩的增加而匀速下降[14]。

定义:在伺服系统中控制机械元件运转的发动机.是一种补助马达间接变速装置。 作用:可使控制速度,位置精度非常准确。将电压信号转化为转矩和转速以驱动控制对象。

分类:直流伺服电机和交流伺服电机。直流伺服电机分为有刷电机和无刷电机两种。有刷电机成本低,结构简单,启动转矩大,调速范围宽,控制容易,需要维护,但维护方便(换碳刷),产生电磁干扰,对环境有要求。因此它可以用于对成本敏感的普通工业和民用场合。 无刷电机体积小,重量轻,出力大,响应快,速度高,惯量小,转动平滑,力矩稳定。控制复杂,容易实现智能化,其电子换相方式灵活,可以方波换相或正弦波换相。电机免维护,效率很高,运行温度低,电磁辐射很小,长寿命,可用于各种环境。

- 12 -

湖南科技大学本科生毕业设计(论文)

3.2 系统软件设计

3.2.1 程序流程图

图3.4 PWM调速系统程序流程图

3.2.2 C语言程序设计

/* =======直流电机的PWM速度控制程序======== */ /* 晶振采用11.0592M,产生的PWM的频率约为91Hz */ #include #include #define uchar unsigned char

- 13 -

湖南科技大学本科生毕业设计(论文)

#define uint unsigned int [15]

sbit en1=P1^0; /* L298的Enable A */ sbit s1=P1^2; /* L298的Input 1 */ sbit s2=P1^1; /* L298的Input 2 */ uchar t=0; /* 中断计数器 */ uchar m=0; /* 电机速度值 */ uchar tmp; /* 电机当前速度值 */ /* speed-电机速度(-100—100) */ void motor(char speed) {

if(speed>=-100 && speed<=100) {

m=abs(speed); /* 取速度的绝对值 */ if(speed<0) /* 速度值为负则反转 */ { s1=0; s2=1; }

else /* 不为负数则正转 */ { s1=1; s2=0; } } }

void delay(uint j) /* 简易延时函数 */ {

for(j;j>0;j--); }

void main() { uchar i;

TMOD=0x02; /* 设定T0的工作模式为2 */ TH0=0x9B; /* 装入定时器的初值 */ TL0=0x9B;

- 14 -

湖南科技大学本科生毕业设计(论文)

EA=1; /* 开中断 */

ET0=1; /* 定时器0允许中断 */ TR0=1; /* 启动定时器0 */ while(1) /* 电机实际控制演示 */ {

for(i=0;i<=100;i=i++) /* 正转加速 */ { motor(i); delay(5000); }

for(i=100;i>0;i--) /* 正转减速 */ { motor(i); delay(5000); }

for(i=0;i<=100;i++) /* 反转加速 */ { motor(-i); delay(5000); }

for(i=100;i>0;i--) /* 反转减速 */ { motor(-i); delay(5000); } } }

void timer0() interrupt 1 /* T0中断服务程序 */ {

if(t==0) /* 1个PWM周期完成后才会接受新数值 */ { tmp=m; }

if(t

- 15 -

湖南科技大学本科生毕业设计(论文)

if(t>=100) t=0; /* 1个PWM信号由100次中断产生 */ }

3.3 PWM调速系统仿真

本文采用C语言编程,利用Keil编译成功后生成Hex文件,导入到Proteus的工程中。仿真时,在AT89C51上加载Hex文件,即可实现仿真。

3.3.1 系统仿真电路图

图3.5 PWM调速系统仿真图

3.3.2 电压输出波形

下面所示图3.6至图3.13是系统仿真时从L298的OUT1引脚得出的波形图。

图3.6 电压输出波形(1)

图3.7 电压输出波形(2)

- 16 -