OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6588|回复: 7

用STM32做直流电机驱动板,出现问题了

[复制链接]

29

主题

84

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
250
金钱
250
注册时间
2014-9-11
在线时间
8 小时
发表于 2015-10-31 22:21:03 | 显示全部楼层 |阅读模式
5金钱
用上位机给STM32直流驱动板发指令,STM32完成上位机指令后,但由于编码器计数未清零,指令不能连续发送,该怎么办?

[mw_shl_code=c,true]s32 pwm; extern s16 dAngle; //s16 Now_position; void Speed_control(s16 set_Position,s16 set_Speed) { pwm+=PID(set_Speed,dAngle); if(pwm>10000) pwm=9000; if(pwm<0) pwm=500; // TIM1->CCR1=pwm; if(set_Position==TIM2->CNT) { TIM1->CCR1=0x0000; TIM1->CCR2=0x0000; // delay_ms(1000); // flag=1; } else if(set_Position>TIM2->CNT) { TIM1->CCR1=pwm; TIM1->CCR2=0x0000; } else if(set_Position<TIM2->CNT) { TIM1->CCR1=0x0000; TIM1->CCR2=pwm; } } [/mw_shl_code]
用TIM2进行编码器计数,通过电脑串口设置set_Position(位置),set_Speed(速度)



设置转9000个脉冲,但由于电机惯性,编码器计数显示9231个脉冲,怎么让误差减小?

当驱动板完成指令电机停止后,怎么让编码器的计数清零,为下一次指令接收做好准备?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

2164

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5757
金钱
5757
注册时间
2013-11-22
在线时间
1208 小时
发表于 2015-10-31 22:38:28 | 显示全部楼层
回复

使用道具 举报

29

主题

84

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
250
金钱
250
注册时间
2014-9-11
在线时间
8 小时
 楼主| 发表于 2015-11-1 08:13:55 | 显示全部楼层
回复【2楼】lycreturn:
---------------------------------
PID控制是先调位置,再调速度吗?
回复

使用道具 举报

51

主题

1455

帖子

3

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2612
金钱
2612
注册时间
2011-1-25
在线时间
176 小时
发表于 2015-11-5 09:57:53 | 显示全部楼层
你需要PID算法。
double IDCalc(PID *pp,double NextPoint)
{
    double dError,Error;
    
    Error = pp->SetPoint - NextPoint;   
    pp->SumError += Error;            
    dError = pp->LastError - pp->revError; 
    pp->revError = pp->LastError;        
    pp->LastError = Error;               
    return (pp->roportion*Error          /*比例调节*/
            + pp->Integral*pp->SumError   /*积分补偿*/
            + pp->Derivative*dError);     /*微分补偿*/
}
一直努力就很好。
回复

使用道具 举报

29

主题

84

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
250
金钱
250
注册时间
2014-9-11
在线时间
8 小时
 楼主| 发表于 2015-11-9 21:40:47 | 显示全部楼层
回复【4楼】qq942266575:
---------------------------------
我想知道怎么把位置PID 和 速度PID结合起来,形成双闭环控制
回复

使用道具 举报

18

主题

190

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1065
金钱
1065
注册时间
2012-6-18
在线时间
157 小时
发表于 2015-11-21 22:43:52 | 显示全部楼层
回复【5楼】心染红尘:
---------------------------------
两轮平衡车啊?呵呵。这种已经开源都烂了。
回复

使用道具 举报

0

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2015-12-4
在线时间
6 小时
发表于 2015-12-4 21:56:59 | 显示全部楼层
有谁知道f4的dsp库的pid函数怎么用啊  想做一程序需要
回复

使用道具 举报

5

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
90
金钱
90
注册时间
2015-10-2
在线时间
5 小时
发表于 2015-12-9 23:10:47 | 显示全部楼层
回复【5楼】心染红尘:
---------------------------------
一般理解,速度环是位置环的内环,也就是位置PID输出的值是期望的速度值。
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-25 18:17

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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