小车相关代码开源--PID--速度环

        MCU:stm32f429zgt6,使用HAL库开发,由于HAL库封装完善,所以将本工程移植到别的mcu平台是十分轻松的,懂其逻辑,其实移植到相关得硬件平台都是比较快速的。

        步骤1:打开stm32cubeMX,设置外部时钟晶振。

 默认设置为MCU运行的最高频率,STM32F429ZGT6的主频为180MHz,其他芯片照葫芦画瓢就ok

 设置为stlink烧录模式,防止烧录一次后,芯片神秘锁住,如果被锁住,就在掉电状态下,按住boot按键,然后再上电,即可烧录。

 接下来打开定时器的编码器模式,编码器模式的作用:主要是实现对电机旋转,使其电机所带的编码器的模块输出的脉冲值进行捕获技术,包括后面的位置环也是依靠编码器来实现的,通过单位时间内记录的脉冲数值的多少来实现对电机的测速。

Encoder Mode 设置为Encoder Mode Tl1 and Tl2,作用可以理解为获取更多的编码器值,从而提高精度。

Input Filter 设置为10,可以看情况设置,作用主要是对获取的脉冲值进行滤波,提高数据的稳定性

其他参数可以默认。

 设置PWM,控制电机。

打开TIM3,设置通道1为pwm输出通道。

设置PWM参数,主要涉及一下几个参数。

Prescaler 分频系数 180-1       

Counter Period  重装载值 2000-1

autu-relad perload  自动重装 Enable 

Pulse  占空比    0

 pwm 的计算

       机器周期:TIM3的频率为90MHz / 45 = 2MHz = 0.5us

       pwm周期:0.5us * 重装载值:2000 = 1ms -= 1KHz

占空比习惯于在软件中自行设置,所以这里默认为0。

 打开一下TIM6 ,设置它为周期为1ms。当然,如果你想直接让他作为pid计算的频率,也可以设置为20ms。

        计算公式和上面的PMW差不多。

        TIM6的时钟频率为90MHz / 主分频值 90 = 1us 。 1us * 重装载值 1000 = 1ms。

记得打开TIM6 的中断,否则后续的PID计算将不能正常进行。 

 接下来就是打开串口1,将数据显示上报到电脑上位机

设置两个GPIO,用于控制电机的正反转

外设到这里就基本上初始化完成啦。 

 点击左上角的GENERATE CODE 就可以生成相应得KEIL代码啦。

接下来就是相关的代码编辑了。

 先对其进行初始化,由于代码已经有了注释,所以在这里就不在进行赘述了。

 接下来在tim6的中断回调函数中进行20ms一次的PID计算。

本文章的代码开源,如果代码中有上面问题希望大家可以多多担待,欢迎大家在评论区中讨论。=

 说明:从开源中来到开源中去,感谢其他数不清的开源博主的奉献精神,本文章借鉴了很多开源文章,本人只是为了大家更加快速的可以在代码中实现速度环PID,如有侵权,麻烦告知,本人一定配合原作者的意愿进行修改。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值