输出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条回答
le51
1楼-- · 2019-07-22 17:03
小CC 发表于 2016-9-29 22:42
**** 作者被禁止或删除 内容自动屏蔽 ****

我想应该是,通过按下一段时间的按键,等待按键松开代表校验完成,即通过按按键的这段时间给电调初始化一些反应时间。
炫色康康
2楼-- · 2019-07-22 20:50
谢谢分享
zdsurge
3楼-- · 2019-07-22 22:30
 精彩回答 2  元偷偷看……
无友与
4楼-- · 2019-07-22 22:34
 精彩回答 2  元偷偷看……

一周热门 更多>