标题: 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 |
TIM1和TIM8为高级定时器
TIM6和TIM7为基本定时器
TIM2、TIM3、TIM4和TIM5为通用定时器
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
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
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
TIM1和TIM8定时器的功能包括:
● 16位向上、向下、向上/下自动装载计数器
● 16位可编程(可以实时修改)预分频器,计数器时钟频率的分频系数为1~65535之间的任意数值
● 4个独立通道: ─输入捕获 ─ 输出比较 ─ PWM生成(边缘或中间对齐模式) ─ 单脉冲模式输出
● 死区时间可编程的互补输出
● 使用外部信号控制定时器和定时器互联的同步电路
● 允许在指定数目的计数器周期之后更新定时器寄存器的重复计数器
● 刹车输入信号可以将定时器输出信号置于复位状态或者一个已知状态
● 如下事件发生时产生中断/DMA: ─更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发) ─ 触发事件(计数器启动、停止、初始化或者由内部/外部触发计数) ─ 输入捕获 ─ 输出比较 ─ 刹车信号输入
● 支持针对定位的增量(正交)编码器和霍尔传感器电路
● 触发输入作为外部时钟或者按周期的电流管理
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
TIM2、TIM3、TIM4和TIM5定时器功能包括:
● 16位向上、向下、向上/向下自动装载计数器
● 16位可编程(可以实时修改)预分频器,计数器时钟频率的分频系数为1~65536之间的任意数值
● 4个独立通道: ─ 输入捕获 ─ 输出比较 ─ PWM生成(边缘或中间对齐模式)─ 单脉冲模式输出
● 使用外部信号控制定时器和定时器互连的同步电路
● 如下事件发生时产生中断/DMA: ─ 更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发) ─ 触发事件(计数器启动、停止、初始化或者由内部/外部触发计数) ─ 输入捕获 ─ 输出比较
● 支持针对定位的增量(正交)编码器和霍尔传感器电路
● 触发输入作为外部时钟或者按周期的电流管理 为1~65536之间的任意数值
● 使用外部信号控制定时器和定时器互连的同步电路
● 触发输入作为外部时钟或者按周期的电流管理
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
TIM6和TIM7定时器的主要功能包括:
● 16位自动重装载累加计数器
● 16位可编程(可实时修改)预分频器,用于对输入的时钟按系数为1~65536之间的任意数值分频
● 触发DAC的同步电路 注:此项是TIM6/7独有功能
● 在更新事件(计数器溢出)时产生中断/DMA请求
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
开发目标1:TIM1的4个通道生成PWM,CH1—PWM1 CH2—PWM2
CH3—PWM3 CH4—PWM4
TIM8的4个通道生成PWM,CH1—PWM5 CH2—PWM6
CH3—PWM7 CH4—PWM8
注:PWM1—PWM2 为一组,控制直流减速电机1
PWM3—PWM4 为一组,控制直流减速电机2
PWM5—PWM6 为一组,控制直流减速电机3
PWM7—PWM8 为一组,控制直流减速电机4
(PWM1、PWM3、PWM5、PWM7作为电机正向脉冲输出,占空比为万分比)
(PWM2、PWM4、PWM6、PWM8作为电机反向脉冲输出,占空比为万分比)
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
开发目标2:TIM7作为定时器中断,产生固定的时间间隔,便于计算电机及落地码盘的速度(单位时间间隔脉冲增量)
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
开发目标3:TIM2、TIM3、TIM4、TIM5作为编码器接口,读取编码器的旋转产生的脉冲数
TIM2的CH1作为编码器1的A相的输入,CH2作为编码器1的B相的输入
TIM3的CH1作为编码器2的A相的输入,CH2作为编码器2的B相的输入
TIM4的CH1作为编码器3的A相的输入,CH2作为编码器3的B相的输入
TIM5的CH1作为编码器4的A相的输入,CH2作为编码器4的B相的输入
(由于TIM2和TIM5的CH1和CH2共用引脚PA0和PA1,所以需要把TIM2
的CH1和CH2重映射到引脚PA15和PB3)
(PA15和PB3是JTAG接口中的两只引脚 ,重映射前先把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)
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
开发目标4:用2.3寸TFT液晶显示屏显示电机或码盘的速度(单位时间间隔的脉冲增量)和码盘脉冲总数
未完待续、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
电机转速控制
单片机源程序如下:
- /***********************************************************************************
- Author :JasonLin
- version :V1.1
- Date :2014/8/2
- Description:Based on the STM32 Micro Control Unit design simple movement controller
- ************************************************************************************/
- #include "stm32f10x.h"
- #include "stm32f10x_conf.h"
- #include "UserConfiguration.h"
- #include "UserFunction.h"
- #include "UserDelay.h"
- #include "lcd.h"
- #include "led.h"
- extern s32 CNT2,CNT3,CNT4,CNT5,V2,V3,V4,V5,rcnt2,rcnt3,rcnt4,rcnt5;
- int main(void)
- {
- SystemInit();
- UserNVIC_Configuration();
- UserTIM_Configuration();
- UserLed_Configuration();
- UserDelay_Configuration();
- while(1)
- {
- delay_ms(200);LED1=!LED1;delay_ms(200);//LED1提示系统正常运行
- }
-
-
-
- }
复制代码
所有资料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 |