仿真图:
芯片/模块的特点:
L298特点:
高驱动能力:L298具有高驱动电流能力,能够提供最高4安培的峰值输出电流。这使得它可以驱动较大功率的直流电机,适用于许多高性能应用。
双全桥结构:L298具有双全桥结构,即两个独立的H桥电路,可以分别控制两个直流电机的运行方向和速度。这种结构使得同时控制多个电机变得更加方便。
输入控制灵活:L298的输入控制接口可以使用标准的逻辑电平(TTL或CMOS)来控制电机的运行。它可以接受脉冲宽度调制(PWM)信号来实现速度控制,并且支持正向、反向和制动模式的控制。
内置保护功能:L298具有内置的过流保护和过温保护功能,可以保护芯片和外部电路免受损坏。当输出电流超过设定值或芯片温度过高时,保护功能会自动触发。
低功耗待机模式:L298具有低功耗待机模式,可以通过控制输入信号将芯片置于低功耗状态。这有助于节省电能和延长电池寿命。
多种封装形式:L298可提供不同的封装形式,如多引脚直插式封装(DIP)和表面贴装技术(SMT)封装。这使得L298适应不同应用的安装需求。
PCF8591特点:
多功能性:PCF8591芯片包含了4个独立的模拟输入通道和一个模拟输出通道。这意味着它可以同时读取多个模拟信号并输出一个模拟信号。
高精度:芯片的ADC和DAC都是8位的,所以它可以提供较高的信号分辨率和精确度。
可编程增益:PCF8591芯片允许用户通过软件配置增益,以适应不同的信号幅度。
低功耗:该芯片的功耗相对较低,适合在功耗要求较低的应用中使用。
I2C接口:PCF8591芯片通过I2C(Inter-Integrated Circuit)总线与微控制器或其他设备进行通信。这种接口设计简单,方便与其他设备进行连接。
LM358特点:
双通道放大器:LM358包含两个独立的运算放大器,可单独使用或同时使用。每个通道都具有输入、输出和电源引脚,可以方便地处理两个信号源或执行不同的放大功能。
宽工作电压范围:LM358可以在广泛的电源电压范围内工作,通常为单一供电电压范围(3V至32V)。这使得它适用于不同电源供电系统的应用。
低功耗:LM358采用低功耗设计,在工作时功耗较低。这使得它适用于对功耗要求较高的电池供电应用。
高输入阻抗:LM358具有高输入阻抗,可以减少对信号源的负载影响,提供更准确和稳定的信号放大。
外部补偿:LM358具有用于外
主程序:
#include<reg52.h>
#include"delay.h"
#include"lcd602.h"
#include"iic.h"
#include"pwm.h"
#include"pwm1.h"
#include"pwm2.h"
/*******************数组定义********************/
uchar tab1[] = {"R1: R2: "}; //3 12
uchar tab2[] = {"R3: "}; //3
/*******************端口定义********************/
/*******************变量定义********************/
double dianya1 = 0; //电压1
double dianya2 = 0; //电压2
double dianya3 = 0; //电压2
/*******************主函数********************/
void main()
{
chushihua(); //液晶初始化
iic_init(); //IIC初始化
write_string(1,0,tab1);
write_string(2,0,tab2);
init_t0();
init_t1();
init_t2();
while(1)
{
/*电压采集*/
dianya1=read_add(0x90,0x40)*5.0/255*10/3/0.01; //计算电压,进而计算温度
dianya1=read_add(0x90,0x40)*5.0/255*10/3/0.01; //计算电压,进而计算温度
dianya2=read_add(0x90,0x41)*5.0/255*10/3/0.01; //计算电压,进而计算温度
dianya2=read_add(0x90,0x41)*5.0/255*10/3/0.01; //计算电压,进而计算温度
dianya3=read_add(0x90,0x42)*5.0/255*10/3/0.01; //计算电压,进而计算温度
dianya3=read_add(0x90,0x42)*5.0/255*10/3/0.01; //计算电压,进而计算温度
write_num31(1,3,dianya1); //显示温度1
write_num31(1,12,dianya2); //显示温度2
write_num31(2,3,dianya3); //显示温度3
/*温度1控制*/
if(dianya1/10<18)
{pwm(0);}
else if(dianya1/10>=18 && dianya1/10<=23)
{pwm(50);}
else
{pwm(100);}
/*温度2控制*/
if(dianya2/10<20)
{pwm1(0);}
else if(dianya2/10>=20 && dianya2/10<=25)
{pwm1(50);}
else
{pwm1(100);}
/*温度3控制*/
if(dianya3/10<23)
{pwm2(0);}
else if(dianya3/10>=23 && dianya3/10<=28)
{pwm2(50);}
else
{pwm2(100);}
}
}
设计文件: