- 首页
-
- 问答
-
匿名用户
这个电路很简单,我说一下就可以了。数字式温度传感器用最常用的DS18B20,它只有3个管脚,一个接电源,一个接地,另一个接8051单片机就可以了。温度值用数码管显示。这样整个电路就接好了。如果楼主觉得我回答的可以别忘了给我加分哦,为了你的问题我花费了半天的时间啊。程序如下:
#include
#include
#define uchar unsigned char #define uint unsigned int #define Self_Define_ISP_Download_Command 0x3D sfr IAP_CONTR=0xE7; sbit DQ = P3^5; //DS18B20接入口 uchar code table[]={ 0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8,0x80,0x90} ; char bai,shi,ge; //定义变量 void Init_Com(void) { TMOD = 0x20; SM0=0; SM1=1; REN=1; TH1 = 0xFd; TL1 = 0xFd; TR1 = 1; EA=1; ES=1; } /*延时子函数*/ void delay(uint num) { while(num--) ; } /*************DS18b20温度传感器函数*********************/ Init_DS18B20(void) //传感器初始化 { uchar x=0; DQ = 1; //DQ复位 delay(10); //稍做延时 DQ = 0; //单片机将DQ拉低 delay(80); //精确延时 大于 480us //450 DQ= 1; //拉高总线 delay(20); x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败 delay(30); } //读一个字节 ReadOneChar(void) { uchar i=0; uchar dat = 0; for (i=8;i>0;i--) { DQ = 0; // 给脉冲信号 dat>>=1; DQ = 1; // 给脉冲信号 if(DQ) dat|=0x80; delay(8); } return(dat); } //写一个字节 WriteOneChar(unsigned char dat) { uchar i=0; for (i=8; i>0; i--) { DQ = 0; DQ = dat&0x01; delay(10); DQ = 1; dat>>=1; } delay(8); } //读取温度 int ReadTemperature(void) { uchar a,b; uint t; float tt; Init_DS18B20(); WriteOneChar(0xCC); // 跳过读序号列号的操作 WriteOneChar(0x44); // 启动温度转换 Init_DS18B20(); WriteOneChar(0xCC); //跳过读序号列号的操作 WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度 a=ReadOneChar();//低位 b=ReadOneChar();//高位 tt=(b*256+a)*0.0625*100;//2个8位合成16位 t=(int)tt; /*t=b; t<<=8; t=t|a; tt=t*0.0625; t= tt*10+0.5; */ return(t); } /*显示子函数*/ void display(int bai,int shi,int ge) { int temp; temp=ReadTemperature();//读温度 bai=temp/1000;//显示百位 shi=temp%1000/100;//显示十位 ge=temp%100/10;//显示个位 //xiao=temp%10; P2=0xfd; //位选 P0=0X7f; //显示小数点 delay(500); P2=0xfe; P0=table[bai];//显示千位 delay(500);//一小段延时动态显示 P2=0xfd; P0=table[shi];//显示百位 delay(500); P2=0xfb; P0=table[ge];//显示十位 delay(500); P2=0xf7;// 显示° P0=0x9c; // delay(50); } void main() { Init_Com(); while(1) { display(bai,shi,ge);//显示函数 } } void UART_Interrupt_Receive(void) interrupt 4 { unsigned char k=0; unsigned int a,b; if(RI==1) { RI=0; k=SBUF; if(k==Self_Define_ISP_Download_Command) { for(a=1000;a>0;a--) for(b=100;b>0;b--); //延时约1S IAP_CONTR = 0x60; } } else { TI=0; } }
-
-
-
-
-
-
-
-
我自静默向纷华
电机调速控制系统设计需要具备哪些专业知识无刷直流电机(简称BLDCM)是一种新型的机电一体化产品,它既具备异步电机结构简单、运行可靠和维护方便的特点,又具有直流电机调速性能好的优点,因此综合运用自动控制、嵌入式系统等技术实现无刷直流电机控制具有重要的理论研究价值和实践应用意义。 本文在掌握无刷直流电机工作原理,并比较分析目前关于无刷直流电机控制系统研究成果的基础上,对无刷直流电机调速控制系统进行了重点研究。利用无刷直流电机的相变量建立其数学模型,提出具体的调速控制方法,并在此基础上分析无刷直流电机的诸多特点。 本文以无刷直流电机调速控制系统在焊接行走设备中的应用为研究背景,设计了一种基于DSP的无刷直流电机调速控制系统。整个直流控制系统的设计采用的双闭环控制,系统外环为转速环,内环为电流环。设计了一种基于控制量调节的Fuzzy-PI控制方法并将其应用在转速环中。该方法主要是根据系统给定速度与反馈速度之间的偏差量取值范围来决定使用模糊控制方法还是带死区的PI控制方法。在模糊控制器中,使用Mamdani关系生成方法并且经过大量实验得到一种基于该系统的模糊控制规则。运用MATLAB/Simulink工具对该系统进行仿真,仿真结果表明,该系统响应速度快,基本无超调,抗干扰能力强,具有较高的控制品质。 系统的主控制器选用的是TMS320F2812数字信号处理器,设计了组成该系统所需要的电源转换电路、电流采样电路、开关电路、位置检测电路等,从而实现该无刷直流电机调速控制。电路设计主要是依据集成度高,电路简单,抗干扰能力强,鲁棒性好等特点进行设计的,并且应用在无刷直流电机调速控制系统中。根据整个系统的实现功能进行设计,给出具体的设计流程。
-
求购