当前位置: 首页 > news >正文

STM32G4 电流环闭环(二) 霍尔有感运行

目录

  • 一、STM32G4 电流环闭环(二) 霍尔有感运行
    • 2. 霍尔有感运行
    • 附学习参考网址
      • 欢迎大家有问题评论交流 (* ^ ω ^)

一、STM32G4 电流环闭环(二) 霍尔有感运行

2. 霍尔有感运行

  • 文章使用的BLDC在定子侧以互差120°电角度的位置安装三个霍尔元件Ha,Hb,Hc。当转子转动的时候霍尔元件会产生三个相位差120°电角度的高低电平信号。霍尔信号会将一个电周期划分为6个扇区,每个扇区60°电角度,通过单片机的定时器捕获可以获得每个扇区的运行时间t。为了获取准确的转子角度,点击绕组A相接电源正极,BC两相接电源负极,电子磁场与转子磁场共同作用,最终定位到转子零位点,也就是A相绕组的轴线位置。确定零点位置后,根据霍尔的信号顺序,可以得到霍尔信号与转子位置的对应关系,如下表所示:
    在这里插入图片描述
    在这里插入图片描述
  1. 首先配置STM32G4的Hall接口;打开STM32CUBEMX;使能TIM4,选择内部时钟,在组合通道中选择XOR ON/ HALL Sensor mode;
    在这里插入图片描述

  2. 配置定时器参数;16分频后,TIM4的时钟为10M;
    在这里插入图片描述

  3. 生成代码并打开Keil工程

  4. 在TIM输入捕获回调函数中添加如下代码,积分时间是10k;
    在这里插入图片描述

  5. 其中HALL角速度计算公式:
    HallSpeed=PI3∗HallTempHallSpeed = \frac{PI}{3 * HallTemp} HallSpeed=3HallTempPI
    HallTheta=∫0HallTempHallSpeedHallTheta = \int^{HallTemp}_{0}HallSpeed HallTheta=0HallTempHallSpeed

  6. 在ADC注入组中断回调函数中输入,HALL传感器得到的速度和角度;在顶部添加的变量和ADC的代码修改如下

/* USER CODE BEGIN PV */
#define PI					3.14159265358979f
#define PHASE_SHIFT_ANGLE (float)(220.0f/360.0f*2.0f*PI)extern DMA_HandleTypeDef hdma_usart3_tx;
uint8_t DataB1[32] = "LED1 Toggle\r\n";
uint8_t DataB2[32] = "LED2 Toggle\r\n";
uint8_t DataB3[32] = "LED1 and LED2 Open\r\n";#define RXBUFFERSIZE  256   
char RxBuffer[RXBUFFERSIZE];  
uint8_t aRxBuffer;			   
uint8_t Uart1_Rx_Cnt = 0;	float load_data[5];
static uint8_t tempData[24] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x80,0x7F};uint16_t DAC_temp = 0;float Vbus,Ia,Ib,Ic;
uint8_t Motor_state = 0;
uint16_t IA_Offset,IB_Offset,IC_Offset;
uint16_t adc1_in1, adc1_in2, adc1_in3, Vpoten, adc_vbus;
uint8_t ADC_offset = 0;FDCAN_RxHeaderTypeDef RxHeader;
FDCAN_TxHeaderTypeDef TxHeader;
uint8_t RxData[8]={NULL};
uint8_t TxData[8] = {NULL};float HallTemp = 0;
float HallThetaAdd = 0;
float HallTheta = 0;
float HallSpeed = 0;
float HallSpeedLast = 0;
float HallSpeedtest = 0;
float alpha = 0.3;
uint8_t HallReadTemp = 0;
/* USER CODE END PV */void HAL_ADCEx_InjectedConvCpltCallback(ADC_HandleTypeDef *hadc)
{static uint8_t cnt;/* Prevent unused argument(s) compilation warning */UNUSED(hadc);if(hadc == &hadc1){if(ADC_offset == 0){cnt++;adc1_in1 = hadc1.Instance->JDR1;adc1_in2 = hadc2.Instance->JDR1;adc1_in3 = hadc1.Instance->JDR2;IA_Offset += adc1_in1;IB_Offset += adc1_in2;IC_Offset += adc1_in3;if(cnt >= 10){ADC_offset = 1;IA_Offset = IA_Offset/10;IB_Offset = IB_Offset/10;IC_Offset = IC_Offset/10;}}else{HallTheta = HallTheta + HallThetaAdd;if(HallTheta<0.0f){HallTheta += 2.0f*PI;}else if(HallTheta>(2.0f*PI)){HallTheta -= 2.0f*PI;}rtU.theta = HallTheta;rtU.SpeedFd = HallSpeed;adc1_in1 = hadc1.Instance->JDR1;adc1_in3 = hadc1.Instance->JDR2;adc1_in2 = hadc2.Instance->JDR1;Ia = (adc1_in1 - IA_Offset)*0.02197265625f;Ib = (adc1_in2 - IB_Offset)*0.02197265625f;Ic = (adc1_in3 - IC_Offset)*0.02197265625f;rtU.ia = Ia;rtU.ib = Ib;rtU.ic = Ic;FOC_Model_step();TIM1->CCR1 = rtY.tABC[0];TIM1->CCR2 = rtY.tABC[1];TIM1->CCR3 = rtY.tABC[2];load_data[0] = Ia;load_data[1] = HallTemp;load_data[2] = HallTheta;load_data[3] = rtU.SpeedRef;load_data[4] = HallSpeed;memcpy(tempData, (uint8_t *)&load_data, sizeof(load_data));HAL_UART_Transmit_DMA(&huart3,(uint8_t *)tempData,6*4);}}/* NOTE : This function should not be modified. When the callback is needed,function HAL_ADCEx_InjectedConvCpltCallback must be implemented in the user file.*/
}
  1. 编译代码,连接设备
    在这里插入图片描述
  2. 打开Keil的debug模式,可以试试修改速度,同时启动vofa上位机观察电流和Hall数据
    在这里插入图片描述
  • 低速的时候跟踪的不是很好

附学习参考网址

  1. STM32G4 FOC开发实战

欢迎大家有问题评论交流 (* ^ ω ^)


文章转载自:

http://W8IzeT6E.krjrb.cn
http://nFplJLmV.krjrb.cn
http://Ckjgfc2s.krjrb.cn
http://lGGZENIL.krjrb.cn
http://hCNsdxdL.krjrb.cn
http://bmU71v1z.krjrb.cn
http://0JqZxpRy.krjrb.cn
http://3VNToCAv.krjrb.cn
http://LecAre6w.krjrb.cn
http://XMyAAcYy.krjrb.cn
http://GM6KXBQZ.krjrb.cn
http://OorZ6x9s.krjrb.cn
http://Tc0Wx9OV.krjrb.cn
http://rwKuex5S.krjrb.cn
http://DzyON0nO.krjrb.cn
http://iwEdWmng.krjrb.cn
http://Qsgpb111.krjrb.cn
http://AOKXYpga.krjrb.cn
http://K9Pf3iYq.krjrb.cn
http://dYirUyEl.krjrb.cn
http://lb8UJj2b.krjrb.cn
http://GjLQfmjW.krjrb.cn
http://APz0g183.krjrb.cn
http://7xDj95j9.krjrb.cn
http://6sLFQSKP.krjrb.cn
http://WMzQL7tE.krjrb.cn
http://tP4nqL0o.krjrb.cn
http://mWIDPGZ8.krjrb.cn
http://pUofxXWL.krjrb.cn
http://lxRFUjLn.krjrb.cn
http://www.dtcms.com/a/386594.html

相关文章:

  • git-gui --批量处理文件
  • 【代码随想录day 28】 力扣 55.跳跃游戏
  • Python Flask 项目实战
  • whisper.cpp参数调优
  • C语言第13讲
  • brew install太慢的解决办法
  • vite+vue3中使用FFmpeg@0.12.15实现视频编辑功能,不依赖SharedArrayBuffer!!!
  • AI智能问数能力全面升级,DataEase开源BI工具v2.10.13 LTS版本发布
  • 【pytorch】tensor的定义与属性
  • 【问题】使用腾讯宝塔部署并启动Nodejs应用异常处理Cannot find module ‘express‘
  • vue-office 在线预览
  • 嵌入式基本概念:什么是指令集,微架构,IDE,DFP等等是什么意思,有什么关系???
  • Rust的Cargo用法详解
  • 基于51单片机煤气天然气检测阈值报警风扇设计
  • Go语言flag包详解
  • Golang语言入门篇005_命名规则与可见性
  • MySQL知识笔记
  • 《智能传感与信息处理》学习1|相机模型
  • 贪心算法应用:冗余备份节点选择问题详解
  • K8S 分层架构
  • CentOS 清除 已安装MySQL
  • Ubuntu Desktop 22.04.5 LTS 使用默认的 VNC 远程桌面
  • 【脚本注入网页】XSS
  • 设计模式之:备忘录模式
  • 网页抓包怎么做?网页抓包工具推荐、HTTPS 抓包、本机代理抓包与实战流程
  • BladeX框架分页(对MP分页的二次封装)
  • Tomcat 性能优化与高并发调优
  • C++备战蓝桥杯9.13-9.15
  • PyAutoGUI 自动化 GUI 操作的 Python 库核心操作命令总结
  • 【Uni-App+SSM 宠物项目实战】Day15:购物车添加