标题: STM32简易直流电机速度环PID闭环控制源码 [打印本页]

作者: 孤寂的风    时间: 2017-12-19 19:16
标题: STM32简易直流电机速度环PID闭环控制源码

基于STM32开发简易运动控制卡
开发者:JasonLin
STM32定时器功能介绍
  
定时器
  
  
计数分辨率
  
  
计数类型
  
  
预分频系数
  
  
DMA请求
  
  
捕获/比较通道
  
  
编码器
  
接口
  
  
PWM
  
生成
  
  
TIM1
  
  
16
  
  
up/down
  
/both
  
  
1-65536
  
  
yes
  
  
4
  
  
yes
  
  
yes
  
  
TIM8
  
  
16
  
  
up/down
  
/both
  
  
1-65536
  
  
yes
  
  
4
  
  
yes
  
  
yes
  
  
TIM2
  
  
16
  
  
up/down
  
/both
  
  
1-65536
  
  
yes
  
  
4
  
  
yes
  
  
yes
  
  
TIM3
  
  
16
  
  
up/down/
  
both
  
  
1-65536
  
  
yes
  
  
4
  
  
yes
  
  
yes
  
  
TIM4
  
  
16
  
  
up/down
  
/both
  
  
1-65536
  
  
yes
  
  
4
  
  
yes
  
  
yes
  
  
TIM5
  
  
16
  
  
up/down
  
/both
  
  
1-65536
  
  
yes
  
  
4
  
  
yes
  
  
yes
  
  
TIM6
  
  
16
  
  
up
  
  
1-65536
  
  
yes
  
  
0
  
  
no
  
  
no
  
  
TIM7
  
  
16
  
  
up
  
  
1-65536
  
  
yes
  
  
0
  
  
no
  
  
no
  
TIM1TIM8为高级定时器
TIM6TIM7为基本定时器
TIM2TIM3TIM4TIM5为通用定时器
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
STM32定时器的通道/引脚分配
  
定时器
  
  
TIM1
  
  
TIM2
  
  
TIM3
  
  
TIM4
  
  
TIM5
  
  
TIM8
  
  
CH1引脚
  
  
PA8
  
  
PA0
  
  
PA6
  
  
PB6
  
  
PA0
  
  
PC6
  
  
CH2引脚
  
  
PA9
  
  
PA1
  
  
PA7
  
  
PB7
  
  
PA1
  
  
PC7
  
  
CH3引脚
  
  
PA10
  
  
PA2
  
  
PB0
  
  
PB8
  
  
PA2
  
  
PC8
  
  
CH4引脚
  
  
PA11
  
  
PA3
  
  
PB1
  
  
PB9
  
  
PA3
  
  
PC9
  
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
STM32定时器的通道/引脚重映射
file:///Z:\TEMP\msohtmlclip1\01\clip_image002.jpg
file:///Z:\TEMP\msohtmlclip1\01\clip_image004.jpg
file:///Z:\TEMP\msohtmlclip1\01\clip_image006.jpg
file:///Z:\TEMP\msohtmlclip1\01\clip_image008.jpg
file:///Z:\TEMP\msohtmlclip1\01\clip_image010.jpg
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
TIM1TIM8定时器的功能包括:
16位向上、向下、向上/下自动装载计数器
16位可编程(可以实时修改)预分频器,计数器时钟频率的分频系数为165535之间的任意数值
4个独立通道: 输入捕获 输出比较 PWM生成(边缘或中间对齐模式) 单脉冲模式输出  
死区时间可编程的互补输出
使用外部信号控制定时器和定时器互联的同步电路  
允许在指定数目的计数器周期之后更新定时器寄存器的重复计数器  
刹车输入信号可以将定时器输出信号置于复位状态或者一个已知状态
如下事件发生时产生中断/DMA 更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发) 触发事件(计数器启动、停止、初始化或者由内部/外部触发计数) 输入捕获 输出比较 刹车信号输入  
支持针对定位的增量(正交)编码器和霍尔传感器电路  
触发输入作为外部时钟或者按周期的电流管理
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
TIM2TIM3TIM4TIM5定时器功能包括:  
● 16
位向上、向下、向上/向下自动装载计数器  
● 16位可编程(可以实时修改)预分频器,计数器时钟频率的分频系数为165536之间的任意数值  
● 4个独立通道:输入捕获输出比较 ─ PWM生成(边缘或中间对齐模式)─ 单脉冲模式输出  
使用外部信号控制定时器和定时器互连的同步电路  
如下事件发生时产生中断/DMA更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发) ─ 触发事件(计数器启动、停止、初始化或者由内部/外部触发计数) ─ 输入捕获输出比较  
支持针对定位的增量(正交)编码器和霍尔传感器电路  
触发输入作为外部时钟或者按周期的电流管理 165536之间的任意数值  
使用外部信号控制定时器和定时器互连的同步电路  
触发输入作为外部时钟或者按周期的电流管理
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
TIM6TIM7定时器的主要功能包括:   
● 16位自动重装载累加计数器  
● 16位可编程(可实时修改)预分频器,用于对输入的时钟按系数为165536之间的任意数值分频  
触发DAC的同步电路   :此项是TIM6/7独有功能
在更新事件(计数器溢出)时产生中断/DMA请求
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
开发目标1TIM14个通道生成PWMCH1PWM1  CH2PWM2  
                                     CH3PWM3  CH4PWM4
           TIM84个通道生成PWMCH1PWM5  CH2PWM6  
                                      CH3PWM7  CH4PWM8
注:PWM1PWM2 为一组,控制直流减速电机1
PWM3PWM4 为一组,控制直流减速电机2
PWM5PWM6 为一组,控制直流减速电机3
PWM7PWM8 为一组,控制直流减速电机4
PWM1PWM3PWM5PWM7作为电机正向脉冲输出,占空比为万分比)
PWM2PWM4PWM6PWM8作为电机反向脉冲输出,占空比为万分比)
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
开发目标2TIM7作为定时器中断,产生固定的时间间隔,便于计算电机及落地码盘的速度(单位时间间隔脉冲增量)
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
开发目标3TIM2TIM3TIM4TIM5作为编码器接口,读取编码器的旋转产生的脉冲数
TIM2CH1作为编码器1A相的输入,CH2作为编码器1B相的输入
TIM3CH1作为编码器2A相的输入,CH2作为编码器2B相的输入
TIM4CH1作为编码器3A相的输入,CH2作为编码器3B相的输入
TIM5CH1作为编码器4A相的输入,CH2作为编码器4B相的输入
(由于TIM2TIM5CH1CH2共用引脚PA0PA1,所以需要把TIM2
CH1CH2重映射到引脚PA15PB3)
(PA15PB3JTAG接口中的两只引脚 ,重映射前先把JTAG口关闭
GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE)//关闭JTAG
GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, DISABLE)//打开JTAG
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable ,ENABLE);//关闭JTAG
同时打开SWD
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
开发目标42.3TFT液晶显示屏显示电机或码盘的速度(单位时间间隔的脉冲增量)和码盘脉冲总数
未完待续、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

电机转速控制
单片机源程序如下:
  1. /***********************************************************************************
  2. Author     :JasonLin
  3. version           :V1.1
  4. Date       :2014/8/2
  5. Description:Based on the STM32 Micro Control Unit design simple movement controller  
  6. ************************************************************************************/
  7. #include "stm32f10x.h"
  8. #include "stm32f10x_conf.h"
  9. #include "UserConfiguration.h"
  10. #include "UserFunction.h"
  11. #include "UserDelay.h"
  12. #include "lcd.h"
  13. #include "led.h"

  14. extern s32 CNT2,CNT3,CNT4,CNT5,V2,V3,V4,V5,rcnt2,rcnt3,rcnt4,rcnt5;

  15. int main(void)
  16. {        
  17.           SystemInit();

  18.         UserNVIC_Configuration();

  19.         UserTIM_Configuration();   

  20.         UserLed_Configuration();

  21.         UserDelay_Configuration();

  22.         while(1)
  23.         {                                                               
  24.            delay_ms(200);LED1=!LED1;delay_ms(200);//LED1提示系统正常运行
  25.         }        
  26.         
  27.         
  28.          
  29. }

复制代码

所有资料51hei提供下载:
基于战舰STM32开发简易直流电机速度环PID闭环控制.rar (477.73 KB, 下载次数: 865)



作者: 飞鸟游鱼    时间: 2018-5-21 19:38
好东西,没有人评论下?
作者: 年少有点狂    时间: 2018-5-22 23:04
好东西 下来学习玩玩
作者: mick32    时间: 2018-5-26 04:53
Display the speed of the motor or encoder would be nice
作者: lxj199610    时间: 2018-5-26 19:41
厉害了。流明
作者: wobuzhuchele    时间: 2018-6-2 17:16
学习啦 顶一个个
作者: wenqian    时间: 2018-6-21 10:36
很厉害哦 学习了
作者: tianxiaodan    时间: 2018-7-20 16:38
值得参考
作者: tianxiaodan    时间: 2018-7-20 16:38
值得参考
作者: shuze    时间: 2018-7-26 00:10
已下载,谢谢
作者: 278925356    时间: 2018-8-3 14:44

好东西,我来好评
作者: 赫赫赫兹    时间: 2018-8-6 22:00
感谢分享,下下来看看
作者: 芝麻    时间: 2018-8-8 11:56

感谢分享,下下来看看
作者: assassin6279    时间: 2018-8-8 13:58
想知道楼主PID怎么调的 最近调四轴的PID调得想死
作者: 照海倚天    时间: 2018-8-8 16:16
赞  赞  赞  楼主厉害  
作者: xsj1877578806    时间: 2018-8-8 19:04
谢谢楼主分享
作者: wonuibi2018    时间: 2018-8-18 11:36
厉害哦 学习了

作者: LINKEEE    时间: 2018-9-16 18:57
下载来看看
作者: 沉香淡雅    时间: 2018-10-12 09:22
正在做这方面的,下来学习。谢谢分享
作者: mybshf    时间: 2019-2-26 13:32
谢谢分享,急需的资料
作者: 巽悄悄米    时间: 2019-3-3 21:35
楼主你好,请问是增量式还是位置式的PID调速呢
作者: monsterqw    时间: 2019-3-7 13:10
谢谢分享
作者: aetherxd    时间: 2019-3-9 22:29
不错!赞一个
作者: nanducool    时间: 2019-3-9 23:06
赞一个
作者: 升美    时间: 2019-3-13 17:41
是完整的代码吗
作者: zhukm    时间: 2019-3-19 10:35
学习参考下
作者: szb901025    时间: 2019-3-29 09:28
赞一个
作者: m123321654    时间: 2019-5-15 19:15
好东西 下来学习玩玩
作者: xha    时间: 2019-5-21 19:54
不错哦,学习

作者: XIALAJI    时间: 2019-7-15 23:42
6666值得学习
作者: 内心很无奈    时间: 2019-7-24 09:50
感谢楼主
作者: 丰富丰富    时间: 2019-8-25 12:26
感谢楼主
作者: 丰富丰富    时间: 2019-8-25 12:30
赞一个
作者: dspmomo    时间: 2019-8-30 06:24
不完整
作者: 老白老师    时间: 2019-10-18 02:36
好资料,谢谢
作者: LULU11    时间: 2019-11-19 22:14
下载学习一下
作者: 15869123721    时间: 2019-12-6 15:36
学习一下
作者: ujsme    时间: 2019-12-10 14:51
不错的资料,用来学习,谢谢!
作者: applehzd    时间: 2019-12-10 18:42
值得学习一下
作者: xaviersw    时间: 2020-12-27 12:57
不错的例程学习一下




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1