首页 > 其他分享 >ST方案一个MCU带动两个无刷电机驱动的原生逻辑

ST方案一个MCU带动两个无刷电机驱动的原生逻辑

时间:2023-09-30 18:11:06浏览次数:37  
标签:定时器 LL counter 无刷电机 ST TIM pHandle MCU TIMx

TIM1 TIM8两个高级定时器,设置TIM2为启动计数触发源,触发时钟同步,并且设置上,两者错开相。核心思路是错开电流采样和处理的时刻

 1   /* disable main TIM counter to ensure
 2    * a synchronous start by TIM2 trigger */
 3   LL_TIM_DisableCounter( TIMx );
 4   
 5   LL_TIM_SetTriggerOutput(TIMx, LL_TIM_TRGO_RESET);
 6 
 7   /* Enables the TIMx Preload on CC1 Register */
 8   LL_TIM_OC_EnablePreload( TIMx, LL_TIM_CHANNEL_CH1 );
 9   /* Enables the TIMx Preload on CC2 Register */
10   LL_TIM_OC_EnablePreload( TIMx, LL_TIM_CHANNEL_CH2 );
11   /* Enables the TIMx Preload on CC3 Register */
12   LL_TIM_OC_EnablePreload( TIMx, LL_TIM_CHANNEL_CH3 );
13   /* Enables the TIMx Preload on CC4 Register */
14   LL_TIM_OC_EnablePreload( TIMx, LL_TIM_CHANNEL_CH4 );
15 //这里是关键,让TIM1和TIM8产生一个相差
16   /* Prepare timer for synchronization */
17   LL_TIM_GenerateEvent_UPDATE( TIMx );
18   if ( pHandle->pParams_str->FreqRatio == 2u )//两个高级定时器频率关系是两倍
19   {
20     if ( pHandle->pParams_str->IsHigherFreqTim == HIGHER_FREQ )//当前定时器是更高频率
21     {
22       if ( pHandle->pParams_str->RepetitionCounter == 3u )//RepetitionCounter等于3表示每两个完整PWM周期执行一次电流采样,恰好等于低频定时器的频率,需要错开,这样高频的触发点永远在低频的下降沿
23       {
24         /* Set TIMx repetition counter to 1 */
25         LL_TIM_SetRepetitionCounter( TIMx, 1 );
26         LL_TIM_GenerateEvent_UPDATE( TIMx );
27         /* Repetition counter will be set to 3 at next Update */
28         LL_TIM_SetRepetitionCounter( TIMx, 3 );
29       }
30     }
31     LL_TIM_SetCounter( TIMx, ( uint32_t )( pHandle->Half_PWMPeriod ) - 1u );
32   }
33   else /* bFreqRatio equal to 1 or 3 *///两个高级定时器频率关系相同或者3倍
34   {
35     if ( pHandle->_Super.Motor == M1 )
36     {
37       if ( pHandle->pParams_str->RepetitionCounter == 3u )//RepetitionCounter等于3表示每两个完整PWM周期执行一次电流采样,错开是为了时间上更均分
38       {
39         /* Set TIMx repetition counter to 1 */
40         LL_TIM_SetRepetitionCounter( TIMx, 1 );
41         LL_TIM_GenerateEvent_UPDATE( TIMx );
42         /* Repetition counter will be set to 3 at next Update */
43         LL_TIM_SetRepetitionCounter( TIMx, 3 );
44       }
45       LL_TIM_SetCounter( TIMx, ( uint32_t )( pHandle->Half_PWMPeriod ) - 1u );//必须(高频的)强制移相,把两个定时器上升沿错开
46 
47     }
48     else
49     {
50     }
51   }
以上的写法并不是完备的,实际处理时还要注意。

标签:定时器,LL,counter,无刷电机,ST,TIM,pHandle,MCU,TIMx
From: https://www.cnblogs.com/smilingfrog/p/17738078.html

相关文章

  • UE5 Substrate SSS
    前言本文将介绍如何使用UE5的新的材质系统——Substrate来制作次表面反射效果关于Substrate不懂得可以看这https://www.cnblogs.com/chenglixue/p/17418887.html玉初次实现在Substrate中,Albedo用于表示光线散射后的颜色。在这里我设为绿色SSSMFP控制的是长中短波长......
  • STM32 控制一盏灯的亮灭
    #include"stm32f10x.h"//Deviceheaderintmain(void){ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); GPIO_InitTypeDefGPIO_InitStructure; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//typedefenum//{GPIO_Mode_AIN=0x0,......
  • 【RuoYi移动端】uni-app中通过vuex的store来实现全局变量的修改和读取
    一、在store文件中新建csjVar.js文件constcsjVar={csjMess:[{aaa:"ok"},{bbb:"no"}]}exportdefaultcsjVar二、修改store文件中新建index.js文件importVuefrom'vue'importVuexfrom'vuex'importuserfrom'@/store/modules/user�......
  • vs code调试rust乱码问题解决方案
    在terminal中用chcp65001修改一下字符集,就行了。有的博主推荐修改区域中的设置,这会引来很大的问题。千万不要修改如下设置:......
  • 操作STM32的GPIO的步骤
    1.使用RCC开启GPIO的时钟2.使用GPIO_Init函数初始化GPIO3.使用输入/输出控制GPIO口RCC在library组中的 stm32f10x_rcc.h中找:(第一个参数是选择哪个外设,第二个参数是EABLE或者DISABLE)voidRCC_AHBPeriphClockCmd(uint32_tRCC_AHBPeriph,FunctionalStateNewStat......
  • post请求
    importurllib.requestimporturllib.parseheaders={'User-Agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/96.0.4664.110Safari/537.36Edg/96.0.1054.62'}data={'kw......
  • Remove Old ST03N Data after System Refresh(转)
    SymptomAfterasystemrefresh/systemcopy,thetransactioncodeST03Nisshowingtheolddatafromthesourcesystem.Solution1.RefertoSAPNote1179929ThedatafromothersystemscanbedeletedfromthetablesSWNCMONIandSWNCMONIINDEXusingthefu......
  • Get请求和Post请求
    引言Get请求和Post请求都是HTTP协议中的两种常见请求方法,底层都是TCP/IP协议,用于客户端与服务器之间的数据传输。Get请求Get请求用于从服务器获取数据,通过在URL中添加参数,将数据附加在请求中发送给服务器Get请求的参数是通过URL的查询字符串(querystring)来传递的,参数会被明......
  • 前端 | React setState 同步异步以及处理方式 | React
    前端|ReactsetState同步异步以及处理方式|React问题描述在同步执行流程中setState表现为异步,而在异步执行流程中setState表现为同步。示例:有一个控制DOM节点显隐的状态值,默认为false,而下一步就需要获取该DOM节点做一系类处理。所以一开始使用setState设置状态值为true,让该......
  • 29、Flink SQL之DESCRIBE、EXPLAIN、USE、SHOW、LOAD、UNLOAD、SET、RESET、JAR、JOB
    Flink系列文章1、Flink部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接13、Flink的tableapi与sql的基本概念、通用api介绍及入门示例14、Flink的tableapi与sql之数据类型:内置数据类型以及它们的属性15、Flink的tableap......