找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

手机号码,快捷登录

Flux电机有限元分析教程西莫团购入口 | 奖励入口当当网购物入口 | 奖励入口欢迎使用!西莫论坛App开放下载Motor-CAD电机多物理域设计教材购买入口 | 奖励入口
★新会员论坛须知★《西莫电机技术》第39期发售火热进行中Flux电机电磁阀有限元分析教程团购入口 | 奖励入口论坛微信公众平台欢迎入驻
西莫电机及相关产品供需交流群开放邀请★ 论坛VIP会员申请 ★Motor-CAD.MANATEE电磁热振动噪声教程 | 奖励入口西莫团队欢迎您的加盟!
宣传推广合作请联系QQ:25941174西莫电机论坛微信群正式开放Flux变压器与电抗器有限元分析团购入口 | 奖励入口西莫电机论坛技术版区QQ群汇总
查看: 4133|回复: 3

[求助] stm32控制无刷直流电机的程序

[复制链接]

该用户从未签到

发表于 2013-3-31 15:25 | 显示全部楼层 |阅读模式 来自: 中国浙江杭州
悬赏10西莫币未解决
最近下的一个关于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);//主从模式选择  

西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过

该用户从未签到

发表于 2014-8-20 22:14 | 显示全部楼层 来自: 中国安徽淮南
楼主你好,你的无刷直流电机的控制程序可能发给我一份啊,我现在也在做这个,希望以后能多交流交流。我邮箱:austchengjunhui@126.com
西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过
回复

使用道具 举报

签到天数: 10 天

连续签到: 1 天

[LV.3]偶尔看看II

发表于 2014-9-24 11:45 | 显示全部楼层 来自: 中国湖北武汉
cjh5750 发表于 2014-8-20 22:14
楼主你好,你的无刷直流电机的控制程序可能发给我一份啊,我现在也在做这个,希望以后能多交流交流。我邮箱 ...

网上下载到的一般都是不怎么好的程序,只能当作入门参考
西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过
回复

使用道具 举报

该用户从未签到

发表于 2021-1-16 21:26 | 显示全部楼层 来自: 中国山东聊城
有道理
莫辞顿开
西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

西莫电机论坛微信公众平台欢迎您的关注!

QQ|Archiver|手机版|小黑屋|西莫电机圈 ( 浙ICP备10025899号-3|浙公网安备:33028202000436号 )

GMT+8, 2024-12-23 12:37 , Processed in 0.057699 second(s), 20 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表