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

c mvc网站开发在线平面图设计

c mvc网站开发,在线平面图设计,登封做网站优化,个人信用信息服务平台目录 一、STM32G4 电机外设篇(三) TIM1 发波 和 ADC COMP DAC级联1 TIM1 高级定时器发波1.1 stm32cubemx配置 2 TIM1 ADC COMP DAC级联2.1 stm32cubemx配置 附学习参考网址欢迎大家有问题评论交流 (* ^ ω ^) 一、STM32G4 电机外设篇(三&…

目录

  • 一、STM32G4 电机外设篇(三) TIM1 发波 和 ADC COMP DAC级联
      • 1 TIM1 高级定时器发波
        • 1.1 stm32cubemx配置
      • 2 TIM1 ADC COMP DAC级联
        • 2.1 stm32cubemx配置
    • 附学习参考网址
      • 欢迎大家有问题评论交流 (* ^ ω ^)

一、STM32G4 电机外设篇(三) TIM1 发波 和 ADC COMP DAC级联

1 TIM1 高级定时器发波

  • 本章接线图详见之前的文章,记住要断开三相电机的uvw接线,否则输出的pwm波会影响电机
1.1 stm32cubemx配置
  • 本实验计划使用TIM1发出3对互补的PWM波,来模拟驱动电机
    在这里插入图片描述

  • 打开之前文章的STM32CubeMx,配置时钟源和TIM1
    在这里插入图片描述

  • 使用通道4触发ADC采样,配置PWM但是不输出

  • RCR设置为1
    在这里插入图片描述

  • RCR可以理解为一个队计时器触发频率的分频
    在这里插入图片描述

  • 设置完成后打开keil文件,修改代码

    1. 注释User Code 4中的中断处理函数,约在291行
//User Code PV中修改
float temp[3];
uint8_t tempData[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x80,0x7F};//User Code 2中修改
HAL_OPAMP_Start(&hopamp1);//使能运放
HAL_OPAMP_Start(&hopamp2);
HAL_OPAMP_Start(&hopamp3);
HAL_UART_Receive_IT(&huart3, (uint8_t *)&aRxBuffer, 1);
HAL_ADCEx_Calibration_Start(&hadc1,ADC_SINGLE_ENDED);//自校验,减少采样误差
HAL_ADCEx_Calibration_Start(&hadc2,ADC_SINGLE_ENDED);
TIM1->PSC = 30000;
TIM1->ARR = 10000;
TIM1->CCR1 = 2000;
TIM1->CCR2 = 5000;
TIM1->CCR3 = 8000;
HAL_TIM_Base_Start(&htim1);
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);/* USER CODE BEGIN WHILE */修改
while(1)
{
//		HAL_ADC_Start(&hadc1);
//		HAL_ADC_Start(&hadc2);//使能规则组转捿
//		HAL_ADCEx_InjectedStart_IT(&hadc1);
//		HAL_ADCEx_InjectedStart_IT(&hadc2);//使能规则组转换,并产生注入组中断
//		temp[0] = HAL_ADC_GetValue(&hadc1);
//		temp[1] = HAL_ADC_GetValue(&hadc2) * 0.02094726f; //根据分压电阻计算
//		memcpy(tempData, (uint8_t *)&temp, sizeof(temp));
//		HAL_UART_Transmit_DMA(&huart3, (uint8_t *)tempData, 24);
//		HAL_Delay(1);if((GPIOA->IDR & GPIO_PIN_8)!=0){temp[0] = 1.0f;}else{temp[0] = 0.0f;}if((GPIOA->IDR & GPIO_PIN_9)!=0){temp[1] = 3.0f;}else{temp[1] = 2.0f;}if((GPIOA->IDR & GPIO_PIN_10)!=0){temp[2] = 5.0f;}else{temp[2] = 4.0f;}memcpy(tempData, (uint8_t *)&temp, sizeof(temp));HAL_UART_Transmit_DMA(&huart3, (uint8_t *)tempData, 16);
}/* USER CODE END WHILE */
  • 打开VOFA,就能看到成功的PWM曲线图像
    在这里插入图片描述

2 TIM1 ADC COMP DAC级联

  • 电机控制环路主要涉及的外设功能包含高级定时器TIM1的发波,OPAMP 及 ADC 准确的采样三相电流,并在三相电流过流时及时封波,避免损坏硬件
  • 本文将会使用STM32G4内部 TIM1ADCCOMP DAC级联使用
    在这里插入图片描述
  • TIM1 发波时序和电流采样触发
    在这里插入图片描述
  • 在最高点前一点采样,因为采样需要一个短暂的时间,这个时间段电流最稳定
  • 三相电流过流封波时序
    在这里插入图片描述
2.1 stm32cubemx配置
  • 在上一章的工程基础上增加TIM1通道4的触发源,作为ADC电流采样注入组的触发源,分别修改ADC1和ADC2的注入组转换触发源为TIM1比较4事件,增加PB1引脚功能
    在这里插入图片描述

  • 设置DAC_CHI连接MCU内部外设,其它参数默认

  • 使能比较器负向为DAC3,触发方式为上升沿触发
    在这里插入图片描述

  • 设置封波实现的break触发,设置GPIO4,生成代码,在这里插入图片描述

  • 打开Keil软件修改代码

uint8_t adc1_in1, adc1_in2, adc1_in3;
float IA, IB, IC;
uint8_t ADC_offset, IA_Offset, IB_Offset, IC_Offset;
float load_data[5];
float temp[5];
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};/* USER CODE BEGIN 2 */
HAL_OPAMP_Start(&hopamp1);//使能运放
HAL_OPAMP_Start(&hopamp2);
HAL_OPAMP_Start(&hopamp3);
HAL_UART_Receive_IT(&huart3, (uint8_t *)&aRxBuffer, 1);
HAL_ADCEx_Calibration_Start(&hadc1,ADC_SINGLE_ENDED);//自校验,减少采样误差
HAL_ADCEx_Calibration_Start(&hadc2,ADC_SINGLE_ENDED);
TIM1->ARR = 8000-1;
TIM1->CCR4 = 8000-2;
HAL_TIM_Base_Start(&htim1);
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_4);
HAL_ADCEx_InjectedStart_IT(&hadc1);
HAL_ADCEx_InjectedStart(&hadc2);
HAL_DAC_Start(&hdac3, DAC_CHANNEL_1);
HAL_DAC_SetValue(&hdac3, DAC_CHANNEL_1,	DAC_ALIGN_12B_R, 3000);
HAL_COMP_Start(&hcomp1);/* USER CODE BEGIN WHILE */
while(1)
{HAL_ADC_Start(&hadc1);HAL_ADC_Start(&hadc2);Vpoten = HAL_ADC_GetValue(&hadc1);adc_vbus = HAL_ADC_GetValue(&hadc2);Vbus = adc_vbus * 3.3f/4096*26;HAL_Delay(10);
}/* USER CODE BEGIN 4 */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{/* Prevent unused argument(s) compilation warning */UNUSED(GPIO_Pin);if(Button2_Pin == GPIO_Pin){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_1);HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_1);}if(Button3_Pin == GPIO_Pin){HAL_TIM_PWM_Stop(&htim1, TIM_CHANNEL_1);HAL_TIM_PWM_Stop(&htim1, TIM_CHANNEL_2);HAL_TIM_PWM_Stop(&htim1, TIM_CHANNEL_3);HAL_TIMEx_PWMN_Stop(&htim1, TIM_CHANNEL_1);HAL_TIMEx_PWMN_Stop(&htim1, TIM_CHANNEL_2);HAL_TIMEx_PWMN_Stop(&htim1, TIM_CHANNEL_3);}
}//注入中断处理程序
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{adc1_in1 = hadc1.Instance->JDR1;IA = (adc1_in1 - IA_Offset)*0.0193359375f;adc1_in2 = hadc2.Instance->JDR1;IB = (adc1_in2 - IB_Offset)*0.0193359375f;adc1_in3 = hadc1.Instance->JDR2;IC = (adc1_in3 - IC_Offset)*0.0193359375f;TIM1->CCR1= 2000;TIM1->CCR2= 4000;TIM1->CCR3= 6000;load_data[0] = IA;load_data[1] = IB;load_data[2] = IC;load_data[3]= 0;load_data[4]= 0;memcpy(tempData,(uint8_t*)&load_data, sizeof(load_data));HAL_UART_Transmit_DMA(&huart3,(uint8_t *)tempData, 6*4);}}
}
  • 不知道为啥产生了一个4.4A的偏差
    在这里插入图片描述

附学习参考网址

  1. STM32G4 FOC开发实战

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

http://www.dtcms.com/a/614298.html

相关文章:

  • 幻灯片在什么网站做杭州互联网大厂
  • 张懿暄出席中美电影节尽显东方魅力,Mrs Chen角色引期待
  • LeetCode 425 - 单词方块
  • 我要建设一个网站全国可信网站
  • Matlab速成笔记68:质数、质因数分解、阶乘、最大公约数、最小公倍数
  • [智能体设计模式] 第13章:人类参与环节(HITL)
  • 线代强化NO7|秩|矩阵的秩|向量组的秩|极大线性无关组|公式
  • 计算机网络安全--第三章-网络安全体系及管理
  • 11.15 脚本算法 加密网页
  • 前端CSS架构模式,BEM与ITCSS
  • 【深度学习】深度学习概念
  • 大连建设执业资格注册中心网站互联网项目推广
  • 源码交易网站源码怎么在网站做系统
  • 前端性能预算工具,控制资源大小
  • 海丰网站制作一个网站能放多少关键词
  • 计算机网络复习日报19
  • 【C++】10.用哈希表封装myunordered_map和myunordered_set
  • 黄陂建设网站做网站搞流量挂联盟广告变现
  • JSP Session
  • 鸿安建设集团网站百度免费建立网站
  • 【学习心得】conda打包进行环境迁移遇到conda包和pip包管理冲突问题
  • 做网站需要写配置文件吗教研网站建设方案
  • 51c视觉~合集52
  • 免费的虚拟现实开发教程,WebXR
  • linux下libcurl的https简单例子
  • 网站建立的意义建立网站可以赚钱吗?
  • 全连接层详解:从原理到应用的全面解析
  • Docker-Dockerfile 完全指南:编写最佳实践的镜像
  • 百度智能云建站广州地址设计网站
  • macOS系统中使用clang/clang++编译Skia源码的方法