49603|38

34

帖子

1

TA的资源

一粒金砂(中级)

楼主
 

分享一个三相直流无刷电机驱动 [复制链接]

 

1.检测霍尔传感器的值可以判断出转子的位置,再使能相应的上下桥臂,则能驱动电机运动;若要让电机持续转动,则必须再次检测传感器值及使能相应的上下桥臂。这里采用的是将霍尔传感器输出的三根线相边的IO口配置成外部中断,并且为边沿触发,在中断函数中加入传感器检测与上下桥臂切换程序,如此电机就能持续运转了。
2.上桥臂的控制采用IO口置高低电平来控制上桥臂的通断,下桥臂则使用单片机内部集成的三路PWM波来控制,通过控制PWM波的占空比,可以实现对电机的调速了。实际测得,占空比与电机的速度成正比例关系,在PWM波频率为20KHz时,占空比增加1%,速度增加60rpm,并在占空比为53%时达到额定转速3000rpm(空载)。
3.速度测量则采用如下公式:
电机每转一圈,霍尔值改变6次x5个周期=30次,记录边沿触发的中断次数N/30=电机转 过的圈数,设运转时间为t(s)则电机转速v=N/30/t*60 rpm。即动转时间为2s时,霍尔值改变次数即为速度值,单位rpm。
4.调速:给定速度,由电机驱动板自动由当前速度平滑过渡到给定速度。实际测试发现,速度变化量很大时,电机会有突然加速或减速时的冲击;因此,调速应有一个缓冲的过程。即加速或减速应以小步进缓慢增加或减少占空比来让速度渐渐达到最终值。

  1. #include "stm32f10x.h"
  2. #include "driver_motor.h"

  3. #define PWM_PERIOD_T 400


  4. #define U_Up_On GPIOB->BSRR = GPIO_Pin_13
  5. #define U_Up_Off GPIOB->BRR = GPIO_Pin_13
  6. #define U_Dn_On GPIOA->BSRR = GPIO_Pin_8
  7. #define U_Dn_Off GPIOA->BRR = GPIO_Pin_8

  8. #define V_Up_On GPIOB->BSRR = GPIO_Pin_14
  9. #define V_Up_Off GPIOB->BRR = GPIO_Pin_14
  10. #define V_Dn_On GPIOA->BSRR = GPIO_Pin_9
  11. #define V_Dn_Off GPIOA->BRR = GPIO_Pin_9

  12. #define W_Up_On GPIOB->BSRR = GPIO_Pin_15
  13. #define W_Up_Off GPIOB->BRR = GPIO_Pin_15
  14. #define W_Dn_On GPIOA->BSRR = GPIO_Pin_10
  15. #define W_Dn_Off GPIOA->BRR = GPIO_Pin_10

  16. #define SU_HOR GPIOA->IDR & GPIO_Pin_15
  17. #define SV_HOR GPIOA->IDR & GPIO_Pin_12
  18. #define SW_HOR GPIOA->IDR & GPIO_Pin_11


  19. //u8 Motor_Dir=0;

  20. //u8 Motor_EN=0;

  21. //u8 Hor_Value=7;
  22. //u16 TIM2_Conter=0;
  23. u16 Hall_Conter=0;


  24. MotorStruct Motor={CLOCK,40,STOP};

  25. /*******************************************************************************
  26. * 函数:void IO_Init(void)
  27. * 描述:IO
  28. * 参数:
  29. * 返回:
  30. * 其它:
  31. *******************************************************************************/
  32. void IO_Init(void)
  33. {

  34.     GPIO_InitTypeDef GPIO_InitStruct;
  35.     EXTI_InitTypeDef EXTI_InitStructure;
  36.     //GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);      /*使能SWD 禁用JTAG*/

  37.     /**********************LED Light***********/
  38.     GPIO_InitStruct.GPIO_Pin=GPIO_Pin_12;
  39.     GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;
  40.     GPIO_InitStruct.GPIO_Speed=GPIO_Speed_2MHz;

  41.     GPIO_Init(GPIOB, &GPIO_InitStruct);

  42.     /***********************霍尔传感器中断**********/
  43.     GPIO_InitStruct.GPIO_Pin=GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_15;
  44.     GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IN_FLOATING;
  45.     GPIO_InitStruct.GPIO_Speed=GPIO_Speed_2MHz;

  46.     GPIO_Init(GPIOA, &GPIO_InitStruct);//Harl

  47.     GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource11);
  48.     GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource12);
  49.     GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource15);
  50.    
  51.     EXTI_InitStructure.EXTI_Line = EXTI_Line11 | EXTI_Line12|EXTI_Line15;
  52.     EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  53.     EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling;
  54.     EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  55.     EXTI_Init(&EXTI_InitStructure);
  56. }
  57. /***************************************************************************
  58. 函数:void PWM_Init(void)
  59. 描述:配置PWM定时器TIM1
  60. 参数:
  61. 返回:无
  62. ***************************************************************************/
  63. void PWM_Init(void)
  64. {
  65.   GPIO_InitTypeDef GPIO_InitStructure;
  66.   TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
  67.   TIM_OCInitTypeDef TIM_OCInitStructure;
  68.   //TIM_BDTRInitTypeDef TIM_BDTRInitStructure;
  69.   TIM_Cmd(TIM1 , DISABLE);
  70.   TIM_CtrlPWMOutputs(TIM1, DISABLE);//禁止OC输出
  71.   
  72.     //IO口设置
  73.     GPIO_SetBits(GPIOA, GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10);  //PWM口
  74.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10;
  75.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
  76.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  77.     GPIO_Init(GPIOA, &GPIO_InitStructure);
  78.   
  79.     GPIO_SetBits(GPIOB, GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15);//普通IO口
  80.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
  81.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
  82.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  83.     GPIO_Init(GPIOB, &GPIO_InitStructure);
  84.    
  85.     //定时器设置
  86.     TIM_TimeBaseInitStruct.TIM_Period = PWM_PERIOD_T;//5极电机,3000RPM,每个Step有10个脉冲,载波15KHZ
  87.     TIM_TimeBaseInitStruct.TIM_Prescaler = 2;
  88.     TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1;
  89.     TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;
  90.     TIM_TimeBaseInitStruct.TIM_RepetitionCounter = 0;
  91.     TIM_TimeBaseInit(TIM1 , &TIM_TimeBaseInitStruct);
  92.     //TIM_ClearITPendingBit(TIM1, TIM_IT_Update);
  93.     //TIM_ARRPreloadConfig(TIM1, ENABLE);
  94.     //TIM_ITConfig(TIM1, TIM_IT_Update, ENABLE);
  95.     //配置PWM输出
  96.     TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
  97.     TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  98.     TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Disable;
  99.     TIM_OCInitStructure.TIM_Pulse = 1;
  100.     TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;
  101.     TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_Low;   
  102.     TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;
  103.     TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Set;  
  104.     TIM_OC1Init(TIM1, &TIM_OCInitStructure);
  105.     TIM_OC2Init(TIM1, &TIM_OCInitStructure);
  106.     TIM_OC3Init(TIM1, &TIM_OCInitStructure);

  107.   TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);
  108.   TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable);
  109.   TIM_OC3PreloadConfig(TIM1, TIM_OCPreload_Enable);

  110.   TIM_ARRPreloadConfig(TIM1, ENABLE);                        //使能TIMx在ARR上的预装载寄存器  TIM_Cmd(TIM1 , ENABLE);

  111.   TIM_Cmd(TIM1 , ENABLE);
  112.   TIM_CtrlPWMOutputs(TIM1, ENABLE);
  113. }
  114. /*****************************************************************************************
  115. 函数:void Motor_Init(void)
  116. 描述:
  117. 参数:
  118. 返回:
  119. *****************************************************************************************/
  120. void Motor_Init(void)
  121. {
  122.     IO_Init();
  123.     PWM_Init();
  124. }
  125. /*****************************************************************************************
  126. 函数:void Flash_Led(u8 n)
  127. 描述:
  128. 参数:
  129. 返回:
  130. *****************************************************************************************/
  131. void Flash_Led(u8 n)
  132. {
  133.     u8 i=0;
  134.     for(i=0;i<n;i++)
  135.     {
  136.         Led_On;
  137.         DelayMs(100*n);
  138.         Led_Off;
  139.         DelayMs(100*n);
  140.     }
  141. }
  142. /*****************************************************************************************
  143. 函数:void SetPWMduty(u8 PWMChanel,u16 pulse)
  144. 描述:设置pwm波占空比
  145. 参数:
  146. 返回:
  147. *****************************************************************************************/
  148. void SetPWMduty(u8 PWMChanel,u16 pulse)
  149. {
  150.     switch(PWMChanel)
  151.     {
  152.         case 1 :
  153.                 TIM1->CCR1=pulse;
  154.             break;
  155.         case 2 :
  156.                 TIM1->CCR2=pulse;
  157.             break;
  158.         case 3 :
  159.                 TIM1->CCR3=pulse;
  160.             break;
  161.         default :
  162.             break;
  163.     }

  164. }
  165. /*******************************************************************************
  166. 函数:PWM_T_Output
  167. 描述:设置相应的PWM梯形波输出
  168. 参数:pName上桥臂名称,nName下桥臂名称
  169. 返回:无
  170. ********************************************************************************/
  171. void PWM_T_Output(u8 pName , u8 nName , u8 mRate)
  172. {
  173.   switch(pName)
  174.   {
  175.     case 1:
  176.       GPIO_SetBits(GPIOB, GPIO_Pin_15 | GPIO_Pin_14 );
  177.       GPIO_ResetBits(GPIOB , GPIO_Pin_13);
  178.       break;
  179.     case 2:
  180.       GPIO_SetBits(GPIOB, GPIO_Pin_13 | GPIO_Pin_15 );
  181.       GPIO_ResetBits(GPIOB , GPIO_Pin_14);
  182.       break;
  183.     case 3:
  184.       GPIO_SetBits(GPIOB, GPIO_Pin_13 | GPIO_Pin_14 );
  185.       GPIO_ResetBits(GPIOB , GPIO_Pin_15);
  186.       break;
  187.     default:
  188.       GPIO_SetBits(GPIOB, GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15);
  189.   }
  190.   switch(nName)
  191.   {
  192.     case 1:
  193.       
  194.       TIM_SetCompare2(TIM1,0);
  195.       TIM_SetCompare3(TIM1,0);
  196.       TIM_SetCompare1(TIM1,(u16)(PWM_PERIOD_T * mRate / 100));
  197.       break;
  198.     case 2:
  199.       
  200.       TIM_SetCompare3(TIM1,0);
  201.       TIM_SetCompare1(TIM1,0);
  202.       TIM_SetCompare2(TIM1,(u16)(PWM_PERIOD_T * mRate / 100));
  203.       break;
  204.     case 3:
  205.       
  206.       TIM_SetCompare2(TIM1,0);
  207.       TIM_SetCompare1(TIM1,0);
  208.       TIM_SetCompare3(TIM1,(u16)(PWM_PERIOD_T * mRate / 100));
  209.       break;
  210.     default:
  211.       TIM_SetCompare1(TIM1,0);
  212.       TIM_SetCompare2(TIM1,0);
  213.       TIM_SetCompare3(TIM1,0);
  214.   }

  215.   TIM_SetAutoreload(TIM1, PWM_PERIOD_T);
  216. }

  217. /*****************************************************************************************
  218. 函数:PWM_T_Calculation
  219. 描述:梯形波计算
  220. 参数:HallValue霍尔值,mRate调制百分比,direction方向
  221. 返回:无
  222. *****************************************************************************************/
  223. void PWM_T_Calculation(u8 hallValue , u8 mRate , u8 direction)
  224. {
  225. if(direction == 1)
  226. {
  227.   switch(hallValue)
  228.   {
  229.   case 5:
  230.     PWM_T_Output(1 , 3 , mRate);
  231.     break;
  232.   case 1:
  233.     PWM_T_Output(1 , 2 , mRate);
  234.     break;
  235.   case 3:
  236.     PWM_T_Output(3 , 2 , mRate);
  237.     break;
  238.   case 2:
  239.     PWM_T_Output(3 , 1 , mRate);
  240.     break;
  241.   case 6:
  242.     PWM_T_Output(2 , 1 , mRate);
  243.     break;
  244.   case 4:
  245.     PWM_T_Output(2 , 3 , mRate);
  246.     break;
  247.   default:
  248.     PWM_T_Output(4 , 4 , 0);
  249.     break;
  250.   }
  251. }
  252. else
  253. {
  254.   switch(hallValue)
  255.   {
  256.   case 5:
  257.     PWM_T_Output(3 , 1 , mRate);
  258.     break;
  259.   case 1:
  260.     PWM_T_Output(2 , 1 , mRate);
  261.     break;
  262.   case 3:
  263.     PWM_T_Output(2 , 3 , mRate);
  264.     break;
  265.   case 2:
  266.     PWM_T_Output(1 , 3 , mRate);
  267.     break;
  268.   case 6:
  269.     PWM_T_Output(1 , 2 , mRate);
  270.     break;
  271.   case 4:
  272.     PWM_T_Output(3 , 2 , mRate);
  273.     break;
  274.   default:
  275.     PWM_T_Output(4 , 4 , 0);
  276.     break;
  277.   }
  278. }
  279. }

  280. /*******************************************************************************
  281. 函数:PWM_T_Int
  282. 描述:定时器中断程序,根据霍尔位置设置输出梯形波
  283. 参数:direction=顺时针/逆时针,mRate调制率
  284. 返回:无
  285. ********************************************************************************/
  286. void PWM_T_Int(u8 direction , u8 mRate)
  287. {
  288.   u8 hallValueTemp;
  289.   u8 hallValue;
  290.   hallValueTemp = GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_11) + (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_12) << 1) + (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_15) << 2);
  291.   hallValue = hallValueTemp;
  292.   PWM_T_Calculation(hallValue , mRate , direction);
  293. }

  294. /************************************************************************
  295. 函数:PWM_Stop
  296. 描述:PWM控制信号使能输出,禁止TIM1中断,使能TIM1中断
  297. 参数:pwmflag=DISABLE,PWM信号使能输出,pwmflag=ENABLE,禁止 PWM输出
  298. 返回:无
  299. *************************************************************************/
  300. void PWM_Stop(u8 pwmflag)
  301. {
  302.    NVIC_InitTypeDef NVIC_InitStructure;
  303.    GPIO_InitTypeDef GPIO_InitStructure;
  304.    if(pwmflag == ENABLE)//禁止 PWM输出
  305.    {
  306.      TIM_Cmd(TIM1 , DISABLE);
  307.     //TIM_Cmd(TIM2 , DISABLE);
  308.      NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_TIM16_IRQn;
  309.      NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;
  310.      NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  311.      NVIC_InitStructure.NVIC_IRQChannelCmd = DISABLE;
  312.      NVIC_Init(&NVIC_InitStructure);
  313.      
  314.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10;
  315.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
  316.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
  317.     GPIO_Init(GPIOA, &GPIO_InitStructure);
  318.     GPIO_SetBits(GPIOA, GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10);  //PWM口
  319.    
  320.      //PWM_T_Output(4 , 4 , 0);
  321.    }
  322. if(pwmflag == DISABLE)//使能PWM输出
  323.    {
  324.      NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_TIM16_IRQn;
  325.      NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;
  326.      NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  327.      NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  328.      NVIC_Init(&NVIC_InitStructure);
  329.      
  330.      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10;
  331.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
  332.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;
  333.     GPIO_Init(GPIOA, &GPIO_InitStructure);
  334.    
  335.      
  336.     // TIM_Cmd(TIM2 , ENABLE);
  337.    }
  338. }
  339. /*****************************************************************************************
  340. 函数:void Motor_Start(void)
  341. 描述:启动电机
  342. 参数:
  343. 返回:
  344. *****************************************************************************************/
  345. void Motor_Start(void)
  346. {   
  347.     PWM_T_Int(Motor.Dir,Motor.Speed);
  348. }
  349. /*****************************************************************************************
  350. 函数:void Motor_Stop(void)
  351. 描述:停止
  352. 参数:
  353. 返回:
  354. *****************************************************************************************/
  355. void Motor_Stop(void)
  356. {
  357.      //U_Up_On;V_Up_On;W_Up_On;
  358.      //U_Dn_On;V_Dn_On;W_Dn_On;
  359.      PWM_T_Output(4,4,0);
  360. }

  361. /*****************************************************************************************
  362. 函数:void EXTI15_10_IRQHandler(u8 dir,u8 hall)
  363. 描述:霍尔传感器中断
  364. 参数:
  365. 返回:
  366. *****************************************************************************************/
  367. void EXTI15_10_IRQHandler(void)
  368. {
  369.     Hall_Conter++;
  370.     if ((EXTI_GetITStatus(EXTI_Line11) != RESET)||(EXTI_GetITStatus(EXTI_Line12) != RESET)||(EXTI_GetITStatus(EXTI_Line15) != RESET))
  371.     {
  372.         
  373.         if(Motor.State!=STOP)
  374.         PWM_T_Int(Motor.Dir,Motor.Speed);
  375.     }        
  376.     EXTI_ClearITPendingBit(EXTI_Line11); //清除标志
  377.     EXTI_ClearITPendingBit(EXTI_Line12); //清除标志
  378.     EXTI_ClearITPendingBit(EXTI_Line15); //清除标志
  379. }
  380. /*****************************************************************************************
  381. 函数:void Test_Motor(u8 dir,u8 hall)
  382. 描述:电机控制
  383. 参数:
  384. 返回:
  385. *****************************************************************************************/
  386. void Test_Motor(void)
  387. {
  388.     while(1)
  389.    {
  390.         switch(Motor.State)
  391.         {
  392.             case STOP :
  393.                 Motor_Stop();
  394.                 break;
  395.             case RUN :
  396.                 Motor_Start();
  397.                 Motor.State=FREE;
  398.                 break;
  399.             default :
  400.                 break;
  401.         }
  402.    }
  403. }

复制代码

此帖出自电机控制论坛

最新回复

.检测霍尔传感器的值可以判断出转子的位置,再使能相应的上下桥臂,则能驱动电机运动!!   详情 回复 发表于 2023-12-2 19:22
点赞 关注(9)
 
 

回复
举报

12

帖子

2

TA的资源

一粒金砂(初级)

沙发
 
mark~
此帖出自电机控制论坛
 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
学习一下,运动控制正好实践一下
此帖出自电机控制论坛
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

4
 
非常感谢楼主提供的代码,如饮甘露,帮助很大。这里提出个问题,在程序中好像没看到死区控制相关的代码,请问是怎么解决的
此帖出自电机控制论坛

点评

程序中是这样处理的,在选通一组之前把除这组之外的两组先关闭,中间没有加延时!代码L200 关闭另外两组,代码L201 打开将要选通的这组;这里上桥臂是开关量,下桥臂是PWM! 不知道有没有回答到你的问题···  详情 回复 发表于 2015-9-9 15:12
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

5
 
真心不错,真好在做这个,可以参考参考
此帖出自电机控制论坛
 
 
 

回复

11

帖子

0

TA的资源

一粒金砂(初级)

6
 
好东西!
此帖出自电机控制论坛
个人签名GD32单片机专业代理!
电话15016724544
QQ2011559106
 
 
 

回复

34

帖子

0

TA的资源

一粒金砂(初级)

7
 
此帖出自电机控制论坛
 
 
 

回复

34

帖子

1

TA的资源

一粒金砂(中级)

8
 
BLDC 发表于 2015-8-26 14:47
非常感谢楼主提供的代码,如饮甘露,帮助很大。这里提出个问题,在程序中好像没看到死区控制相关的代码,请 ...

程序中是这样处理的,在选通一组之前把除这组之外的两组先关闭,中间没有加延时!代码L200 关闭另外两组,代码L201 打开将要选通的这组;这里上桥臂是开关量,下桥臂是PWM!
不知道有没有回答到你的问题···
此帖出自电机控制论坛
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

9
 
falderdz 发表于 2015-9-9 15:12
程序中是这样处理的,在选通一组之前把除这组之外的两组先关闭,中间没有加延时!代码L200 关闭另外两组 ...

恩,感谢楼主的分享,帮了大忙。我的程序中还添加了死区时间,我觉得这样更加安全可靠。还有,请教下楼主,单边调制和双边调制有啥区别?
此帖出自电机控制论坛

点评

你自己试试吧,因为硬件电路是别人搭的,上下桥臂控制电路不一样,速度上不一致,所以只在下桥臂上使用了PWM,至于这两都的区别我并没有经验之谈,你可以试试!  详情 回复 发表于 2015-10-23 11:18
 
 
 

回复

34

帖子

1

TA的资源

一粒金砂(中级)

10
 
BLDC 发表于 2015-10-9 13:36
恩,感谢楼主的分享,帮了大忙。我的程序中还添加了死区时间,我觉得这样更加安全可靠。还有,请教下楼主 ...

你自己试试吧,因为硬件电路是别人搭的,上下桥臂控制电路不一样,速度上不一致,所以只在下桥臂上使用了PWM,至于这两都的区别我并没有经验之谈,你可以试试!
此帖出自电机控制论坛
 
 
 

回复

33

帖子

1

TA的资源

一粒金砂(中级)

11
 
mark之,感谢楼主分享。
此帖出自电机控制论坛
 
 
 

回复

1403

帖子

1

TA的资源

纯净的硅(中级)

12
 
Mark~
此帖出自电机控制论坛
个人签名HELLO_WATER
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(初级)

13
 
此帖出自电机控制论坛
 
 
 

回复

38

帖子

0

TA的资源

一粒金砂(中级)

14
 
这是STM32的程序吗
此帖出自电机控制论坛
 
 
 

回复

14

帖子

0

TA的资源

一粒金砂(初级)

15
 
谢谢楼主,帮到我大忙了
此帖出自电机控制论坛
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

16
 
请问有关于直流无刷电机的三三导通方面的电机驱动程序吗?谢谢!
本人写的二二导通程序存在换相声,而三三导通程序电机却不转。
此帖出自电机控制论坛
 
 
 

回复

22

帖子

0

TA的资源

一粒金砂(中级)

17
 
谢谢楼主 先mark一下慢慢看
此帖出自电机控制论坛
 
 
 

回复

2

帖子

1

TA的资源

一粒金砂(初级)

18
 
想请教一下,main函数怎么没看到
此帖出自电机控制论坛
 
 
 

回复

162

帖子

5

TA的资源

一粒金砂(中级)

19
 
学习了哈
此帖出自电机控制论坛
 
 
 

回复

2

帖子

1

TA的资源

一粒金砂(初级)

20
 
很感谢,正需要这个!楼主可否贴出网盘?
另外问下,这个程序已经是能用了的对吧?
此帖出自电机控制论坛
 
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表