从零开始STM32直流无刷驱动控制和实践
自从学了STM32已经可以点灯了,打算做点啥,于是就从当下热门的无刷驱动下手吧,先搞个六步方波吧! 无刷常用三相H全桥驱动,先上个三相H全桥驱动示意图本帖最后由 czvmkl 于 2020-8-14 17:18 编辑
无刷有感六步方波驱动原理其实不复杂,就是二二通电,一个通电周期内六个状态,周而复始循环,也没啥好说的!
补充内容 (2020-8-16 10:05):
当然在现实中是不可能用手来操作S1~S6开关的, 辛好有MOS管作为高速的电子开关IRF540 言归正传,废话我就不多说了,下面就把原理图和源代码贴上来分析一下. 原理图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管的通断 B相
本帖最后由 czvmkl 于 2020-8-16 08:42 编辑
C相
这三个电路原理图是相同的. 可以很好 我们一起 这样由上面A B C三相的IR2101加MOS构成了无刷驱动的三相全桥逆变电路 本帖最后由 czvmkl 于 2020-8-16 09:43 编辑
接下来是电源部分,电源主要是BUCK变换,DC24V 转DC15V DC5V DC3.3V,DC3.3V给控制板上STM32F103RCT6供电, 控制板借用现存的原子哥的Mini STM32板子
霍尔传感器接口电路
PCB板子已经焊接OK
本帖最后由 czvmkl 于 2020-8-26 17:12 编辑
干货源代码来了 干货来袭,源代码带全部中文注释
接下来把代码捋一捋 主控板按键与单片接的连接
本帖最后由 czvmkl 于 2020-8-29 15:57 编辑
程序主要包含四个文件
一main.c 主程序
二stm32f10x_it.c 放六步换向函数,霍尔引脚外部中断函数,通用定时器TIM2中断函数
三TIM1.c 高级定时器TIM1初始化配置
四TIM2.c 通用定时器TIM2初始化配置
后面三个c文件都是为main.c服务的,分开写是为了使程序结构更清晰简洁 先看主程序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: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); //扫描按键函数声明
不错!鼓励一下!