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

学校建设微网站的方案设计快手流量推广免费网站

学校建设微网站的方案设计,快手流量推广免费网站,猎头公司名字,公众号开发难吗目录 概述 1 系统硬件框架 1.1 框架介绍 1.2 硬件实物图 2 STM32Cub生成工程 2.1 软件版本信息 2.2 配置参数 ​编辑2.3 生成项目 3 PID算法实现 3.1 概念 3.2 代码实现 4 其他功能实现 4.1 设置电机速度 4.2 PID算法控制电机 4.3 功能函数的调用 5 测试 5.1 …目录 概述 1 系统硬件框架 1.1 框架介绍 1.2 硬件实物图 2 STM32Cub生成工程 2.1 软件版本信息 2.2  配置参数 ​编辑2.3 生成项目 3 PID算法实现 3.1 概念 3.2 代码实现 4 其他功能实现 4.1 设置电机速度 4.2 PID算法控制电机 4.3 功能函数的调用 5 测试 5.1 测试案例1 5.2 测试案例2 源代码下载地址 PID算法在电机速度控制上的应-测试源码资源-CSDN文库 概述 本文主要介绍使用PID算法实现电机速度的控制笔者使用IO外部中断测试码盘的脉冲实现测速功能通过该速度值应用PID算法实现调制PWM的占空比以实现电机速度的控制。 1 系统硬件框架 1.1 框架介绍 1) 系统使用光电编码器进行速度测试具体实现方式可以参看原文 电机转速计算基于码盘和IO外部中断-CSDN博客 2) TIMER7实现定时器功能其会产生10us的定时器中断为系统工作提供基准时钟。 3TIMER8用于产生PWM实现电机速度控制系统通过电机速度的反馈值以调节PWM的脉冲宽度以实现电机速度的闭环控制。 1.2 硬件实物图 使用STM32F103RC作为主控芯片LN298N用于驱动电机光电码盘用于测试电机转速。具体的测试实物图如下 2 STM32Cub生成工程 2.1 软件版本信息 软件名称版本信息STM32CubeSTM32CubeMX 6.11STM32 HALSTM32Cube_FW_F1_V1.8.5 2.2  配置参数 1配置EXTI IO中断其用测监测编码器的冲击脉冲选择PC0接口同时要使能外部中断函数 使能中断函数 2配置Timer7中断间隔为10us其具体配置参数如下 使能中断函数 3配置PWM相关的参数和使能通道 定时器相关的参数配置如下计数周期为10ms PWM通道相关的参数 各个通道对应的IO接口如下 2.3 生成项目 配置完成各个参数后就可以生成项目打开项目后其结构如下 3 PID算法实现 3.1 概念 PID是一种常用的控制算法全名为比例-积分-微分控制算法Proportional-Integral-Derivative Control。它通过对系统的误差进行比例、积分和微分运算从而对系统进行控制。 PID控制算法的基本原理是根据当前系统的误差分别计算比例、积分和微分项并将它们加权叠加作为最终的控制量。 具体来说比例项Proportional是根据误差的大小与比例系数的乘积来计算的它决定了控制量与误差之间的直接关系。比例项越大控制量的调整越快。 积分项Integral是根据误差的累积进行计算的它可以消除系统存在的静态误差并且对于系统的稳定性有所影响。积分项越大控制量的调整越缓慢。 微分项Derivative是根据误差的变化率进行计算的它可以预测误差的未来变化趋势并提前调整控制量。微分项越大控制量的调整越灵敏。 PID算法的最终控制量是比例项、积分项和微分项的加权叠加其中比例系数、积分系数和微分系数可以根据实际需求进行调整以达到最佳的控制效果。 理想的PID控制算法 • Kp     ——  比例增益 Kp 与比例度成倒数关系 • Tt      ——  积分时间常数 • TD     ——  微分时间常数 • ut——  PID 控制器的输出信号 • et——  给定值 rt与测量值误差 3.2 代码实现 代码117行 计算目标值与实际值的误差 代码124行累计误差值 代码127行实现PID的功能 代码130行 传递误差值 实际代码 typedef struct {float target_val; //目标值float actual_val; //实际值float err; //定义偏差值float err_last; //定义上一个偏差值float Kp,Ki,Kd; //定义比例、积分、微分系数float integral; //定义积分值 }_pid;/*** brief 速度PID算法实现* param actual_val:实际值note 无* retval 通过PID计算后的输出*/ float pid_speed_realize(_pid *pid, float actual_val) {/*计算目标值与实际值的误差*/pid-err pid-target_val - actual_val;if((pid-err0.2f ) (pid-err-0.2f)){pid-err 0.0f;}pid-integral pid-err; // 误差累积/*PID算法实现*/pid-actual_val pid-Kp*pid-errpid-Ki*pid-integralpid-Kd*(pid-err-pid-err_last);/*误差传递*/pid-err_lastpid-err;/*返回当前实际值*/return pid-actual_val; } 4 其他功能实现 4.1 设置电机速度 代码80行 设置通道1的占空比值 代码81行 设置通道2的占空比值为0用于控制方向 实际代码 void set_motor_speed( uint16_t actual_speed ) {HAL_TIM_SetPWM_Pulse( actual_speed, TIM_CHANNEL_1);HAL_TIM_SetPWM_Pulse( 0, TIM_CHANNEL_2); } 4.2 PID算法控制电机 代码195行获取当前电机的转速 代码198行比较实际值和期望值的差值便于将实际值控制在一定的范围之内 代码201行使用实际值进行PID运行计算出占空比的值以调节转速 代码205行设置电机速度 实际代码 void motor_pid_control(void) {float actual_speed, cal_speed ;uint8_t value;bool is_match;uint8_t buff[16];uint32_t delta_value;actual_speed get_motor_speed();cal_speed pid_get_target(pid_speed);is_match abs((int)((actual_speed- cal_speed)*10)) 10 ? false : true;if( !is_match ){cal_speed pid_speed_realize( pid_speed,actual_speed); // 进行 PID 计算cal_speed convet_speed( cal_speed );cal_speed (cal_speed PWM_PERIOD_MAX_COUNT) ? PWM_PERIOD_MAX_COUNT : cal_speed; // 速度上限处理set_motor_speed(cal_speed); // 设置 PWM 占空比}#if defined(PID_ASSISTANT_EN)value (uint8_t)actual_speed;buff[0] value;protocol_computer_value(SEND_FACT_CMD, CURVES_CH1, buff, 1); // 给通道 1 发送实际值#elseprintf(实际值%.02f 目标值%.0f\n, actual_speed, pid_get_target(pid_speed)); // 打印实际值和目标值#endif } 4.3 功能函数的调用 代码211行计算电机的转速 代码217行电机PID控制函数 实际源码 void motor_pid_control(void) {float actual_speed, cal_speed ;uint8_t value;bool is_match;uint8_t buff[16];uint32_t delta_value;actual_speed get_motor_speed();cal_speed pid_get_target(pid_speed);is_match abs((int)((actual_speed- cal_speed)*10)) 10 ? false : true;if( !is_match ){cal_speed pid_speed_realize( pid_speed,actual_speed); // 进行 PID 计算cal_speed convet_speed( cal_speed );cal_speed (cal_speed PWM_PERIOD_MAX_COUNT) ? PWM_PERIOD_MAX_COUNT : cal_speed; // 速度上限处理set_motor_speed(cal_speed); // 设置 PWM 占空比}#if defined(PID_ASSISTANT_EN)value (uint8_t)actual_speed;buff[0] value;protocol_computer_value(SEND_FACT_CMD, CURVES_CH1, buff, 1); // 给通道 1 发送实际值#elseprintf(实际值%.02f 目标值%.0f\n, actual_speed, pid_get_target(pid_speed)); // 打印实际值和目标值#endif } 5 测试 5.1 测试案例1 PID参数设置如下类型观察速度值的变化Expect value: speed 50 pid_speed.Kp 7.0;pid_speed.Ki 20.0;pid_speed.Kd 14.0; 串口log如下在5s左右就完成速度定速功能 5.2 测试案例2 PID参数设置如下类型观察速度值的变化Expect value: speed 50 pid_speed.Kp 7.0;pid_speed.Ki 2.0;pid_speed.Kd 4.0; 串口log如下在2min左右才完成速度定速功能
http://www.pierceye.com/news/993924/

相关文章:

  • 宁波网站推广找哪家wordpress 搜索标签
  • 购物网站建设特色沈阳公司网站制作
  • seo网站编辑是做什么的微博seo排名优化
  • 南通网站建设方案托管关键词优化排名首页
  • 哈尔滨全员核酸检测福建整站优化
  • 电子商务网站建设汉狮辽宁移动网站
  • 厂西建设厅网站网站流量依赖率
  • 手机能看的网站企业网站开发市场
  • 企业建设网站的过程世界各大网站搜索引擎提交入口
  • 网站建设云南做静态网站成本
  • 超低价的锦州网站建设网站开发有哪些软件有哪些
  • 中英文网站后台photoshop做网站
  • 优秀网站开发公司软件开发工具与环境实践报告
  • 茂名网站开发网站关键词优化步骤
  • 介绍家乡的网站怎么做天眼查企业查询公司
  • 公司网站建设代理一般做多久苏州关键词优化企业
  • 北京网站网站建设vps做网站怎么加速
  • 销售网站怎么做一个公司可以做多少网站
  • 西安旅游攻略必去景点网站优化成都哪里好
  • 网站特色泉州做网站优化价格
  • 小米官方网站开发版在哪里推进门户网站建设 用好用活
  • 玉器企业网站源码软件商店哪个好用
  • 学校网站建设的安全策略江苏太平洋建设集团官方网站
  • 织梦做中英文企业网站给特宝网站商家网址怎样做
  • 网站邮箱接口怎么设置WordPress国外主机
  • 西安做网站的公司哪家好怎么样查询网站被挂黑链
  • 卯兔科技网站建设河南旅游集团 网站建设
  • 重庆网站建设c做食品网站的素材
  • 网站如何制作的简单的管理系统有哪些
  • 职高网站建设知识点一个人开发一个网站需要多久