直流电机PWM 调速实验报告

           

          直流电机PWM调速实验报告

                   

            学    院:                        

            专    业:机械设计制造及其自动化

            姓    名:                      

            班    级:                       

            学    号:                       

            指导老师:                       

           

直流电机PWM调速实验

一、    实验目的:

1、掌握脉宽调制的方法;

2、用程序实现脉宽调制,并对直流电机进行调速控制

二、    实验设备:

PC机一台,单片机最小系统,驱动板,直流电机,连接导线等

三、    实验原理:

1、          PWM(Pulse Width Modulation)简称脉宽调制。即,通过改变输出脉冲的占空比,实现对直流电机进行调速控制。

     2、  实验线路图:

四、    实验内容:

1、利用实验时提供的单片机应用系统及直流电机驱动电路板,编制控制程序,实现直流电机PWM调速控制。

2、连接实验电路,观察PWM调控速度控制,实现的加速、减速等调速控制。

五、    实验步骤:

1、            按系统电路图连线,调试完成;

2、            开启单片机,按下键盘启动按钮,电机正常旋转;

3、            按动键盘加速、减速、正转、反转、停止按键,分别实现预定功能。

4、            实验完成,收拾实验器械,整理。

六、  实验程序:

#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工作于方式1

TH0=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;

   }

    else    PWM2 = 0;

    if(count1 >= 100)

    {  count1=0;   }

}

   else //电机反转

   {   PWM2 = 0;

    if(++count1 < count0)

    {   PWM1 = 1;

    }

     else         PWM1 = 0;

     if(count1 >= 100)

     {   count1=0;

     }

七、   实验心得:

此次实验,不仅锻炼了我们的独立思考和动手能力。还让我们了解到单片机来实现电机调整有多种途径。相对于其他用硬件或者硬软结合的方法实现对电机进行调整。掌握脉宽调制的方法;学会用程序来实现脉宽调制,并对直流电机进行启动、加速、减速、停止等调速控制。

 

第二篇:直流电机PWM调速试验

马鞍山职业技术学院

课程设计说明书

课程名称:《嵌入式接口技术》与《嵌入式硬件设计》

题目:直流电机PWM调速试验

专业名称:计算机应用与技术

班级:09计应

学号:

姓名:

小组成员:李东东、程茜茜、肖亚明

指导老师:刘俞

成绩:

评定成绩:

                               教师评语:

指导老师签名:

                                               

目录

一、       项目功能要求说明

二、       硬件设计

2.1  整体方案设计

2.1.1    器材选择

2.1.2    产品功能模块划分(设计图)

2.1.3    可行性分析

2.2  硬件电路设计  

2.2.1    所用器材功能说明

2.2.2    系统的工作说明

三、       软件设计方案

3.1  软件功能模块的划分与分析

3.2  程序模块的详细设计

3.3  分析结果

四、产品说明书

   4.1 功能

   4.2 使用说明

一、           项目功能要求说明

  1.1 用单片机控制直流电机的转速,用两个中断按钮分别作为加速键和减速键,LED作为转速档位显示器。初始时,电机带动的风扇处于静止状态,LED显示“0”,当按下一次加速按钮后,风扇开始以1档的速度转动,同时LED显示“1”,再次按下加速按钮后,风扇速度加快,以2档速度转动,同时LED显示“2”,再次按下加速按钮后,风扇速度加快,以3档速度转动,同时LED显示“3”,当再次加速按钮后,风扇速度不再变化,LED依然显示“3”(即:3档位最高速度);同理,当按下减速按钮时,风扇速度降低一档,同时LED显示的档位数字减少(最低档位为0)。

  1.2 当直流电机转速达到最高档(3)及最低档(0)后,再按加速或者减速按钮,会触动报警器报警,再按减速或加速使风扇回到正常转速范围时,报警解除。

二、硬件设计

2.1.1 器材选择

AT89C51

TD-51开发板

SP451012H直流电机

LED数字显示器

扬声器

2.1.2 产品功能模块划分

                            

2.1.3 可行性分析

 通过电机转速控制风扇的速度,从事件处理模块获得当前风扇的速度。可以通过按键随时修改电机转速和风扇档位。根据档位的增加和减小情况确定LED的显示情况,根据转速变化是否超出额定范围确定扬声器的报警情况。

2.2 硬件电路设计

2.2.1所用器材功能说明

1AT89C51(微控制器)

AT89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于多功能8CPU和闪烁存储器组合在单个芯片中,ATMELAT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

2 ADC0809 (模数转换芯片)通过采样,量化和编码将模拟信号转换成数字信号

3 SP451012H(直流电机)启动电机,使风扇转动,根据PWM来调节转速。

4 LED(数字显示器) 8段发光二极管组成,用来显示数字和字符或小数点,又称数码管。本实验中指用到一位LED,显示当前的档位值,指示系统当前状态,建立一个良好的用户与系统的接口,提高用户与系统的交互能力。

5 ULN2803AG (点评转换芯片)将5V电压转化成12V电压,用于驱动电动机单次脉冲单元。

2.2.2系统的工作说明

初始时,LED显示0,直流电动机为低电平停止转动,加速按键后触发定时器中断0,并以初始值计时,产生一定频率的PWM脉冲,经过驱动器驱动直流电机转动,再按加速定时器0初值变大,高频宽度变大,LED的字符取值加1,按下减速后定时器0初值变小,高频宽度减小,电机转速变慢,LED的字符取值减1,连续加速或减速超过限定范围触发定时器中断1,产生一定频率的脉冲驱动扬声器工作,改变回限定范围后停止定时器1工作,扬声器停止报警。

三、软件设计方案

3.1软件功能模块的划分与分析

功能共分为:LED显示模块、键盘输入模块、扬声器发声模块

1)、LED显示模块:显示风扇档位

2)、键盘输入模块:控制电机转速

3)、扬声器发声模块:保持电机在合理转速

3.2程序模块的详细设计(代码)

#include<reg51.h>

#define T_value (unsigned char)0x80       //PWM周期

#define T1_value (unsigned char)0x60   //高电平周期

#define TH0_value (unsigned char)0xFE

#define TL0_value (unsigned char)0x00

unsigned char code LEVEL[]= {0xc0,0xF9,0xA4,0xB0};//0-3

sbit DRV=P1^6;

unsigned char T_Count,t1;

sbit DRV2=P1^7;

unsigned int t02s=0;

unsigned int i=0;

bit fla=1,ff=0,gg=0,start=0; //高低电平、超界及启动状态

void init_tim0()

TMOD=0x11;

    TH0=TH0_value;    //1us

    TL0=TL0_value;

    TH1=(65536-500)/256;   //0.5ms

    TL1=(65536-500)%256;

    TR0=1;

    ET0=1;

    ET1=1;

EA=1;

}

void init_int()

{

IT0=1;

       EX0=1;

       IT1=1;

       EX1=1;

       EA=1;

}

void sound() interrupt 3

{

TH1=(65536-500)/256; //0.5ms

TL1=(65536-500)%256;

t02s++;

if(t02s==400)

{

       t02s=0;

    fla=~fla;  //0.2s

}

if(fla==0)

    {

       DRV2=~DRV2;         //0.2s后低电平

}

}

void int0_isr() interrupt 0

{

start = 1;

if(t1<T_value-30){ //T_value(0x80): 0x60 ~ 0x7E

       t1=t1+10;

       i++;

}

if(t1>=T_value)

{

       TR1=1;                 //开始喇叭计时

       ff=1;                     //上超界

}

if(t1>=T_value-30&&gg==1)       //0x14

{     TR1=0;                 //解除下超界

       DRV2=1;

       gg=0;

}

}

void int_tim0() interrupt 1

{

TH0=TH0_value;    //1us

TL0=TL0_value;

T_Count--;        //1*T_Count

}

void int2_isr() interrupt 2

{

if(t1>T_value-30){           // 0x7E~0x60

    t1=t1-10;  

       i--;

}

else

       start=0;

       TR1=1;             //开始喇叭计时

           gg=1;                //下超界

}

if(t1<T_value&&ff==1)

{  

       TR1=0;

           DRV2=1;

      ff=0;              //解除上超界

}

}

void main()

{

unsigned char Tx;

bit flag=0;

t1=T1_value;  

DRV=1;

init_tim0();

init_int();

T_Count=t1;  //初始高电平

while(1)

    {

       P0 = 0x01;

       P1 = LEVEL[i];

           if(start==1&&T_Count==0)

           {

        DRV=~DRV;

              if(flag==0) //低电平

                      Tx=T_value-t1;

              else Tx=t1; //高电平

        T_Count=Tx;

              flag=~flag;

           }

   }

}

3.3分析结果

通过测试,本程序完成了功能要求中的各项要求。在本次设计中,针对使用电机的特性,对于电机的控制没有精确的给出脉冲信号,而是给低电平启动,给高电平停止转动。由于时间处理用软件实现且软件的选择结构和中断的执行导致系统时间难以精确的提供,本设计中只为系统提供粗略时间。本设计中应用多种方式控制字符的传递,均可完成将字符传送到LED寄存器中。

四、产品说明书

4.1功能

1)、根据转速判断当前的档位,在试验箱上的LED上显示。

2)、通过按键方便完成电机转速的快慢调节

3)、超过额定转速后自动报警,保证电机运转安全

4.2使用说明

加速:KK1

减速:KK2

相关推荐