当前位置: 首页 > news >正文

直流有刷电机多环控制(PID闭环死区和积分分离)

直流有刷电机多环控制

提高部分-第8讲 直流有刷电机多环控制实现(1)_哔哩哔哩_bilibili

PID模型

外环的输出作为内环的输入,外环是最主要控制的效果,主要控制电机的位置。改变位置可以改变速度,改变速度是受电流控制。

实验环境

【 !】功能简介:
按下KEY1使能电机,按下KEY2禁用电机,按下KEY3\KEY4可以调整目标值,以到达控制的效果.
可以通过上位机<野火多功能调试助手>----PID调试助手,查看现象或进行调试.
在PID调试助手中,打开开发板对应的串口,单击下方启动即可.
注意,部分例程中,上位机设置PID目标值时,未做幅值限制,若出现积分饱和为正常现象.
在电机未停止时重新开启电机,可能出现PID调整不准确的问题,电机会因为惯性保持运行,定时器会捕获不该捕获的脉冲.
F103性能相对有限,程序中处理的任务较多,使用上位机调试时可能出现指令不执行的情况,多发几次即可.
【 !】实验操作:
接线:
电机驱动板 5V\GND 					<----> 开发板 5V\GND
电机驱动板 PWM1\PWM2 				<----> 开发板 PE9\PE11
电机驱动板 SD 							<----> 开发板 PD15
电机驱动板 编码器输出A\B		<----> 开发板 PD12\PD13
电机驱动板 电压\电流检测 		<----> 开发板 PC1\PC0注意:必须使用跳冒连接 J33 和 J34
下载本程序,复位开发板即可。
/********************************************************************************/【*】 引脚分配
定时器TIM1输出PWM信号:
两路PWM输出到PE9\PE11上连接到驱动板上的PWM信号输入.
电机驱动板 PWM1\PWM2 <----> 开发板 PE9\PE11电机使能引脚:
电机驱动板 SD <----> 开发板 PD15编码器信号:
用于对电机进行测速
电机驱动板 编码器输出A\B		<----> 开发板 PC7\PC6电压电流采集:
电机驱动板 信号检测 电压\电流 		<----> 开发板 PD12\PD13/************************************************************************************/
【*】 时钟
A.晶振:
-外部高速晶振:25MHz
-RTC晶振:32.768KHzB.各总线运行时钟:
-系统时钟 = SYCCLK = AHB1 = 72MHz
-APB2 = 72MHz 
-APB1 = 36MHzC.浮点运算单元:不使用

定时器定时执行PID电机控制

定时器6,时钟72MHz,预分频因子1440,重装载值2500

定时器周期:

72000000 / 1440 / 2500 = 20

1 / 20 = 50ms 进入一次中断,计算一次PID

#ifndef __BASIC_TIM_H
#define	__BASIC_TIM_H#include "stm32f1xx.h"#define BASIC_TIM           		  TIM6
#define BASIC_TIM_CLK_ENABLE()   	__HAL_RCC_TIM6_CLK_ENABLE()#define BASIC_TIM_IRQn				    TIM6_DAC_IRQn
#define BASIC_TIM_IRQHandler    	TIM6_DAC_IRQHandler/* 累计 TIM_Period个后产生一个更新或者中断*/		
//当定时器从0计数到BASIC_PERIOD_COUNT-1,即为BASIC_PERIOD_COUNT次,为一个定时周期
#define BASIC_PERIOD_COUNT    (50*50)//定时器时钟源TIMxCLK = 2 * APB1_CLK
//				如果APB1_CLK = 72MHz = TIMxCLK
//				否则TIMxCLK=APB1_CLK * 2
// 设定定时器频率为=TIMxCLK/(TIM_Prescaler+1)
#define BASIC_PRESCALER_COUNT   (1440)/* 获取定时器的周期,单位ms */
//#define __HAL_TIM_GET_PRESCALER(__HANDLE__)      ((__HANDLE__)->Instance->PSC)    // Get TIM Prescaler.
//#define GET_BASIC_TIM_PERIOD(__HANDLE__)    (1.0/(HAL_RCC_GetPCLK2Freq()/(__HAL_TIM_GET_PRESCALER(__HANDLE__)+1)/(__HAL_TIM_GET_AUTORELOAD(__HANDLE__)+1))*1000)/* 以下两宏仅适用于定时器时钟源TIMxCLK=72MHz,预分频器为:1440-1 的情况 */
#de

http://www.mrgr.cn/news/81193.html

相关文章:

  • vue实现打印指定页面内容
  • 《Go 语言变量》
  • 电气设计 | 低压接地系统:TN-C 、TN-S、TN-C-S、TT适用哪些场所?
  • 记录--uniapp 安卓端实现录音功能,保存为amr/mp3文件
  • SpringBoot使用 AOP 实现自定义日志记录并保存在Mysql
  • 计算机的错误计算(一百八十九)
  • leetcode 704. 二分查找
  • 【星海随笔】高级系统编辑
  • ARP协议的工作原理
  • 双足机器人《荣耀机甲H1》到手体验
  • docker下载镜像设置
  • 重温设计模式--备忘录模式
  • 谷歌开发者工具-元素篇
  • 重温设计模式--状态模式
  • ArrayList类 (顺序表)
  • Linux的VIM基本操作
  • 两台主机传送数据: transfer files between servers使用rsync命令
  • Linux网络——UDP的运用
  • UE5 移植Editor或Developer模块到Runtime(以运行时弹窗为例)
  • Dapper
  • C++设计模式:组合模式(公司架构案例)
  • 【IC】TSMC先进工艺发展历程--从N5到A16,从A16到未来
  • 某尝准app请求体响应加密分析
  • 多行为级联24|多行为推荐的超图增强级联图卷积网络
  • HashMap源码深度解析
  • CentOS HTTPS自签证书访问失败问题的排查与解决全流程