矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
查看: 11271|回复: 23

【参赛】DIY电子负载仪

[复制链接]
     
发表于 2019-12-19 14:24:05 | 显示全部楼层
抢沙发,支持楼主。
回复 支持 反对

使用道具 举报

     
发表于 2019-12-19 14:30:06 | 显示全部楼层
楼主厉害~ 这比我用单片机做的电池放电仪高档多了
回复 支持 反对

使用道具 举报

     
发表于 2019-12-19 15:30:39 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2019-12-19 15:35:27 | 显示全部楼层
本帖最后由 IRF540 于 2019-12-19 15:36 编辑
书到用时 发表于 2019-12-19 15:30
单片机控制恒流不难,控制恒阻比较难。
理论上可以用单片机+数字电位器实现控制,可数字电位器局限比较大 ...


恒阻的话 数字电位器固定好位置,就不用动了, 分压比例只要不变,理论上整机电阻不变, 当然实际因为分压出来的Uref传递到采样电阻上 需要经过几级运放和大管,还是有一点点延迟的。

您说的其他需求,其实把Uref换成DAC就可以了。用微芯那些廉价的MCP DAC即可,单片机控制部分反而是最简单的。

实际上 之前有个版本我甚至做了个3.5mm插座, 只要外接信号源就会把电压信号转为电流, 不过后来觉得麻烦,就没继续搞。
回复 支持 反对

使用道具 举报

     
发表于 2019-12-20 00:27:46 | 显示全部楼层
感谢您参赛,你的作品很好,但是缺少一项关键的内容,请关注大赛公告中有关对参赛稿件要求的章节,或参考已用过审核的参赛作品,尽快修改补充,通过审核。谢谢!
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2019-12-20 20:56:03 | 显示全部楼层
lq19512003 发表于 2019-12-20 00:27
感谢您参赛,你的作品很好,但是缺少一项关键的内容,请关注大赛公告中有关对参赛稿件要求的章节,或参考已 ...

补图
微信图片_20191220205303.jpg
补图


补源码:
#include "STC15F60.h"
#include "intrins.h"            

#define   LOAD_RUN P26
#define   TIG_SYNC P25
#define   WAVE_EN P24
#define   TEMP_HIGH P22
#define   CURR_LOW_PWR P21
#define   TEMP_HIGH_LED P20

#define   RUN_LED P33

#define   SW_1ms P10
#define   SW_10ms P11
#define   SW_100ms P12
#define   SW_1000ms P13
#define   SW_EXT_TIG P14
#define   SW_WAVE P15
#define   RUN 0
#define   STOP 1





bit EXT_MARK ;        //外置触发标记
bit TEMP_HIGH_MARK; //过热标记 0过热,1正常。

//精准定时
void Delay1ms()                //@24.000MHz
{
        unsigned char i, j;

        i = 24;
        j = 85;
        do
        {
                while (--j);
        } while (--i);
}

void Delay10ms()                //@24.000MHz
{        unsigned char i, j, k;
        _nop_();
        _nop_();
        i = 1;
        j = 234;
        k = 113;
        do
        {
                do
                {
                        while (--k);
                } while (--j);
        } while (--i);
}
void Delay100ms()                //@24.000MHz
{
        unsigned char i, j, k;

        _nop_();
        _nop_();
        i = 10;
        j = 31;
        k = 147;
        do
        {
                do
                {
                        while (--k);
                } while (--j);
        } while (--i);
}

void Delay1000ms()                //@24.000MHz
{
        unsigned char i, j, k;

        _nop_();
        _nop_();
        i = 92;
        j = 50;
        k = 238;
        do
        {
                do
                {
                        while (--k);
                } while (--j);
        } while (--i);
}


//---------------
void DISP()
{         char SW ;
     while(1)
        {  
          while(!TEMP_HIGH){
          EA = 0;
          P0 = 0xFF;
          SW = P0;
          LOAD_RUN = STOP;
          RUN_LED = STOP;
          TEMP_HIGH_LED = !TEMP_HIGH_LED;
          Delay100ms();
          Delay100ms();
          }       
          EA = 1;
          TEMP_HIGH_LED = 1;  
          
          if(SW != P1 ) {
      LOAD_RUN = STOP;
          WAVE_EN = STOP;
          SW = P1;
          P0 = P1;
          } else if(EXT_MARK == 1) {
                 LOAD_RUN = !TIG_SYNC;
            }
                 
        }
}
//---------------
void main()
{       
    P0M0 = 0x00;
    P0M1 = 0x00;
    P1M0 = 0x00;
    P1M1 = 0x00;
    P2M0 = 0x00;
    P2M1 = 0x00;
    P3M0 = 0x00;
    P3M1 = 0x00;
    P4M0 = 0x00;
    P4M1 = 0x00;
    P5M0 = 0x00;
    P5M1 = 0x00;
    P6M0 = 0x00;
    P6M1 = 0x00;
    P7M0 = 0x00;
    P7M1 = 0x00;
           EXT_MARK = 0; //默认内部触发
    WAVE_EN = STOP;  //波形输入高电平
    LOAD_RUN = STOP;  //关驱动器
        CURR_LOW_PWR = 0;
        TEMP_HIGH = 1;
     P32 = 1;
     IT0 = 1;                    //设置INT0的中断类型 (1:仅下降沿)
     EX0 = 1;                    //使能INT0中断
      EA = 1;

         
          P0 = P1;
          DISP();

         
}
void exint0() interrupt 0       //INT0中断入口
{ EA = 0; //关中断
    LOAD_RUN = STOP;
        CURR_LOW_PWR = 0;
        RUN_LED = STOP ;
    if(SW_EXT_TIG == 0)  //外部触发
  {       
    EXT_MARK = !EXT_MARK;
        RUN_LED = !EXT_MARK;
        TIG_SYNC = 1;
        if(EXT_MARK == 0){LOAD_RUN = STOP;}
           Delay1ms();
  }       

  if(SW_WAVE == 0)  //波形触发
  {       
    WAVE_EN=!WAVE_EN;
        CURR_LOW_PWR = !CURR_LOW_PWR;
        RUN_LED = WAVE_EN ;          
         LOAD_RUN = !LOAD_RUN;
        Delay1ms();
  }

  if(SW_1ms == 0)  //1毫秒
  {RUN_LED = RUN ;
   Delay100ms();
   Delay1ms();
   LOAD_RUN = RUN;
   Delay1ms();
   LOAD_RUN = STOP;
   Delay10ms();
   LOAD_RUN = RUN;
   Delay1ms();
   LOAD_RUN = STOP;
   Delay10ms();       
   LOAD_RUN = RUN;
   Delay1ms();
   LOAD_RUN = STOP;
   Delay100ms();
   RUN_LED = STOP ;
  }       
    if(SW_10ms == 0)  //10毫秒
  {RUN_LED = RUN ;
   Delay100ms();
   Delay1ms();
   LOAD_RUN = RUN;
   Delay10ms();
   LOAD_RUN = STOP;
   Delay10ms();
   Delay10ms();
   Delay10ms();
   Delay10ms();
   Delay10ms();
   LOAD_RUN = RUN;
   Delay10ms();
   LOAD_RUN = STOP;
   Delay10ms();
   Delay10ms();
   Delay10ms();
   Delay10ms();
   Delay10ms();
   LOAD_RUN = RUN;
   Delay10ms();
   LOAD_RUN = STOP;
   Delay10ms();
   Delay10ms();
   Delay10ms();
   Delay10ms();
   Delay100ms();
   RUN_LED = STOP ;
   

  }       
  if(SW_100ms == 0)  //100毫秒
  {RUN_LED = RUN ;
   Delay100ms();
   LOAD_RUN = RUN;
   Delay100ms();
   LOAD_RUN = STOP;
   Delay100ms();
   Delay100ms();
   Delay100ms();
   Delay100ms();
   Delay100ms();
   LOAD_RUN = RUN;
   Delay100ms();
   LOAD_RUN = STOP;
   Delay100ms();
   Delay100ms();
   Delay100ms();
   Delay100ms();
   Delay100ms();
   LOAD_RUN = RUN;
   Delay100ms();
   LOAD_RUN = STOP;
   Delay100ms();
   Delay100ms();
   Delay100ms();
   RUN_LED = STOP ;
  
  }       
   if(SW_1000ms == 0)  //1000毫秒
  {RUN_LED = RUN ;
   Delay1ms();
   LOAD_RUN = RUN;
   CURR_LOW_PWR = 1;
   Delay1000ms();
   CURR_LOW_PWR = 0;
   LOAD_RUN = STOP;
   Delay1000ms();
   Delay1000ms();
   Delay1000ms();
   LOAD_RUN = RUN;
   CURR_LOW_PWR = 1;
   Delay1000ms();
   CURR_LOW_PWR = 0;
   LOAD_RUN = STOP;
   Delay1000ms();
   Delay1000ms();
   Delay1000ms();
   LOAD_RUN = RUN;
   CURR_LOW_PWR = 1;
   Delay1000ms();
   CURR_LOW_PWR = 0;
   LOAD_RUN = STOP;
   Delay100ms();
   RUN_LED =STOP ;
   Delay1000ms();
   }       

  //EA = 1;
}

回复 支持 反对

使用道具 举报

     
发表于 2019-12-21 14:34:49 | 显示全部楼层
应该有一张参赛作品与标签同拍的照片,标签书写的内容是参赛作品名称,拍照日期,作者名字。请参考其他通过审核的参赛贴。

评分

1

查看全部评分

回复 支持 反对

使用道具 举报

     
发表于 2019-12-21 22:52:20 | 显示全部楼层
有卖不?   厉害, 赞一个, 来赞
回复 支持 反对

使用道具 举报

     
发表于 2019-12-22 20:14:41 | 显示全部楼层
那这个是不是也可以改成数控电源了?就是怎么控制电流还没有搞懂
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2019-12-23 11:46:58 | 显示全部楼层
XMJIANG 发表于 2019-12-21 22:52
有卖不?   厉害, 赞一个, 来赞

上面有完整AD源文件和C51代码,直接可以打开 并提交厂家贴片的,大管是TIP35C。  建议散热片搞个大号的并加风扇,否则发热很大会频繁保护。
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2019-12-23 11:48:28 | 显示全部楼层
yzx0201 发表于 2019-12-22 20:14
那这个是不是也可以改成数控电源了?就是怎么控制电流还没有搞懂

就是个最基础的恒流源, 电压跟随器对采样电阻的电压进行跟随。 比如一个1欧的电阻, 串联在电路里,只要保证这个电阻两端电压是1V,那么整个串联的电路 电流必然是1A。
回复 支持 反对

使用道具 举报

     
发表于 2019-12-26 11:14:28 | 显示全部楼层
IRF540 发表于 2019-12-23 11:48
就是个最基础的恒流源, 电压跟随器对采样电阻的电压进行跟随。 比如一个1欧的电阻, 串联在电路里,只要 ...

谢谢,网上找了一些,后面想了一下,大概了解了一下。
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2019-12-26 21:33:03 | 显示全部楼层
lq19512003 发表于 2019-12-21 14:34
应该有一张参赛作品与标签同拍的照片,标签书写的内容是参赛作品名称,拍照日期,作者名字。请参考其他通过 ...

微信图片_20191226213146.jpg
已补图  麻烦您了
回复 支持 反对

使用道具 举报

     
发表于 2019-12-26 23:17:49 | 显示全部楼层
谢谢了!
回复 支持 反对

使用道具 举报

     
发表于 2020-1-5 23:03:36 | 显示全部楼层
之前收了好几种电子负载,结果都在家里吃灰
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

小黑屋|手机版|矿石收音机 ( 蒙ICP备05000029号-1 )

蒙公网安备 15040402000005号

GMT+8, 2024-4-23 17:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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