查看: 1437|回复: 0

STM32 两轮平衡小车——电机控制

[复制链接]
  • TA的每日心情
    开心
    2015-7-7 09:19
  • 签到天数: 13 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    发表于 2015-6-25 09:00:03 | 显示全部楼层 |阅读模式
    分享到:
    前面一篇大概的讲述了平衡小车的设计概况,在这一篇主要讲述电机的控制,通过上一讲可以知道平衡车做使用的电机驱动芯片是TB6612FN,它与L298N大体相同,但是Tb6612有更多突出的优点:TB6612相对于传统的L298N效率上提高很多,体积上也大幅度减少,在额定范围内,芯片基本不发热,当然也就显得更加娇贵。
      该芯片使用贴片封装,电路接线图如下:

      控制方法如下(A路为例):
      电机正反转控制:通过修改AIN1、AIN2的高低电平控制电机转向;
      电机转速控制:通过对PWMA占空比的调节来调节电机转速。
      STM32对PWm输出的控制也是比较简易的,只需通过简单配置即可,配置方式如下:
            GPIO_InitTypeDef        GPIO_InitStructure ;        TIM_TimeBaseInitTypeDef        TIM_BaseInitStructure;        TIM_OCInitTypeDef        TIM_OCInitStructure;                /*使能GPIOA、GPIOC、AFIO、TIM8外设时钟*/        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO | RCC_APB2Periph_TIM8, ENABLE);                /*初始化PA.07端口为Out_PP模式*/        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        GPIO_Init(GPIOA, &GPIO_InitStructure);                /*初始化PC.06端口为Out_PP模式*/        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;        GPIO_Init(GPIOC, &GPIO_InitStructure);                /*初始化PC.07端口(TIM8_CH2)为AF_PP模式*/        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        GPIO_Init(GPIOC, &GPIO_InitStructure);                /*定时器基本配置*/        TIM_BaseInitStructure.TIM_Prescaler = 3-1;        //时钟预分频数3,TIM8的计数时钟频率为24MHz        TIM_BaseInitStructure.TIM_Period = 1000-1;        //自动重装载寄存器数值,PWM2频率为24MHz/1000=24KHz        TIM_BaseInitStructure.TIM_ClockDivision = 0;        //采样分频        TIM_BaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;        //向上计数        TIM_BaseInitStructure.TIM_RepetitionCounter = 0;        //重复寄存器        TIM_TimeBaseInit(TIM8, &TIM_BaseInitStructure);        TIM_OCStructInit(&TIM_OCInitStructure);        TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;        //PWM1输出模式        TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;        //使能该通道输出        TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;        //输出极性        TIM_OC2Init(TIM8, &TIM_OCInitStructure);        //按指定参数初始化        TIM_OC2PreloadConfig(TIM8, TIM_OCPreload_Enable);        //使能TIM8在CCR2上的预装载寄存器        TIM_ARRPreloadConfig(TIM8, ENABLE);                //使能TIM8在ARR上的预装载寄存器                TIM_Cmd(TIM8, ENABLE);                                        //打开TIM8        TIM_CtrlPWMOutputs(TIM8, ENABLE);                        //PWM输出使能在需要改变PWM咱孔壁输出是只需要调用:TIM_SetCompare2(TIM8, (uint16_t)fPWM_L);                                        //左轮
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-4-19 15:49 , Processed in 0.120979 second(s), 18 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.