单片机控制直流电机并测速(电压AD、DA转换以及pwm按键调速正转反转)
- 格式:doc
- 大小:482.75 KB
- 文档页数:26
单片机控制直流电机正反转调速--基础简单实现
如何使用单片机控制直流电机呢?
真正控制之前我们要知道以下三点:
1、直流电机的控制是通过设置PWM波的占空比来控制直流电机的转速,占空比越大,转速越快,越小转速越低。
2、单片机的I/O口是不能直接驱动电机的,所以你还需要用一个驱动芯片。
像LG9110、CMO825L298等。
驱动芯片可以将单片机I/O输出信号放大,这样电机中流过的电流足够大,电机才能转起来。
本文采用的是L298
3、为了实现调节转速功能必须来个滑动变阻器和数模转化器
ADC0831,同时使用开关控制电机正反转。
开始行动~
OK一切就绪。
/********************************************************************* 名称: 电机调速.c* 功能: 通过P1.0口来控制直流电机的旋转的快慢/***********************************************************************/#include <reg52.h>#define uchar unsigned char#define uint unsigned intsbit s19 = P3^2; //定义调速的按键sbit PWM = P1^0; //定义直流电机的控制端口uchar CYCLE; //定义周期uchar PWM_ON ; //定义低电平时间void Delay(uint i){uchar x,j;for(j=0;j<i;j++)for(x=0;x<=148;x++);}void Time0(void){TMOD |=0x01; //定时器设置TH0=(65536-1000)/256;TL0=(65536-1000)%256; //定时1mSIE= 0x82; //打开中断TR0=1; //定时器打开}main(){uchar PWM_Num; //定义档位Time0();CYCLE = 10; //时间可以调整这个是10步调整周期10ms 8位PWM就是256步PWM = 0;while(1){if(!s19){Delay(15);if(!s19){ Delay(15);if(s19)PWM_Num++; //按一下P3.2口,就给直流电机换一个档位if(PWM_Num==4){PWM_Num=0;}switch(PWM_Num){case 0:P0=0x06; PWM_ON=0; break;//低电平时长//给P0口赋值,是让P0口显示:1,2,3,4 这四个档位case 1:P0=0x5B; PWM_ON=2;break;case 2:P0=0x4F; PWM_ON=4;break;case 3:P0=0x66; PWM_ON=6;break;default:break;}}}}}/********************************//* 定时中断*//********************************/void tim(void) interrupt 1 using 1{static unsigned char count;TH0=(65536-1000)/256;TL0=(65536-1000)%256;//定时1mSif(count==PWM_ON){PWM = 1; //直流电机转}count++;if(count == CYCLE){count=0;if(PWM_ON!=0) //如果左右时间是0 保持原来状态{PWM = 0; //直流电机不转}}}。
用单片机控制直流电机正反转的系统设计一、系统设计内容用单片机AT89C51控制直流电机正反转。
在此将由89C51的P2.0、P2.1通过晶体管控制继电器,当P2.0输出低电平,P2.1输出高电平时,三极管Q1导通,而三极管Q2截止,从而导致与Q1相连的继电器吸合,电机因两端产生电压而转动。
由P3.0、P3.1,P3.2控制电机的正转、反转和停止。
在图中,在两个继电器的两端都反向接了一个二极管,这非常重要,当使用电磁继电器时必须接。
原因如下:线圈通电正常工作时,二极管对电路不起作用。
当继电器线圈在断电的一瞬间会产生一个很强的反向电动势,在继电器线圈两端反向并联二极管就是用来消耗这个反向电动势的,通常将这个二极管称为消耗二极管,如果不加这个消耗二极管,反向电动势就会直接作用在趋动三极管上,很容易将三极管烧毁。
二、系统设计目标(1)掌握趋动电机正反转的电路。
(2)用PROTEUS实现电机正反转电路的设计,进行实时交互仿真。
三、系统设计步骤1、PROTEUS电路设计实现用单片机A T89C51控制直流电机正反转原理图,如图所示。
(1)选取元器件:①单片机:A T89C51②电阻:RES③直流电机:MOTOR④按钮:BUTTON⑤三极管:NPN⑥继电器:RELAY⑦二极管:DIODE(2)放置元器件、放置电源和地、连线、元器件属性设置。
直流电机正反转的原理如图所示,整个电路设计操作都在ISIS平台中进行。
关于元器件属性的设置在此实例中需要特别注意:①三极管基极的限流电阻更改为1KΩ。
②双击电机图标,弹出如图所示的电机属性对话框,在Nominal V oltage 一栏中将默认值改为5V。
双击继电器图标,在弹出如图所示的继电器属性对话框中,在Component Value 一栏中将默认值更改为5V。
2、源程序设计与目标代码文件生成1)程序流程图2)源程序设计①汇编语言源程序:ORG 0000HLJMP MAINORG 0030HMAIN: MOV A,P3ANL A,#07HCJNE A,#6,PZZMOV P2,#01HLCALL DELAYAJMP MAINPZZ: CJNE A,#5,PFZMOV P2,#02HLCALL DELAYAJMP MAINPFZ: CJNE A,#3,MAINMOV P2,#03HLCALL DELAYDELAY: MOV R5,#195C1: MOV R6,#255DJNZ R6,$DJNZ R5,C1RETEND3、PROTEUS仿真加载目标代码文件俺,双击编辑窗口的A T89C51器件,在弹出属性编辑对话框Program File 一栏中单机打开按钮,出现文件浏览对话框,找到dianji.hex文件,单机“打开”按钮,完成添加文件。
单片机原理及应用—— P W M直流电机调速控制系统概括直流电动机具有良好的启动性能和调速特性。
具有起动转矩大、调速平稳、经济大范围、调速容易、调速后效率高等特点。
本文设计的直流电机调速系统主要由51单片机、电源、H桥驱动电路、LED 液晶显示器、霍尔测速电路和独立按键组成的电子产品组成。
电源采用78系列芯片,采用PWM波方式实现电机+5V、+15V调速,PWM为脉宽调制,通过51单片机改变占空比实现。
通过独立的按键实现电机的启停、调速和转向的手动控制,LED实现测量数据(速度)的显示。
电机转速采用霍尔传感器检测输出方波,通过51单片机统计1秒内方波脉冲个数,计算电机转速,实现直流电机的反馈控制。
关键词:直流电机调速; H桥驱动电路; LED显示屏; 51单片机目录摘要2摘要错误!未定义书签。
目录3第 1 章引言41.1 概述41.2 国外发展现状41.3 要求51.4 设计目的及6第 2 章项目论证与选择72.1 电机调速模块72.2 PWM调速工作模式72.3 PWM脉宽调制方式错误!未定义书签。
2.4 PWM 软件实现错误!未定义书签。
第三章系统硬件电路设计83.1 信号输入电路83.2 电机PWM驱动模块电路9第 4 章系统的软件设计104.1 单片机选型104.2 系统软件设计分析10第 5 章 MCU 系统集成调试135.1 PROTEUS 设计与仿真平台错误!未定义书签。
18传统开发流程对比错误!未定义书签。
第一章简介1.1 概述现代工业的电驱动一般要求部分或全部自动化,因此必须与各种控制元件组成的自动控制系统相联动,而电驱动可视为自动电驱动系统的简称。
在这个系统中,生产机械可以自动控制。
随着现代电力电子技术和计算机技术的发展以及现代控制理论的应用,自动电驱动正朝着计算机控制的生产过程自动化方向发展。
以实现高速、高质量、高效率的生产。
在大多数集成自动化系统中,自动化电力牵引系统仍然是不可或缺的组成部分。
基于C51单片机的直流电机PWM调速控制--SQ这是最近一阶段自己学习所获,现分享与大家。
这里采用A T89C52单片机做主控制芯片,实现两路直流电机的PWM调速控制,另外还可以实现转向、显示运行时间、显示档位等注:考虑小直流电机自身因素,调速范围仅设有四级电路原理图:C语言程序源代码:/******************** 硬件资源分配*********************/数码管:显示电机状态(启停、正反、速度)、运行时间、是否转弯按键:K4 启动/暂停K3 正反转/转弯允许K2 加速/左转/运行时间清零K1 减速/右转/停止定时器:T0 数码管动态显示,输出PWMT1 运行时间记录********************************************************//*******主程序文件PWM.c******/#include <reg52.h>#include "Afx.h"#include "Config.c"#define CIRCLE 5 //脉冲周期//按键定义uchar key,key_tmp=0, _key_tmp=0;//显示定义uchar LedState=0xF0; //LED显示标志,0xF0不显示,Ox00显示uchar code LED_code_d[4]={0xe0,0xd0,0xb0,0x70}; //分别选通1、2、3、4位uchar dispbuf[4]={0,0,0,0}; //待显示数组uchar dispbitcnt=0; //选通、显示的位uchar mstcnt=0;uchar Centi_s=0,Sec=0,Min=0; //分、秒、1%秒//程序运行状态标志bit MotState=0; //电机启停标志bit DirState=0; //方向标志0前,1后uchar State1=-1;uchar State2=-1;uchar State3=0;uchar State4=-1;uchar LSpeed=0;uchar RSpeed=0;//其他uint RunTime=0;uint RTime_cnt=0;uint LWidth;uint RWidth; //脉宽uint Widcnt=1;uint Dispcnt;//函数声明void key_scan(void);void DisBuf(void);void K4(void);void K3(void);void K2(void);void K1(void);void disp( uchar H, uchar n );void main(void){P1|=0xF0;EA=1;ET0=1;ET1=1;TMOD=0x11;TH0=0xFC;TL0=0x66; //T0,1ms定时初值TH1=0xDB;TL1=0xFF; //T1,10ms定时初值TR0=1;Widcnt=1;while(1){key_scan();switch(key){case 0x80: K1(); break;case 0x40: K2(); break;case 0x20: K3(); break;case 0x10: K4(); break;default:break;}key=0;DisBuf();LWidth=LSpeed;RWidth=RSpeed;}}//按键扫描**模拟触发器防抖void key_scan(void){key_tmp=(~P3)&0xf0;if(key_tmp&&!_key_tmp) //有键按下{key=(~P3)&0xf0;}_key_tmp=key_tmp ;}//按键功能处理/逻辑控制void K4(void){if(State4==-1){State4=1;TR1=1;dispbuf[3]=1;LedState=0x00; //打开LEDMotState=1; //打开电机LSpeed=1;RSpeed=1; //初速设为1}else if(State4==1){State4=0;TR1=0;MotState=0; //关闭电机}else if(State4==0){MotState=1;if(State3==0){State4=1;TR1=1;}else if(State3==1){LSpeed=2;RSpeed=2;}}}void K3(void){if(State4==1)DirState=!DirState;if(State4==0){if(State3==0){State3=1; //可以转向标志1可以,0不可以TR1=1;dispbuf[3]=9;MotState=1;LSpeed=2;RSpeed=2;}else if(State3==1){State3=0;TR1=0;dispbuf[3]=0;MotState=0;}}}void K2(void){if(State4==1&&LSpeed<4&&RSpeed<4){LSpeed++;RSpeed++;}else if(State4==0){if(State3==0){//State4=-1;//LedState=0xF0;MotState=0;Sec=0;Min=0;}else if(State3==1&&LSpeed<4&&RSpeed<4){//TurnState=0;LSpeed=2;RSpeed++;}}}void K1(void){if(State4==1&&LSpeed>1&&RSpeed>1){LSpeed--;RSpeed--;}else if(State4==0){if(State3==0){State4=-1;LedState=0xF0;MotState=0;}else if(State3==1&&LSpeed<4&&RSpeed<4){//TurnState=1;LSpeed++;RSpeed=2;}}}//显示预处理void DisBuf(void){if(RTime_cnt==100){Sec++;RTime_cnt=0;}if(Sec==60){Min++;Sec=0;}if(State4==1){dispbuf[0]=Sec%10;dispbuf[1]=Sec/10;dispbuf[2]=Min;if(!DirState) //正转dispbuf[3]=LSpeed;if(DirState) //反转dispbuf[3]=LSpeed+4;}if(State4==0){if(State3==0){dispbuf[0]=Sec%10;dispbuf[1]=Sec/10;dispbuf[2]=Min;dispbuf[3]=0;}if(State3==1){dispbuf[0]=RSpeed;dispbuf[1]=LSpeed;dispbuf[2]=Min;dispbuf[3]=9;}}}//LED驱动void disp( uchar H, uchar n ){P1=n;P1|=LedState ;P1|=LED_code_d[H];}//T0中断**显示/方波输出void Time_0() interrupt 1{TH0=0xFC;TL0=0x66;Widcnt++;Dispcnt++;//电机驱动/方波输出if(Widcnt>CIRCLE){Widcnt=1;}if(Widcnt<=LWidth)LMot_P=!DirState&&MotState;elseLMot_P=DirState&&MotState;LMot_M=DirState&&MotState;if(Widcnt<=RWidth)RMot_P=!DirState&&MotState;elseRMot_P=DirState&&MotState;RMot_M=DirState&&MotState;//显示if(Dispcnt==5){disp(dispbitcnt,dispbuf[dispbitcnt]);dispbitcnt++;if(dispbitcnt==4){dispbitcnt=0;}Dispcnt=0;}}//T1中断**运行时间void Time_1() interrupt 3{TH1=0xDB;TL1=0xFF;RTime_cnt++;}/******配置文件Afx.h******/#ifndef _AFX_#define _AFX_typedef unsigned char uchar;typedef unsigned int uint;typedef unsigned long ulong;#endif/******IO配置文件Config.c******/#ifndef _Config_#define _Config_#include "Afx.h"#include <reg52.h>//显示定义sbit led=P3^2;//电机引脚定义sbit LMot_P=P2^2; sbit LMot_M=P2^3; sbit RMot_P=P2^0; sbit RMot_M=P2^1;#endif。
单片机控制的直流电机正反转和加速减速C程序简介本文档旨在向读者介绍如何使用单片机控制直流电机实现正反转和加速减速功能的C程序。
程序实现正反转控制以下是控制直流电机正反转的C程序示例:include <avr/io.h>void motor_forward(){// 设置引脚控制直流电机正转}void motor_reverse(){// 设置引脚控制直流电机反转}int main(){// 初始化单片机引脚设置和其他必要的配置while (1){// 检测是否需要正转或反转,根据需要调用motor_forward()或motor_reverse()函数}return 0;}加速减速控制以下是控制直流电机加速减速的C程序示例:include <avr/io.h>void motor_speed_up(){// 调整引脚控制直流电机的占空比以加速电机转速}void motor_slow_down(){// 调整引脚控制直流电机的占空比以减速电机转速}int main(){// 初始化单片机引脚设置和其他必要的配置while (1){// 检测是否需要加速或减速,根据需要调用motor_speed_up()或motor_slow_down()函数}return 0;}结论通过上述示例程序,我们可以实现通过单片机控制直流电机的正反转和加速减速功能。
读者可以根据实际需求进行相应的参数调整和功能扩展。
请注意,上述示例程序仅为演示目的,具体的引脚配置和控制方式需根据实际硬件和单片机型号进行调整。
、摘要利用AT89C51设计一个直流电机地软件模拟PWMg动及测速系统•单片机读取键盘值来设定转速和正反转,并且通过红外对管来测量转速•本系统具有精度高,成本低,使用方便等优点•关键词:AT89C51 PWM测速.引言随着社会地发展,各种智能化地产品日益走入寻常百姓家•为了实现产品地便携性、低成品以及对电源地限制,小型直流电机应用相当广泛•对直流电机地速度调节,我们可以采用多种办法,本文给出一种用单片机软件实现PW碉速地方法及红外对管测转速•、直流电机调速知道通过调节直流电机地电压可以改变电机地转速,但是一般我们设计地电源大都是固定地电压,而且模拟可调电源不易于单片机控制,数字可调电源设计麻烦所以这里用脉宽调制<PWM来实现调速.方波地有效电压跟电压幅值和占空比有关,我们可以通过站空比实现改变有效电压• 一般用软件模拟PWM可以有延时和定时两种方法,延时方法占用大量地CPU所以这里采用定时方法.b5E2RGbCAP、直流电机旋转方向一般利用H桥电路来实现调速.H桥驱动电路:图4.12中所示为一个典型地直流电机控制电路.电路得名于“H桥驱动电路” 是因为它地形状酷似字母H.4个三极管组成H地4条垂直腿,而电机就是H中地横杠<注意:图4.12及随后地两个图都只是示意图,而不是完整地电路图,其中三极管地驱动电路没有画出来).如图所示,H桥式电机驱动电路包括4个三极管和一个电机.要使电机运转,必须导通对角线上地一对三极管.根据不同三极管对地导通情况,电流可能会从左至右或从右至左流过电机,从而控制电机地转向.plEanqFDPw+ +图4.12 H桥驱动电路要使电机运转,必须使对角线上地一对三极管导通.例如,如图4.13所示,当Q1管和Q4管导通时,电流就从电源正极经Q1从左至右穿过电机,然后再经Q4回到电源负极.按图中电流箭头所示,该流向地电流将驱动电机顺时针转动.当三极管Q1和Q4导通时,电流将从左至右流过电机,从而驱动电机按特定方向转动<电机周围地箭头指示为顺时针方向).DXDiTa9E3d图4.13 H桥电路驱动电机顺时针转动图4.14所示为另一对三极管Q2和Q3导通地情况,电流将从右至左流过电机.当三极管Q2和Q3导通时,电流将从右至左流过电机,从而驱动电机沿另一方向转动<电机周围地箭头表示为逆时针方向).RTCrpUDGiT图4.14 H桥驱动电机逆时针转动可以把Q1跟Q4接在一起,Q3跟Q2接在一起,这样只要两个单片机I/O 口就行. 下面地程序中lun1 、lun2 就表单片机地两个I/O 口. 这个桥式电路图只用来说明原理,实际应用还要看电机地额定电压、电流•也可以用L293、L298直流地集成芯片. 5PCzVD7HxA四、PW程序void timer0(> interrupt 1{if(temp>{TH0=time_h_0。
基于单片机的数字PID控制直流电机PWM调压调速器系统(★)第一篇:基于单片机的数字PID控制直流电机PWM调压调速器系统题目: 基于单片机的数字PID控制直流电机PWM 调压调速器系统目录一、PID简介 (6)二、设计原理 (7)三、设计方案 (8)四、心得体会 (16)五、参考文献 (16)二、设计原理基本的设计核心是运用PID调节器,从而实现直流电机的在带动负载的情况下也能稳定的运行。
运用A/D转换芯片将滑动变阻器的模拟电压转换为数字量作为控制直流电机速度的给定值;用压控振荡器模拟直流电机的运行(电压高-转速高-脉冲多),单片机在单位时间内对脉冲计数作为电机速度的检测值;应用数字PID模型作单片机控制编程,其中P、I、D参数可按键输入并用LED数码显示;单片机PWM调宽输出作为输出值,开关驱动、电子滤波控制模拟电机(压控振荡器)实现对直流电机的PID调压调速功能。
基于以上的核心思想,我们把这次设计看成五个环节组成,其具体的原理如下见原理图2.0图2.0 PID调速设计原理图如图可以知道,这是一个闭环系统,我们借助单片机来控制,我们现运用AD芯片,运用单片机来控制AD芯片来转换模拟电压到数字电压,AD给定的电压越大,则产生的数字量越大,单片机再控制这个数字量来产生一个PWM,PWM占空比越大,就驱动晶体管导通的时间越长,这样加到压频转换器的电压也就越大,电压越大,则压频转换器输出的计数脉冲再单位时间也就越多,这样就相当于电机的电压越大,其转速也就会越快,我们再用单片机对压频转换器的输出脉冲计数,PID调节器就把这个计数脉冲和预先设定的值进行比较,比设定值小,这样就会得到一个偏差,再把这个偏差加到AD的给定电压,这样就相当于加大了PWM的占空比,要是比设定值大,这样也会得到一个偏差,就把这个变差与给定的电压向减,这样就可以减少PWM 的占空比,通过改变占空比来改变晶体管的导通时间,就可以改变压频转换器的输入电压,也就改变压频转换器的单位计数脉冲,达到调电动机速度的目的。
单片机原理及应用课程设计报告书题目:用单片机控制直流电动机并测量转速******学号:**********专业:电子信息工程指导老师:***设计时间:2014年 11月信息工程学院目录1. 引言 (1)1.1 设计意义 (1)1.2 系统功能要求 (1)2. 方案设计 (1)3. 硬件设计 (3)3.1 AT89C51最小系统 (3)3.2 按键电路 (4)3.3 A/D转换模块 (4)3.4. D/A转换模块 (6)3.5 电机转速测量电路 (7)3.6 显示电路 (8)3.7 总电路图 (10)4. 软件设计 (111)4.1 系统主程序设计 (12)4.2 按键扫描程序设计 (12)4.3 显示子程序 (12)4.4 定时中断处理程序 (12)4.5 A/D转换程序 (13)5. 系统调试 (14)6. 设计总结 (16)7. 参考文献 (17)8. 附录A;源程序 (18)9. 附录B;电路原理总图、作品实物图片 (23)用单片机控制直流电动机并测量转速1 引言1.1. 设计意义电动机作为最主要的动力源,在生产和生活中占有重要地位。
电动机的调速控制过去多用模拟法,随着计算机的产生和发展以及新型电力电子功率器件的不断涌现,电动机的控制也发生了深刻的变化,本系统利用直流电机的速度与施加电压成正比的原理,通过滑动变阻器向ADC0809输入控制电压信号,经AD后,输入到AT89C51中,AT89C51将此信号转发给DAC0832,通过功放电路放大后,驱动直流电机。
1.2.系统功能要求单片机扩展有A/D转换芯片ADC0809和D/A转换芯片DAC0832。
通过改变A/D输入端可变电阻来改变A/D的输入电压,D/A输入检测量大小,进而改变直流电动机的转速。
手动扩展。
在键盘上设置两个按键——直流电动机加速键和直流电动机减速减。
在手动状态下,每按一次键,电动机的转速按照约定的速率改变。
用显示器LED或LCD显示数码移动的速度,及时形象地跟踪直流电动机转速的变化情况。
2 方案设计为了使用单片机对电动机进行控制,对单片机的基本要求应有足够快点速度;有捕捉功能。
总体设计方案如图所示图2.1总体设计方案(1)键盘向单片机输入相应控制指令,由单片机通过P3.0口输出信号,该编码通过DAC0832译成相应的模拟电压,经过信号放大实现电动机转向与转速的控制。
(2)可变电阻接ADC0808转变成相应电压的数字信号,单片机通过P1口读取,再由P2口输出与转速相应的8位BCD编码与DAC0832相接。
电动机的运转状态则通过四位数码管显示出来。
(3)电机的测速显示,采用光电传感器测量电机的转速,在设计中,在电机转轴末梢上安装纸卡,在纸卡上留出两个孔。
电机转轴每转一圈,发射二极管发出的光便通过纸卡的孔到达接受二极管,就可在接受二极管上产生相应的脉冲信号。
计算下1s内输出的脉冲信号的个数,把计数的结果取一半,就可得到电动机的转动速度。
(4)通过Max7219驱动器驱动4位共阴极LED灯,这样节省了许多I/O口。
3硬件设计3.1AT89C51最小系统AT89C51是一种带4K字节FLASH存储器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器,俗称单片机。
AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。
单片机的可擦除只读存储器可以反复擦除1000次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。
AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
图3.1 单片机最小系统的设计AT89C51 提供以下标准功能:4k 字节Flash 闪速存储器,128字节内部RAM,32 个I/O 口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。
同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。
空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。
掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。
3.2 按键电路单片机的P3.6和P3。
7口分别接一个按键用于控制电机。
当按下“叫”键时,电机转速提高,进入加速状态;当按下“减”键时,电机转速减慢,进入减速状态。
通过“加”“减”两个按键可以达到键盘控制电机的作用。
3.3 A/D转换模块(1)ADC0808ADC0808是美国国家半导体公司生产的CMOS工艺8通道,8位逐次逼近式A/D模数转换器。
其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D转换。
是目前国内应用最广泛的8位通用A/D芯片。
主要特性1)8路输入通道,8位A/D转换器,即分辨率为8位。
2)具有转换起停控制端。
3)转换时间为100μs(时钟为640kHz时),130μs(时钟为500kHz时)4)单个+5V电源供电。
5)模拟输入电压范围0~+5V,不需零点和满刻度校准。
6)工作温度范围为-40~+85摄氏度。
7)低功耗,约15mW。
ADC0809的工作过程首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。
此地址经译码选通8路模拟输入之一到比较器。
START上升沿将逐次逼近寄存器复位。
下降沿启动 A/D转换,之后EOC输出信号变低,指示转换正在进行。
直到A/D转换完成,EOC变为高电平,指示A/D转换结束,结果数据已存入锁存器,这个信号可用作中断申请。
当OE输入高电平时,输出三态门打开,转换结果的数字量输出到数据总线上。
转换数据的传送 A/D转换后得到的数据应及时传送给单片机进行处理。
数据传送的关键问题是如何确认A/D转换的完成,因为只有确认完成后,才能进行传送。
为此可采用下述三种方式。
(1)定时传送方式对于一种A/D转换器来说,转换时间作为一项技术指标是已知的和固定的。
例如ADC0809转换时间为128μs,相当于6MHz的MCS-51单片机共64个机器周期。
可据此设计一个延时子程序,A/D转换启动后即调用此子程序,延迟时间一到,转换肯定已经完成了,接着就可进行数据传送。
(2)查询方式A/D转换芯片由表明转换完成的状态信号,例如ADC0808的EOC端。
因此可以用查询方式,测试EOC的状态,即可确认转换是否完成,并接着进行数据传送。
(3)中断方式把表明转换完成的状态信号(EOC)作为中断请求信号,以中断方式进行数据传送。
不管使用上述哪种方式,只要一旦确定转换完成,即可通过指令进行数据传送。
首先送出口地址并以信号有效时,OE信号即有效,把转换数据送上数据总线,供单片机接受。
图3.3 AD转换电路的设计(2)工作原理如图3.3所示,外部电源通过滑动变阻器向ADC0808输入控制电压信号,经A/D处理后,输入到AT89C51中,交由AT89C51处理,进行下一步动作。
3.4 D/A转换模块(1)DAC0832DAC0832是8分辨率的D/A转换集成芯片。
与微处理器完全兼容。
这个DA 芯片以其价格低廉、接口简单、转换控制容易等优点,在单片机应用系统中得到广泛的应用。
D/A转换器由8位输入锁存器、8位DAC寄存器、8位D/A转换电路及转换控制电路构成。
主要特性参数1.分辨率为8位;2.电流稳定时间1us;3.可单缓冲、双缓冲或直接数字输入;4.只需在满量程下调整其线性度;5.单一电源供电(+5V~+15V);6.低功耗,20mW。
DAC0832的工作方式DAC0832进行D/A转换,可以采用两种方法对数据进行锁存。
第一种方法是使输入寄存器工作在锁存状态,而DAC寄存器工作在直通状态。
具体地说,就是使和都为低电平,DAC寄存器的锁存选通端得不到有效电平而直通;此外,使输入寄存器的控制信号ILE处于高电平、处于低电平,这样,当端来一个负脉冲时,就可以完成1次转换。
第二种方法是使输入寄存器工作在直通状态,而DAC寄存器工作在锁存状态。
就是使和为低电平,LE为高电平,这样,输入寄存器的锁存选通信号处于无效状态而直通;当和端输入1个负脉冲时,使得DAC寄存器工作在锁存状态,提供锁存数据进行转换。
图3.4 DA转换电路的设计(2)工作原理如上图3.4所示,电压信号输入后经过AD转换输入到AT89C51,由单片机通过P1口输出与转速相应的8位BCD编码,该编码通过DAC0832译成相应的模拟电压,经过信号放大实现电动机转向与转速的控制。
3.5电机转速测量电路图3.5光电传感器测速设计采用光电传感器测量电机的转速,在设计中,在电机转轴末梢上安装纸卡,在纸卡上留出两个孔。
电机转轴每转一圈,发射二极管发出的光便通过纸卡的孔到达接受二极管,就可在接受二极管上产生相应的脉冲信号。
计算下1s内输出的脉冲信号的个数,把计数的结果取一半,就可得到电动机的转动速度。
3.6 显示电路(1) MAX7219MAX7219/MAX7221是一种集成化的串行输入/输出共阴极显示驱动器,它连接微处理器与8位数字的7段数字LED显示,也可以连接条线图显示器或者64个独立的LED。
其上包括一个片上的B型BCD编码器、多路扫描回路,段字驱动器,而且还有一个8*8的静态RAM用来存储每一个数据。
只有一个外部寄存器用来设置各个LED的段电流。
MAX7221与SPI™、 QSPI™以及 MICROWIRE™相兼容,同时它有限制回转电流的段驱动来减少EMI(电磁干扰)。
一个方便的四线串行接口可以联接所有通用的微处理器。
每个数据可以寻址在更新时不需要改写所有的显示。
MAX7219/MAX7221同样允许用户对每一个数据选择编码或者不编码。
整个设备包含一个150μA的低功耗关闭模式,模拟和数字亮度控制,一个扫描限制寄存器允许用户显示1-8位数据,还有一个让所有LED发光的检测模式。
功能特点:1、10MHz连续串行口2、独立的LED段控制3、数字的译码与非译码选择4、150μA的低功耗关闭模式5、亮度的数字和模拟控制6、高电压中断显示7、共阴极LED显示驱动8、限制回转电流的段驱动来减少EMI(MAX7221)9、SPI, QSPI, MICROWIRE串行接口(MAX7221)(2)工作原理如图3.6所示,可变电阻接ADC0808转变成相应电压的数字信号,单片机通过P0口读取,再由P1口输出与转速相应的8位BCD编码到MAX7219。