找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3660|回复: 10
收起左侧

铅酸电池太阳能充电模块STM8程序资料 12V/24V自动识别

  [复制链接]
ID:730359 发表于 2020-4-16 10:39 | 显示全部楼层 |阅读模式
文档说明
资料中提供的是一份针对铅酸电池的 太阳能12V/24V自动识别充电控制器的技术资料,包括硬件图纸、源程序、工艺说明和使用说明,技术资料。
1、    硬件图纸包括一份原理图和对应的PCB图,使用PROTEL99SE或者其他兼容软件打开,没有该软件或者兼容软件的,请自己想办法下载软件。
2、    开发环境,源程序使用C语言编写,开发环境使用STVD+COSMIC。STVD是ST公司官方提供的免费单片机开发平台,只能编译汇编,但允许使用第三方C语言编译器COSMIC,在STVD的平台上运行源程序,除了去ST公司下载STVD以外,还要去COSMIC官网下载针对STM8单片机的第三方软件。COSMIC提供32K免费一年的版本,用户可以下载注册获取许可证,有了STVD和COSMIC就可以建立起软件开发平台了。需要注意的是,由于COSMIC的免费版本不断升级,安装时的路径可能与源工程文件中设置的目录有差别,用户可以在STVD的工程设置中修改成正确的编译器连接目录。如下图:
51hei.png
在Toolset中选择 STM8 Cosmic,在Root path中选择COSMIC STM8的正确路径。
源文件中使用iostm8s003.h头文件,可以使用COSMIC提供的iostm8s103.h替代。
3、    关于单片机STM8S003K3的开发环境,提供了三份文档,三份文档均来自ST公司官方资料。
A、    基于STM8S单片机如何进行项目开发,开头讲到了开发需要的文档信息。
B、    STM8S003K3的数据手册,注意这份文件只是针对该型号的一些特异性和电气属性,不涉及寄存器与具体的编程操作。
C、    STM8S系列单片机的中文编程手册,英文好的最好到官网下载英文的手册,英文有时候比中文版本的更新信息更准确。该文档介绍了STM8S整个系列的寄存器以及操作方法,不特指STM8S003K3。
4、    关于工艺说明书以及实物
本套资料是经过市场检验的,确定可以使用的产品资料,工艺说明书以及使用说明书中给出了比较详细的加工,使用注意事项。
5、本程序是其他程序中移植而来,所以源程序C语言的变量、宏定义和一些语句可能与本模块无关,但是并不影响功能,阅读或移植时,请留意辨别。

该说明书对应的硬件版本:12V/24V   V1.0
一、    模块参数
1、    系统电压:    12V/24V自动识别
2、    额定充电电流:20A
3、    提升充电电压:14.6V / 29.2V
4、    直充充电电压:14.4V / 28.8V
5、    浮充充电电压:13.6V / 27.2V
6、    超压保护:    17V  / 34V
7、    欠压:        12V  / 24V
8、    过放:        11.1V / 22.2V
9、    温度补偿:    -4mV /℃/2V
二、    系统连线
请按下图连接,最好在蓄电池的正极出线口使用一个保险丝,防止蓄电池外线短路。
51hei.png

图1 连接图
三、    LED指示灯说明12V/24V
1、    太阳能电池板指示灯:常亮表示有光照;黑夜指示灯熄灭;快速闪烁表示系统超压。
2、    浮充指示灯:进入充电状态,该灯闪烁;不充电,该灯灭。
3、    蓄电池指示灯:该灯常亮表示电压高于12.5V/25V,电压正常;蓄电池电压大于11.1V/22.2V,但是小于12.5V/25V,该灯闪烁表示欠压。
4、    蓄电池缺电:该灯亮,表示电压低于11.1V / 22.2V;电压回复到12.5V以上,则熄灭。
四、    注意事项
1、    电路板固定时,要特别留意如果固定器件是金属,千万不可导致电路板上电路短路。
2、    连接蓄电池和太阳能板的导线一定要牢靠,焊接导线的时候可以在走大电流的路径上再加焊锡,以增大导通能力。
3、    电路板不防水,要在恰当的环境下使用。
4、    尽量通风,可以有效降低发热。

加工工艺参考书
本指导书针对电路板:12V/24V 20A V1.0
加工工艺仅作参考,可根据实际情况和经验做调整。
一、    工具类
1、    电烙铁:焊接插件和涂锡选用40W或者50W电烙铁,功率太低的电烙铁可能拉锡的时候功率不够,过大功率的电烙铁可能会导致铜皮脱落。但是焊接贴片元器件时,建议使用外热20W/30W电烙铁。
2、    专用工装:工装是用来焊接保持产品一致性,提高生产效率的特定装备,需要根据用户自身需求自行设计,比如焊接4个LED灯的高度控制等,可以考虑自行设计工装。
二、    MOS管的组装
1、    电路板上共使用2颗MOS管,充电电流会流经这两颗MOS管,所以当以20A充电时MOS管会发热,MOS管上必须安装散热片以解决发热问题,否则MOS管会因为发热严重而烧毁。因此MOS管跟散热片的安装非常重要。
2、    散热片是双管脚固定的,实际电路板上只有一个管脚用到,所以另外一个管脚可以剪掉或者压弯。
3、    在MOS管的扇热面涂抹导热硅脂,将MOS管和散热片用螺钉拧紧。注意必须保证MOS管跟散热片接触紧密,这样有利导热,另外还要保证MOS管的固定位置处于散热片的中间,否则散热片的管脚和MOS管管脚焊接时错位。
三、    焊接流程
贴片元器件使用贴片机自动焊接,以下仅针对插件以及大电流走线的涂锡部分。
1、    插件焊接原则是先焊接矮的,再焊接高的。
2、    焊接电容时,请注意插件电容均有极性,请按电路板上的标识进行焊接,请勿极性焊反。电容焊接时,电容管脚不能悬空,要将电容安装到位后焊接。
3、    焊接40A保险丝时,为了保持整洁美观,保险丝最好不要悬空焊接。因为保险丝上要走大电流,所以焊接保险丝必须要有足够的焊锡。
4、    焊接4个LED指示灯。LED指示灯是有方向的,切勿焊反。实际LED指示灯长脚对应二极管的正极,短脚对应二极管的负极。焊接高度的控制 可以根据实际要求利用工装解决。另外要注意由于LED的安装高度较高,两个管脚之间要避免短路。
5、    大电流部分的拉锡焊。模块以20A充电时,电路板部分线路上会流过大电流,为了增加电路板走线的导通能力,需要在部分走线上拉锡。电路板上所有开窗的走线正面和反面均需要做拉锡处理。拉锡均匀且足量。除了走线拉锡以外,MOS管与走线相连的部分也要涂上足够的锡,总之在整个20A电流的回路中不管走线粗还是细都尽量多涂焊锡,以确保导电能力。
   
四、    充电测试
1、    焊接完成以后,进入测试以前,先要目测一下电路板上器件状态,电容极性有无搞错,二极管方向是否正确等等。
2、    连接导线测试。导线连接示意图见使用说明书

单片机源程序如下:
  1. /*
  2. 程序:太阳能控制器充电模块
  3.       
  4. 硬件:本程序适用12V/24V  20A V1.0
  5. 作者:
  6. 日期:
  7. 基本功能表述:
  8. 1、只有充电功能
  9. 2、额定电压:    12V/24V铅酸电池自动识别?

  10. 3、提升充电电压:14.6V/29.2V
  11. 4、直充充电电压:14.4V/28.8V
  12. 5、浮充充电电压: 13.6V/27.2V
  13. 7、超压电压:    17V/34V
  14. 8、欠压:        12V/24V
  15. 9、过放:         11.1V/22.2V
  16. 10、温度补偿范围 -5 --- 55 °,仅对 充电返回,提升充电,直充 ,  浮充进行补偿
  17. 11、使用内部 16M RC振荡器,2分频,8Mhz运行,对于时间要求不严 ,可使用内部RC,如果对时间要求很高,则使用外部8M晶振
  18. 12、额定电流 20A

  19. 修改记录:
  20. 修改LED的指示功能
  21. 1.   1号灯,绿灯,不接太阳能板或者黑夜时 不亮, 接上太阳能电池板,有光照时 常亮。
  22. 2.   2号灯   绿灯,开始充电后,闪烁;不充电 不亮。
  23. 3.   3号灯   绿灯,电压达到正常电压后,常亮, 低于标准电压后闪烁。
  24. 4.   4号灯   红灯,电池降低到最低电压后红灯常亮, 高于最低电压熄灭。

  25. 修改PWM_BAT初始化时的状态,有原来的初始=0,改为初始化=1, 以关闭对应MOS管

  26. */



  27. #include <iostm8s003.h>
  28. #define GLOBAL
  29. #include "data.h"

  30. #include "ad.h"
  31. #include "display.h"
  32. #include "manage.h"


  33. //-------------------------------------------------
  34. //--------------------------------------------------

  35. //---------------------------------------------------------------------------------
  36. //----------------------------------------------------------------------------------
  37. //----------------------------------------------------------------------------------
  38. void sys_initialize(void);
  39. void wtd_manage(unsigned char wtd_data);

  40. int main( void )
  41. {  
  42.     //--------------clock--io,ad,time,eeprom,ram  initialize-------------
  43.     sys_initialize();  
  44.     while(1)
  45.     {
  46.         analyze_manage();      //根据ad值 综合处理
  47.         wtd_manage(IWTD_FEED);    //喂狗
  48.     }
  49. }
  50. void wtd_manage(unsigned char wtd_data) //独立看门狗一旦开启 ,将无法关闭
  51. {
  52.     if (1 == wtd_data)          //启动看门狗
  53.     {
  54.         IWDG_KR = 0XCC;
  55.         IWDG_KR =  0X55; //解锁
  56.         IWDG_RLR = 0XFF;
  57.         IWDG_PR =  0x06; //256分频
  58.         IWDG_KR = 0XAA;        
  59.     }
  60.     else if (2 == wtd_data) //喂狗
  61.     {
  62.         IWDG_KR = 0XAA;
  63.     }
  64. }

  65. void sys_initialize(void)
  66. {
  67.    unsigned char temp1 = 0;
  68.    unsigned char temp2 = 0;
  69.    unsigned char temp3 = 0;
  70.    unsigned long temp4 = 0;
  71.   //---------------如果需要对时钟进行管理先进行时钟管理---------------   
  72.         for(temp4 = 0; temp4 < 255; temp4++)
  73.         {
  74.                 ;
  75.         }
  76.         //---------------使用内部RC---------------
  77.     CLK_ICKCR |= 0X01;//开HSI
  78.     while (!(CLK_ICKCR & 0x02));
  79.     CLK_CKDIVR = 0X08;  //HSI 2分频后 8M,保持与外部晶振一致,CPU的频率 = 8M
  80.     CLK_HSITRIMR = 0x00; //不进行校正
  81.     TEST:
  82.     CLK_PCKENR1 = 0X80;  //TIME 1 时钟使能
  83.     CLK_PCKENR2 = 0X08; //AD
  84.         
  85.     //-----------------io 口设置--------------------------
  86.         CFG_GCR |= 0x01;//PD1做io口,不做SWIM仿真口
  87.     PA_DDR = 0X08; //PA3 输出,PA1,PA2设置成输入
  88.     PA_CR1 = 0XFE; //PA3 推挽输出,PA1 PA2上拉输入
  89.     PA_CR2 = 0X00; //
  90.     PA_ODR = 0X00; //输出为0
  91.    
  92.     PB_DDR = 0XC0; //PB6,PB7输出,PB5 PB4 PB0未用,PB3--PB1 ,AD?
  93.     PB_CR1 = 0Xf1;
  94.     PB_CR2 = 0X00;
  95.     PB_ODR = 0X00; //
  96.    
  97.     PC_DDR = 0X00; //PC全部没有使用
  98.     PC_CR1 = 0XFF; //
  99.     PC_CR2 = 0X00; //
  100.     PC_ODR = 0X00; //
  101.    
  102.     PD_DDR = 0XC0; //PD6、PD7作为PWM控制输出 推挽,其他PD口 均做上拉输入
  103.     PD_CR1 = 0XFF;
  104.     PD_CR2 = 0X00;
  105.     PD_ODR = 0x80;
  106.         
  107.         PE_DDR = 0X00; //PE5 上啦输入
  108.         PE_CR1 = 0XFF;
  109.         PE_CR2 = 0X00;
  110.         PE_ODR = 0X00;
  111.         
  112.         PF_DDR = 0X10; //PF4 推挽输出
  113.         PF_CR1 = 0XFF;
  114.         PF_CR2 = 0X00;
  115.         PF_ODR = 0X00;
  116.    
  117.     //-----------------ram 初始--------------------------------------

  118.     ad_ch.pv_mosoff = 0XFF; //设置成黑夜
  119.         flag.charge_enable = DISABLE; //
  120.    
  121.     //-----------------ADC 采集设置----------------------------------
  122.     ADC_TDRL = 0XFF;
  123.     ADC_TDRH = 0XFF;
  124.     ADC_CSR  = 0X02; //通道2,禁止转换中断,禁止模拟看门狗中断,转换未结束
  125.     ADC_CR1  = 0X20; //8MHZ 4分频,频率2M,单次转换,禁止ADC
  126.     ADC_CR2  = 0X08; //数据右对齐,禁止外部触发,禁止扫描
  127.     ADC_CR3  = 0X00; //
  128.    
  129.     //-----------------定时器TIME1设置,0.5ms中断一次------------------------------------
  130.     TIM1_PSCRH = 0X00;
  131.     TIM1_PSCRL = 0X07; //8分频 后 1MHZ
  132.     TIM1_ARRH =  0X01; //定时 0.5ms
  133.     TIM1_ARRL =  0Xf4;
  134.     TIM1_CNTRH = 0X00;
  135.     TIM1_CNTRL = 0X00;
  136.     TIM1_CR1   = 0X01; //启动计数器工作,允许更新事件发生?挥屑拇嫫鞲虏挪率录?
  137.                      //禁止自动预装载,计数器向上计数,边缘 对齐
  138.     TIM1_IER = 0X01; //允许更新中断
  139.         
  140.         
  141.     display_open();
  142.     _asm("rim");
  143.         wtd_manage(IWTD_ON);
  144. }

  145. //----------------------------------------定时器中断 0.5ms-------------------------
  146. @far @interrupt void tim1_over_int (void)
  147. {
  148.         
  149.     static unsigned char time_30MS = 0;
  150.     static unsigned char ad_times = 0; //ad采集的次数
  151.    
  152.     static unsigned int  time_2000MS = 0;
  153.     static unsigned char time_pulse = 0;
  154.         
  155.         static unsigned char time_load_pwm = 0;
  156.         
  157.         static unsigned long time_bat_full = 0; //电池充满时间
  158.         
  159.     unsigned char i;
  160.     unsigned int temp_ad;
  161.     static unsigned char count=0;
  162.    
  163.    
  164.     static unsigned int  led_pv_time = 0;
  165.         static unsigned int  led_float_time = 0;
  166.     static unsigned int  led_bat_time = 0;
  167.     static unsigned int  led_load_time = 0;
  168.    
  169.     TIM1_SR1 &= ~0X01;
  170.    
  171.     //--------------各种延时,延时可能存在交差,所以使用各自延时,不共用-------------------
  172.    
  173.     if (flag.start_delay_10M_open == 1)    //延时10分钟 对应黑夜判断
  174.     {
  175.         if(++time_delay_10M_open >= TIME_DELAY_10M)  
  176.         {
  177.             flag.over_delay_10M_open = 1;
  178.         }
  179.     }
  180.    
  181.     if (flag.start_delay_10M_close == 1)   //十分钟 对应白天判断
  182.     {
  183.         if(++time_delay_10M_close >= TIME_DELAY_10M)
  184.         {
  185.             flag.over_delay_10M_close = 1;
  186.         }
  187.     }
  188.    
  189.    
  190.     if (flag.start_delay_2S_day == 1)  // 此处的时间2S
  191.     {
  192.         if(++time_delay_2S_day >= TIME_DELAY_2S)
  193.         {
  194.             flag.over_delay_2S_day = 1;
  195.         }
  196.     }
  197.    
  198.    
  199.     if (flag.start_delay_30M_directcharge == 1)//延时30分钟
  200.     {
  201.         if(++time_delay_30M_directcharge >= TIME_DELAY_30M)
  202.         {
  203.             flag.over_delay_30M_directcharge = 1;
  204.         }
  205.     }
  206.    
  207.     //----------------充电MOS控制----------------------------------------------------
  208.     //MOS控制是一直进行的。分负载和充电
  209.     //充电,每个周期30ms,33HZ  //2S插入 5ms的低电平,和5ms 高 电平
  210.     if (flag.charge_enable == ENABLE)
  211.     {
  212.         ad_times = 0;
  213.         time_2000MS++;
  214.         time_30MS++;
  215.         if ((time_2000MS >= 4000) && (time_30MS >= PWM_H_NUM))
  216.         {
  217.             if (++time_pulse > 10)
  218.             {
  219.                 time_2000MS = 0;
  220.                 time_pulse = 0;
  221.             }
  222.             else
  223.             {
  224.                 if (time_pulse == 9)
  225.                 {
  226.                     ad_ch.bat_mosoff_buf = 0;
  227.                     ad_ch.pv_mosoff_buf = 0;
  228.                     for (i = 0; i<2;i++)
  229.                     {
  230.                         ad_ch.bat_mosoff_buf  += ad_collect(AD_BAT) ;//
  231.                         ad_ch.pv_mosoff_buf  += ad_collect(AD_PV);
  232.                     }
  233.                     ad_ch.bat_mosoff = ad_ch.bat_mosoff_buf >> 1;
  234.                     ad_ch.pv_mosoff  = ad_ch.pv_mosoff_buf  >> 1;   
  235.                 }
  236.                 if (time_pulse <= 10)
  237.                 {
  238.                     PV_PWM_L;
  239.                     BAT_PWM_L;
  240.                 }
  241.             }
  242.         }
  243.         else
  244.         {
  245.             ad_ch.bat_mosoff_buf = 0;
  246.             ad_ch.pv_mosoff_buf = 0;
  247.             temp_ad = 0;
  248.             for (i = 0;i<2;i++)
  249.             {
  250.                 temp_ad += ad_collect(AD_BAT) ;
  251.             }
  252.             ad_ch.bat_moson_average_buf += (temp_ad >> 1);
  253.             count++;
  254.             if (time_30MS >= PWM_H_NUM)
  255.             {
  256.                 time_30MS = 0;
  257.                 ad_ch.bat_moson_average = ad_ch.bat_moson_average_buf / count  ;
  258.                 if ((ad_ch.bat_moson_average_buf % count) != 0)
  259.                 {
  260.                     ad_ch.bat_moson_average += 1;
  261.                 }
  262.                 ad_ch.bat_moson_average_buf = 0;
  263.                 count = 0;
  264.                 pwm_h_num = pwm_h_num_buf;
  265.                                 flag.calculate_pwm_enable = 1;
  266.                
  267.                 if (pwm_h_num == 0)
  268.                 {
  269.                     PV_PWM_L;
  270.                     BAT_PWM_L;
  271.                 }
  272.                 else
  273.                 {
  274.                     PV_PWM_H;
  275.                     BAT_PWM_H;
  276.                 }   
  277.             }
  278.             else
  279.             {
  280.                 if (time_30MS >= pwm_h_num)
  281.                 {
  282.                     PV_PWM_L;
  283.                     BAT_PWM_L;
  284.                 }
  285.                 else
  286.                 {
  287.                     PV_PWM_H;
  288.                     BAT_PWM_H;
  289.                 }
  290.             }
  291.         }
  292.     }
  293.     else
  294.     {
  295.                 PV_PWM_L;
  296.         BAT_PWM_L;
  297.         time_2000MS = 0;
  298.         time_30MS = 0;
  299.         time_pulse = 0;
  300.         ad_ch.bat_moson_average_buf = 0;
  301.         ad_ch.bat_mosoff_buf  += ad_collect(AD_BAT) ;//
  302.         ad_ch.pv_mosoff_buf  += ad_collect(AD_PV);
  303.         if (++ad_times >= 16)
  304.         {
  305.             ad_ch.bat_mosoff = ad_ch.bat_mosoff_buf / 16;
  306.             if (ad_ch.bat_mosoff_buf % 16 )
  307.             {
  308.                 ad_ch.bat_mosoff += 1;
  309.             }
  310.             ad_ch.pv_mosoff  = ad_ch.pv_mosoff_buf  /16;
  311.             if (ad_ch.pv_mosoff_buf % 16 )
  312.             {
  313.                 ad_ch.pv_mosoff += 1;
  314.             }
  315.             ad_ch.bat_mosoff_buf = 0;
  316.             ad_ch.pv_mosoff_buf = 0;
  317.             ad_times = 0;
  318.         }   
  319.     }
  320.     //------------------------------------------------------------------
  321.     //------------------------------------------------------------------
  322.      
  323.     //----------------------------LED灯闪烁管理---------------------------------
  324.     //PB6
  325.     //pv指示灯:正常充电       常亮
  326.     //          超压           快速闪烁  12V系统大于17V  24V系统大于34V
  327.     //          白天但未充电   慢闪
  328.     //--------------------pv_led----------------------------
  329.     if (flag.alarm_over_voltage_bat  == 1)//电池超压,快闪,超压
  330.     {
  331.         if (++led_pv_time > TIME_DELAY_100MS)
  332.         {
  333.             led_pv_time = 0;
  334.             PB_ODR ^= 0X40; //PB6
  335.         }
  336.     }
  337.                 else if (flag.pv_close_load == ENABLE)//  2014-9-3 增加
  338.                 {
  339.                         LED_PV_H;
  340.                 }
  341.     else
  342.     {
  343.         LED_PV_L;  //晚上长灭
  344.     }
  345.     //-------------------bat_led----------------------------
  346.           //GRENN LED---PF4
  347.           //RED   LED---PB7
  348.     //电压正常---------绿色灯常亮
  349.     //欠压    ---------绿色灯慢闪
  350.     //过放    ---------红色灯亮
  351.         
  352.         if (flag.alarm_lower_voltage  == 1 && flag.return_lower_voltage == 1) //发生了过放并且当前的低压低于过放返回电压
  353.         {
  354.                 //红灯亮,绿灯灭
  355.                 LED_BAT_G_L;
  356.                 LED_BAT_R_H;
  357.                
  358.         }
  359.         else if (flag.alarm_low_voltage == 1) //欠压,
  360.         {
  361.                 LED_BAT_R_L;
  362.                 if (++led_bat_time > TIME_DELAY_1S)
  363.                 {
  364.                         led_bat_time = 0;
  365.                         PF_ODR ^= 0X10;
  366.                 }        
  367.                
  368.         }
  369.         else   //电压正常
  370.         {
  371.                 LED_BAT_G_H;
  372.                 LED_BAT_R_L;
  373.                
  374.         }
  375. //-----------------------------FLOAT CHARGE----------------
  376. //浮充 正在充电 该灯闪烁,如果不充电 则不亮
  377.     if ( (flag.charge_enable == 1) ) //充电中 进入浮充状态90分钟算充满 ,绿色闪烁&& (flag.charge_mode == 3)
  378.         {
  379.                 if (++led_float_time > TIME_DELAY_1S)
  380.         {
  381.             led_float_time = 0;
  382.             PB_ODR ^= 0X80;
  383.         }
  384.                
  385.         }
  386.         else
  387.         {
  388.                 LED_FLOAT_L;
  389.         }
  390.    
  391. }
复制代码

所有资料51hei提供下载(这个电路板可在某宝搜索获得,广告一下):
太阳能充电模块资料.7z (3.68 MB, 下载次数: 183)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:142383 发表于 2020-4-16 16:11 | 显示全部楼层
资料比较详细,学习学习!
回复

使用道具 举报

ID:349717 发表于 2020-4-19 09:46 | 显示全部楼层
大神啊,我过来学习下
回复

使用道具 举报

ID:292518 发表于 2020-4-19 09:49 | 显示全部楼层
大神请教一下,
3、提升充电电压:14.6V/29.2V
4、直充充电电压:14.4V/28.8V
5、浮充充电电压: 13.6V/27.2V
7、超压电压:    17V/34V

这几个参数 怎么改?
回复

使用道具 举报

ID:281113 发表于 2020-4-29 16:36 | 显示全部楼层
这个可以!
回复

使用道具 举报

ID:196702 发表于 2020-4-29 19:08 | 显示全部楼层
下载学习,感谢分享
回复

使用道具 举报

ID:71233 发表于 2020-6-16 10:21 | 显示全部楼层
请教大神,如何检测电池电已充满?电池电压还是充电电流?
12V的电池充满电的电压是多少伏?充电电流又是多少才算电已充满?
回复

使用道具 举报

ID:526148 发表于 2020-7-23 00:13 来自手机 | 显示全部楼层
可以贴出来电路图吗?想学习下
回复

使用道具 举报

ID:47634 发表于 2020-7-23 06:38 | 显示全部楼层
这个很好,感谢楼主的无私奉献,下载学习
回复

使用道具 举报

ID:507641 发表于 2022-9-17 10:29 | 显示全部楼层
移植 stc 要注意什么?对 stm8不了解用 stm8也麻烦!谢谢!
回复

使用道具 举报

ID:169891 发表于 2023-2-6 16:40 | 显示全部楼层
没看到12V/24V自动识别部分
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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