紧急求助单片机温控系统思路,光耦控制可控硅,PID算法

想做一个单片机温控系统,但是程序怎么都不会写,思路还是明白的,是过零检测信号接到单片机的外部中断口,单片机输出PWM调制波形来控制可控硅的导通。因为过零信号频率是100Hz,假设PID运算周期是2s,即控制200个半波的导通个数,控制加热功率。但是程序怎么写呢?总是搞不清楚。。。。是用Keil C语言写的,求助高手帮帮忙啊。。。。。也在网上搜了很多,但是似乎大家没有加外部中断的程序啊,只是用定时器设时间。可是不加外部中断,没有基准时间啊。。。。纠结。。。。

一、单向可控硅是一种可控整流电子元件,能在外部控制信号作用下由关断变为导通,但一旦导通,外部信号就无法使其关断,只能靠去除负载或降低其两端电压使其关断。单向可控硅是由三个PN结PNPN组成的四层三端半导体器件与具有一个PN结的二极管相比,单向可控硅正向导通受控制极电流控制;与具有两个PN结的三极管相比,差别在于可控硅对控制极电流没有放大作用。
二、双向可控硅具有两个方向轮流导通、关断的特性。双向可控硅实质上是两个反并联的单向可控硅,是由NPNPN五层半导体形成四个PN结构成、有三个电极的半导体器件。由于主电极的构造是对称的(都从N层引出),所以它的电极不像单向可控硅那样分别叫阳极和阴极,而是把与控制极相近的叫做第一电极A1,另一个叫做第二电极A2。双向可控硅的主要缺点是承受电压上升率的能力较低。这是因为双向可控硅在一个方向导通结束时,硅片在各层中的载流子还没有回到截止状态的位置,必须采取相应的保护措施。双向可控硅元件主要用于交流控制电路,如温度控制、灯光控制、防爆交流开关以及直流电机调速和换向等电路。
单向可控硅和双向可控硅,都是三个电极。单向可控硅有阴极(K)、阳极(A)、控制极(G)。双向可控硅等效于两只单项可控硅反向并联而成。即其中一只单向硅阳极与另一只阴极相边连,其引出端称T2极,其中一只单向硅阴极与另一只阳极相连,其引出端称T2极,剩下则为控制极(G)。
1、单、双向可控硅的判别:先任测两个极,若正、反测指针均不动(R×1挡),可能是A、K或G、A极(对单向可控硅)也可能是T2、T1或T2、G极(对双向可控硅)。若其中有一次测量指示为几十至几百欧,则必为单向可控硅。且红笔所接为K极,黑笔接的为G极,剩下即为A极。若正、反向测批示均为几十至几百欧,则必为双向可控硅。再将旋钮拨至R×1或R×10挡复测,其中必有一次阻值稍大,则稍大的一次红笔接的为G极,黑笔所接为T1极,余下是T2极。
2、性能的差别:将旋钮拨至R×1挡,对于1~6A单向可控硅,红笔接K极,黑笔同时接通G、A极,在保持黑笔不脱离A极状态下断开G极,指针应指示几十欧至一百欧,此时可控硅已被触发,且触发电压低(或触发电流小)。然后瞬时断开A极再接通,指针应退回∞位置,则表明可控硅良好。
对于1~6A双向可控硅,红笔接T1极,黑笔同时接G、T2极,在保证黑笔不脱离T2极的前提下断开G极,指针应指示为几十至一百多欧(视可控硅电流大小、厂家不同而异)。然后将两笔对调,重复上述步骤测一次,指针指示还要比上一次稍大十几至几十欧,则表明可控硅良好,且触发电压(或电流)小。
若保持接通A极或T2极时断开G极,指针立即退回∞位置,则说明可控硅触发电流太大或损坏。可按图2方法进一步测量,对于单向可控硅,闭合开关K,灯应发亮,断开K灯仍不息灭,否则说明可控硅损坏。
对于双向可控硅,闭合开关K,灯应发亮,断开K,灯应不息灭。然后将电池反接,重复上述步骤,均应是同一结果,才说明是好的。否则说明该器件已损坏。
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-03-19
你的电路是什么样的?我给你发个例子你看看:
include"Globle.h"
#include".\init.h"
extern WordType pca_tmp;

/******************************************************************************************
** 函数名 Timer0_init
** 参数 mode 选择工作方式
** hvalue TH0的值
** lvalue TL0的值
*******************************************************************************************
** 选择项
TIMER0_GATE_ON 选择GATE方式
TIMER0_COUNTER_ON 选择COUNTER方式,如果不选为TIMER方式
TIMER0_MODE_0 方式1
TIMER0_MODE_1 方式2
TIMER0_MODE_2 方式3
TIMER0_MODE_3 方式4

*******************************************************************************************/
void Timer0_Init(UBYTE mode, UBYTE hvalue, UBYTE lvalue)
{

TMOD&=0xf0; //清空timr0相关的设置位
TMOD|=(mode&0x0f); //设置工作方式
TH0=hvalue;
TL0=lvalue;

}

/******************************************************************************************
** 函数名 Timer1_init
** 参数 mode 选择工作方式
** hvalue TH0的值
** lvalue TL0的值
*******************************************************************************************
** 选择项
TIMER1_GATE_ON 选择GATE方式
TIMER1_COUNTER_ON 选择COUNTER方式,如果不选为TIMER方式
TIMER1_MODE_0 方式1
TIMER1_MODE_1 方式2
TIMER1_MODE_2 方式3
TIMER1_MODE_3 方式4
*******************************************************************************************/
void Timer1_Init(UBYTE mode, UBYTE hvalue, UBYTE lvalue)
{

TMOD&=0x0f; //清空timr0相关的设置位
TMOD|=mode&0xf0; //设置工作方式
TH1=hvalue;
TL1=lvalue;

}

/******************************************************************************************
** 函数名 Timer2_Init
** 参数 mode 选择工作方式
** hvalue TH0的值
** lvalue TL0的值
*******************************************************************************************
** 选择项
S_RCLK 0x20 //产生接受波特率
S_TCLK 0x10 //产生发送波特率
S_EXEN2 0x08 //外部势能 选择 T2EX有负跳变时发生重载或捕捉
S_TR2 0x04 //T2开始运行 选择 开始运行
S_CT2 0x02 //T/C选择 选择 为计数器
S_CPRL2 0x01 //捕捉 重载选择 选择 为捕捉模式
*******************************************************************************************/
void Timer2_Init(UBYTE mode, UBYTE hvalue, UBYTE lvalue)
{

T2CON=mode;
RCAP2H=hvalue;
RCAP2L=lvalue;
}

/******************************************************************************************
** 函数名 Interrupt_init
** 参数 enable 使能设置
** run 运行设置
*******************************************************************************************
** 选择项
S_TIMER1_RUN 0X40 //TIMER1 RUN FLAG
S_TIMER0_RUN 0X10 //TIMER0 RUN FLAG
S_EXTERN1_MODE 0X04 //外部中断1方式选择 1边沿触发 0电平触发
S_EXTERN0_MODE 0X01 //外部中断0方式选择 1边沿触发 0电平触发
*************************** IE ********************************************

S_GLOBLE_ENABLE 0X80 //EA 使能
S_UART_ENABLE 0X10 //串口中断使能
S_TIMER1_ENABLE 0X08 //Timer1中断使能
S_EXTERN1_ENABLE 0X04 //外部中断1使能
S_TIMER0_ENABLE 0X02 //Timer0中断使能
S_EXTERN0_ENABLE 0X01 //外部中断0使能

*******************************************************************************************/
void Interrupt_init(UBYTE enable, UBYTE run)
{

IE=enable;
TCON=run;

}

/******************************************************************************************
** 函数名 Uart_init
** 参数 mode 方式设置

*******************************************************************************************
** 选择项
S_UART_MODE0 0X00 //UART MODE 0
S_UART_MODE1 0X40 //UART MODE 1
S_UART_MODE2 0X80 //UART MODE 2
S_UART_MODE3 0XC0 //UART MODE 3

S_MULTI_COM 0X20 //多机通信
S_RECEIVE_EN 0X10 //enable receive
S_TRANSMIT_8 0X08 //发送第八位
S_RECEIVE_8 0X04 //接收第八位
*******************************************************************************************/
void Uart_init(UBYTE mode)
{
SCON=mode;

}

void Devices_init()
{
Timer0_Init(TIMER0_MODE_1, TH0_VALUE, TL0_VALUE); //定时器0初始化

//Timer1_Init(TIMER1_MODE_2, 0XF5, 0XF5); //定时器1初始化

Timer1_Init(TIMER1_MODE_2, TIMER1_BH, TIMER1_BH);

//Timer2_Init((S_RCLK|S_TCLK|S_TR2),TIMER2_BH,TIMER2_BL); //定时器2初始化

Uart_init(S_UART_MODE1|S_RECEIVE_EN); //串口初始化

Interrupt_init((S_UART_ENABLE|S_GLOBLE_ENABLE|S_TIMER0_ENABLE|S_EXTERN0_ENABLE),\
(S_TIMER0_RUN|S_TIMER1_RUN|S_EXTERN0_MODE));

#if SMOD //double baud-rate
PCON|=0x80;
#endif
ADC_CONTR=0x80;
P1M0=0xff;
P1M1=0xff;
//-----------------------------------------
CMOD=0;
CCON=0;
CL=0;
CH=0;
CCAP0L=0xAF;
CCAP0H=0x00;
CCAPM0=0x49;

EPCA_LVD=1;
CR=1;
pca_tmp.bytes.bl=0xAF;
pca_tmp.bytes.bh=0x00;
}追问

电路挺简单的

紧急求助单片机温控系统思路,光耦控制可控硅,PID算法
一、单向可控硅是一种可控整流电子元件,能在外部控制信号作用下由关断变为导通,但一旦导通,外部信号就无法使其关断,只能靠去除负载或降低其两端电压使其关断。单向可控硅是由三个PN结PNPN组成的四层三端半导体器件与具有一个PN结的二极管相比,单向可控硅正向导通受控制极电流控制;与具有两个PN结的三极...

单片机控制光耦来控制可控硅调光有成功的程序吗 能发哦一份不
程序流程是这样,可以改成中断的,过零中断开始定时,定时到触发可控硅。电路一般要两个信号,一个输入过零信号,一个输出触发脉冲。

单片机控制PWM 要用到双向可控硅 求相关电路图和程序(最好是C语言的...
可控硅触发一般使用MOC3021,相关手册上有典型电路,CPU端接一个GPIO就可以。闭环控制时过零检测不需要很精确,一般用一个双向光耦就足够,光耦输入接交流电输入,输出接CPU中断,用史密特整形一下输出信号最好。中断程序的结构分成两部分,过零中断与延时中断。过零中断做两件事,输出复位,开始延时。如果...

单片机控制PWM,用到双向可控硅。怎样设计相关电路图和程序(C语言的...
\\x0d\\x0a可控硅触发一般使用MOC3021,相关手册上有典型电路,CPU端接一个GPIO就可以。\\x0d\\x0a闭环控制时过零检测不需要很精确,一般用一个双向光耦就足够,光耦输入接交流电输入,输出接CPU中断,用史密特整形一下输出信号最好。\\x0d\\x0a中断程序的结构分成两部分,过零中断与延时中断。\\x0d\\...

tlp3526应该叫 《光耦合器?光耦可控硅?》用单片机怎么驱动作用电机调 ...
这个应该叫光耦可控硅,用它来调速的原理是用降压的方法来调速的。用它一般来控制PG电机,这种电机是单相的,有速度反馈。调速时先给定一下目标转速,开始控制可控硅的开通时间角,这样可以控制输出的电压,同时根据电机的反馈速度脉冲来计算出当前的速度,和目标速度进行比较,然后进行相应的调整。

你好,我的毕设题目也是工业锅炉电气控制系统,用PLC控制的,可以给我点...
1.可编程序控制器的基本结构 从广义上讲,PLC是一种计算机系统,只不过它比一般的计算机具有更强的与工业过程相连接的输入输出接口,具有更适用于控制的编程语言,具有更适应工业环境的抗干扰性能。其结构和计算机控制系统十分相似,一般由中央处理器(CPU)、存储器、输入\/输出(I\/O)接口、电源等部分组成...

求助51单片机控制单向可控硅
单片机控制单向可控硅必须用光耦隔离。你是仿真还是实物,实物必须用光耦,仿真就无所谓。下图是仿真图,可控硅控制的电源用直流代替了,只是原理图。实物接法类似,以此为参考。但实物,要求可控硅的负极与+12V共地,决不能与单片机共地。

51单片机控制可控硅
要是用可控硅控制最好有过零检测,但必须要用光电隔离了。要实现过零检测,要是外加检测电路是很麻烦的。既然加光电隔离,不如将过零检测和光电隔离合二为一,有一种光耦,叫MOC3803,资料在百度文库里就能下载。里面即有怎么用,也有怎么连接电路,非常适合用于单片机上控制交流设备。单片机(...

水温控制系统中 动态误差 静态误差 是什么意思 还有怎么实现单片机与加 ...
静态误差:水温达到稳态时与设定值的误差。可以用PID控制(增量PID)——加温、制冷参数要分开调。单片机与加热器用光耦隔离驱动固态继电器或可控硅来控制加热器的通断时间。(别期望控制可控硅的导通角,1℃的误差不值得这么麻烦)

...一下可控硅相关知识吗,我想用51单片机控制可控硅,实现220V用电器的通...
如果你采用单片机去控制可控硅的话,5V肯定是不能直接跟可控硅相连的 你的单片机是一个信号系统,而你的可控硅部分是一个大功率系统 两个系统相连必须要经过光耦进行隔离。具体的电路你查查MOS管驱动,IGBT驱动,晶闸管驱动,可控硅驱动电路对比对比 可控硅主要注意的参数有它的耐压,最大工作电流。其实就...

相似回答