mos控制灯 pwm_PWM开关电源详细剖析

PWM技术是当今电源和通信产业的新宠,以其优越的性能、小巧的体积、高可靠性被广泛应用。

8cefd8e7859e941e14a3e8282895b724.png

PWM(pulse width modulation),英文直译就是脉冲宽度调制,是应用数字信号所携带的信息来控制模拟电路输出的一种典型且有效的技术,目前应用十分广泛。如变频器,通过改变脉冲周期可以实现调频,通过改变占空比可以实现调压;电脑主板供电利用PWM技术实现DC-DC升降压,解决了CPU、显卡、内存所需的低电压(低至1V)、大电流(可达90A)的特殊供电需求。

bac0fdf55f14697b6500e5303de94b9c.png

传统技术中电压的改变靠交流变压器,而对于便携设备中所需要的多种电压,工频的交流变压器体积和效率明显满足不了需求。通过研究电磁转换的原理,人们发现只要是不断变化的电流且频率更高,所需要的变压器的材料更轻质、体积更小巧,得益于半导体工业的发展,提高频率由晶体管或MOS管的振荡工作方式实现,而可替代正弦交流电的数字脉冲可由微处理器通过编程轻松的实现,且变压效果完全可以和正弦交流电相媲美。

4a4c5cf12fed312d24d0c44f19d09767.png

利用PWM技术,现在可以实现高效率的DC-DC电压转换,电脑主板上的12伏供电通过电源芯片输出不同的PWM脉冲来控制MOS管的供电时间,将MOS管输出的断断续续的电流通过储能元件-电感转化为连续的电压较低的直流电,供给有不同电压需要的单元使用。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
void PWM_THREAD(void* arg) { uint16_t t = 0; uint16_t key = 0; adc_init(); /* 初始化ADC */ chanl_init(); atmr_tmrx_npwm_chy_init(AUTOLOAD - 1, PRE_DIVIDER - 1); /* 初始化高级定时器PWM输出模式 */ dsp_mos_init(); dsp_rd_init(); DSP_MOS1(1); DSP_MOS2(1); DSP_MOS3(1); DSP_MOS4(1); Temp_data.pwm_ch=5; Temp_data.pwmdutyr=AUTOLOAD/4; // Temp_data.mos_ch = 2; Temp_data.mos_enable = 1; while (1) { osMutexAcquire(tempmutex,osWaitForever); key++; /* 输出5个PWM波(控制TMR8_CH1, 即PC6输出5个脉冲) */ t++; osDelay(1); if (t >= 10) /* 控制LED0闪烁, 提示程序运行状态 */ { t = 0; atmr_tmrx_npwm_chy_set(100); /* 高级定时器设置输出PWM个数 最多255个*/ } if(key>2000) { key=0; if(Temp_data.pwm_ch > 5) Temp_data.pwm_ch=0; Temp_data.tempmax = Temp_data.test_temp[0]; for(uint8_t i =0;i<8;i++) { if(Temp_data.test_temp[i]>Temp_data.tempmax) Temp_data.tempmax = Temp_data.test_temp[i]; } if(Temp_data.receivebuf[1]==WRITEDUTYR||(dutyr>0&&dutyr<AUTOLOAD)) { sutyrcrc = crc16_modbus(Temp_data.receivebuf,6); dutyrcrc_H = (uint16_t)((sutyrcrc&0xFF00)>>8); dutyrcrc_L = (uint16_t)(sutyrcrc&0x00FF); if((dutyrcrc_H == Temp_data.receivebuf[6])&&(dutyrcrc_L == Temp_data.receivebuf[7])) { pwmdutyr_H = (uint16_t)(Temp_data.receivebuf[4]&0xFF00); pwmdutyr_L = (uint16_t)Temp_data.receivebuf[5]; Temp_data.pwmdutyr = (pwmdutyr_H<<8)|pwmdutyr_L; if(Temp_data.pwmdutyr>AUTOLOAD) { Temp_data.pwmdutyr=AUTOLOAD; } if(Temp_data.pwmdutyr==0) { Temp_data.pwmdutyr=(AUTOLOAD/100)*20; } pwm_start(Temp_data.pwmdutyr,Temp_data.pwm_ch); } else if(dutyr>0&&dutyr<AUTOLOAD) { Temp_data.pwmdutyr = dutyr; pwm_start(Temp_data.pwmdutyr,Temp_data.pwm_ch); } } else { if(Temp_data.tempmax>25) { Temp_data.pwmdutyr = (uint32_t)(Temp_data.tempmax*2); pwm_start(Temp_data.pwmdutyr,Temp_data.pwm_ch); } else if(Temp_data.tempmax<25) { Temp_data.pwmdutyr=(AUTOLOAD/100)*20; pwm_start(Temp_data.pwmdutyr,Temp_data.pwm_ch); } else if(Temp_data.tempmax>50) { Temp_data.pwmdutyr = AUTOLOAD; pwm_start(Temp_data.pwmdutyr,Temp_data.pwm_ch); } // Temp_data.pwm_RD[Temp_data.pwm_ch-1] = readfault_channel(Temp_data.pwm_ch); } readRD(Temp_data.pwm_RD); } osMutexRelease(tempmutex); } },解析这段代码
07-15

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值