单片机好难 发表于 2023-11-30 10:49:36

STC8G项目已经完成,诚邀梁工和各位大神指点一下

看论坛里最近都在讨论电源问题,这个项目里用的是长晶的CJ78M05,测试了两块板子反复开关机没有发现电压过冲烧芯片的问题,想请教一下,是所有的电源IC上电都有过冲吗,还是只有不好的电源呢?我也做了保护,5.6v 0.5w的稳压二极管,但是因为板子空间有限所以没加自复位保险丝。
最后烦请梁工和各位大神对原理图给一些指点,感谢感谢

单片机好难 发表于 2023-11-30 11:25:12

代码如下
#include "reg51.h"
#include "intrins.h"
sfr   CCON    =   0xd8;
sbit    CF      =   CCON^7;
sbit    CR      =   CCON^6;
sbit    CCF2    =   CCON^2;
sbit    CCF1    =   CCON^1;
sbit    CCF0    =   CCON^0;
sfr   CMOD    =   0xd9;
sfr   CL      =   0xe9;
sfr   CH      =   0xf9;
sfr   CCAPM0=   0xda;
sfr   CCAP0L=   0xea;
sfr   CCAP0H=   0xfa;
sfr   PCA_PWM0 =0xf2;
sfr   CCAPM1=   0xdb;
sfr   CCAP1L=   0xeb;
sfr   CCAP1H=   0xfb;
sfr   PCA_PWM1 =0xf3;
sfr   CCAPM2=   0xdc;
sfr   CCAP2L=   0xec;
sfr   CCAP2H=   0xfc;
sfr   PCA_PWM2 =0xf4;
sfr   WDT_CONTR   =   0xc1;
sfr   AUXR      =   0x8e;
sfr   ADC_CONTR   =   0xbc;
sfr   ADC_RES   =   0xbd;
sfr   ADC_RESL    =   0xbe;
sfr   ADCCFG      =   0xde;
sfr   P5          =   0xC8;
sfr   P_SW2       =   0xba;
sfr   P_SW1       =   0xA2;
#define ADCTIM(*(unsigned char volatile xdata *)0xfea8)



sfr   P3M1    =   0xb1;
sfr   P3M0    =   0xb2;

sfr   P5M1    =   0xc9;
sfr   P5M0    =   0xca;

sbit    P33    =   P3^3;
sbit    P32    =   P3^2;
sbit    P31    =   P3^1;
sbit    P30    =   P3^0;
sbit    P54    =   P5^4;
sbit    P55    =   P5^5;

unsigned char dwq=0;

void TM0_Isr() interrupt 1
{
       
      
               


}

void Delay500us()                //@20.000MHz
{
        unsigned char i, j;

        i = 10;
        j = 183;
        do
        {
                while (--j);
        } while (--i);
}



void main()
{
    P33=0;
          P32=0;
          P31=1;
          P30=1;
    P3M0 = 0x0C;
          P3M1 = 0x00;
    P33=0;
          P32=0;
          P31=1;
          P30=1;
    P5M0 = 0x00;
          P5M1 = 0xFF;
   
    AUXR |= 0x80;                                                  //定时器时钟1T模式
    TMOD = 0x00;                              //模式0
    TL0 = 0xF0;                                                          //设置定时初始值
          TH0 = 0xD8;                                                          //设置定时初始值//20mhz
    TR0 = 1;                                    //启动定时器
    ET0 = 1;                                    //使能定时器中断
    EA = 1;
    //ADC
          P_SW2 |= 0x80;
    ADCTIM = 0x3f;                              //设置ADC内部时序
    P_SW2 &= 0x7f;
    ADCCFG = 0x0f;                              //设置ADC时钟为系统时钟/2/16
    ADC_CONTR = 0x85;                           //使能ADC模块
    //PWM
                CCON = 0x00;
    CMOD = 0x0A;                              //PCA时钟为系统时钟
    CL = 0x00;
    CH = 0x00;
    CCAPM0 = 0x42;                              //PCA模块2为PWM工作模式
    PCA_PWM0 = 0x00;                            //PCA模块2输出8位PWM
    CCAP0L = 0xff;                               //PWM占空比为0%[(100H-20H)/100H]
    CCAP0H = 0xff;
    CR = 1 ;

    WDT_CONTR = 0x24;                           //使能看门狗,溢出时间约为39-65

    while (1){
                   WDT_CONTR = 0x34;                     //清看门狗,否则系统复位
                       CR=1;        
                       ADC_CONTR |= 0x40;                     //启动AD转换
       _nop_();
       _nop_();
                       _nop_();
       _nop_();
                       while (!(ADC_CONTR & 0x20));             //查询ADC完成标志
       ADC_CONTR &= ~0x20;                     //清完成标志
                     dwq=(ADC_RES*10)/12;
                       if(255- dwq<CCAP0H &&255- dwq<251){
                       if(CCAP0H>251){
                       CCAP0H=251;
                       }
                          CCAP0H -=1 ;                                
                       }
                        if(255- dwq>CCAP0H){
                  
                        CCAP0H +=1 ;

                }
                        Delay500us();
                        if(CCAP0H>=251){
                        P33=0;
                        CR=1;
                        CCAP0H=255;
                        }        else{
                  P33=1;
                                CR=1;
        }
             
}
}
先把IO口置位低电平,再改为推挽输出

梁工 发表于 2023-11-30 11:52:59

电路设计已经很好,控制板将会很稳定的。

唯一建议,就是14V可以并联一个18V的TVS管(下图右箭头指示)。
EG1192我没用过,请详细看其规格书C6(100nF)是否合适(下图左箭头指示)。


单片机好难 发表于 2023-11-30 12:02:37

梁工 发表于 2023-11-30 11:52
电路设计已经很好,控制板将会很稳定的。

唯一建议,就是14V可以并联一个18V的TVS管(下图右箭头指示)。


{:4_174:}真不愧是大佬,屹晶微也是这么建议我的加一个TVS管,太厉害了

梁工 发表于 2023-11-30 13:14:49

单片机好难 发表于 2023-11-30 12:02
真不愧是大佬,屹晶微也是这么建议我的加一个TVS管,太厉害了

常规处理而已。

单片机好难 发表于 2023-11-30 14:27:43

梁工 发表于 2023-11-30 13:14
常规处理而已。

感谢梁工{:4_197:}
页: [1]
查看完整版本: STC8G项目已经完成,诚邀梁工和各位大神指点一下