打印
[STM32]

STM32F103VET6同时驱动10只伺服电机问题

[复制链接]
2108|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xinhuifly|  楼主 | 2017-10-28 16:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

各位大神前辈们:我最近一个项目,使用的是STM32F103VET6,需要驱动至少10伺服电机,现在其他功能占用了几个TIM   现在使用TIM1和TIM4和TIM3分别输出4个PWM
来驱动伺服驱动器(位置模式),要求每只伺服的速度和方向能单独调节,那问题来了,比如TIM1的4个通道共享了一个ARR,那频率就都是一样的,因为位置模式速度就是靠频率来调节的,这样四个伺服就只能产生同样的速度。有没有办法使得四个通道单独额频率呢?请知道的或者遇到过的前辈们指点迷津呢,困惑啊。

相关帖子

沙发
515192147| | 2017-10-28 17:13 | 只看该作者
通过 CAN总线,形成个 分散控制系统,10个 芯片 控制10个伺服电机,
另用一个 芯片 与这10个 控制伺服电机的芯片通信,我们可以提供这个
开发板,详细见:
https://bbs.21ic.com/icview-1945634-1-1.html
类似下图的结构:

使用特权

评论回复
板凳
毁灭者e5| | 2017-10-28 20:46 | 只看该作者
只要速度满足要求 可以尝试使用定时器中断 CPU操作IO模拟 要求高可以外扩pfm芯片

使用特权

评论回复
地板
qinweixing| | 2017-10-30 14:46 | 只看该作者
我写过 一个定时器TIM2控制4个步进电机的,速度都不一样,哈哈

使用特权

评论回复
5
qinweixing| | 2017-10-30 14:55 | 只看该作者
给你点提示
        /* 基础设置*/
        TIM_TimeBaseStructure.TIM_Period = 65535;                                      
        TIM_TimeBaseStructure.TIM_Prescaler = 36-1;                            
        TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;                     
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;        
       
        TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);
       
        /* 比较通道1*/
        TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Toggle ;                       //翻转模式
        TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Disable;        //失能管脚输出
        TIM_OCInitStructure.TIM_Pulse = CCR1_Val;  
        TIM_OCInitStructure.TIM_OCPolarity =TIM_OCPolarity_High;                  //极性
          
        TIM_OC1Init(TIM4, &TIM_OCInitStructure);
        TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Disable);                                    //禁止OC1重装载,其实可以省掉这句,因为默认是4路都不重装的.
       
        /*比较通道2 */        
        TIM_OCInitStructure.TIM_Pulse = CCR2_Val;
        TIM_OC2Init(TIM4, &TIM_OCInitStructure);
        TIM_OC2PreloadConfig(TIM4, TIM_OCPreload_Disable);
               
        /*预先清除所有中断位*/
        TIM_ClearITPendingBit(TIM4, TIM_IT_CC1 | TIM_IT_CC2 | TIM_IT_CC3 | TIM_IT_CC4);        
        /* 4个通道和溢出都配置中断*/
        TIM_ITConfig(TIM4, TIM_IT_CC1 | TIM_IT_CC2 | TIM_IT_CC3 | TIM_IT_CC4, DISABLE);
        /* 允许TIM4开始计数 */
        TIM_Cmd(TIM4, ENABLE);

使用特权

评论回复
6
fly1974| | 2017-11-2 11:09 | 只看该作者
要用到各个CCRn寄存器 ,初始化代码示例(msp430)
  TBCCTL0 = OUTMOD_4 + CCIE;                    // CCR0 toggle, interrupt enabled
  TBCCTL1 = OUTMOD_4 + CCIE;                    // CCR1 toggle, interrupt enabled
  TBCCTL2 = OUTMOD_4 + CCIE;                    // CCR2 toggle, interrupt enabled
  TBCCTL3 = OUTMOD_4 + CCIE;                    // CCR3 toggle, interrupt enabled
  TBCCTL4 = OUTMOD_4 + CCIE;                    // CCR4 toggle, interrupt enabled

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

粉丝