GD32F303 BLDC电机换向控制

[复制链接]
7055|19
 楼主| CharryW 发表于 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, 下载次数: 339

zeshoufx 发表于 2019-11-27 13:40 | 显示全部楼层
谢谢分享,,,,,,,
 楼主| CharryW 发表于 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

zhuotuzi 发表于 2019-11-30 20:20 来自手机 | 显示全部楼层
试试看
coshi 发表于 2019-12-5 14:37 | 显示全部楼层
非常感谢楼主分享
aoyi 发表于 2019-12-5 14:44 | 显示全部楼层
非常感谢楼主分享
drer 发表于 2019-12-5 14:51 | 显示全部楼层
非常感谢楼主分享
粒雄李雄 发表于 2020-3-24 22:47 | 显示全部楼层
CharryW 发表于 2019-11-27 15:06
通道配置切换时,需要注意各通道切换的一致性,在同一时刻生效,避免中间的时间差带来风险,所以可以采 ...

楼主你好,我定时器参照你的设定进行初始化,然后还是无法触发adc采集,adc初始化的需要注意什么吗?我的adc初始化是用例程的注入组初始化,请问是哪里出问题了吗?
hua_ren 发表于 2020-3-26 11:49 | 显示全部楼层
如果驱动PMSM电机,做正弦波驱动,该怎么配置呢?一直没有看到示例代码。难道只有自己摸索?
darklighttt 发表于 2020-3-26 21:57 | 显示全部楼层
hua_ren 发表于 2020-3-26 11:49
如果驱动PMSM电机,做正弦波驱动,该怎么配置呢?一直没有看到示例代码。难道只有自己摸索? ...

可以问官方要示例代码,或者从开源的代码上移植。
詹求实 发表于 2020-3-29 22:53 | 显示全部楼层
支持下,谢谢分享,如果有全套的代码就更好了。
xdqfc 发表于 2020-3-30 10:40 | 显示全部楼层
hua_ren 发表于 2020-3-26 11:49
如果驱动PMSM电机,做正弦波驱动,该怎么配置呢?一直没有看到示例代码。难道只有自己摸索? ...

假如就是普通的正弦波的话,就直接按正弦波表格输出就是了,没有什么奥妙,假如是矢量的话,在得到S16Global_dq_Uq和S16Global_dq_Ud之前的计算就直接按照书本介绍的来就是,网上有大把的介绍,关键是电流采样一定要平滑处理,必须要平滑处理,之后的换向表格假如想偷懒的话,最近我看了中颖的一款单片机,只要把上面两个参数给他,就直接得出三相的占空比了,这个是真牛X。还有就是PID的处理,两个参数需要经过试验才能够得出,人家不会给你的。
hua_ren 发表于 2020-3-31 10:28 | 显示全部楼层
TI的电机库就做的很好。使用起来很方便。自己再编写底层代码,以来费时间,2来不知道是否正确,真是个头疼的问题。
swatchis 发表于 2020-10-31 15:33 | 显示全部楼层
学习下,谢谢
sctfd 发表于 2020-12-31 16:13 | 显示全部楼层

非常感谢楼主分享
萝卜头008 发表于 2021-1-4 10:00 | 显示全部楼层
学习下,多谢
zhuozhixin 发表于 2021-10-25 17:06 | 显示全部楼层
谢谢楼主分享。
QQ2224043166 发表于 2021-12-8 17:30 | 显示全部楼层
为楼主点赞,分享的很棒,
QQ2224043166 发表于 2021-12-8 18:39 | 显示全部楼层
woshic23 发表于 2022-8-23 20:59 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

142

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部