- 打卡等级:常住居民III
- 打卡总天数:192
- 最近打卡:2026-07-05 09:36:45
注册会员
- 积分
- 109
|
发表于 2026-5-14 11:52:04
|
显示全部楼层
我是在原来TL494半桥电源上换用STC芯片替换掉494,下拉电阻也有,开漏洞/高阻都用了,上电还是格达一声。我把程序发给你看看。
#define MAIN_Fosc 24000000L
#include "STC32G.h"
#define FIX_DEAD 8
sbit FREQ_20K = P3^4;
sbit FREQ_25K = P3^5;
sbit FREQ_36K = P3^6;
sbit FREQ_40K = P3^7;
sbit ESTOP = P3^3;
unsigned int Get_SetFreq(void)
{
if(FREQ_20K == 0) return 19000;
if(FREQ_25K == 0) return 24000;
if(FREQ_36K == 0) return 35000;
if(FREQ_40K == 0) return 39000;
return 27000;
}
void Delay1200ms(void)
{
unsigned int i, j, k;
for(i=2; i>0; i--)
for(j=200; j>0; j--)
for(k=110; k>0; k--);
}
void DelayFastStart(void)
{
unsigned int i, j, k;
for(i=2; i>0; i--)
for(j=200; j>0; j--)
for(k=50; k>0; k--);
}
void Delay_Wait_10S(void)
{
unsigned char a;
for(a=0; a<10; a++)
Delay1200ms();
}
// PWM初始化 只执行一次
void PWM_InitOnce(unsigned int freq)
{
unsigned int arr;
P_SW2 |= 0x80;
PWMA_ENO = 0x00;
PWMA_CR1 = 0x00;
PWMA_CCMR1 = 0x68;
PWMA_CCER1 = 0x05;
PWMA_DTR = FIX_DEAD;
PWMA_PS = 0;
PWMA_BKR = 0x80;
arr = MAIN_Fosc / freq - 1;
PWMA_ARRH = arr >> 8;
PWMA_ARRL = arr & 0xFF;
// 先设0占空比
PWMA_CCR1H = 0;
PWMA_CCR1L = 0;
PWMA_CCR2H = 0;
PWMA_CCR2L = 0;
PWMA_EGR = 1;
PWMA_CR1 |= 1;
PWMA_ENO = 0x03;
P_SW2 &= ~0x80;
}
// 只改占空比,不动周期、不重启PWM
void SetOnlyDuty(unsigned char duty)
{
unsigned int arr, ccr;
if(duty > 50) duty = 50;
P_SW2 |= 0x80;
arr = (PWMA_ARRH << 8) | PWMA_ARRL;
ccr = (unsigned long)arr * duty / 100;
PWMA_CCR1H = ccr >> 8;
PWMA_CCR1L = ccr & 0xFF;
PWMA_CCR2H = ccr >> 8;
PWMA_CCR2L = ccr & 0xFF;
P_SW2 &= ~0x80;
}
void main(void)
{
unsigned int base_freq;
unsigned char d;
P0M0 |= 0x03;
P0M1 &= ~0x03;
P3M0 = 0x00;
P3M1 = 0x00;
P_SW2 |= 0x80; // 使能扩展寄存器访问
Delay_Wait_10S();
base_freq = Get_SetFreq();
PWM_InitOnce(base_freq);
// 慢启动
for(d=0; d<=50; d++)
{
SetOnlyDuty(d);
DelayFastStart();
}
while(1)
{
SetOnlyDuty(50);
// 高电平急停
if(ESTOP == 1)
{
P_SW2 |= 0x80;
PWMA_ENO = 0x00;
PWMA_CR1 = 0x00;
P_SW2 &= ~0x80;
P1 = 0x00;
while(1);
}
}
}
|
|