关于TMC4671控制-TMC6200驱动伺服电机开环运动的一些调试过程

        TMC4671的EN引脚一定要拉高电平,SPI的通讯设置我就不多说了,我也是才调试出来,也仅仅做了一个运动控制,让他跑起来,其他更深入的还暂时未涉及。

        我使用的是STM32F429IGT6的板子,然后画的PCB板,大家根据自己的需求进行更改。

        首先初始化TMC4671的EN引脚,只有上电给高电平之后,才能向TMC4671之中写入数据,就好像UART的ENABLE使能一样。

        我这边EN引脚是F2,做复用推挽输出,然后将电平拉高了。

    GPIO_Str.Pin			 = GPIO_PIN_2;
	GPIO_Str.Mode			 = GPIO_MODE_OUTPUT_PP;
	GPIO_Str.Pull			 = GPIO_NOPULL;
	GPIO_Str.Speed		 = GPIO_SPEED_FREQ_HIGH;
	HAL_GPIO_Init(GPIOF, &GPIO_Str);

	//将引脚拉高
	HAL_GPIO_WritePin(GPIOF, GPIO_PIN_2, GPIO_PIN_SET);

        接下来就是直接进行TMC4671和TMC6200的配置了

   我这里用的函数uint32_t TMC6200_ReadWrite_Data(uint8_t AddR, uint32_t Data, uint8_t RW);

        uint8_t        AddR    :        地址

        uint32_t      Data     :        32位的数据

        uint8_t         RW      :        读写位                1表示写,0表示读

TMC6200_ReadWrite_Data(TMC6200_GCONF        , 0x00000000, 1);	//0x00
TMC6200_ReadWrite_Data(TMC6200_OTP_PROGRAM	, 0x00000000, 1); 		//0x06
TMC6200_ReadWrite_Data(TMC6200_FACTORY_CONF , 0x0000000E, 1); 		// 0x08
TMC6200_ReadWrite_Data(TMC6200_SHORT_CONF	, 0x13010606, 1); 	//0x09
TMC6200_ReadWrite_Data(TMC6200_DRV_CONF	    , 0x00000004, 1); 	//0x0A
TMC6200_ReadWrite_Data(TMC6200_GSTAT		, 0x0000FFFF, 1);//0x01
TMC6200_ReadWrite_Data(0x09	                , 0x00000000, 0);	    //验证6200SPI通信		

TMC4671_ReadWrite_Data(0x00,0x00000000,0);	//返回值为十进制的875968305表示返回正确的4671

        不管是TMC6200还是TMC4671一定要看好数据手册里面的读写,并且实验一下,读出来的和写进去的数据是否一致。在初始化完毕TMC6200之后,可以进行一下读取TMC4671的0x00地址,看看返回的数据是否是十进制的875968305,转换成16进制会是ASCII码3436 3731,也就是4671

//Motor_Type & PWM configuration
TMC4671_ReadWrite_Data(TMC4671_MOTOR_TYPE_N_POLE_PAIRS, 0x00030007, 1);		//0x1B		电机类型和电机的极对数
TMC4671_ReadWrite_Data(TMC4671_PWM_POLARITIES , 0x00000000, 1);		//0x17		高低侧门控制信号的极性
TMC4671_ReadWrite_Data(TMC4671_PWM_MAXCNT	  , 0x00000F9F, 1);		//0x18		PWM的频率
TMC4671_ReadWrite_Data(TMC4671_PWM_BBM_H_BBM_L, 0x00001919, 1);		//0x19		超时时间
TMC4671_ReadWrite_Data(TMC4671_PWM_SV_CHOP	  , 0x00000007, 1);		//0x1A		关闭空间矢量   打开PWM的FOC
	
//开环的情况下读取IO I1
TMC4671_ReadWrite_Data(TMC4671_OPENLOOP_MODE  , 0x000000000, 1);    //0x1F      正反转
TMC4671_ReadWrite_Data(TMC4671_PHI_E_SELECTION, 0x00000002, 1);		//0x52		开环
TMC4671_ReadWrite_Data(TMC4671_MODE_RAMP_MODE_MOTION, 0x00000008, 1);//0x63  	uq_ud_ext
TMC4671_ReadWrite_Data(TMC4671_UQ_UD_EXT	  , 0x000005DC, 1);		//0x24		电流
TMC4671_ReadWrite_Data(TMC4671_OPENLOOP_ACCELERATION, 0x0000003C, 1);//0x20		开环的加速度
TMC4671_ReadWrite_Data(TMC4671_OPENLOOP_VELOCITY_TARGET, 0x000000FF, 1);//0x21开环的目标速度
TMC4671_ReadWrite_Data(TMC4671_PHI_E_EXT	  , 0x00000000, 1);		//0x1C		电角度
//TMC4671_ReadWrite_Data(TMC4671_ADC_RAW_ADDR	  , 0x00000000, 1);

        一定要烧写完成之后给板子完全断电,当时实验时,因为没有断电的原因,可能程序是正确的,也不会跑起来,当时浪费一下午时间来调试,发现是没有完全断电的问题。

        大家如果有需要可以自取,我也是初学者,如果有什么问题欢迎指正。谢谢大家

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值