STC8G项目已经完成,诚邀梁工和各位大神指点一下
看论坛里最近都在讨论电源问题,这个项目里用的是长晶的CJ78M05,测试了两块板子反复开关机没有发现电压过冲烧芯片的问题,想请教一下,是所有的电源IC上电都有过冲吗,还是只有不好的电源呢?我也做了保护,5.6v 0.5w的稳压二极管,但是因为板子空间有限所以没加自复位保险丝。最后烦请梁工和各位大神对原理图给一些指点,感谢感谢
代码如下
#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口置位低电平,再改为推挽输出 电路设计已经很好,控制板将会很稳定的。
唯一建议,就是14V可以并联一个18V的TVS管(下图右箭头指示)。
EG1192我没用过,请详细看其规格书C6(100nF)是否合适(下图左箭头指示)。
梁工 发表于 2023-11-30 11:52
电路设计已经很好,控制板将会很稳定的。
唯一建议,就是14V可以并联一个18V的TVS管(下图右箭头指示)。
{:4_174:}真不愧是大佬,屹晶微也是这么建议我的加一个TVS管,太厉害了 单片机好难 发表于 2023-11-30 12:02
真不愧是大佬,屹晶微也是这么建议我的加一个TVS管,太厉害了
常规处理而已。 梁工 发表于 2023-11-30 13:14
常规处理而已。
感谢梁工{:4_197:}
页:
[1]