完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
目前想要驱动一个H桥电路,硬件连接的是PWM0和PWM1口,想要实现PWM0和PWM1同频率,同占空比的90度相位差的PWM. 请教大家一下实现的思路,基于M051_Series_BSP_CMSIS_V3.01.003库。
|
|
相关推荐
1个回答
|
|
在M051_Series_BSP_CMSIS_V3.01.003库中,可以使用Timer和PWM模块实现PWM移相,具体步骤如下:
1. 配置Timer0和Timer1为PWM模式,并设置同一周期的计数值(周期可以根据实际需要调整)。 2. 配置PWM0和PWM1的占空比和极性,使它们输出同频率、同占空比、90度相位差的PWM信号。 3. 在Timer0的比较匹配中断中,将Timer1的比较值设为当前计数值加上一定的相位差。比如,如果要实现90度相位差,则将Timer1的比较值设为当前计数值加上PWM周期的四分之一。 4. 在Timer1的比较匹配中断中,将Timer0的比较值设为当前计数值加上相同的相位差。 5. 重复步骤3和步骤4,实现持续的PWM移相。 以下是具体的代码实现(仅供参考): ```c #include "NUC505Series.h" /* 定义PWM周期和占空比 */ #define PWM_PERIOD (255) #define PWM_DUTY (128) /* 定义PWM移相的相位差 */ #define PWM_PHASE_DIFF (PWM_PERIOD / 4) /* 定义Timer0和Timer1的比较值 */ volatile uint32_t u32Timer0CMP, u32Timer1CMP; void TMR0_IRQHandler() { /* 清除Timer0中断标志 */ TIMER_ClearIntFlag(TIMER0); /* 设置Timer1比较值 */ TIMER_SET_CMP_VALUE(TIMER1, 0, u32Timer1CMP); } void TMR1_IRQHandler() { /* 清除Timer1中断标志 */ TIMER_ClearIntFlag(TIMER1); /* 设置Timer0比较值 */ TIMER_SET_CMP_VALUE(TIMER0, 0, u32Timer0CMP); } int main() { /* 初始化系统时钟和中断向量表 */ SystemInit(); NVIC_EnableIRQ(TMR0_IRQn); NVIC_EnableIRQ(TMR1_IRQn); /* 配置GPIO引脚为PWM功能 */ GPIO_SetMode(PA, BIT15, GPIO_MODE_OUTPUT); PWM_ConfigOutputChannel(PWM0, PWM_CH0, PWM_PERIOD, PWM_DUTY); PWM_EnableOutput(PWM0, PWM_CH0); GPIO_SetMode(PA, BIT14, GPIO_MODE_OUTPUT); PWM_ConfigOutputChannel(PWM1, PWM_CH0, PWM_PERIOD, PWM_DUTY); PWM_EnableOutput(PWM1, PWM_CH0); /* 配置Timer0和Timer1为PWM模式 */ TIMER_Open(TIMER0, TIMER_PWM_MODE, PWM_PERIOD); TIMER_EnableInt(TIMER0); TIMER_Start(TIMER0); TIMER_Open(TIMER1, TIMER_PWM_MODE, PWM_PERIOD); TIMER_EnableInt(TIMER1); TIMER_Start(TIMER1); /* 设置Timer0和Timer1比较值 */ u32Timer0CMP = PWM_PERIOD / 2; u32Timer1CMP = PWM_PERIOD / 2 + PWM_PHASE_DIFF; TIMER_SET_CMP_VALUE(TIMER0, 0, u32Timer0CMP); TIMER_SET_CMP_VALUE(TIMER1, 0, u32Timer1CMP); /* 进入主循环 */ while (1); } ``` |
|
|
|
只有小组成员才能发言,加入小组>>
818 浏览 0 评论
1162 浏览 1 评论
2536 浏览 5 评论
2871 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2720 浏览 6 评论
keil5中manage run-time environment怎么是灰色,不可以操作吗?
1114浏览 3评论
198浏览 2评论
465浏览 2评论
382浏览 2评论
M0518 PWM的电压输出只有2V左右,没有3.3V是怎么回事?
463浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-29 08:12 , Processed in 1.054364 second(s), Total 78, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号