设计报告——温控电路设计

合集下载

温度控制电路的设计

温度控制电路的设计

温度控制电路的设计首先,我们需要了解温度控制电路的原理。

温度控制电路主要由三个部分组成:温度传感器、比较器和控制器。

温度传感器负责将温度信号转换成电信号,并输入到比较器中。

比较器将温度信号与给定的温度值进行比较,输出一个开关信号。

控制器接收开关信号,并控制相应的装置(例如加热器或降温器)进行工作,以维持温度在给定范围内。

接下来,我们将通过一个实例来介绍温度控制电路的设计。

假设我们需要设计一个温度控制电路,用于控制一个电炉的加热温度。

我们要求电炉的温度在40摄氏度到60摄氏度之间,当温度达到60摄氏度时,电炉停止加热;当温度降到40摄氏度时,电炉开始加热。

首先,选择一个合适的温度传感器。

常见的温度传感器有热敏电阻、热电偶和半导体温度传感器等。

在这个例子中,我们选择热敏电阻作为温度传感器。

热敏电阻的电阻值随温度的变化而变化,一般情况下都是随温度上升而电阻值下降。

接下来,我们需要选择一个合适的比较器。

比较器的作用是将温度传感器的电信号与设定的温度进行比较,并输出开关信号。

在这个例子中,我们可以选择一个常用的运算放大器作为比较器。

运算放大器具有高增益和差分输入的特性,适合进行信号的比较和放大。

接下来,我们需要选择一个合适的控制器。

控制器的作用是接收比较器的开关信号,并控制电炉的加热。

在这个例子中,我们可以选择一个单片机作为控制器。

单片机具有高集成度和灵活性的特点,可以实现复杂的控制算法。

接下来,我们需要设计电路连接和电路调试。

首先,将热敏电阻连接到比较器的输入端。

然后,将比较器的输出端连接到单片机的输入端。

最后,将单片机的输出端连接到电炉的加热控制端。

在电路调试中,我们可以通过改变比较器的阈值和调整控制算法来使温度控制更加精确和稳定。

综上所述,温度控制电路设计的关键是选择合适的传感器、比较器和控制器,并进行合理的电路连接和调试。

通过合理的设计和调试,可以实现精确和稳定的温度控制。

温度控制电路在实际应用中有广泛的应用,对于提高设备工作效率和安全性具有重要意义。

温度控制电路设计---实验报告

温度控制电路设计---实验报告

温度控制电路设计一、设计任务设计一温度控制电路并进行仿真。

二、设计要求基本功能:利用AD590作为测温传感器,TL 为低温报警门限温度值,TH为高温报警门限温度值。

当T小于TL时,低温警报LED亮并启动加热器;当T大于T H 时,高温警报LED亮并启动风扇;当T介于TL、TH之间时,LED全灭,加热器与风扇都不工作(假设TL =20℃,TH=30℃)。

扩展功能:用LED数码管显示测量温度值(十进制或十六进制均可)。

三、设计方案AD590是美国ANALOG DEVICES公司的单片集成两端感温电流源,其输出电流与绝对温度成比例。

在4V至30V电源电压范围内,该器件可充当一个高阻抗、恒流调节器,调节系数为1µA/K。

AD590适用于150℃以下、目前采用传统电气温度传感器的任何温度检测应用。

低成本的单芯片集成电路及无需支持电路的特点,使它成为许多温度测量应用的一种很有吸引力的备选方案。

应用AD590时,无需线性化电路、精密电压放大器、电阻测量电路和冷结补偿。

主要特性:流过器件的电流(μA) 等于器件所处环境的热力学温度(K) 度数;AD590的测温范围为- 55℃~+150℃;AD590的电源电压范围为4~30 V,可以承受44V正向电压和20V反向电压,因而器件即使反接也不会被损坏;输出电阻为710mΩ;精度高,AD590在-55℃~+-150℃范围内,非线性误差仅为±0.3℃。

基本使用方法如右图。

AD590的输出电流是以绝对温度零度(-273℃)为基准,每增加1℃,它会增加1μA输出电流,因此在室温25℃时,其输出电流Iout=(273+25)=298μA。

V o 的值为Io乘上10K,以室温25℃而言,输出值为10K×298μA=2.98V 。

测量Vo时,不可分出任何电流,否则测量值会不准。

温度控制电路设计框图如下:温度控制电路框图由于Multisim中没有AD590温度传感器,根据它的工作特性,可以采用恒流源来替代该传感器,通过改变电流值模拟环境温度变化。

温控实验报告(范文)

温控实验报告(范文)

温控实验报告(范文)第一篇:温控实验报告(范文)篇一:温控电路实验报告温控电路实验报告一实习目的1,了解自锁,互锁的概念;2,掌握电动机自锁的工作原理及操作方法;3,掌握交流接触器互锁控制电路的工作原理及操作方法;4,掌握用时间继电器使y-△联结互换;5,掌握交流接触器的常用触电和常关触点在电路中的作用。

二材料工具继电器,红色发光二极管,绿色发光二极管,4148二极管,5.1伏二极管,热敏电阻,s9013三极管,1.2k欧电阻,20k欧电阻,1m 欧电阻各一个;5k欧电阻,3k欧电阻,3.6k欧电阻各两个。

四实习过程1,看懂温控电路原理图,合理规划电路板上的各元件布局,掌握色环电阻的数值读法,将所需的色环电阻找出;2,在电路板上安装各元器件,安装二极管时,注意它的正负极;3,将电烙铁连接电源,烙铁头加热到温度高于焊锡熔点后,左手拿焊锡丝,右手拿电烙铁,进行焊接;4,焊接完成后,认真,细致地检查焊接电路是否有误,检查无误后,将电路板接通12伏稳压直流电源,观察发光二极管是否正常工作,(红灯亮时,当调动可调电阻时,绿灯会亮也会熄灭),若发光二极管不正常工作,则用万用表检查各元件,找出故障原因,解决故障。

5 清理实验台,打扫卫生。

五总结我做这个实验还是蛮顺利的,上了认真听老师讲,记录下细节,焊接之前我还特意把我画的电路原理图给老师看,确保无误后再开始耐心焊接,所以,这次实验我总结出上课认真听讲的重要性,虽然事后自己可以专研出误区,但那要耗费大量时间精力,认真听老师说还是很有必要的。

电动机自锁控制电路跟正反转的控制一实验目的(1)了解三相电动机接触器联锁正反转控制的接线和操作方法;(2)理解互锁与自锁的概念;(3)掌握电动机接触器的正反转控制的基本原理与实物连接的要求;二实验器材三相异步电动机,万用表,空气开关,单相空气开关,交流接触器,组合按钮,导线若干,螺丝刀三实验原理三相异步电动机的旋转取决于磁场的旋转方向,而磁场的旋转方向取决于电源相序,所以电源的相序决定了电动机的旋转方向。

温度控制电路设计

温度控制电路设计

温度控制电路设计
温度控制电路是一种常用的控制系统,它可以实现对温度变化的有效检测和调节,以确保温度保持在预期范围之内。

温度控制往往分为模拟温度控制和数字温度控制,可以为温度输出 one 的具体行为提供更多选择和搭配。

模拟温度控制电路的设计主要由热敏元件、功率驱动器、传感器 strykers 电路三部分组成。

其中,热敏元件作用像开关一样,当传感器 strykers 检测到的温度变化超过预定的范围时,可以直接将电流(该元件特性电压)充当加热器或制冷器。

而电源驱动器则可以控制将电压传输到热敏芯片当中。

数字温度控制电路则是由有源和无源元件组成,有源元件负责实现预示温度控制,有效抑制不良正反馈,从而使系统得到更多稳定性的保证。

无源元件的功能是传感器的校正实现可编程的温度范围,使得系统能够针对不同温度范围的变化来实现相应的反应。

总体来说,温度控制电路的设计包括装备合理的产品结构,设计和选择有效的组件,针对传感器输入和控制输出有效检测和控制,以及加入保护措施等多个方面。

温度控制在我们的日常生活当中广泛而普遍,它既可以确保温度的可逆性,带来更高的精度,也能实现全功能的自动调节,以及一定的节能效果。

温度控制电路设计实验报告

温度控制电路设计实验报告

竭诚为您提供优质文档/双击可除温度控制电路设计实验报告篇一:电子技术课程设计报告温度控制电路电子技术课程设计报告学院:电气学院专业班级:学生姓名:指导教师:完成时间:成绩:1电力电子课程设计报告温度控制电路一.设计要求(1).电路能够在一定范围内测量温度,对温度变化产生相应的反应。

(2).能够预先设定一个温度,当温度低于设定值温控电路开始加热,高于设定值电路进入保温状态。

(3).控制温度连续可调。

(4).电路的加热和保温状态各有不同的灯光提示。

设计的作用、目的测温电路利用传感器监测外界温度的变化,通过差分放大电路将温度传感器的阻值变化转换的电压信号的变化放大,然后根据模拟电路部分电路原理计算得出最后输出电压与温度值的关系,输出信号接Lm324单限比较器,并可通过设定比较电压的大小设定开始加热的温度,经过继电器控制加热保温环节的状态,来实现对温度的控制。

该电路还具有灯光提示功能,当被测温度超出设定温度时,电路进入保温状态同时保温提示灯亮,当被测温度低于设定温度时,电路进入加热状态同时加热提示灯亮,使它的功能更加完善,使用更加方便。

本设计采用温度测量、信号放大、保温加热环节三部分来具体实现上述目的。

二.设计的具体实现1.系统概述由于本设计是测温及控制电路,可以使用热敏电阻之类的器件利用其感温效应,设计需要用到测温电路,放大电路,比较电路,保温加热电路。

温度传感器采用铂热电阻,放大电路采用差动放大电路。

图1.1原理框图2原理及工作过程:实验原理如图1.1所示,温度测量电路由正温度系数电阻特性的铂热电阻R3为一臂组成测温电桥,经测量放大器后输出,将其值与控制温度相比较,超出设定温度电路进入保温状态,保温指示灯亮,低于设定温度时,电路进入加热状态同时加热指示灯亮。

由电路工作原理,本系统可划分为三个模块:1).温度测量电路2).差动放大电路3).保温加热电路2.单元电路设计与分析1).温度测量电路实现方式:桥式电路,如图利用电桥将随温度变化的组织转化为电压,电桥输出的电压为:ux=ucc(R2*Rp1—R1*R3)/(R2+R3)(R1+Rp1) Vcc6V4u1A1Lm324n11Vee-5VR660.8kΩR760.8kΩ11u1b7Lm324n432).差动放大电路在本模块中,采用由三片Lm324n构成的高阻抗差动放大器,其特点为:(1)高输入阻抗。

实训一 温度控制电路设计

实训一 温度控制电路设计

实训一温度控制电路设计
1、实训目的
1)熟悉PTC元件的特性;
2)学会使用专用集成电路TC620组成温度控制的典型应用。

2、温度集成电路知识
1)PTC元件基本特性
在正常工作范围内时,阻值随着温度的升高而升高的元件称为正温度系数热敏电阻,简称PTC元件。

PTC最重要的指标是居里温度点,当温度低于居里温度时,PTC元件电阻随温度变化非常缓慢,当超过居里温度时,阻值急剧增大。

PTC元件广泛用于恒温控制、过热保护、温度补偿等场所。

2)温度控制器
本实验所用到的TC620是一款可编程逻辑输出温度探测器,具体应用参数指标见TC620 datasheet。

TC620工作原理如图1.1所示。

图1-1
TC620结构框图如图1.2所示。

3、实训原理
RSL接120k,对应温度是35度。

水温控制电路的设计报告

水温控制电路的设计报告

目录一设计要求------------------------------------------------------------1 二设计作用目的-------------------------------------------------1 三设计的具体实现-------------------------------------------------1 系统概述-------------------------------------------------12 设计原理及方法-------------------------------------------------13 PCB版电路制作-------------------------------------------------10四心得体会-------------------------------------------------12五元器件明细表六参考文献-------------------------------------------------13 附图水温控制电路设计报告一设计要求1、要求控制电路能够对室温22~60℃有非常敏感的反应。

2、有温度设定功能,例如限制温度为40℃,对应4V电压值。

3、当温度超过设定值时,指示灯点亮进行报警提示。

4、总体设计画出电路原理框图。

5、单元电路设计。

6、原理图设计并绘制原理图。

7、利用仿真软件进行电路仿真,列出元件明细表。

8、撰写设计说明明书。

二设计作用、目的1、设计制作一个可以测量和控制温度的水温控制电路,该电路能够将水温控制在一个合适的范围内,实现对水温范围的改变。

2、温度控制器是实现可测温和控温的电路,通过对温度控制电路的设计安装和调试了解温度传感器的性能,学会在实际电路中的应用。

进一步熟悉集成运算放大器的线性和非线性的应用。

3、能够使用电路仿真软件进行电路调试。

水温控制电路的设计报告

水温控制电路的设计报告

水温控制电路设计报告一设计的具体实现1.1系统概述水温控制器电路的总体框图如图1所示。

它由温度传感器、同相比例运算放大电路、比较电路、加热电路,显示电路和电源电路6部分组成。

温度传感器同相比例运算放大电路比较电路加热电路显示电路电源电路图1 水温控制电路的总体框图本设计要将水温转化成电信号才能控制。

所以采用温度传感器来转化,将温度信号转化成电压信号,经同相比例运算放大电路适当放大后与设定的电压比较,设定的电压就代表特定的温度值。

当实际温度高于设定温度时,控制电路停止加热,同时显示电路开始工作,进行报警提示;当实际温度低于设定温度时,使电路接通加热。

这样就能自动控制温度在某个值或小范围波动。

电源电路的功能是为上述所有电路提供电源,包括直流电源和交流电源,设计中唯一用到交流电源的是加热电路,其余部分均为直流电源供电。

该设计问题可分为温度传感器模块,放大电路模块,比较器模块,继电器、加热模块,显示报警模块以及电源模块。

温度传感器模块,主要负责温度信号与电压信号的转化;放大器模块,使输出电压变为原来的十倍;比较器模块,控制温度的预设定电压;继电器、加热模块,当被测温度超过设定温度时,继电器动作,是触点断开停止加热,反之被测温度低于设置温度时,继电器触点闭合,进行加热;显示报警模块,当被测温度超过设定温度时,LED灯和蜂鸣器同时工作,提示报警。

1.2 单元电路设计、仿真与分析1.2.1温度传感器模块本设计选用LM35温度传感器来转化温度为电信号。

LM35是NS公司生产的集成电路温度传感器系列产品之一,它具有很高的工作精度和较宽的线性工作范围,该器件输出电压与摄氏温度线性成比例。

其转换公式为:o C T o C (式1-1)V10mV/=out在0℃时输出为0V,每升高1℃输出电压增加10mV,LM35的外观如图2所示图2 LM35外观图3 LM35实物图常温下LM35不需要额外的校准处理即可达到±1/4℃的准确率。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

温控电路设计报告书姓名:学校:专业:完成日期:2014/05/16目录1.设计要求 (1)2.总体设计方案 (1)2.1原理分析 (1)2.2功能模块的实现 (1)2.2.1控制模块 (1)2.2.2温度采集模块 (1)3.控制程序设计 (2)3.1程序流程图 (2)3.2程序模块说明 (2)附录 (3)1.主函数 (3)2.ADS1115驱动程序 (6)3.原理图 (13)1.设计要求设计一个温度测量电路,根据设定温度和测量值比较实现以下控制:定义:设定温度:ST(单位℃)测量温度:T(单位℃)控制逻辑要求:当ST> T+2时,继电器闭合(如果当前继电器为断开状态,并且断开时间不够3分钟,不允许闭合);当ST<T-2时,继电器断开(如果当前继电器为闭合状态,并且闭合时间不够3分钟,不允许断开);T-2=<ST<=T+2,继电器保持。

2.总体设计方案2.1原理分析根据要求,使用负温度系数的热敏电阻进行温度的测量,使用ADC采集电压,通过单片机计算得到温度值,并依据相应控制逻辑要求控制继电器的动作。

2.2功能模块的实现2.2.1控制模块使用89C51单片机进行控制部分的设计,如图1为单片机最小系统原理图,89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压、高性能CMOS 的8位微处理器,具有廉价、使用简单等优点。

本设计中采用89C51单片机完全可以满足要求。

通过单片机根据采集到的数据,控制继电器的动作。

图12.2.2温度采集模块热敏电阻温度测量电路采用简单的电阻分压电路,通过AD采集电压变化,通过单片机计算得出温度值,如图2所示。

TI公司的ADS1115是超小型16位精密模数转换器(ADC),具有板载基准电压和振荡器,通过I2C兼容接口传输数据,工作电压从2.0V到5.5V,取样频率高达860SPS,连续模式的功耗仅为150uA,工作温度从–40℃到+140℃。

本设计中使用ADS1115采集电压,满足精度要求。

图23.控制程序设计3.1程序流程图流程图如图3所示,单片机按照该流程进行温度的采集与继电器的控制。

图33.2程序模块说明程序主要分为ADS1115的电压采集、温度值的计算、根据逻辑控制继电器动作三个部分。

附录1.主函数#include<reg52.h>#include"ads1115.h"#define ST 30.0 //设定温度sbit relay=P0^7; //继电器控制引脚float T; //当前温度int count=0; //定时计数bit en_relay=1; //继电器允许动作标志位//温度范围从0~50摄氏度code float table[]={28.38,27.13,25.94,24.81,23.74,22.72,21.75,20.83,19.95,19.12,18.32,17.57,16.85,16.16,15.5,14.88,14.28,13.71,13.17,12.65,12.16,11.69,11.24,10.81,10.39,10.0,9.623,9.263,8.918,8.588,8.272,7.97,7.68,7.402,7.136,6.881,6.637,6.402,6.177,5.961,5.754,5.556,5.365,5.182,5.006,4.837,4.674,4.518,4.368,4.224,4.085,0};void Judge(); //逻辑控制函数void delay(int); //延时函数int GetTemp(); //获取温度值///*******************************************//函数名称:main//功能:主函数//参数:无//返回值:无//********************************************void main(){TMOD=0x01; //定时器模式设置TH0=0x3C;TL0=0xB0;ET0=1;TR0=0; //定时停止EA=1;while(1){GetTemp();Judge();delay(100);}}///*******************************************//函数名称:Delay//功能:延时函数//参数:x 设置延时时间//返回值:无//********************************************void delay(int x){int i,j;for(i=x;i>0;i--)for(j=110;j>0;j--);}///*******************************************//函数名称:GetTemp//功能:获取电压值并换算成温度值//参数:无//返回值:-1:超出范围 1:在测量范围内//********************************************int GetTemp(){int i;float vol;float res;vol=ADS1115(0,1); //ADS1115的AIN1输入res=50.0/vol-10.0; //换算得到热敏电阻当前阻值if(res>28.38 || res<4.085)return -1;for(i=0;i<50;i++){if(res<=table[i] && res>table[i+1]) //查表并计算得到温度{T=i+(table[i]-res)/(table[i]-table[i+1]);}}return 1;}///*******************************************//函数名称:Judge//功能:按照要求实现逻辑控制//参数:无//返回值:无//******************************************** void Judge(){if(en_relay) //如果继电器允许工作{if(ST>T+2) //如果 ST>T+2{relay=0; //继电器闭合en_relay=0; //不允许继电器工作TR0=1; //开启3分钟定时}if(ST<T-2) //如果 ST<T-2{relay=0; //继电器打开en_relay=0; //不允许继电器工作TR0=1; //开启3分钟定时}//如果 T-2=<ST<=T+2,继电器保持}}///******************************************* //函数名称:定时器中断T0//功能:定时3分钟后允许继电器动作//参数:无//返回值:无//******************************************** void timer0() interrupt 1{TH0=0x3C;TL0=0xB0;count++;if(count==3600) //定时3分钟{count=0;en_relay=1; //允许继电器动作TR0=0; //关闭计时}}2.ADS1115驱动程序#ifndef __ADS1115_H__#define __ADS1115_H__sbit SCL = P1^0;sbit SDA = P1^1;#define TRUE 1#define FALSE 0/************POINTER REGISTER*****************/#define Pointer_0 0x00 //Convertion register#define Pointer_1 0x01 //Config register#define Pointer_2 0x02 //Lo_thresh register#define Pointer_3 0x03 //Hi_thresh register/************CONFIG REGISTER*****************/#define MUX_0 0x0000 //AINp=AIN0, AINn=AIN1#define MUX_1 0x1000 //AINp=AIN0, AINn=AIN3#define MUX_2 0x2000 //AINp=AIN1, AINn=AIN3#define MUX_3 0x3000 //AINp=AIN2, AINn=AIN3#define MUX_4 0x4000 //AINp=AIN0, AINn=GND#define MUX_5 0x5000 //AINp=AIN1, AINn=GND#define MUX_6 0x6000 //AINp=AIN2, AINn=GND#define MUX_7 0x7000 //AINp=AIN3, AINn=GND#define MODE_0 0x0000#define MODE_1 0x0100#define COMP_POL_0 0x0000#define COMP_POL_1 0x0008#define COMP_LAT_0 0x0000#define COMP_LAT_1 0x0040//*************ADDR Initial********************/#define ADDRESS 0x90 //ADDR PIN ->GND#define ADDRESS_W ADDRESS|0x00 //写地址#define ADDRESS_R ADDRESS|0x01 //读地址/*************Config Initial*********************/#define OS 0x8000#define MUX_A0 MUX_4 //AINp=AIN0, AINn=GND#define MUX_A1 MUX_5 //AINp=AIN1, AINn=GND#define MUX_A2 MUX_6 //AINp=AIN2, AINn=GND#define MUX_A3 MUX_7 //AINp=AIN3, AINn=GND#define MUX_A01 MUX_0 //AINp=AIN0, AINn=AIN1 即01通道差分输入#define MUX_A23 MUX_3 //AINp=AIN2, AINn=AIN3 即23通道差分输入#define PGA 0x0200 //#define MODE 0x0100 //Continuous conversion mode#define DR 0x00E0 //Data Rate = 860#define COMP_QUE 0x0003void Delay_us_15 (void);void Delay_ms_1 (void); //功能:延时void Start(void); //功能:完成IIC的起始条件操作void Stop(void); //功能:完成IIC的终止条件操作void ACK(void); //功能:完成IIC的主机应答操作void NACK(void); //功能:完成IIC的主机无应答操作unsigned char Check(void);//功能:检查从机的应答操作void Write_1_Byte(unsigned char DataByte);//写 1个字节unsigned char Write_N_Byte(unsigned char *writebuffer,unsigned char n); //写 N个字节unsigned char Read_1_Byte(void);//读 1个字节void Read_N_Byte(unsigned int *readbuff,unsigned char n);//读 N个字节void InitADS1115(bit S_MUX_0, bit S_MUX_1);//ADS1115初始化void WriteWord(void);//写void ReadWord(void);//读unsigned int ADS1115(bit S_MUX_0, bit S_MUX_1);//ADS1115取值#endif#include<reg52.h>#include<intrins.h>#include"ads1115.h"unsigned int Config;unsigned char Writebuff[4],Readbuff[3];unsigned int Result[2];int D_ADS; //转换的数字量void Delay_us_15 (void) /*延时程序*/{unsigned char i;for(i = 0;i < 15;i++)_nop_();}void Delay_ms_1 (void){unsigned char i;for(i = 150;i > 0;i--) _nop_();}///******************************************* //函数名称:Start//功能:完成IIC的起始条件操作//参数:无//返回值:无//********************************************/ void Start(void){SCL=1;SDA=1;Delay_us_15 ();SDA=0;Delay_us_15 ();SCL=0;Delay_us_15 ();}/////******************************************* //函数名称:Stop//功能:完成IIC的终止条件操作//参数:无//返回值:无//********************************************/ void Stop(void){SDA=0;Delay_us_15 ();SCL=1;Delay_us_15 ();SDA=1;Delay_us_15 ();}///******************************************* //函数名称:ACK//功能:完成IIC的主机应答操作//参数:无//返回值:无//********************************************/ void ACK(void){SDA=0;_nop_(); _nop_();SCL=1;Delay_us_15 ();SCL=0;_nop_(); _nop_();SDA=1;Delay_us_15 ();}//******************************************* //函数名称:NACK//功能:完成IIC的主机无应答操作//参数:无//返回值:无//********************************************/ void NACK(void){SDA=1;_nop_(); _nop_();SCL=1;Delay_us_15 ();SCL=0;_nop_(); _nop_();SDA=0;Delay_us_15 ();}//**********检查应答信号函数******************/ ///*如果返回值为1则证明有应答信号,反之没有*/ ///******************************************* //函数名称:Check//功能:检查从机的应答操作//参数:无//返回值:从机是否有应答:1--有,0--无//********************************************/ unsigned char Check(void){unsigned char slaveack;SDA=1;_nop_(); _nop_();SCL=1;_nop_(); _nop_();_nop_(); _nop_();// _nop_(); _nop_();slaveack = SDA; //读入SDA数值SCL=0;Delay_us_15 ();if(slaveack)return FALSE;elsereturn TRUE;}/***************Write a Byte****************/void Write_1_Byte(unsigned char DataByte){int i;for(i=0;i<8;i++){if(DataByte&0x80) //if((DataByte<<i)&0x80)SDA=1;elseSDA=0;Delay_us_15 ();SCL=1;Delay_us_15 ();SCL=0;Delay_us_15 ();DataByte <<= 1;}SDA=1;_nop_();}/***************Write N Byte****************/unsigned char Write_N_Byte(unsigned char *writebuffer,unsigned char n){int i;for(i=0;i<n;i++){Write_1_Byte(*writebuffer);if(Check()){writebuffer ++;}else{Stop();return FALSE;}}Stop();return TRUE;}//***************Read a Byte****************/unsigned char Read_1_Byte(void){unsigned char data_Value = 0, FLAG, i;for(i=0;i<8;i++){SDA=1;Delay_us_15 ();SCL=1;Delay_us_15 ();FLAG=SDA;data_Value <<= 1;if( FLAG)data_Value |= 0x01;SCL=0;Delay_us_15 ();}return data_Value;}//***************Read N Byte****************/void Read_N_Byte(unsigned int*readbuff, unsigned char n) {unsigned char i;for(i=0;i<n;i++){readbuff[i]=Read_1_Byte();if(i==n-1)NACK(); //不连续读字节elseACK(); //连续读字节}Stop();}//*****************初始化******************/void InitADS1115(bit S_MUX_0, bit S_MUX_1){if (S_MUX_0 == 0 && S_MUX_1 == 0) //AIN0 Config = OS+MUX_A0+PGA+DR+COMP_QUE+MODE;if (S_MUX_0 == 0 && S_MUX_1 == 1) //AIN1 Config = OS+MUX_A1+PGA+DR+COMP_QUE+MODE;// if (S_MUX_0 == 1 && S_MUX_1 == 0) //AIN2// Config = OS+MUX_A2+PGA+DR+COMP_QUE+MODE;// if (S_MUX_0 == 1 && S_MUX_1 == 1) //AIN3// Config = OS+MUX_A3+PGA+DR+COMP_QUE+MODE;if (S_MUX_0 == 1 && S_MUX_1 == 0) //01通道差分输入Config = OS+MUX_A01+PGA+DR+COMP_QUE+MODE;if (S_MUX_0 == 1 && S_MUX_1 == 1) //23通道差分输入Config = OS+MUX_A23+PGA+DR+COMP_QUE+MODE;Writebuff[0]=ADDRESS_W;Writebuff[1]=Pointer_1;Writebuff[2]=Config/256;Writebuff[3]=Config%256;Readbuff[0]=ADDRESS_W;Readbuff[1]=Pointer_0;Readbuff[2]=ADDRESS_R;}//***************Write a Word***********************/void WriteWord(void){int t;Start(); //写入4个字节do{t=Write_N_Byte(Writebuff,4);}while(t==0);}//***************Read Word***********************/ void ReadWord(void){int t;Start(); //写入2个字节do{t=Write_N_Byte(Readbuff,2);}while(t==0);Start(); //写入2个字节do{t=Write_N_Byte(&Readbuff[2],1);}while(t==0);Read_N_Byte(Result,2); //读出2个字节}//***************ADS1115********************///参数说明 (S_MUX_0,S_MUX_0) (0,0) 0通道输入// (0,1) 1通道输入// (1,0) 01通道差分输入// (1,1) 23通道差分输入unsigned int ADS1115(bit S_MUX_0, bit S_MUX_1){InitADS1115(S_MUX_0, S_MUX_1);WriteWord();Delay_ms_1();ReadWord();D_ADS=Result[0]*256+Result[1]; //转换的数字量return D_ADS;}3.原理图。

相关文档
最新文档