1
完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
以前做比赛的时候初步了解过pid,但是没事没有仔细去学习,后面一直想学都没时间,只是偶尔去了解下,现在终于有时间学习顺便做下记录。
1 原理 网上一大把的资料,此处不再赘述。 2 单片机实现。 2.1 硬件 stm32f103c8t6单片机 某宝买的编码电机 tb6612电机驱动 2.2 程序实现 首先是单片机时钟和中断设置,然后电机运转需要两个IO口形成电压差控制电机正反转。一路PWM控制转速。具体是 有了驱动以后还需要电机反馈。因为电机自带了霍尔编码器,能够输出两路具有相位差的方波因此通过M/T法可以测速。 最后是整个系统控制,我开了一个10ms的定时器1获取此刻的电机的转速,然后通过pid计算以后设置电机的pwm。 具体IO情况是 PB12-》AIN1 PB13-》AIN2 PB1 -》PWMA PA0,PA1连接电机编码器 下面贴出先关代码 int TIM1_UP_IRQHandler(void) { if(TIM1-》SR&0X0001)//5ms定时中断 { TIM1-》SR&=~(1《《0); Encoder=Read_Position(2); Moto=Position_PID(Encoder,Target_Position); Xianfu_Pwm(); Set_Pwm(Moto); } return 0; } //获取电机位置 int Position_PID (int Encoder,int Target) { static float Bias,Pwm,Integral_bias,Last_Bias; Bias=Encoder-Target; //计算偏差 Integral_bias+=Bias; //求出偏差的积分 Pwm=Position_KP*Bias+Position_KI*Integral_bias+Position_KD*(Bias-Last_Bias); //位置式PID控制器 Last_Bias=Bias; //保存上一次偏差 return Pwm; //增量输出 } 最后就是参数整定,最好结合图形这样效果更好。 |
|
|
|
只有小组成员才能发言,加入小组>>
2434 浏览 0 评论
9096 浏览 4 评论
36765 浏览 19 评论
5025 浏览 0 评论
24737 浏览 34 评论
1525浏览 2评论
1740浏览 1评论
2189浏览 1评论
1550浏览 0评论
521浏览 0评论
小黑屋| 手机版| Archiver| 德赢Vwin官网 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-21 16:36 , Processed in 1.230020 second(s), Total 76, Slave 60 queries .
Powered by 德赢Vwin官网 网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
德赢Vwin官网 观察
版权所有 © 湖南华秋数字科技有限公司
德赢Vwin官网 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号