czvmkl 发表于 2020-8-5 19:31

从零开始STM32直流无刷驱动控制和实践

自从学了STM32已经可以点灯了,打算做点啥,于是就从当下热门的无刷驱动下手吧,先搞个六步方波吧!

czvmkl 发表于 2020-8-6 17:03

无刷常用三相H全桥驱动,先上个三相H全桥驱动示意图

czvmkl 发表于 2020-8-14 17:13

本帖最后由 czvmkl 于 2020-8-14 17:18 编辑

无刷有感六步方波驱动原理其实不复杂,就是二二通电,一个通电周期内六个状态,周而复始循环,也没啥好说的!

补充内容 (2020-8-16 10:05):
当然在现实中是不可能用手来操作S1~S6开关的, 辛好有MOS管作为高速的电子开关IRF540

czvmkl 发表于 2020-8-14 17:16

言归正传,废话我就不多说了,下面就把原理图和源代码贴上来分析一下.

czvmkl 发表于 2020-8-15 16:46

原理图H桥 A相


补充内容 (2020-8-16 10:37):
这个IR2101+IRF540 MOS管用人话讲他的工作原理就是: STM32 的高级定时器TIM1通道1输出高电平(TIM1_CH1), IR2101的2脚输入端为高电平,所以IR2101的7脚输出也是高电平,IR2101的7脚输出为高,那么IRF540的2 3脚就导通...

补充内容 (2020-8-16 10:41):
TIM1通道1如果输出低电平,那么MOS管 IRF540就关闭截止了,TIM1的其他2个通道也是一样的工作原理控制MOS管的通断

czvmkl 发表于 2020-8-15 16:51

B相

czvmkl 发表于 2020-8-15 16:56

本帖最后由 czvmkl 于 2020-8-16 08:42 编辑

C相


这三个电路原理图是相同的.

mtk1625 发表于 2020-8-15 18:03

可以很好 我们一起

czvmkl 发表于 2020-8-16 08:46

这样由上面A B C三相的IR2101加MOS构成了无刷驱动的三相全桥逆变电路

czvmkl 发表于 2020-8-16 08:50

本帖最后由 czvmkl 于 2020-8-16 09:43 编辑

接下来是电源部分,电源主要是BUCK变换,DC24V 转DC15V DC5V DC3.3V,DC3.3V给控制板上STM32F103RCT6供电, 控制板借用现存的原子哥的Mini STM32板子

czvmkl 发表于 2020-8-17 08:18

霍尔传感器接口电路

czvmkl 发表于 2020-8-24 17:15

PCB板子已经焊接OK

czvmkl 发表于 2020-8-26 08:47

本帖最后由 czvmkl 于 2020-8-26 17:12 编辑

干货源代码来了                                 

czvmkl 发表于 2020-8-27 08:51

干货来袭,源代码带全部中文注释


czvmkl 发表于 2020-8-28 07:59

接下来把代码捋一捋

czvmkl 发表于 2020-8-28 19:49

主控板按键与单片接的连接

czvmkl 发表于 2020-8-29 15:45

本帖最后由 czvmkl 于 2020-8-29 15:57 编辑

程序主要包含四个文件
一main.c               主程序
二stm32f10x_it.c   放六步换向函数,霍尔引脚外部中断函数,通用定时器TIM2中断函数
三TIM1.c            高级定时器TIM1初始化配置
四TIM2.c            通用定时器TIM2初始化配置


后面三个c文件都是为main.c服务的,分开写是为了使程序结构更清晰简洁

czvmkl 发表于 2020-9-1 10:01

先看主程序main.c, 主程序很简单就11条语句,就最后一句一个while大循环比较复杂
int main(void)
{int i;
u8 keytemp=0;
bool flag=0;
SysTick_Init(72);// 调用SysTick初始化函数
NVIC_Configuration();//调用中断配置函数
TIM1_Configuration1(); //调用TIM1配置函数          
TIM2_Configuration1(); //调用TIM2配置函数          
GPIO_Configuration();//调用GPIO端口配置函数
aim_speed=1000;   //PWM捕获比较寄存器值,决定占空比
Hall=1;
while (1)
{......}
}
   

czvmkl 发表于 2020-9-2 14:48

本帖最后由 czvmkl 于 2020-9-2 14:58 编辑

主函数main()前面是一些头文件包含,变量的声明,以及在主函数main()内需要用到的被调函数的声明
/*包含头文件*/
#include"stm32f10x.h"
#include"stdbool.h"
void SysTick_Init(u8 SYSCLK);//SysTick初始化函数声明
void delay_ms(u16 nms);      //自定义的延时毫秒函数声明
u8 fac_us=0;
u16 fac_ms=0;

u16 motor_statue=0;
u16startcnt=0;
extern u16 My_PWM;   //pwm值                                                                   变量或函数如果在外部c文件定义的,声明时加关键字extern
extern u16 Hall,time;//霍尔,计时时间
extern bool Direction; //电机旋转方向
extern int aim_speed;// PWM占空比

/* Private function prototypes 自定义函数声明*/
void GPIO_Configuration(void); //GPIO端口初始化函数声明
void NVIC_Configuration(void); //中断初始化函数声明
extern void TIM1_Configuration1(void);//TIM1初始化函数声明
extern void TIM2_Configuration1(void);//TIM2初始化函数声明
extern void Hall_SW(void);   //六步换向函数声明
u8 key_con(void);             //扫描按键函数声明

rat2003 发表于 2020-9-18 21:00

不错!鼓励一下!
页: [1] 2 3
查看完整版本: 从零开始STM32直流无刷驱动控制和实践