ZKX's LAB

单片机pid电机控制

2020-07-17知识5

怎么用51单片机和7971电路来控制直流电机并,实现PID调速。主要是51怎么控制7971 用4个7971构成一个H桥,PID调节部分用程序实现,单片机与7971之间用光耦隔离。大致原理就是单片机输出PWM波,控制7971的开通关断,硬件部分不难,主要是程序部分。请问用单片机通过PWM调节占空比软启动电动机,需不需要PID算法? 用PID控制的话,就需要反馈电机的速度,下面是我写的PID温度控制程序,用着还可以。给您参考一下。int error,derror;error=acon-temp;pida.sumer=error-pida.er1;derror=error-2*(pida.er1)+pida.er2;pida.er2=pida.er1;pida.er1=error;ad+((pida.pp*pida.sumer)+(pida.pi*error)+(pida.pd*derror));哪里有51单片机PID算法,利用温度控制直流电机的转速 本人确实不懂什么是PID算法,但记得有一本书叫《微机和单片机控制技术》,上面有这方面的内容单片机如何加pid算法去控制步进电机实现转速缓慢平稳精确控制 步进电机本身是一种开环控制(open loop),一般可以通过选择合适的步距角来决定需要的步进电机型号,通过改变脉冲个数和型号可以控制其转动的角度和速度。如果想要设计pid控制器,还需要选择合适的编码器来实现闭环控制,具体算法你应该通过百度得到,当然反馈的信号是角度了。单片机控制步进电机,如何实现PID控制? 换算一下就是了.步进电机步进与位移精确的很,pid算法没有太大意义.基于单片机PID控制直流电机转速问题 你的编码器是多少线的?一般pwm如果取到1Khz以上的话问题就不大,你这个频率波动大很可能是编码器精度不够单片机pid算法控制步进电机的电路图和程序 P1.1(T0):Count They DistanceP0.4:TxP0.5:Rxinclude/SFR declarationsinclude/Standard I/O definition fileinclude/Math library fileincludeincludeunsigned int j,i;char a=0;unsigned int t=0;sbit led=P0^2;P0.0(PWM0):给定左轮速度.sbit vls=P0^4;P0.4(GPIO):给定左轮方向.sbit vlf=P0^6;P0.6(T0):反馈左轮速度.sbit dlf=P1^0;P1.0(GPIO):反馈左轮方向.P0.2(PWM0):给定右轮速度.sbit vrs=P0^5;P0.5(GPIO):给定右轮方向.sbit vrf=P0^7;P0.7(T0):反馈右轮速度.sbit drf=P1^1;P1.1(GPIO):反馈右轮方向.int ol;左轮给定值int len;int len_1,len_2;int lyn_1,lyn_2;int vl1,vl2;反馈左轮速度值(取样周期内的方波数)int lfz;运算后赋给PWM的值int lyn,lynn;int lun=0,lun_1=0;偏差校正值 即校正PWM输出int lunp,luni,lund;PID 校正值int or;右轮给定值int ren;int ren_1,ren_2;int ryn_1,ryn_2;int vr1,vr2;反馈右轮速度值(取样周期内的方波数)int rfz;运算后赋给PWM的值int ryn,rynn;int run=0,run_1=0;偏差校正值 即校正PWM输出int runp,runi,rund;PID 校正值float kp=2.0;比例系数1.8float kd=0.2;微分系数0.4哪位大侠帮忙说说如何在单片机闭环用PID控制电机的输出?小弟不胜感激! PID是一种控制方式!实际上是建立偏差量和控制输出的关系!就你的这个系统来看,偏差量是设定速度和实际速度之间的差,不知道你是什么控制,变频还是电压?如果是变频输出,那就是速度差和输出频率之间的关系!在这个关系中,主要的参数有三个比例 微分 每一部分都能对频率控制,但是想和偏差联系起来,达到好的控制效果,就要和实际结合了!如楼上说的 精度,采样范围等等一系列的参数。希望能对你理解PID有一定的帮助!51单片机实现电动机的PID恒速控制。 这是倒立摆系统的PID控制函数的一部分,你看看有没有思路定义结构体struct may_PID{signed long Proportion;比例;调节系数signed long Integral;调节系数signed long Derivative;微分;调节系数signed long SetPoint;设定值;定值signed long SumError;偏差积分signed long PrevError;之前偏差值}PID/*此处可放结构体变量名*/;struct may_PID*pp;定义结构体类型指针pp=malloc(sizeof(struct may_PID));为指针变量分配安全的地址空间;sizeof:其为计算字节长度函数PTD函数*/signed long PIDCalc(signed long NextPoint/*当前值*/){signed long dError;Error=pp->SetPoint-NextPoint;当前偏差pp->SumError+Error;dError=Error-pp->PrevError;当前微分=当前偏差-之前偏差pp->PrevError=Error;把当前偏差赋予之前偏差变量,使其充当下次取样的之前偏差return(long)(pp->Proportion*Error/比例项pp->Integral*pp->SumError/积分项pp->Derivative*dError);微分项}谁能帮我做一个单片机PID控制三相异步电动机变频调速的proteus仿真啊?也可只做PID算法仿真 急求,给高分 proteus,仿真没有用过,你是做变频器的吧,这个东西都是一般都是厂家核心机密呀,也没谁会告诉你呀,不过可以推荐你看一下资料,代码(用C编写的)和matlab仿真过程都有,你可以试一下:Ti的controlsuite的F280XX系列资料,有例程,有例子

#pid#算法#单片机#步进电机

随机阅读

qrcode
访问手机版