stm32 无刷直流电机

[复制链接]
10252|35
手机看帖
扫描二维码
随时随地手机跟帖
gjj248|  楼主 | 2013-3-31 15:11 | 显示全部楼层 |阅读模式
最近下的一个关于stm32控制无刷直流电机的程序,通过以下2个定时器分别产生PWM和接受霍尔信号,但是本人刚接触stm32,下面的程序看不懂,希望高手能详细解释下,万分感谢。
void BLDC_TIM1Config(void)
{
     TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;                        //基本结构体变量定义
   TIM_OCInitTypeDef                  TIM_OCInitStructure;               //输出结构体变量定义
   TIM_BDTRInitTypeDef          TIM_BDTRInitStructure;          //死区刹车结构体变量定义

   TIM_DeInit(TIM1);
   /*PWM f = 72MHZ/(3*3000) = 8kHZ */
   TIM_TimeBaseStructure.TIM_Prescaler = 3 - 1;                   //TIM基本初始化
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_CenterAligned2;//中央对齐计数模式 向上计数时被设置
  TIM_TimeBaseStructure.TIM_Period = 750-1;                         //PWM 16K
   TIM_TimeBaseStructure.TIM_ClockDivision = 0;
   TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;

   TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure);
   TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;                    //TIM输出通道初始化
  TIM_OCInitStructure.TIM_OutputState  = TIM_OutputState_Disable;
   TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Disable;                  
   TIM_OCInitStructure.TIM_Pulse = (unsigned int)AD_value;
   TIM_OCInitStructure.TIM_OCPolarity   = TIM_OCPolarity_High;
   TIM_OCInitStructure.TIM_OCNPolarity  = TIM_OCNPolarity_High;         
   TIM_OCInitStructure.TIM_OCIdleState  = TIM_OCIdleState_Set;
   TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset;           
   TIM_OC1Init(TIM1,&TIM_OCInitStructure);

   TIM_OCInitStructure.TIM_Pulse = (unsigned int)AD_value;
   TIM_OC2Init(TIM1,&TIM_OCInitStructure);

   TIM_OCInitStructure.TIM_Pulse = (unsigned int)AD_value;
   TIM_OC3Init(TIM1,&TIM_OCInitStructure);

   TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;             //TIM输出通道4初始化,用来触发AD注入采样
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Disable;                  
   TIM_OCInitStructure.TIM_Pulse =745;
   TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;           
   TIM_OC4Init(TIM1,&TIM_OCInitStructure);

   TIM_BDTRInitStructure.TIM_OSSRState = TIM_OSSRState_Enable;        //死区刹车初始化
  TIM_BDTRInitStructure.TIM_OSSIState = TIM_OSSIState_Enable;
   TIM_BDTRInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_OFF;
   TIM_BDTRInitStructure.TIM_DeadTime = 100;
   TIM_BDTRInitStructure.TIM_Break = TIM_Break_Disable;         //如打开,开机无输出且状态紊乱
  TIM_BDTRInitStructure.TIM_BreakPolarity = TIM_BreakPolarity_Low;
   TIM_BDTRInitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Disable;
   TIM_BDTRConfig(TIM1,&TIM_BDTRInitStructure);

   TIM_OC1PreloadConfig(TIM1,TIM_OCPreload_Enable);       //使能捕获比较寄存器预装载(通道1)
  TIM_OC2PreloadConfig(TIM1,TIM_OCPreload_Enable);         //使能捕获比较寄存器预装载(通道2)
  TIM_OC3PreloadConfig(TIM1,TIM_OCPreload_Enable);         //使能捕获比较寄存器预装载(通道3)
   
  TIM_SelectInputTrigger(TIM1, TIM_TS_ITR1);        //输入触发源选择TIM2   
    TIM_CtrlPWMOutputs(TIM1,ENABLE);
void BLDC_TIM2Config(void)
{
   TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;                   //基本结构体变量定义
   TIM_ICInitTypeDef                 TIM_ICInitStructure;               //定义结构体变量
   TIM_OCInitTypeDef                  TIM_OCInitStructure;               //输出结构体变量定义
      
   TIM_DeInit(TIM2);

   TIM_TimeBaseStructure.TIM_Prescaler = 72-1;                   //TIM基本初始化
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
   TIM_TimeBaseStructure.TIM_Period =65535;
   TIM_TimeBaseStructure.TIMClockDivision = 0;
   TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;

   TIM_TimeBaseInit(TIM2,&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(TIM2, &TIM_ICInitStructure);                     //输入通道配置

   TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;             //TIM输出通道初化
   TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;            
   TIM_OCInitStructure.TIM_Pulse =1023;
   TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;      
   TIM_OC2Init(TIM2,&TIM_OCInitStructure);

   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(TIM2,&TIM_OCInitStructure);

   TIM_SelectHallSensor(TIM2,ENABLE);                          //使能TIMx的霍尔传感器接口
  TIM_SelectInputTrigger(TIM2, TIM_TS_TI1F_ED);               //输入触发源选择   
TIM_SelectSlaveMode(TIM2, TIM_SlaveMode_Reset);             //从模式选择
TIM_SelectMasterSlaveMode(TIM2, TIM_MasterSlaveMode_Enable);//主从模式选择     
cjhk| | 2013-3-31 20:48 | 显示全部楼层
首先需要熟悉寄存器的功能   之后慢慢熟悉吧   就这些了  呵呵

使用特权

评论回复
cjhk| | 2013-3-31 20:49 | 显示全部楼层
多多努力吧   这个问题其实很简单的     呵呵

使用特权

评论回复
zhuwenwujy| | 2013-4-10 22:14 | 显示全部楼层
估计你还没开始正式学习吧……

使用特权

评论回复
zhubaicheng1| | 2013-5-14 16:21 | 显示全部楼层
能否把你下载的程序发到我邮箱361513549@qq.com,最近我也在调试无刷电机的程序,可以共同探讨

使用特权

评论回复
zhangwb0214| | 2014-4-5 15:22 | 显示全部楼层
楼主。可以把你下载的程序发到邮箱1574714166@qq.com么= =我刚接触无刷电机,我GPIO设置一多,电机老是警报。我只用TIM的GPIO和STM32本身的按键GPIO口。就没有警报。。。

使用特权

评论回复
yimomo| | 2014-4-30 09:31 | 显示全部楼层
能不能发个程序给我的?我也在用,真的是十分感谢

使用特权

评论回复
fanxsd| | 2014-7-13 21:54 | 显示全部楼层
这个我全部研究过了,你有问题可以咨询我。这个是没有调速的固定转速的!(你看的程序)

使用特权

评论回复
pxjay| | 2014-8-8 11:59 | 显示全部楼层
fanxsd 发表于 2014-7-13 21:54
这个我全部研究过了,你有问题可以咨询我。这个是没有调速的固定转速的!(你看的程序) ...

大神可否有例子借鉴下,小弟也是苦恼于电机调速呀!!

使用特权

评论回复
dy8832397| | 2014-8-12 09:01 | 显示全部楼层

能否把你下载的程序发到我邮箱469801832@qq.com,最近我也在调试无刷电机的程序,可以共同探讨

使用特权

评论回复
qioby| | 2014-8-15 21:24 | 显示全部楼层
我也在搞无刷电机的程序,不过我是用STM8S903来做,是汇编的。有感已正常运行,无感也正常运行,在搞无感启动及静音部分。

使用特权

评论回复
fanxsd| | 2014-8-20 15:44 | 显示全部楼层
pxjay 发表于 2014-8-8 11:59
大神可否有例子借鉴下,小弟也是苦恼于电机调速呀!!

怎么给你呢?

使用特权

评论回复
ffjava| | 2014-8-31 20:37 | 显示全部楼层
大神,求源码学习,谢谢。ffjava@hotmail.com

使用特权

评论回复
fanxsd| | 2014-8-31 21:46 | 显示全部楼层
ffjava 发表于 2014-8-31 20:37
大神,求源码学习,谢谢。

网上一搜就好多吧

我给你发一份。

有问题我也可以给你解决,当年我那第一次学习的时候浪费了不少精力。

使用特权

评论回复
悲伤流逝| | 2014-9-1 13:06 | 显示全部楼层
买个开发板自己学习吧,开发板一般都附带源代码,建议楼主多看看寄存器的功能,推荐看一下《例说stm32》这本书。

使用特权

评论回复
巫世杰| | 2014-9-17 20:09 | 显示全部楼层
高手们能否发我一份源代码,我现在正在学这个

使用特权

评论回复
pxjay| | 2014-9-18 16:52 | 显示全部楼层
fanxsd 发表于 2014-8-20 15:44
怎么给你呢?

px11@163.com  ,谢谢了!

使用特权

评论回复
巫世杰| | 2014-9-20 13:54 | 显示全部楼层
发我邮箱2278955869@qq.com  谢谢了

使用特权

评论回复
fanxsd| | 2014-9-20 14:57 | 显示全部楼层
pxjay 发表于 2014-9-18 16:52
px11@163.com  ,谢谢了!

已经给你了

使用特权

评论回复
带你看海| | 2014-10-16 11:15 | 显示全部楼层
fanxsd 发表于 2014-7-13 21:54
这个我全部研究过了,你有问题可以咨询我。这个是没有调速的固定转速的!(你看的程序) ...

师兄,是否能把STM32 BLDC 程序给我也发一份啊,564738274@qq.com 谢谢啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

27

帖子

0

粉丝