| 
 
| 本帖最后由 tcdbobo 于 2019-8-21 14:24 编辑 
 主控板用的是ST的 nucleo-F410RB 小白板。 驱动芯片用的是TI的DRV8834,驱动板是按照官方DRV8834的datasheet里的 typical application自己做的板子(附图是自己画的原理图和官方手册推荐的原理图对照,一模一样做的板子)
 
 程序是自己按照手册的说明写的。附上电机这部分程序,如下:
 管脚定义如下:
 #define DRV8834_RCC_CLK_ENABLE()         __HAL_RCC_GPIOC_CLK_ENABLE()
 #define DRV8834_GPIO_PIN                 (GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2)
 #define DRV8834_GPIO_PORT                GPIOC
 
 
 #define dir_opsitive                    HAL_GPIO_WritePin(DRV8834_GPIO_PORT,GPIO_PIN_0,GPIO_PIN_SET)
 #define dir_negative                    HAL_GPIO_WritePin(DRV8834_GPIO_PORT,GPIO_PIN_0,GPIO_PIN_RESET)//方向
 
 #define sleep_off                       HAL_GPIO_WritePin(DRV8834_GPIO_PORT,GPIO_PIN_1,GPIO_PIN_SET)
 #define sleep_on                        HAL_GPIO_WritePin(DRV8834_GPIO_PORT,GPIO_PIN_1,GPIO_PIN_RESET)//
 
 #define nENBL_off                       HAL_GPIO_WritePin(DRV8834_GPIO_PORT,GPIO_PIN_2,GPIO_PIN_SET)
 #define nENBL_on                        HAL_GPIO_WritePin(DRV8834_GPIO_PORT,GPIO_PIN_2,GPIO_PIN_RESET)//使能
 
 我写的是一个控制正反转的程序,设置一个变量pid_input ,为了方便控制正反转
 void user_app_motorcontrol(float pid_input){
 if (pid_input > 0)   //大于0
 {
 
 sleep_off;
 nENBL_on;
 HAL_Delay(2);
 dir_opsitive;   //正转
 HAL_TIM_PWM_Start(&htim9,TIM_CHANNEL_1);
 }
 if (pid_input < 0)  //小于0
 {
 
 sleep_off;
 nENBL_on;
 HAL_Delay(2);
 dir_negative;  //反转
 HAL_TIM_PWM_Start(&htim9,TIM_CHANNEL_1);
 
 }
 }
 
 
 为了方便测试,在main里 我写了一个跑正转的函数。
 while (1)
 {
 user_app_motorcontrol(1);
 HAL_Delay(2000);
 }
 附图有DRV8834的控制时序图(附图有datasheet截图)。默认情况下,nENBL,STEP,DIR,M0,M1,nSLEEP 都是有下拉的(附图有功能方框图)M0 M1 ,我默认悬空为0,查手册table3为full step运行。
 对于DRV8834驱动步进电机,都说只要给STEP引脚驱动频率就可以使步进电机转起来。可我这个接上线,我用万用表测,DRV8834有电压(我用的是小白板上的5V和GND)STEP端我用的是TIM9的channe 1 出的PWM,用示波器可以测出,但电机就是不转,连声音也没有,就像没有启动一样。请帮忙看一下。
 
 
 
 
 
 | 
 |