ST MC Workbench软件工具使用学习笔记

  • 点击图标启动ST MC Workbench软件工具

           

 

 1. 用户按钮区用于创建新项目,加载已有项目或启动ST电机参数测量工具。

 2. 最近的项目区用于加载近期的项目。

 3. 例程区用于加载项目示例。

  • 创建新工程

电机工作条件

 

  •  硬件配置窗口

  •  菜单区

 

  •  工具栏区
  • 硬件细节设定按钮区

  •  电机参数配置

 

 传感器

  •  电源输入信息

 

  •  直流母线电压采样拓扑

  • 浪涌电流限制器和耗散制动

  •  温度检测

  •  功率驱动

 

  •  电流采样

  •  过流保护

 

  •  驱动控制管理

  • 启动参数

  • 驱动设置

  •  用户接口

  •  生成工程

 所有的参数配置完成后,点击生成图标,可根据所选的IDE生成MC应用工程。

 

  • 3
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为您提供一份基于ST MC WorkbenchSTM32G431RBT的三电阻电流采样代码: #include "main.h" #include "stm32g4xx_hal.h" // 电流采样定义 #define CURRENT_GAIN 330.0 // 电流放大器增益 #define CURRENT_OFFSET 1.66 // 电流放大器偏移 #define CURRENT_SCALE 0.0008056640625 // 电流采样转换 // 采样ADC定义 ADC_HandleTypeDef hadc1; // ADC1句柄 DMA_HandleTypeDef hdma_adc1; // ADC1 DMA句柄 // DMA缓存区定义 uint16_t adc1_dma_buf[3]; // 放置DMA采样数据 // 电流采样变量 float current; // 采样电流 float voltage; // 采样电压 float power; // 采样功率 // ADC采样完成回调函数 void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) { uint16_t adc_value = adc1_dma_buf[0]; // 获取ADC值 // 计算采样电流,电压和功率 current = (((float)adc_value * CURRENT_SCALE) - CURRENT_OFFSET) * CURRENT_GAIN; voltage = ((float)adc1_dma_buf[1] * 0.0008056640625) * 33; power = current * voltage; } // ADC初始化函数 void MX_ADC1_Init(void) { ADC_ChannelConfTypeDef sConfig = {0}; /** Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion) */ hadc1.Instance = ADC1; hadc1.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1; hadc1.Init.Resolution = ADC_RESOLUTION_12B; hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE; hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV; hadc1.Init.LowPowerAutoWait = DISABLE; hadc1.Init.ContinuousConvMode = DISABLE; hadc1.Init.NbrOfConversion = 1; hadc1.Init.DiscontinuousConvMode = DISABLE; hadc1.Init.ExternalTrigConv = ADC_EXTERNALTRIG_T1_CC1; hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_RISING; hadc1.Init.ConversionDataManagement = ADC_CONVERSIONDATA_DMA_CIRCULAR; hadc1.Init.Overrun = ADC_OVR_DATA_PRESERVED; hadc1.Init.LeftBitShift = ADC_LEFTBITSHIFT_NONE; hadc1.Init.OversamplingMode = DISABLE; if (HAL_ADC_Init(&hadc1) != HAL_OK) { Error_Handler(); } /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time. */ sConfig.Channel = ADC_CHANNEL_3; sConfig.Rank = 1; sConfig.SamplingTime = ADC_SAMPLETIME_12CYCLES_5; if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) { Error_Handler(); } } // ADC DMA初始化函数 void MX_DMA_Init(void) { /* DMA controller clock enable */ __HAL_RCC_DMA1_CLK_ENABLE(); /* DMA interrupt init */ /* DMA1_Channel1_IRQn interrupt configuration */ HAL_NVIC_SetPriority(DMA1_Channel1_IRQn, 0, 0); HAL_NVIC_EnableIRQ(DMA1_Channel1_IRQn); /* DMA1_Channel1 Init */ hdma_adc1.Instance = DMA1_Channel1; hdma_adc1.Init.Request = DMA_REQUEST_ADC1; hdma_adc1.Init.Direction = DMA_PERIPH_TO_MEMORY; hdma_adc1.Init.PeriphInc = DMA_PINC_DISABLE; hdma_adc1.Init.MemInc = DMA_MINC_ENABLE; hdma_adc1.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD; hdma_adc1.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD; hdma_adc1.Init.Mode = DMA_CIRCULAR; hdma_adc1.Init.Priority = DMA_PRIORITY_LOW; if (HAL_DMA_Init(&hdma_adc1) != HAL_OK) { Error_Handler(); } __HAL_LINKDMA(&hadc1, DMA_Handle, hdma_adc1); } // 电流采集初始化函数 void Current_Init(void) { // ADC初始化 MX_ADC1_Init(); // DMA初始化 MX_DMA_Init(); // 启动ADC HAL_ADC_Start_DMA(&hadc1, (uint32_t*)adc1_dma_buf, 2); // 等待DMA回调函数执行 while(!current); } // 电流采集处理函数 void Current_Process(void) { //do something } // ADC DMA中断函数 void DMA1_Channel1_IRQHandler(void) { HAL_DMA_IRQHandler(&hdma_adc1); } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值