GD32F303 BLDC电机换向控制

[复制链接]
193|6
 楼主 | 2019-11-27 12:02 | 显示全部楼层 |阅读模式
BLDC直流无刷电机的控制需要MCU实现电子换向控制,GD32 MCU的高级定时器很适合用来说电机控制应用,可产生3对可编程死区的互补PWM波,还有一个空余通道可以用于进行ADC采样触发。加之高主频和零等待特性,GD32可以实现高性能的BLDC、FOC控制,拿GD32F303来说,M4F内核支持FPU,具有两个高级定时器,3个独立ADC模块。单芯片即可实现控制频率16K左右的双FOC控制。
BLDC控制相对FOC比较简单,实现转子位置检测并提前一定电角度换向即可。附件是此前学习BLDC的换向控制原理时做的按键控制单步顺序换向的demo,每按一下按键可以控制电机进行一次换向,测试时使用的电机是4对极,所以点击6*4次按键电机转动一圈。长按按键可固定占空比和换向延时进行无位置检测的开环运行,让电机连续转动。

换向demo.rar

534.2 KB, 下载次数: 11

使用特权

评论回复
| 2019-11-27 13:40 | 显示全部楼层
谢谢分享,,,,,,,

使用特权

评论回复
 楼主 | 2019-11-27 15:06 | 显示全部楼层
    通道配置切换时,需要注意各通道切换的一致性,在同一时刻生效,避免中间的时间差带来风险,所以可以采用直接写CHCTL2寄存器的方式、或者开启通道影子寄存器,配置好各通道后用软件换向事件让配置生效。如以下代码:   

           #ifdef  REGISTER

            temp =TIMER_CHCTL2(TIMER0);
            temp|=TIMER_CHCTL2_CH0EN|TIMER_CHCTL2_CH2NEN;
            temp&=~(TIMER_CHCTL2_CH0NEN|TIMER_CHCTL2_CH1EN|TIMER_CHCTL2_CH1NEN|TIMER_CHCTL2_CH2EN);
            TIMER_CHCTL2(TIMER0)=temp;

            #else
            timer_channel_output_state_config(TIMER0,TIMER_CH_0,TIMER_CCX_ENABLE);
            timer_channel_output_state_config(TIMER0,TIMER_CH_1,TIMER_CCX_DISABLE);
            timer_channel_output_state_config(TIMER0,TIMER_CH_2,TIMER_CCX_DISABLE);

            timer_channel_complementary_output_state_config(TIMER0, TIMER_CH_0, TIMER_CCXN_DISABLE);
            timer_channel_complementary_output_state_config(TIMER0, TIMER_CH_1, TIMER_CCXN_DISABLE);
            timer_channel_complementary_output_state_config(TIMER0, TIMER_CH_2, TIMER_CCXN_ENABLE);

            timer_event_software_generate(BLDC_PWM_TIMER, TIMER_EVENT_SRC_CMTG);            
            #endif

使用特权

评论回复
| 2019-11-30 20:20 | 显示全部楼层
试试看

使用特权

评论回复
| 2019-12-5 14:37 | 显示全部楼层
非常感谢楼主分享

使用特权

评论回复
| 2019-12-5 14:44 | 显示全部楼层
非常感谢楼主分享

使用特权

评论回复
| 2019-12-5 14:51 | 显示全部楼层
非常感谢楼主分享

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖