找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4109|回复: 4
收起左侧

51单片机L298N控制小电机,程序修改

[复制链接]
回帖奖励 10 黑币 回复本帖可获得 2 黑币奖励! 每人限 1 次(中奖概率 60%)
ID:622126 发表于 2019-10-28 19:29 | 显示全部楼层 |阅读模式
用51单片机做恒温实验,DS18B20读取温度,低于温度下限继电器吸合加热棒加热,高于温度上限启动风扇降温,
启动风扇用L298N,
师傅要求从单片机引脚输出高低电平控制
目前降温如何用L298N没有一点思绪求大神指点程序如何修改,还有就是L298N如何接
现有程序如下

#include <reg52.h>
#include <ds18b20.h>        //引入DS18B20头文件

//引脚定义:               
sbit JDQ=P1^4;                //继电器控制
sbit SMG_q = P1^0;        //定义数码管阳级控制脚(千位)
sbit SMG_b = P1^1;        //定义数码管阳级控制脚(百位)
sbit SMG_s = P1^2;        //定义数码管阳级控制脚(十位)
sbit SMG_g = P1^3;        //定义数码管阳级控制脚(个位)

//变量定义:
unsigned char ly_dis[4];//定义显示缓冲区
unsigned char DSU=30;        //上线温度
unsigned char DSD=25;        //下线温度
code unsigned char table[]=
                        {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
                                        //表:共阳数码管 0-9
unsigned char l_posit=0;        //显示位置

//函数声明:
void display(void);//显示函数,显示缓冲区内容
void delay(void);

//主函数
void main()
{        
        unsigned int i=0;
        float tt;
        int ltemp;
        while(1){
                if(i==0)
                        tmpchange();              //温度转换
                if(i==100){
                        tt=tmp()*0.0625;          //得到真实十进制温度值,因为DS18B20
                                                                //可以精确到0.0625度,所以读回数据的最低位代表的是0.0625度。
                        if(tt<=DSD)                //低于下线温度启动继电器
                                JDQ=0;               
                        if(tt>=DSU)                //达到上线温度关闭继电器
                                JDQ=1;

                          ltemp=tt*10+0.5;           //放大十倍,这样做的目的将小数点后第一位也转换为可显示数字,同时进行一个四舍五入操作。
                        if(ltemp<0){                //判断第一位显示整数还是负号
                                ly_dis[0]=0xbf;
                                ltemp=0-ltemp;        
                        }
                        else
                                ly_dis[0]=ltemp/1000;//显示百位值
                        ltemp=ltemp%1000;
                        ly_dis[1]=ltemp/100;        //显示温度十位值
                        ltemp=ltemp%100;
                        ly_dis[2]=ltemp/10;                //显示温度个位值
                        ly_dis[3]=ltemp%10;                //显示小数点后一位
                }
                i++;
                if(i==3000)
                        i=0;
                display();        //调用显示        
                delay();        
        }
}

//显示函数,参数为显示内容
void display()
{
        P0=0XFF;                        //        
        switch(l_posit){
        case 0:                //选择千位数码管,关闭其它位
                SMG_q=0;
                SMG_b=1;        
                SMG_s=1;               
                SMG_g=1;
                P0=table[ly_dis[0]];        //输出显示内容
                break;
        case 1:                //选择百位数码管,关闭其它位
                SMG_q=1;
                SMG_b=0;        
                SMG_s=1;               
                SMG_g=1;
                P0=table[ly_dis[1]];
                break;
        case 2:                //选择十位数码管,关闭其它位
                SMG_q=1;
                SMG_b=1;        
                SMG_s=0;               
                SMG_g=1;
                P0=table[ly_dis[2]]&0x7f;
                break;
        case 3:                //选择个位数码管,关闭其它位
                SMG_q=1;
                SMG_b=1;        
                SMG_s=1;               
                SMG_g=0;
                P0=table[ly_dis[3]];
                break;
        }
        l_posit++;                //每调用一次将轮流显示一位
        if(l_posit>3)
                l_posit=0;        
}

//延时子函数,短暂延时
void delay(void){               
        unsigned char i=10;
        while(i--);
}

IMG_20191028_191812.jpg
回复

使用道具 举报

ID:631687 发表于 2019-10-28 21:38 | 显示全部楼层
你查下L298N,试着编看看。做单片机很多都是试出来的!(我也是新手)
回复

使用道具 举报

ID:610681 发表于 2019-10-28 21:44 | 显示全部楼层
你好!
1、L298模块有输入、输出和使能控制
2、输入端和使能端,接单片机IO口
3、输出端接电机(风扇)
4、L298模块,一般供电12V,风扇也选12V
回复

使用道具 举报

ID:496421 发表于 2019-11-2 14:56 | 显示全部楼层
IN1和IN2输入PWM,他们控制的是OUT1和OUT2,OUT1和2接同一个电机,IN3和IN4同理
回复

使用道具 举报

ID:584814 发表于 2019-11-4 21:44 | 显示全部楼层
如果只是低温加热高温散热的话,用两个口驱动两个继电器就可以了,一个开关电热器一个开关电风扇。程序就是读温度,在相应的温度区域驱动存放易燃继电器就可以。
L298N控制小电机是控制2路电机正反转的,你根本不需要。另从图上看,模块的2个使能口全部跳在高电平上已经有效,只要控制IN1-4口就可以在OUT1-4上控制两路电机正反转了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表