TMC5160A控制两个直流电机

        TMC5160 可以驱动一个或两个直流电机。可控制转矩 ,或者在转矩限幅的同时控制电压控制速度。
        TMC5160有A相和B相,每一个都可以控制一路直流电机,控制速度其实是控制A+和A-的压差实现的,输出的是50%的占空比(这个是打信号之后看到的,实际上手册没有讲)。
参考手册:TMC5160A_Datasheet_Rev1.15,注意是1.15版本,第21章
注意的地方:
如上图所示,最终可以控制XTARGET(0X2D)寄存器的8-0和24-16位来控制A相和B相的速度,但是是有符号的数据,符号控制正反转。
注意8-0是9个bit位,最高位第8bit是符号位,剩下7bit最大可以表示的数是255,所以转速大小由-255 ~ +255。
配置流程,上电直接写寄存器:
1.配置  GCONF(0x00) 寄存器的 direct_mode = 1;
            GCONF(0x00) 寄存器的 en_pwm_mode = 1;
2.配置  PWMCONF(0x70) 寄存器的 pwm_autoscale = 0;
            PWMCONF(0x70) 寄存器的 pwm_ofs = 255;
            PWMCONF(0x70) 寄存器的 pwm_grad = 0;
3.配置  IHOLD_IRUN(0x10)  寄存器的 ihold = 31;
4.配置  CHOPCONF(0X6C)寄存器的  toff   > 0  使能驱动器;这里我给的toff  = 3;
5.直接配置寄存器 XTARGET 来控制转速,代码如下。
//设置A和B的转速,接口实现的是同一个转速,参数取值为-255 ~ +255
void TestMotorPwm(int16_t MotorIDPwm)
{
	//第0到8位对应电机 A 相 和 第24到16位对应电机 B 相 PWM:二进制补码
	int32_t Ax = 0;
	int32_t Bx = 0;
	
	Ax = MotorIDPwm & 0x1FF;//共9bit,这样直接按照二进制补码也把正负的符号取了
	Bx = MotorIDPwm & 0x1FF;
	
	uint32_t value = 0;
	value = (Bx<<16&0x01FF0000) | (Ax & 0x1FF);//B相的在24-16位,A相8-0位

	tmc5160Diver.XTARGET = value;
	spi_write( tmc5160Diver.XTARGET);
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值