pic单片机中断时间计算?
一、pic单片机中断时间计算?
关于PIC单片机T0定时器的计算是这样的4M晶振的时候一个时钟周期是1/f(f为时钟频率即4M)。也就是说一个时钟周期是T=1/f=0.00000025s=0.25us。PIC16f877是一个指令周期等于四个时钟周期就是说一个指令周期=4*T=1us。
而T0这个时间寄存器TMR0在装入初值后就自动加1 每进行一个加一过程就消耗一个指令周期如果TMR0初始值为0x00 就需要255us产生中断 如果初始值为0x37(对应10进制为55) 这时就需要 200us产生一个中断
二、pic单片机pid控制算法参数整定?
我这有51的
#include
#include "global_varible.h"
/****************************************************************************
* 模块名: PID
* 描述: PID调节子程序
* 采用PID-PD算法。在偏差绝对值大于△e时,用PD算法,以改善动态品质。
* 当偏差绝对值小于△e时,用PID算法,提高稳定精度。
* PIDout=kp*e(t)+ki*[e(t)+e(t-1)+...+e(1)]+kd*[e(t)-e(t-1)]
*============================================================================
* 入口: 无
* 出口: 无
* 改变: PID_T_Run=加热时间控制
*****************************************************************************/
void PID_Math(void)
{
signed long ee1; //偏差一阶
//signed long ee2; //偏差二阶
signed long d_out; //积分输出
if(!Flag_PID_T_OK)
return;
Flag_PID_T_OK=0;
Temp_Set=3700; //温度控制设定值37.00度
PID_e0 = Temp_Set-Temp_Now; //本次偏差
ee1 = PID_e0-PID_e1; //计算一阶偏差
//ee2 = PID_e0-2*PID_e1+PID_e2; //计算二阶偏差
if(ee1 > 500) //一阶偏差的限制范围
ee1 = 500;
if(ee1
ee1 = -500;
PID_e_SUM += PID_e0; //偏差之和
if(PID_e_SUM > 200) //积分最多累计的温差
PID_e_SUM = 200;
if(PID_e_SUM
PID_e_SUM = -200;
PID_Out = PID_kp*PID_e0+PID_kd*ee1; //计算PID比例和微分输出
if(abs(PID_e0)
{
if(abs(PID_e0) > 100) //如果温度相差大于1度时积分累计限制
{
if(PID_e_SUM > 100)
PID_e_SUM = 100;
if(PID_e_SUM
PID_e_SUM = -100;
}
d_out = PID_ki*PID_e_SUM; //积分输出
if(PID_e0
{
if(PID_e_SUM > 150)
PID_e_SUM = 150;
if(PID_e_SUM > 0) //当前温度高于设定温度0.5度时削弱积分正输出
d_out >>= 1;
}
PID_Out += d_out; //PID比例,积分和微分输出
}
else
PID_e_SUM=0;
PID_Out/=100; //恢复被PID_Out系数放大的倍数
if(PID_Out > 200)
PID_Out=200;
if(PID_Out
PID_Out=0;
if(PID_e0 > 300) //当前温度比设定温度低3度则全速加热
PID_Out=200;
if(PID_e0
PID_Out=0;
Hot_T_Run=PID_Out; //加热时间控制输出
PID_e2 = PID_e1; //保存上次偏差
PID_e1 = PID_e0; //保存当前偏差
}
////////////////////////////////////////////////////////////void PID_Math() end.
三、PIC控制电机不转什么原因?
PLC有信号你是指,输入信号,还是输出信号。
如果1:有输入信号,电机不启动。
这种情况一般都是条件断开了。如:停止信号按钮不通。热继电保护跳开了(电机坏了)等。
如果2:有输出信号,电机不启动。
这种情况,可能是输出部份出了故障。如:PLC输出继电器点坏了。输出模块的电源虚接或开路了。控制电机的中间继电器(交流继电器)电源故障。
四、51单片机控制步进电机?
用单片机同时是不可能的,当然,时间间隔小到可以接受,跑几个任务,那也可以视为同时。
要实现真正意义上的同时,用FPGA/CPLD是可以完成的。话说回来,也许你的同时并不是说一定严格地同时工作,只是说一个单片机去控制四个步进电机,那就好办多了。一个步进电机,比如4相5线那种,4个IO口可控制一个,四个步进电机就要16个,驱动芯片用ULN2003即可。当然,如果你的IO口不允许使用这么多,那也可以通过串转并的方法,扩展IO口,比如用74HC595,三根IO口控制它,它可以级联,三根线可以控制很多片。一片为8位,两片就为16位,3片为24位 …… 只要加些三极管驱动那三根控制线,三个IO口可控制一串级联的74HC595,得到的扩展IO口,那是相当多的。我用三个IO口控制过5片74HC595,三个IO口一下子就扩展成了40个IO口!!!五、单片机控制步进电机制动?
从底层技术上来说,很简单,就是将下一相的通电时间和断电时间,均比前一相延后一点,每次一点,这样就制动了. 步进电机在高速运行的时候也会受惯性的影响的,如果保持某相或某几相不通电或不断电,不仅会造成很大的机械冲击,还会造成抖动,造成制动的减速曲线很大的起伏,别人会说你这个制动效果很差.
六、单片机控制电机怎么驱动的?
单片机只输出信号,经过隔离电路,再经过功率开关电路 驱动电机。
控制普通的三项异步电机可以单片机输出信号经三极管后驱动一个小功率继电器,由继电器来驱动交流接触器,进而控制电机。
也可以单片机信号经三极管放大后直接驱动功率继电器。方法有很多很多。
至于驱动伺服,单片机端口的信号经过光耦隔离后可以直接驱动,伺服驱动器本身需要的驱动信号都是弱电信号。
七、单片机控制伺服电机的原理?
单片机实现对伺服电机控制的一种方案 ,能实现对伺服电机变速、匀速运动的平稳控制。
伺服电机属于一类控制电机 ,分为直流伺服电机和交流伺服电机两种。由于交流伺服电机具有体积小、重量轻、大转矩输出、低惯量和良好的控制性能等优点 ,故被广泛地应用于自动控制系统和自动检测系统中作为执行元件 ,将控制电信号转换为转轴的机械转动。
八、步进电机如何用单片机控制?
步进电机的驱动是需要驱动器的,驱动器的种类不同,单片机控制的方式也不同,是不能用单片机来直接控制步进电机的。
可以选用现成的驱动器,也可以自己做启动器,比如说L298。
九、51单片机控制步进电机正反转?
用51单片机直驱步进电机时,只要改变步进电机驱动脉冲的时序关系,就可以控制步进电机的正反转。
以两极步进电机为例,单片机使用AB两个脉冲信号驱动步进电机,这两个信号的相位相差90度,A超前B 90度步进电机正转,B超前A 90度步进电机就反转。
如果使用步进电机驱动模块,一般这种模块都会有一个方向控制端,只要改变这个控制端的高低电平就可以控制步进电机的正反转。
十、32单片机可以控制步进电机么?
不管是STM32单片机还是51单片机,都可以控制步进电机,硬件上通常采用直驱法和模块驱动法。
直驱法就是用单片机的引脚直接产生步进电机的驱动脉冲。采用这种方法需要注意两点,第一,单片机引脚的电流输出不足以驱动步进电机绕组,需要使用功率管放大电流;第二,不管是两极还是多极步进电机,它的驱动脉冲都是正交时序关系,必须通过程序模拟出这种时序关系才可以驱动电机。
模块驱动法是采用步进电机专用驱动模块,单片机只需向模块输出脉冲和方向信号就可以很方便的驱动步进电机。
推荐阅读