求助~无刷电机电调给入PWM后 还是无法驱动。

2019-08-19 19:35发布

我买了套 无刷电机+电调
老板说 50Hz + 1-2ms 电平 就能驱动,为什么我写入后还是没反应。



白 {MOD}我接的TIM3 CH1口。  A6

void PWM_Config(){
   TIM_TimeBaseInitTypeDef timeBaseStance;
   TIM_OCInitTypeDef ocStance;

   TIM_DeInit(TIM3);
   timeBaseStance.TIM_Period = 20;
  timeBaseStance.TIM_Prescaler = 0;
  timeBaseStance.TIM_CounterMode = TIM_CounterMode_Up;
  timeBaseStance.TIM_ClockDivision = TIM_CKD_DIV1;

  TIM_TimeBaseInit(TIM3,&timeBaseStance);

  ocStance.TIM_OCMode = TIM_OCMode_PWM1;    
  ocStance.TIM_OutputState = TIM_OutputState_Enable;
  ocStance.TIM_Pulse = 1;
TIM_OC1Init(TIM3, &ocStance);

TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);
TIM_ARRPreloadConfig(TIM3,ENABLE);
TIM_Cmd(TIM3,ENABLE);
}

void GPIO_Config(){

GPIO_InitTypeDef GPIO_InitStructure;
GPIO_DeInit(GPIOA);
GPIO_AFIODeInit();

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 |GPIO_Pin_7;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP ; 
GPIO_Init(GPIOA, &GPIO_InitStructure);


}
其他时钟已经开启。

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
39条回答
009dsa
1楼-- · 2019-08-22 12:28
回复【19楼】随风灬而逝:
---------------------------------
我线没接错, WM也对的, 我用二极管试过了。

再请问下, 一般的无刷电机是如何驱动的?都是电调控制吧? 给的占空比是多少?  引脚输出多少hz  还是根据每种电机的不同输入的驱动值也不同。
红木甲板
2楼-- · 2019-08-22 13:45
回复【20楼】009dsa:
---------------------------------
航模用的无刷电调上电后自锁保护,解锁方法可以看说明书(网上有电子版),说明书上会写遥控器的解锁方法(油门控制),油门0%到100%大概对应PWM高电平时间1ms到2ms(频率50Hz),你写个算法模拟遥控器操作就可以了
随风灬而逝
3楼-- · 2019-08-22 17:44
 精彩回答 2  元偷偷看……
bg8wj
4楼-- · 2019-08-22 19:05
呵呵,舵机驱动,首先确定电调可以接受的频率?先搞清楚pwm输出频率,过高过低都驱动不了。另外,此类电调stm驱动不了的。3.3v的pwm需要信号调理到5v。50hz的商品电调,建议你直接扔掉啦。正常情况14khz的电调可以用来飞飞机。
009dsa
5楼-- · 2019-08-22 19:19
回复【23楼】bg8wj:
---------------------------------
回复【22楼】随风灬而逝:
---------------------------------
回复【21楼】红木甲板:
---------------------------------
谢谢各位,我已经通过   2ms + 18ms 的 周期的模拟   可以启动了... 之前用的  新西达电机和电调提示不怎么明确  我换了好盈电调就好使了.
阿拓
6楼-- · 2019-08-22 19:31
timeBaseStance.TIM_Period = 20;
  timeBaseStance.TIM_Prescaler = 0;

楼主这里设置不合理啊,要求的PWM是50Hz,即周期是20ms,你这个PWM的周期是远小于20ms的。
应设置成这样
     timeBaseStance.TIM_Period = 200-1;    //设置ARR的值为199,从0计数到199,刚好是20ms
     timeBaseStance.TIM_Prescaler = 7200-1;//设置PSC的值为7199,这样的话每计数一次为0.1ms

然后你再通过控制CCR来调节占空比,就可以控制无刷电机转动了。

一周热门 更多>