手搓FOC

前言

硬件购买于欧拉电子
电机型号:36SV61(1000线 ABZ带霍尔)

1、Cubemax配置

在这里插入图片描述
cubemax配置引脚图:
在这里插入图片描述

2、系统时钟配置

2.1 晶振配置

在这里插入图片描述
其他为默认配置

2.2 时钟树配置

外部晶振配置24MHz,系统时钟PLL倍频到160MHz。
在这里插入图片描述

2.3 系统配置

时基源选择:Systick
在这里插入图片描述

2.4 中断配置

1、STM32中断优先级数值越小,优先级越大
在这里插入图片描述
按照优先级排序可分:
在这里插入图片描述

3、定时器TIM配置

3.1 TIMER六路带死区PWM

TIMER1作为主定时器
在这里插入图片描述
Channel4选择PWM Genneration No Output模式。此通道生成PWM,上升沿触发ADC注入通
道采样。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
中心 对齐模式
当选择中心对齐计数模式1时,只在向下计数过程中发生匹配动作时才置位比较事件标志CC4IF;
当选择中心对齐计数模式2时,只在向上计数过程中发生匹配动作时才置位比较事件标志CC4IF;
当选择中心对齐计数模式3时,在向上/向下计数过程中发生匹配动作时都会置位比较事件标志CC4IF。当然,比较事件标志被置位时可以触发中断或DMA请求
(原文链接:https://blog.csdn.net/weixin_38106263/article/details/108787090)

(第32章 TIM—高级定时器—零死角玩转STM32-F429系列:https://www.cnblogs.com/firege/p/5805894.html)
Repetition Counter(重复计数):
RepetitionCounter=1时,表示延长一倍的时间。
(STM32 定时器中TIM_RepetitionCounter 作用详解:https://blog.csdn.net/longgyue/article/details/80161380)
Counter Period :(斩波频率10KHz)
TIM1CLK / (PwmFreq * 2) = 160 * 10^6 / (10 * 10^3 * 2) = 8000
Dead Time :
在这里插入图片描述
在这里插入图片描述
120=0x78=01111000
【7:5】=011 【5:0】=11000
DTG[7:5]=100 => DT=DTG[7:0] * Tdtg = 120/ (160 * 10^6/2) = 1.5us
在这里插入图片描述
在这里插入图片描述

// 启动TIM1 PWM各通道 
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); 
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2); 
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3); 
HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_1); 
HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_2); 
HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_3); 
// 启动触发ADC采样PWM 
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_4); 
// 启动TIM1定时器溢出中断 
HAL_TIM_Base_Start_IT(&htim1);

3.2 TIMER4 编码器模式

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

// 启动TIM3编码器中断 
HAL_TIM_Encoder_Start_IT(&htim4, TIM_CHANNEL_ALL);

4、ADC配置

在这里插入图片描述
ADC1配置
在这里插入图片描述
在这里插入图片描述
ADC2配置
在这里插入图片描述
在这里插入图片描述
采样方法 通道 MCU引脚 功能定义
注入采样 ADC1_IN3 PA2 U相电流检测
注入采样 ADC2_IN3 PA6 V相电流检测
注入采样 ADC1_IN12 PB1 W相电流检测
规则采样 ADC2_IN1 PA0 母线电压
规则采样 ADC1_IN11 PB12 电位器采样

4.1 规则通道配置

ADC1配置
在这里插入图片描述

ADC2配置
在这里插入图片描述
采样时间:1/(80/4)3=0.15us
ADC转换总时间:1/(80/4)
(6.5+12.5)=0.9us
开启中断:
在这里插入图片描述

4.2 注入通道配置

采样触发方式:TIM1 CC4上升沿
ADC转换时间:1/(80/4)*(6.5+12.5)=0.9us
ADC1注入配置
在这里插入图片描述
ADC2注入配置
在这里插入图片描述

// 启动ADC1&ADC2注入通道采样中断 
HAL_ADCEx_InjectedStart_IT(&hadc1);
HAL_ADCEx_InjectedStart_IT(&hadc2);

5、USART

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#pragma import(__use_no_semihosting)
int _sys_exit(int x)
{
	x = x;

}
struct __FILE
{
	int handle;
	/* Whatever you require here. If the only file you are using is */
	/* standard output using printf() for debugging, no file handling */
	/* is required. */
};

FILE __stdout;	/* FILE is typedef’ d in stdio.h. */


int fputc(int ch,FILE *f)
{
  while((USART3->ISR & 0x40) == 0);
	USART3->TDR = (uint8_t)ch;
	return ch;
}

6、运放

在这里插入图片描述
在这里插入图片描述
OPAMP1
在这里插入图片描述
在这里插入图片描述
OPAMP2:
在这里插入图片描述
OPAMP3
在这里插入图片描述

 HAL_OPAMP_Start(&hopamp1);
	HAL_OPAMP_Start(&hopamp2);
	HAL_OPAMP_Start(&hopamp3);

7、GPIO

在这里插入图片描述

在这里插入图片描述

代码

文档:关键代码实现
源代码(不是最新): 手搓FOC驱动器(三环:位置、速度、电流环),电流环PI参数基于带宽调节,速度环基于刚性等级调节,位置环只有P参数,总体控制简单
部分截图:
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hlpinghcg

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值