你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm32 电机控制低速测速问题  

[复制链接]
chxb1987 提问时间:2016-10-19 09:19 /
阅读主题, 点击返回1楼
收藏 3 评论32 发布时间:2016-10-19 09:19
32个回答
ccl123 回答时间:2016-11-10 09:28:05
..................................
zbber 回答时间:2016-11-10 09:44:26
第二个就是计数模式,
wofei1314 回答时间:2016-11-10 10:17:03
不懂帮顶~~
asmhai 回答时间:2016-11-10 10:53:34
每天来签到,支持。
asmhai 回答时间:2016-11-10 11:01:37
用一个TIM,编码器读数变化速度就代表着转速,加上用判断,

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

xnmc2013 回答时间:2016-11-10 11:24:42
我也想知道,看看有没有高手给解答一下
五哥1 回答时间:2016-11-10 11:31:51
我只能路过看一下
dzzwoaizi 回答时间:2016-11-10 11:54:53
哎呀,回答地方不对!
dzzwoaizi 回答时间:2016-11-10 11:55:30
两种方案:第一种就时STM32每个IO口都用按键中断,你可以牺牲一个定时器,当一个中断过来就计数,等待下一个中断进来后两者的差就得出了一个与速度相关的值,说句实话编码器没用过,我用的是HALL接口。这种方法是比较简单的,
第二种方法就是楼主所说的,定时器里面有hall接口,同时可以捕获定时器的值,还是以HALL为例,配置好后会每60度(电角度)进入中断一次,同事进入后捕获开始,也就是定时器开始计数。计数出来的值就是电机转过60度的时间(电角度)。配置我会截图给你,其实还可以计数跑了多少个PWM周期。在PWM中断里计数。通常他们是这莫做的,应为在FOC中可以简化运算。不知道你的编码器是咋样回事了,但是都应该通用的。
配置如下:
  //GPIO
  GPIO_InitTypeDef  GPIO_InitStructure;
  //Interrupt
  NVIC_InitTypeDef NVIC_InitStructure;
  //Tmer
  TIM_BDTRInitTypeDef  TIM_BDTRInitStructure;           //死区刹车结构体变量定义
  TIM_OCInitTypeDef TIM_OCInitStructure;
  TIM_ICInitTypeDef TIM_ICInitStructure;           //定义结构体变量
  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

  //---------------------------------TMER3 HALL------------------------------
  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  GPIO_Init(GPIOC, &GPIO_InitStructure);

  GPIO_PinAFConfig(GPIOC, GPIO_PinSource6, GPIO_AF_0);
  GPIO_PinAFConfig(GPIOC, GPIO_PinSource7, GPIO_AF_0);
  GPIO_PinAFConfig(GPIOC, GPIO_PinSource8, GPIO_AF_0);

  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
  TIM_DeInit(TIM3);
  TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
  TIM_OCStructInit(&TIM_OCInitStructure);

  TIM_TimeBaseStructure.TIM_Prescaler = 47;                                                                           //TIM基本初始化
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  TIM_TimeBaseStructure.TIM_Period =65535;
  TIM_TimeBaseStructure.TIM_ClockDivision = 0;
  TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;

  TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);     

  TIM_ICInitStructure.TIM_Channel = TIM_Channel_1;            //选择通道1
  TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; //输入上升沿捕获  
  TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_TRC ; //配置通道为输入,并映射到哪里
  TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;       //输入捕获预分频值
  TIM_ICInitStructure.TIM_ICFilter = 10;                      //输入滤波器带宽设置

  TIM_ICInit(TIM3, &TIM_ICInitStructure);                     //输入通道配置

  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Timing;         //TIM输出通道初始化
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Disable;            
  TIM_OCInitStructure.TIM_Pulse =65535;
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;      

  TIM_OC4Init(TIM3,&TIM_OCInitStructure);

  TIM_SelectHallSensor(TIM3,ENABLE);                          //使能TIMx的霍尔传感器接口

  TIM_SelectInputTrigger(TIM3, TIM_TS_TI1F_ED);               //输入触发源选择   

  TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Reset);             //从模式选择

  TIM_SelectMasterSlaveMode(TIM3, TIM_MasterSlaveMode_Enable);//主从模式选择        

  //        TIM_SelectOutputTrigger(TIM3, TIM_TRGOSource_OC2Ref );//选择输出触发模式(TRGO端)
  NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;              //开TIM3中断
  NVIC_InitStructure.NVIC_IRQChannelPriority = 2;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);

  TIM_ITConfig(TIM3, TIM_IT_Trigger|TIM_IT_CC4, ENABLE);   //开定时器中断
  TIM_ClearFlag(TIM3, TIM_FLAG_Trigger);
  TIM_ClearFlag(TIM3, TIM_FLAG_CC4);

  TIM_Cmd(TIM3,ENABLE);


//中断入口。
void TIM3_IRQHandler(void)
{
  if((TIM_GetFlagStatus(TIM3,TIM_FLAG_Trigger)) != RESET )
  {
    TIM_ClearITPendingBit(TIM3, TIM_FLAG_Trigger);
    HallPLLCtrl();        

  }

}

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

携手未来 回答时间:2016-11-10 16:19:25
涨知识。

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版