




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 PWM控制直流电机 电动机调速系统采用微机实现数字化控制,是电气传动发展的主要方向之一。采用微机控制后,整个调速系统实现全数字化,结构简单,可靠性高,操作维护方便,电动机稳态运转时转速精度可达到较高水平,静动态各项指标均能较好地满足工业生产中高性能电气传动的要求。PWM 调速系统与可控整流式调速系统相比有下列优点1 :由于PWM 调速系统的开关频率较高,仅靠电枢电感的滤波作用就可获得平稳的直流电流,低速特性好;同样,由于开关频率高,快速响应特性好,动态抗干扰能力强,可以获得很宽的频带;开关器件只工作在开关状态,主电路损耗小,装置效率高。PWM 调速系统很早已出现,但是因为缺乏高速开关元件而未
2、能在生产实际中推广应用。在近年来,由于大功率开关器件的制造成功和成本的不断下降, PWM调速系统又受到重视。1、键盘设置电机转速原理 通过键盘按键在数码管上显示出来电机的给定转速,键盘给定的数字量越大, PWM占空比越大,就驱动晶体管导通的时间越长,这样输出的计数脉冲在单位时间内也就越多,这样就相当于电机的电压越大,其转速也就会越快,我们再用单片机对输出脉冲计数,PID调节器就把这个计数脉冲和预先设定的 值进行比较,比设定值小,这样就会得到一个偏差,再把这个偏差给定电压,这样就相当于加大了PWM的占空比,要是比设定值大,这样也会得到一个偏差,就把这个变差与给定的电压向减,这样就可以减少PWM的
3、占空比,通过改变占空比来改变晶体管的导通时间,就可以改变压频转换器的输入电压,也就改变压频转换器的单位计数脉冲,达到调电动机速度的目的。2、AD转换设置电机转速(1)、原理 基本的设计核心是运用PID调节器,运用A/D转换芯片将滑动变阻器的模拟电压转换为数字量作为控制直流电机速度的给定值;我们现运用AD芯片,运用单片机来控制AD芯片来转换模拟电压到数字电压,AD给定的电压越大,则产生的数字量越大,单片机再控制这个数字量来产生一个PWM,PWM占空比越大,就驱动晶体管导通的时间越长,这样加到压频转换器的电压也就越大,电压越大,则压频转换器输出的计数脉冲再单位时间也就越多,这样就相当于电机的电压越
4、大,其转速也就会越快,我们再用单片机对压频转换器的输出脉冲计数,PID调节器就把这个计数脉冲和预先设定的 值进行比较,比设定值小,这样就会得到一个偏差,再把这个偏差加到AD的给定电压,这样就相当于加大了PWM的占空比,要是比设定值大,这样也会得到一个偏差,就把这个变差与给定的电压向减,这样就可以减少PWM的占空比,通过改变占空比来改变晶体管的导通时间,就可以改变压频转换器的输入电压,也就改变压频转换器的单位计数脉冲,达到调电动机速度的目的。(2)、模块图3、单片机双机通讯4、调速原理PWM(即脉冲宽度调制)是通过控制固定电压的直流电源开关频率,改变负载两端的电压,从而达到控制要求的一种电压调整
5、方法。PWM 可以应用在许多方面,比如:电机调速、温度控制、压力控制等等。采用由达林顿管组成的H型PWM电路。用单片机控制达林顿管使之工作在占空比可调的开关状态,精确调整电动机转速。这种电路由于工作在管子的饱和截止模式下,效率非常高;H型电路保证了可以简单地实现转速和方向的控制;电子开关的速度很快,稳定性也极佳,是一种广泛采用的PWM调速技术。我们采用了定频调宽方式,因为采用这种方式,电动机在运转时比较稳定;并且在采用单片机产生PWM脉冲的软件实现上比较方便。且对于直流电机,采用软件延时所产生的定时误差在允许范围。5 电源模块设计5.1、原理通过变压器将220V的交流电压变为约为12V的交流电
6、压,通过整流桥将交流电压变为直流电压,由于电压有波动,需经电容滤波滤除杂波,而后在经过稳压管(三端稳压集成电路有正电压输出的78××系列和负电压输出的79××系列。故名思义,三端IC是指这种稳压用的集成电路只有三条引脚输出,分别是输入端、接地端和输出端。)7805和7809将电压变为基本稳定的5V和9V的直流电压5.2、电路图6 键盘模块设计6.1原理键是一种常开型按钮开关,平时键的二个触点处于断开状态,按下键时它们才闭合。键盘上闭合键的识别由专用的硬件译码器实现并产生键编号或键值的称为编码键盘,在按键数量较多的场合,矩阵键盘与独立按键键盘相比,要节省很
7、多的I/O口。矩阵键盘的按键设置在行、列线的交点上,行、列线分别连接到按键开关的两端。列线通过上拉电阻接到+5V。平时无按键动作时,列线处于高电平状态,而当由按键按下时,列线电平状态将由与此列线相连的行线电平决定。行线电平如果为低,则列线电平为低;行线电平如果为高,则列线电平亦为高。当键盘中没有键按下时,所有行线的输出都应为低电平,以区别于列线状态,当矩阵键盘中任何一只键按下时,与门输出由高电平变为低电平,向CPU申请中断,由于矩阵键盘中行、列线为多键共用,各按键均影响该键所在行和列的电平。因此各按键彼此将相互发生影响,所以必须将行、列线信号配合起来并作适当的处理,才能确定闭合键的位置。6.2
8、电路图7显示模块设计7.1原理数码管显示电路的链接比较简单,当键盘输入的键值(即转速值)输入完成后,数码管开始进行显示,从低到高依次显示速度值的百位,十位和个位。依靠不断扫描形成全部都显示的目的7.2电路图8电机驱动电路-H桥模块设计8.1、原理H桥式电机驱动电路包括4个三极管和一个电机,电路得名于“H桥驱动电路”是因为它的形状酷似字母H。要使电机运转,必须导通对角线上的一对三极管。根据不同三极管对的导通情况,电流可能会从左至右或从右至左流过电机,从而控制电机的转向。8.2、电路图9 霍尔测速模块设计9.1霍尔传感器的工作原理霍尔开关集成电路中的信号放大器将霍尔元件产生的幅值随磁场强度变化的霍
9、尔电压UH放大后再经信号变换器、驱动器进行整形、放大后输出幅值相等、频率变化的方波信号。信号输出端每输出一个周期的方波,代表转过了一个齿。单位时间内输出的脉冲数N,因此可求出单位时间内的速度VNT,从而实现达到测电机转速的功能。9.2电路图10 ADC转换模块设计10.1、原理在这里ADC转换我们通过IIC总线原理来实现的。IIC总线是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。各种被控制电路均并联在这条总线上,所以每个电路和模块都有唯一的地址,在信息的传输过程中,IIC总线上并接的每一模块电路既是主控器,又是发送器,这取决于它所要完成的功能。CPU发出的控制信号分为地址码和控
10、制量两部分,地址码用来选址,即接通需要控制的电路,确定控制的种类;控制量决定该调整的类别及需要调整的量。IIC总线在传送数据过程中共有三种类型信号,它们分别是:开始信号、结束信号和应答信号。 开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。 结束信号:SCL为低电平时,SDA由低电平向高电平跳变,结束传送数据。 应答信号:接收数据的IC在接收到8bit数据后,向发送数据的IC发出特定的低电平脉冲,表示已收到数据。10.2、电路图11 单片机双机通讯模块设计串口通讯对单片机而言意义重大,不但可以实现将单片机的数据传输到计算机端,而且也
11、能实现计算机对单片机的控制。由于其所需电缆线少,接线简单,所以在较远距离传输中,得到了广泛的运用。11.1、原理 波特率选择:波特率就是在串口通信中每秒能够发送的位数。MCS-51串行端口在四种工作模式下有不同的波特率计算方法。 通信协议的使用:通信协议是通信设备在通信前的约定。单片机、计算机有了协议这种约定,通信双方才能明白对方的意图,以进行下一步动作。假定我们需要在PC机与单片机之间进行通信,在双方程式设计过程中,有如下约定: 0xA1:单片机读取P0端口数据,并将读取数据返回PC机; 0xA2:单片机从PC机接收一段
12、控制数据; 0xA3:单片机操作成功信息。11.2、电路图软件系统程序(1)单片机软件系统程序/*包含头文件*/#include<reg52.h>#include <intrins.h>/*数码管表格*/unsigned char ledmap=0xC0, 0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x8c,0xf0,0xbf;/0x88,0x83,0xc6,0xa1,0x86,0x8eunsigned char ledbuf8;unsigned char flag;unsigned c
13、har num=0;unsigned char keybuf2;unsigned char m,n,k,l,s;unsigned char keydata;/键盘输入值unsigned int count=0; /定时器的累加器unsigned int CYCLE; /定义定时器的周期unsigned int plus=0; /接收到外部脉冲的数unsigned char databuf; /转速处理值unsigned int CYC; /定义周期 该数字X基准定时时间 如果是1000 则周期是1000 x 0.1msunsigned int PWM_ON ;/定义高电平时间unsigned
14、int cont; unsigned char tmp; /串口接收值unsigned char Flag1=0;unsigned char tt=0;unsigned char j;sbit led1=P35;sbit pwm= P36;/定义pwm输出口sbit Bee=P37; /定义蜂鸣器端口/*- 定时器初始化子程序-*/void Init_Timer(void)TMOD |= 0x21; /使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响 TH0=0xDC; TL0=0x00; /定时10mSTH1 = 0xA3; /晶振12M 定时0.1
15、ms TL1 = 0xA3; ET0=1; /定时器中断打开 ET1=1; /* 延时子程序*/void delay(unsigned char t) unsigned char i; while(t-!=0) for(i=255;i!=0;i-);/*- 定时器初始化子程序-*/void Init_int0(void) IT0=1; /电平触发 EX0=1; /外部中断0开/*- 外部中断0中断子程序-*/void int0(void) interrupt 0 plus+; led1=led1;/*- 定时器中断子程序-*/void time0(void) interrupt 1 count
16、+; if(count=CYCLE) count=0; databuf=plus;plus=0;if(tt!=2) tt+; TH0=0xDC; TL0=0x00; /定时10mS /*- 转速数据处理显示子程序-*/void datamake(unsigned int th) unsigned char a1,a2;a1=th/10;a2=th%10;ledbuf0=ledmap10;ledbuf1=ledmap12;ledbuf2=ledmapa1;ledbuf3=ledmapa2;/* 定时器中断函数 */void time1(void) interrupt 3 /定时器1中断 cont
17、+;if (cont=PWM_ON) pwm = 1; /灯灭 if(cont = CYC) cont=0; pwm = 0; /灯亮 /* 按键检测子程序*/unsigned char testkey() P1=0x0f;return(P1&0x0f);/* 比较处理函数 */void compare(unsigned int th1,unsigned int th2) if(th1!=th2) if(th1<th2) Flag1=1; else Flag1=2; if(Flag1=1) PWM_ON= PWM_ON+10; if(PWM_ON > 800) Bee=0;
18、 delay(100); Bee=1; if(Flag1=2) /亮度递减 同上,是个相反的过程 PWM_ON= PWM_ON-5; if(PWM_ON < 45) Bee=0; delay(100); Bee=1; /*函数功能:LED显示子程序*/void display() unsigned char i; unsigned char pos; unsigned char led; pos=0xfe; for(i=0;i<8;i+) P2=0xff; led=ledbufi; P0=led; P2=pos; delay(1); pos= _crol_(pos,1);/*函数功
19、能:键盘扫描子程序*/void keyscan(void) unsigned char n;/扫描第一行P1=0xfe;n=P1;n&=0xf0;if(n!=0xf0) P1=0xfe; n=P1; n&=0xf0; if(n!=0xf0) switch(n) case(0xe0):flag=7;break; case(0xd0):flag=4;break; case(0xb0):flag=1;break; case(0x70):flag=0x0a;break; /扫描第二行P1=0xfd;n=P1;n&=0xf0;if(n!=0xf0) P1=0xfd; n=P1;
20、n&=0xf0; if(n!=0xf0)switch(n)case(0xe0):flag=8;break; case(0xd0):flag=5;break; case(0xb0):flag=2;break; case(0x70):flag=0;break; /扫描第三行P1=0xfb;n=P1;n&=0xf0;if(n!=0xf0) P1=0xfb; n=P1; n&=0xf0; if(n!=0xf0)switch(n)case(0xe0):flag=9;break; case(0xd0):flag=6;break; case(0xb0):flag=3;break; c
21、ase(0x70):flag=0x0b;break; /扫描第四行P1=0xf7;n=P1;n&=0xf0;if(n!=0xf0)P1=0xf7;n=P1;n&=0xf0; if(n!=0xf0)switch(n)case(0xe0):flag=0x0f;break; case(0xd0):flag=0x0e;break; case(0xb0):flag=0x0d;break; case(0x70):flag=0x0c;break; /* A/D转换子程序*/void uart_int() SCON = 0x50; /设定串行口工作方式PCON &= 0xef;/波特率
22、不倍增TH2=0xFF;TL2=0xDC;RCAP2H = 0xFF;/ 波特率9600RCAP2L = 0xDC;T2CON = 0x34;/ 定时器1工作于8位自动重载模式, 用于产生波特率TR2 = 1;/ 启动定时器1 /*函数功能:主程序*/void main(void) unsigned char i; bit conv; num=0;pwm=1; CYCLE=100; CYC=1000; /时间周期可以调整 Init_int0(); Init_Timer(); uart_int(); IP=0x01; /设置T0中断为高优先级 EA=1; /总中断打开 PWM_ON =100;w
23、hile(1) display();if(testkey() keyscan();dodelay(1); while(testkey(); num+;if(flag=0x0a) num=0; for(i=0;i<2;i+) keybufi=0;if(flag=0x0B) num=0; TR1=1; TR0=1; /定时器0开关打开 PWM_ON =100;flag=0;if(flag=0x0C) num=0; TR1=0; pwm=1; PWM_ON =100; flag=0; if(flag=0x0E) num=0; conv=0; if(flag=0x0D) num=0; conv=
24、1;if(conv=1) if(RI)/ 是否有数据到来 RI = 0; tmp = SBUF;/ 暂存接收到的数据keydata=tmp; m=keydata/10; n=keydata%10; if(conv=0) if(num=1) keybuf0=flag; if(num=2) keybuf1=flag;m=keybuf0;n=keybuf1;keydata=m*10+n; ledbuf4=ledmap11; ledbuf5=ledmap12; ledbuf6=ledmapm; ledbuf7=ledmapn; display(); datamake(databuf); if(tt=1
25、) compare(databuf,keydata); tt=0; display(); (2)、单片机软件系统程序#include<reg52.h>/包含头文件,#include <intrins.h> /包含NOP空指令函数_nop_();#define AddWr 0x90 ; /写数据地址 #define AddRd 0x91 ; /读数据地址sbit Sda=P12; /定义总线连接端口sbit Scl=P11;bit ADFlag; /定义AD采样标志位unsigned char ADtemp;unsigned char code Datatab=0x3f,
26、0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/7段数共阴码管段码表unsigned char code table=0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7;data unsigned char Display8;/定义临时存放数码管数值/*- 初始化定时器1-*/void Init_Timer0(void) TMOD |= 0x01; TH0=0xff; /*Initvalue */ TL0=0x00; ET0=1; /* enable timer1 interrupt */ TR0=1; /*- 启动IIC
27、总线-*/void Start(void) Sda=1; _nop_(); Scl=1; _nop_(); Sda=0; _nop_(); Scl=0;/*- 停止IIC总线-*/void Stop(void) Sda=0; _nop_(); Scl=1; _nop_(); Sda=1; _nop_(); Scl=0; /*- 应答IIC总线-*/void Ack(void) Sda=0;_nop_();Scl=1;_nop_();Scl=0;_nop_();/*- 非应答IIC总线-*/void NoAck(void) Sda=1; _nop_(); Scl=1; _nop_(); Scl=
28、0; _nop_(); /*- 发送一个字节-*/void Send(unsigned char Data) unsigned char BitCounter=8; unsigned char temp;do temp=Data; Scl=0;_nop_(); if(temp&0x80)=0x80)Sda=1; else Sda=0;Scl=1;temp=Data<<1;Data=temp;BitCounter-; while(BitCounter); Scl=0;/*- 读入一个字节并返回-*/ unsigned char Read(void) unsigned char
29、 temp=0;unsigned char temp1=0;unsigned char BitCounter=8;Sda=1;do Scl=0; _nop_();Scl=1;_nop_();if(Sda) temp=temp|0x01;else temp=temp&0xfe;if(BitCounter-1) temp1=temp<<1; temp=temp1; BitCounter-;while(BitCounter);return(temp);/*- 读取AD模数转换的值,有返回值-*/unsigned char ReadADC(unsigned char Chl) unsigned char Data;Start(); /写入芯片地址Send(AddWr);Ack();Send(0x40|Chl);/写入选择的通道,本程序只用单端输入,差分部分需要自行添加 /Chl的值分别为0、1、2、3,分别代表1-4通道Ack();Start();Send(AddRd); /读入地址Ack();Data=Read(); /读数据Scl=0;N
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论