完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
/*---------------------------------------------------------------------------------------------------------*/
/* */ /* Copyright(c) 2019 Nuvoton Technology Corp. All rights reserved. */ /* */ /*---------------------------------------------------------------------------------------------------------*/ /***********************************************************************************************************/ /* Website: http://www.nuvoton.com */ /* E-Mail : MicroC-8bit@nuvoton.com */ /* Date : June/21/2019 */ /***********************************************************************************************************/ /************************************************************************************************************/ /* File Function: MS51 PWM insert dead time demo code */ /************************************************************************************************************/ #include "MS51_8K.H" /*PWM deadtime define */ void PWM0_DEAD_TIME_VALUE(unsigned int DeadTimeData) { unsigned char deadtmphigh,deadtmplow; deadtmplow = DeadTimeData; deadtmphigh = DeadTimeData>>8; BIT_TMP = EA; EA = 0; if (deadtmphigh==0x01) { TA = 0xAA; TA = 0x55; PDTEN|=0x10; } TA = 0xAA; TA = 0x55; PDTCNT = deadtmplow; EA = BIT_TMP; } /************************************************************************************************************/ /* Main function */ /* PWM4 P0.5 simple output a 2.7KHz 1/4high duty signal */ /************************************************************************************************************/ void main(void) { ALL_GPIO_QUASI_MODE; /*----------------------------------------------------------------------------------------------------------------- PWM frequency = Fpwm/((PWMPH,PWMPL)+1) = (16MHz/8)/(0x7CF+1) = 1KHz (1ms) PWM4 high duty = PWM4H,PWM4L = 0x01CF = 1/4 PWM period PWM0 high duty = PWM0H,PMW0L = 0x03CF = 1/2 PWM period Dead time = 0x1FF /Fsys = 0x1FF/Fsys = 512/16000000 = 32 us (max value) -----------------------------------------------------------------------------------------------------------------*/ ENABLE_PWM0_CH2_P10_OUTPUT; ENABLE_PWM0_CH3_P00_OUTPUT; ENABLE_PWM0_CH4_P01_OUTPUT; ENABLE_PWM0_CH5_P03_OUTPUT; PWM0_COMPLEMENTARY_MODE; //Only this mode support deat time function PWM0_CLOCK_DIV_8; PWMPH = 0x07; PWMPL = 0xCF; PWM2H = 0x03; PWM2L = 0xCF; set_SFRS_SFRPAGE; // PWM4 and PWM5 duty value need set SFPPAGE 1 PWM4H = 0x01; PWM4L = 0xCF; clr_SFRS_SFRPAGE; ENABLE_PWM0_CH23_DEADTIME; ENABLE_PWM0_CH45_DEADTIME; PWM0_DEAD_TIME_VALUE(0x1FF); //value never over 0x1FF //Please always setting Dead time if needed before PWM run. set_PWMCON0_LOAD; set_PWMCON0_PWMRUN; while(1); } |
|
相关推荐
1个回答
|
|
在MS51系列的MCU中,PWM输出时,若没有加死区(在两个电平切换时,加上一段时间的延迟),会导致输出在切换渐变过程中,由于上下桥臂内三极管的导通或开断时间存在差异,导致瞬间的短路现象,其产生原因如图所示:
因此,设置PWM输出时,需要加死区,使得输出的波形变得平稳。MS51的PWM死区设置需要考虑两个因素: 1.死区时间:这个时间是指在两个电平切换时加上的延迟时间,具体的时间要根据外设的要求和实际情况做出相应的调整。 MS51的PWM模块可以配置死区时间,最大值约为20个时钟周期。 2.占空比(Duty Cycle):通常情况下,占空比是指一个周期内PWM信号高电平时间和低电平时间的比例,即: DutyCycle=(T1+T2)/(T1+T2+T3+T4) 其中,T1和T3分别为高电平和低电平持续时间,T2和T4分别为上升沿和下降沿的时间。在MS51的PWM模块中,占空比可以配置为8位或16位,取决于要求的精度和输出频率。如果配置为8位,则占空比最大为255/256(99.6%);如果配置为16位,则占空比最大为65535/65536(99.9%)。 因此,在MS51的PWM死区设置中,需要同时考虑死区时间和占空比两个因素,以实现最佳的波形输出效果。具体实现过程可以参考MS51的数据手册和相关示例程序。 |
|
|
|
只有小组成员才能发言,加入小组>>
815 浏览 0 评论
1162 浏览 1 评论
2536 浏览 5 评论
2871 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2720 浏览 6 评论
keil5中manage run-time environment怎么是灰色,不可以操作吗?
1111浏览 3评论
198浏览 2评论
465浏览 2评论
379浏览 2评论
M0518 PWM的电压输出只有2V左右,没有3.3V是怎么回事?
462浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-28 03:36 , Processed in 0.920310 second(s), Total 78, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号