输出PWM,接到电调,控制无刷电机转动的原理

2019-07-21 02:19发布

网上很多资料,可能说的很明白,但对于没接触的来说还是不太容易明白,这里给出一个最基本的例子来解释如何控制。电调每次开机进入程序,都要进行一次(且只在开始前进行一次,运行中不再进行)行程校验,使其与你的PWM相匹配;不进行该步,即便配置没问题,电机也不会转动。废话不多说,代码很清楚:

#include "pbdata.h"
void RCC_Configuration(void);
void GPIO_Configuration(void);
void TIM3_Configuration(void);

int main(void)
{
  RCC_Configuration();//系统时钟初始化
GPIO_Configuration();//端口初始化
TIM3_Configuration();//定时器和PWM配置
TIM_SetCompare2(TIM3,400);//最大行程
while(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_1)==SET);//校验完成
TIM_SetCompare2(TIM3,200);//给一定占空比,电机开始转动
delay_ms(1000);
delay_ms(1000);
TIM_SetCompare2(TIM3,210);//改变占空比,转速改变
while(1);
}
void RCC_Configuration(void)
{
SystemInit();
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
}
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
//LED1
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
//KEY
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
//GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOC,&GPIO_InitStructure);
GPIO_SetBits(GPIOC, GPIO_Pin_1);  
}

void TIM3_Configuration(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;  
TIM_OCInitTypeDef TIM_OCInitStructure;

//端口映射
//GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3,ENABLE);

//定时器设置
TIM_TimeBaseStructure.TIM_Period = 3999; //初值
TIM_TimeBaseStructure.TIM_Prescaler = 359; //预分频
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//向上
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);

//PWM设置
TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;//PWM1模式
TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;//比较输出使能
TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;//输出极性
TIM_OC2Init(TIM3,&TIM_OCInitStructure);//定时器和通道设置函数
TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable);//使能ccr预装载器
TIM_Cmd(TIM3,ENABLE);//定时器使能
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
16条回答
小CC
1楼-- · 2019-07-21 23:19
那个PC1是什么用来做什么的,while(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_1)==SET);这句话怎么校验,求教
liiu
2楼-- · 2019-07-22 01:52
 精彩回答 2  元偷偷看……
arao和xiaomi
3楼-- · 2019-07-22 05:56
 精彩回答 2  元偷偷看……
arao和xiaomi
4楼-- · 2019-07-22 10:03
你好,看了过后有两个疑问,就是这个电调的输入顺序是先输入最大的行程,就是pwm设置的最大值是吗?输入完最大行程过后的话,需要校验吗?还有这个pwm的周期有没有要求呀?
潇洒怡哥
5楼-- · 2019-07-22 11:19
 精彩回答 2  元偷偷看……
老窝老徐
6楼-- · 2019-07-22 13:40
666,现在正好用电调但是没有做校验,导致pwm响应非常慢。看了之后非常感谢

一周热门 更多>