查看: 886|回复: 0

直流电机控制之硬件设计

[复制链接]
  • TA的每日心情
    开心
    2014-6-8 11:09
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2016-8-15 09:41:38 | 显示全部楼层 |阅读模式
    分享到:
    一.H桥驱动逻辑控制
            驱动电机时,保证H桥上两个同侧的三极管不会同时导通非常重要。如果三极管Q1和Q2同时导通,那么电流就会从正极穿过两个三极管直接回到负极。此时,电路中除了三极管外没有其他任何负载,因此电路上的电流就可能达到最大值(该电流仅受电源性能限制),甚至烧坏三极管。基于上述原因,在实际驱动电路中通常要用硬件电路方便地控制三极管的开关。
            死区就是在上半桥关断后,延迟一段时间在打开下半桥或在下半桥关断后,延迟一段时间再打开上半桥,从而避免功率元件烧毁,这段延迟时间就是死区.


    上图为IRS21867S输入时序图。PWM波在逻辑控制输入延时一段时间后输入。
    电机驱动板引脚对应表如下:
       引脚
       
       功能
       
       第二功能
       
       备注
       
       PA9
       
       PWM调速
       
       OC2
       
       与PA11不能同时打开
       
       PA11
       
       PWM调速
       
       OC4
       
       与PA9不能同时打开
       
       PA8
       
       逻辑输入
       
             延时后输入PWM波
       
       PA10
       
       逻辑输入
       
             延时后输入PWM波
       
    程序设计:
    电机顺时针转动:
    void MotorLeft(int speed)
    {
      if(speed >= MAXSPEED || speed<MINSPEED)
      return;
      if(MotorDirection==RIGHT||MotorDirection==STOP)  
    {
      MotorDirection = LEFT;
      TIM_Cmd(TIM1, DISABLE);
      GPIO_SetBits(GPIOA,GPIO_Pin_8);
      delay_us(10);
      GPIO_ResetBits(GPIOA,GPIO_Pin_10);
      delay_us(10);
      TIM_CCxCmd(TIM1,TIM_Channel_2,DISABLE);  //ÉÏÇÅʧÄÜ
      TIM_CCxCmd(TIM1,TIM_Channel_4,ENABLE);  //ÏÂÇÅʹÄÜ
      TIM_SetCompare4(TIM1,speed);  
      TIM_Cmd(TIM1, ENABLE);
      }
      else if(MotorDirection == LEFT)
      {
      TIM_Cmd(TIM1, DISABLE);
      TIM_SetCompare4(TIM1,speed);  
      TIM_Cmd(TIM1, ENABLE);  
      }}
    二. 编码器

    型号:HKT3004-301C1
    硬件连接:
    地同侧输入接B相,5V同侧接A相。
    在STM32中高级定时器有正交编码功能,配置定时器为正交编码模式可以测量编码器输出的正交方波频率,从而可以得到电机实时速度。
    void Encoder_Configuration(void)
    {
    GPIO_InitTypeDef gpio;
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
    GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3,ENABLE);
    gpio.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_4;
    gpio.GPIO_Speed = GPIO_Speed_2MHz;
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE);
      gpio.GPIO_Mode = GPIO_Mode_IPU;
      GPIO_Init(GPIOB,&gpio);
      TIM_EncoderInterfaceConfig(TIM3, TIM_EncoderMode_TI12,
    TIM_ICPolarity_Falling, TIM_ICPolarity_Falling);
      TIM_Cmd(TIM3,ENABLE);
    }

    另外配置一个定时器,每20ms测量一次定时器数值。
    回复

    使用道具 举报

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

    本版积分规则

    关闭

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

    手机版|小黑屋|与非网

    GMT+8, 2024-4-18 12:21 , Processed in 0.131401 second(s), 18 queries , MemCache On.

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

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.