找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6696|回复: 4
打印 上一主题 下一主题
收起左侧

基于平衡车主板电机驱动------------moyuqilin

[复制链接]
跳转到指定楼层
楼主
本帖最后由 moyuqilin 于 2016-1-26 21:58 编辑

      PWM驱动电机,之前没有接触过带有PWM的STC的芯片,在这个问题上卡了一天,小车上共用了4路PWM,PWM2,PWM3,PWM4,PWM5,。通过飞思卡尔的电机驱动芯片驱动电机,两路驱动一个电机;
      STC15系列中共有6通道高精度PWM,
      在配置PWM相关寄存器前要先设置引脚模式,设置为推挽输出
      然后配置PWM相关寄存器,
      P_SW2 |=0x80;                    //访问特殊功能寄存器
      P_SW2第7位设置为1,允许访问接下来的特殊功能寄存器
      PWMCFG=0x00;                    //设置PWM初始电平为低电平
      PWMCKS = 0x00;                  //选择PWM的时钟为Fosc/(0+1)
      配置PWM初始电平及时钟
      PWMC=20001;                     //PWM周期
      PWM的周期设置,不太理解,可设置1-32767之间,手边没有示波器,没有测试其效果
      PWM2T1=20000;                   //PWM2第一次翻转点
      PWM2T2=20001;                   //PWM2第二次翻转点
      设置两个PWM翻转点,占空比=(PWM3T2-PWM3T1)/PWMC
      其他通道的一样设置,
       PWM2CR=0x00;
        PWM3CR=0x00;
        PWM4CR=0x00;
        PWM5CR=0x00;
        控制各个通道PWM
        PWMCR=0x8f;                                //使能PWM
        这句话要在前面都配置好以后再配置
        接下来就可以输出PWM了,
        在主程序中更改PWC和PWM2T1,PWM2T2,改变PWM波形
        因为本次小车的电机由两路PWM控制,之前在接触STM32时用过互补PWM输出,在这里也写了一个,效果还可以
         /*************************************************
**函数名:    PWM2And3_HubuConter
**功能:       PWM2,3,互补PWM控制电机
**说明:      占空比为50,电机停转,为45和55时,转速相同,方向相反
**入口参数:  PWM周期CYCLE,占空比DUTY
**返回值:    无
************for*****moyuqilin19*******************/
void PWM2And3_HubuConter(long int CYCLE,long int DUTY)
{
  PWMC=CYCLE;
  PWM2T1=0x0000;
  PWM2T2=CYCLE*DUTY/100;

  PWM3T1=0x0000;
  PWM3T2=CYCLE*(100L-DUTY)/100;
}
效果
         

UsatConteMot.zip (42.49 KB, 下载次数: 16)

附件一个自己写的串口1控制电机转的,下一个:
      编码器数据采集




评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:94185 发表于 2016-1-27 10:22 | 只看该作者
66666666
回复

使用道具 举报

板凳
ID:87158 发表于 2016-1-27 18:49 | 只看该作者
楼主,我想问下为什么要用互补法呢,直接把PWM3赋0值不,控制PWM2不一样吗?
回复

使用道具 举报

地板
ID:77578 发表于 2016-1-28 12:24 | 只看该作者
q413054581 发表于 2016-1-27 18:49
楼主,我想问下为什么要用互补法呢,直接把PWM3赋0值不,控制PWM2不一样吗?

是的,但是之前在做STM32的时候接触的是输出两路PWM去控制电机,两路控制的时候会有一个死区停车的东西,因为之前我负责硬件,所以我也不懂这个死区的东西,但是两路PWM去进行控制电机肯定有他的优势,具体上,不清楚
回复

使用道具 举报

5#
ID:77578 发表于 2016-1-29 20:24 | 只看该作者
   今天发现上面的程序在做PWM初始化的时候少写了两句,少配置了两个相关的寄存器,虽然不会影响到PWM的单独输出,但是在使用定时器中断的时候就出了影响,在此进行改正,在设置PWMC寄存器的上面应当加上配置两个寄存器,
                        PWMIF=0x00;                  PWM中断标志寄存器
                        PWMFDCR=0x00;
       之前在做PWM的单独调试的时候是没用问题的,所以就并没有按照手册上的来,没有配置这两个寄存器,但在今天写定时器0中断的时候,就影响到了PWM的输出
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表