当前位置:首页 » 编程语言 » 可控硅调速电压负反馈c语言算法
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

可控硅调速电压负反馈c语言算法

发布时间: 2022-05-28 01:17:47

A. 可控硅是怎样控制输出电压的(详细达)

朋友,比如可控硅是P1N1P2N2四层三端结构元件,可控硅共有三个PN结,分析原理时,可以把可控硅看作由一个PNP管和一个NPN管所组成。 当可控硅阳极A加上正向电压时,BG1和BG2管均处于放大状态。此时,如果从控制极G输入一个正向触发信号,BG2便有基流ib2流过,经BG2放大,其集电极电流ic2=β2ib2。因为BG2的集电极直接与BG1的基极相连,所以ib1=ic2。此时,电流ic2再经BG1放大,于是BG1的集电极电流ic1=β1ib1=β1β2ib2。这个电流又流回到BG2的基极,表成正反馈,使ib2不断增大,如此正向馈循环的结果,两个管子的电流剧增,可控硅使饱和导通。 由于可控硅BG1和BG2所构成的正反馈作用,所以一旦可控硅导通后,即使控制极G的电流消失了,可控硅仍然能够维持导通状态,由于触发信号只起触发作用,没有关断功能,所以这种可控硅是不可关断的。 由于可控硅只有导通和关断两种工作状态,所以它具有开关特性,这种特性需要一定的条件才能转化,条件如下:

A、从关断到导通 1、阳极电位高于是阴极电位,2、控制极有足够的正向电压和电流,两者缺一不可。

B、维持导通 1、阳极电位高于阴极电位,2、阳极电流大于维持电流,两者缺一不可。

C、从导通到关断 1、阳极电位低于阴极电位,2、阳极电流小于维持电流,任一条件即可 你不妨参考参考。也许对你有所帮助啊。

B. 双向可控硅触发的c语言程序————————急急急

程序应建立在硬件之上,没有你的电路连接图,真还好写程序

C. 谁能帮我用C语言写电焊机的六相半波可控硅驱动程序

没你想象的这么简单!
写程序必须结合硬件写!单片机选哪个型号?
A+、A-、B+、B-、C+、C-的触发脉冲都在哪脚输出 ? 输出脉冲是正向的?反向的?
同步信号从哪脚输入?
反馈电流、反馈电压多大?进单片机的哪脚?
有什么设置?电流大小,和起弧电压,这些电路是什么样的?怎么与单片机连接?
......

D. 单片机控制PWM,用到双向可控硅。怎样设计相关电路图和程序(C语言的)

这个我经常用,电机调速控制,严格说这不是PWM,是可控硅移相触发。
电路很简单,一个可控硅触发电路,一个过零检测电路,配合一段中断服务程序就能完成。

不知道你应用的一些详情,简单说一下思路。
可控硅触发一般使用MOC3021,相关手册上有典型电路,CPU端接一个GPIO就可以。
闭环控制时过零检测不需要很精确,一般用一个双向光耦就足够,光耦输入接交流电输入,输出接CPU中断,用史密特整形一下输出信号最好。
中断程序的结构分成两部分,过零中断与延时中断。
过零中断做两件事,输出复位,开始延时。如果定时器有外部管脚复位启动功能,可以不要这段。
延时中断做一件事,触发输出。如果定时器有触发输出功能,可以没有这段中断程序。
具体的延时时间,由主程序控制,一般是根据PID的计算结果进行设置。注意,延时时间越长,输出电压越小。

E. 可控硅电路原理

一、可控硅的概念和结构?
晶闸管又叫可控硅(Silicon Controlled Rectifier, SCR)。自从20世纪50年代问世以来已经发展成了一个大的家族,它的主要成员有单向晶闸管、双向晶闸管、光控晶闸管、逆导晶闸管、可关断晶闸管、快速晶闸管,等等。今天大家使用的是单向晶闸管,也就是人们常说的普通晶闸管,它是由四层半导体材料组成的,有三个PN结,对外有三个电极〔图2(a)〕:第一层P型半导体引出的电极叫阳极A,第三层P型半导体引出的电极叫控制极G,第四层N型半导体引出的电极叫阴极K。从晶闸管的电路符号〔图2(b)〕可以看到,它和二极管一样是一种单方向导电的器件,关键是多了一个控制极G,这就使它具有与二极管完全不同的工作特性。
可控硅

二、晶闸管的主要工作特性
为了能够直观地认识晶闸管的工作特性,大家先看这块示教板(图3)。晶闸管VS与小灯泡EL串联起来,通过开关S接在直流电源上。注意阳极A是接电源的正极,阴极K接电源的负极,控制极G通过按钮开关SB接在3V直流电源的正极(这里使用的是KP5型晶闸管,若采用KP1型,应接在1.5V直流电源的正极)。晶闸管与电源的这种连接方式叫做正向连接,也就是说,给晶闸管阳极和控制极所加的都是正向电压。现在我们合上电源开关S,小灯泡不亮,说明晶闸管没有导通;再按一下按钮开关SB,给控制极输入一个触发电压,小灯泡亮了,说明晶闸管导通了。这个演示实验给了我们什么启发呢?可控硅
这个实验告诉我们,要使晶闸管导通,一是在它的阳极A与阴极K之间外加正向电压,二是在它的控制极G与阴极K之间输入一个正向触发电压。晶闸管导通后,松开按钮开关,去掉触发电压,仍然维持导通状态。
晶闸管的特点: 是“一触即发”。但是,如果阳极或控制极外加的是反向电压,晶闸管就不能导通。控制极的作用是通过外加正向触发脉冲使晶闸管导通,却不能使它关断。那么,用什么方法才能使导通的晶闸管关断呢?使导通的晶闸管关断,可以断开阳极电源(图3中的开关S)或使阳极电流小于维持导通的最小值(称为维持电流)。如果晶闸管阳极和阴极之间外加的是交流电压或脉动直流电压,那么,在电压过零时,晶闸管会自行关断。

怎样测试晶闸管的好坏
三、用万用表可以区分晶闸管的三个电极吗?怎样测试晶闸管的好坏呢?
普通晶闸管的三个电极可以用万用表欧姆挡R×100挡位来测。大家知道,晶闸管G、K之间是一个PN结〔图2(a)〕,相当于一个二极管,G为正极、K为负极,所以,按照测试二极管的方法,找出三个极中的两个极,测它的正、反向电阻,电阻小时,万用表黑表笔接的是控制极G,红表笔接的是阴极K,剩下的一个就是阳极A了。测试晶闸管的好坏,可以用刚才演示用的示教板电路(图3)。接通电源开关S,按一下按钮开关SB,灯泡发光就是好的,不发光就是坏的。

四、晶闸管在电路中的主要用途是什么?
普通晶闸管最基本的用途就是可控整流。大家熟悉的二极管整流电路属于不可控整流电路。如果把二极管换成晶闸管,就可以构成可控整流电路、逆变、电机调速、电机励磁、无触点开关及自动控制等方面。现在我画一个最简单的单相半波可控整流电路〔图4(a)〕。在正弦交流电压U2的正半周期间,如果VS的控制极没有输入触发脉冲Ug,VS仍然不能导通,只有在U2处于正半周,在控制极外加触发脉冲Ug时,晶闸管被触发导通。现在,画出它的波形图〔图4(c)及(d)〕,可以看到,只有在触发脉冲Ug到来时,负载RL上才有电压UL输出(波形图上阴影部分)。Ug到来得早,晶闸管导通的时间就早;Ug到来得晚,晶闸管导通的时间就晚。通过改变控制极上触发脉冲Ug到来的时间,就可以调节负载上输出电压的平均值UL(阴影部分的面积大小)。在电工技术中,常把交流电的半个周期定为180°,称为电角度。这样,在U2的每个正半周,从零值开始到触发脉冲到来瞬间所经历的电角度称为控制角α;在每个正半周内晶闸管导通的电角度叫导通角θ。很明显,α和θ都是用来表示晶闸管在承受正向电压的半个周期的导通或阻断范围的。通过改变控制角α或导通角θ,改变负载上脉冲直流电压的平均值UL,实现了可控整流。
可控硅
五、在桥式整流电路中,把二极管都换成晶闸管是不是就成了可控整流电路了呢?
在桥式整流电路中,只需要把两个二极管换成晶闸管就能构成全波可控整流电路了。现在画出电路图和波形图(图5),就能看明白了。
六、晶闸管控制极所需的触发脉冲是怎么产生的呢?
晶闸管触发电路的形式很多,常用的有阻容移相桥触发电路、单结晶体管触发电路、晶体三极管触发电路、利用小晶闸管触发大晶闸管的触发电路,等等。今天大家制作的调压器,采用的是单结晶体管触发电路。
七、什么是单结晶体管?它有什么特殊性能呢?
单结晶体管又叫双基极二极管,是由一个PN结和三个电极构成的半导体器件(图6)。我们先画出它的结构示意图〔图7(a)〕。在一块N型硅片两端,制作两个电极,分别叫做第一基极B1和第二基极B2;硅片的另一侧靠近B2处制作了一个PN结,相当于一只二极管,在P区引出的电极叫发射极E。为了分析方便,可以把B1、B2之间的N型区域等效为一个纯电阻RBB,称为基区电阻,并可看作是两个电阻RB2、RB1的串联〔图7(b)〕。值得注意的是RB1的阻值会随发射极电流IE的变化而改变,具有可变电阻的特性。如果在两个基极B2、B1之间加上一个直流电压UBB,则A点的电压UA为:若发射极电压UE<UA,二极管VD截止;当UE大于单结晶体管的峰点电压UP(UP=UD+UA)时,二极管VD导通,发射极电流IE注入RB1,使RB1的阻值急剧变小,E点电位UE随之下降,出现了IE增大UE反而降低的现象,称为负阻效应。发射极电流IE继续增加,发射极电压UE不断下降,当UE下降到谷点电压UV以下时,单结晶体管就进入截止状态。
八、怎样利用单结晶体管组成晶闸管触发电路呢?
单结晶体管组成的触发脉冲产生电路在今天大家制作的调压器中已经具体应用了。为了说明它的工作原理,我们单独画出单结晶体管张弛振荡器的电路(图8)。它是由单结晶体管和RC充放电电路组成的。合上电源开关S后,电源UBB经电位器RP向电容器C充电,电容器上的电压UC按指数规律上升。当UC上升到单结晶体管的峰点电压UP时,单结晶体管突然导通,基区电阻RB1急剧减小,电容器C通过PN结向电阻R1迅速放电,使R1两端电压Ug发生一个正跳变,形成陡峭的脉冲前沿〔图8(b)〕。随着电容器C的放电,UE按指数规律下降,直到低于谷点电压UV时单结晶体管截止。这样,在R1两端输出的是尖顶触发脉冲。此时,电源UBB又开始给电容器C充电,进入第二个充放电过程。这样周而复始,电路中进行着周期性的振荡。调节RP可以改变振荡周期。
九、在可控整流电路的波形图中,发现晶闸管承受正向电压的每半个周期内,发出第一个触发脉冲的时刻都相同,也就是控制角α和导通角θ都相等,那么,单结晶体管张弛振荡器怎样才能与交流电源准确地配合以实现有效的控制呢?
为了实现整流电路输出电压“可控”,必须使晶闸管承受正向电压的每半个周期内,触发电路发出第一个触发脉冲的时刻都相同,这种相互配合的工作方式,称为触发脉冲与电源同步。
怎样才能做到同步呢?大家再看调压器的电路图(图1)。请注意,在这里单结晶体管张弛振荡器的电源是取自桥式整流电路输出的全波脉冲直流电压。在晶闸管没有导通时,张弛振荡器的电容器C被电源充电,UC按指数规律上升到峰点电压UP时,单结晶体管VT导通,在VS导通期间,负载RL上有交流电压和电流,与此同时,导通的VS两端电压降很小,迫使张弛振荡器停止工作。当交流电压过零瞬间,晶闸管VS被迫关断,张弛振荡器得电,又开始给电容器C充电,重复以上过程。这样,每次交流电压过零后,张弛振荡器发出第一个触发脉冲的时刻都相同,这个时刻取决于RP的阻值和C的电容量。调节RP的阻值,就可以改变电容器C的充电时间,也就改变了第一个Ug发出的时刻,相应地改变了晶闸管的控制角,使负载RL上输出电压的平均值发生变化,达到调压的目的。
双向晶闸管的T1和T2不能互换。否则会损坏管子和相关的控制电路。

十、可控硅元件的工作原理及基本特性电路
可控硅是P1N1P2N2四层三端结构元件,共有三个PN结,分析原理时,可以把它看作由一个PNP管和一个NPN管所组成,其等效图解如图1所示
图1 可控硅等效图解图
当阳极A加上正向电压时,BG1和BG2管均处于放大状态。此时,如果从控制极G输入一个正向触发信号,BG2便有基流ib2流过,经BG2放大,其集电极电流ic2=β2ib2。因为BG2的集电极直接与BG1的基极相连,所以ib1=ic2。此时,电流ic2再经BG1放大,于是BG1的集电极电流ic1=β1ib1=β1β2ib2。这个电流又流回到BG2的基极,表成正反馈,使ib2不断增大,如此正向馈循环的结果,两个管子的电流剧增,可控硅使饱和导通。
由于BG1和BG2所构成的正反馈作用, 可控硅导通后,即使控制极G的电流消失了,可控硅仍然能够维持导通状态,由于触发信号只起触发作用,没有关断功能,所以这种可控硅是不可关断c 所以一旦的。
由于可控硅只有导通和关断两种工作状态,所以它具有开关特性,这种特性需要一定的条件才能转化,此条件见表1
表1 可控硅导通和关断条件
状态 条件 说明
从关断到导通 1、阳极电位高于是阴极电位
2、控制极有足够的正向电压和电流
两者缺一不可
维持导通 1、阳极电位高于阴极电位
2、阳极电流大于维持电流
两者缺一不可
从导通到关断 1、阳极电位低于阴极电位
2、阳极电流小于维持电流
任一条件即可
2、基本伏安特性
可控硅的基本伏安特性见图2
图2 可控硅基本伏安特性
(1)反向特性
当控制极开路,阳极加上反向电压时(见图3),J2结正偏,但J1、J2结反偏。此时只能流过很小的反向饱和电流,当电压进一步提高到J1结的雪崩击穿电压后,接差J3结也击穿,电流迅速增加,图3的特性开始弯曲,如特性OR段所示,弯曲处的电压URO叫“反向转折电压”。此时,可控硅会发生永久性反向击穿。
图3 阳极加反向电压
(2)正向特性
当控制极开路,阳极上加上正向电压时(见图4),J1、J3结正偏,但J2结反偏,这与普通PN结的反向特性相似,也只能流过很小电流,这叫正向阻断状态,当电压增加,图3的特性发生了弯曲,如特性OA段所示,弯曲处的是UBO叫:正向转折电压
图4 阳极加正向电压
由于电压升高到J2结的雪崩击穿电压后,J2结发生雪崩倍增效应,在结区产生大量的电子和空穴,电子时入N1区,空穴时入P2区。进入N1区的电子与由P1区通过J1结注入N1区的空穴复合,同样,进入P2区的空穴与由N2区通过J3结注入P2区的电子复合,雪崩击穿,进入N1区的电子与进入P2区的空穴各自不能全部复合掉,这样,在N1区就有电子积累,在P2区就有空穴积累,结果使P2区的电位升高,N1区的电位下降,J2结变成正偏,只要电流稍增加,电压便迅速下降,出现所谓负阻特性,见图3的虚线AB段。
这时J1、J2、J3三个结均处于正偏,可控硅便进入正向导电状态---通态,此时,它的特性与普通的PN结正向特性相似,见图2中的BC段
3、触发导通
在控制极G上加入正向电压时(见图5)因J3正偏,P2区的空穴时入N2区,N2区的电子进入P2区,形成触发电流IGT。在可控硅的内部正反馈作用(见图2)的基础上,加上IGT的作用,使可控硅提前导通,导致图3的伏安特性OA段左移,IGT越大,特性左移越快。
图5 阳极和控制极均加正向电压

十一、可控硅参数符号
参数符号说明:
IT(AV)--通态平均电流
VRRM--反向重复峰值电压
IDRM--断态重复峰值电流
ITSM--通态一个周波不重复浪涌电流
VTM--通态峰值电压
IGT--门极触发电流
VGT--门极触发电压
IH--维持电流
dv/dt--断态电压临界上升率
di/dt--通态电流临界上升率
Rthjc--结壳热阻
VISO--模块绝缘电压
Tjm--额定结温
VDRM--通态重复峰值电压
IRRM--反向重复峰值电流
IF(AV)--正向平均电流
十二、如何鉴别可控硅的三个极
鉴别可控硅三个极的方法很简单,根据P-N结的原理,只要用万用表测量一下三个极之间的电阻值就可以。
阳极与阴极之间的正向和反向电阻在几百千欧以上,阳极和控制极之间的正向和反向电阻在几百千欧以上(它们之间有两个P-N结,而且方向相反,因此阳极和控制极正反向都不通)。
控制极与阴极之间是一个P-N结,因此它的正向电阻大约在几欧-几百欧的范围,反向电阻比正向电阻要大。可是控制极二极管特性是不太理想的,反向不是完全呈阻断状态的,可以有比较大的电流通过,因此,有时测得控制极反向电阻比较小,并不能说明控制极特性不好。另外,在测量控制极正反向电阻时,万用表应放在R*10或R*1挡,防止电压过高控制极反向击穿。
若测得元件阴阳极正反向已短路,或阳极与控制极短路,或控制极与阴极反向短路,或控制极与阴极断路,说明元件已损坏。
可控硅是可控硅整流元件的简称,是一种具有三个PN 结的四层结构的大功率半导体器件。实际上,可控硅的功用不仅是整流,它还可以用作无触点开关以快速接通或切断电路,实现将直流电变成交流电的逆变,将一种频率的交流电变成另一种频率的交流电,等等。可控硅和其它半导体器件一样,其有体积小、效率高、稳定性好、工作可靠等优点。它的出现,使半导体技术从弱电领域进入了强电领域,成为工业、农业、交通运输、军事科研以至商业、民用电器等方面争相采用的元件。
一、 可控硅的结构和特性
■可控硅从外形上分主要有螺旋式、平板式和平底式三种(见图表-25)。螺旋式的应用较多。
■可控硅有三个电极----阳极(A)阴极(C)和控制极(G)。它有管芯是P 型导体和N 型导体交迭组成的四层结构,共有三个PN 结。其结构示意图和符号见图表-26。
■从图表-26中可以看到,可控硅和只有一个PN 结的硅整流二极度管在结构上迥然不同。可控硅的四层结构和控制极的引用,为其发挥“以小控大”的优异控制特性奠定了基础。在应用可控硅时,只要在控制极加上很小的电流或电压,就能控制很大的阳极电流或电压。目前已能制造出电流容量达几百安培以至上千安培的可控硅元件。一般把5安培以下的可控硅叫小功率可控硅,50安培以上的可控硅叫大功率可控硅。
■可控硅为什么其有“以小控大”的可控性呢?下面我们用图表-27来简单分析可控硅的工作原理。
■首先,我们可以把从阴极向上数的第一、二、三层看面是一只NPN 型号晶体管,而二、三四层组成另一只PNP 型晶体管。其中第二、第三层为两管交迭共用。这样就可画出图表-27(C)的等效电路图来分析。当在阳极和阴极之间加上一个正向电压Ea ,又在控制极G和阴极C之间(相当BG1 的基一射间)输入一个正的触发信号,BG1 将产生基极电流Ib1 ,经放大,BG1 将有一个放大了β1 倍的集电极电流IC1 。因为BG1 集电极与BG2 基极相连,IC1 又是BG2 的基极电流Ib2 。BG2 又把比Ib2 (Ib1 )放大了β2 的集电极电流IC2 送回BG1 的基极放大。如此循环放大,直到BG1 、BG2 完全导通。实际这一过程是“一触即发”的过程,对可控硅来说,触发信号加入控制极,可控硅立即导通。导通的时间主要决定于可控硅的性能。
■可控硅一经触发导通后,由于循环反馈的原因,流入BG1 基极的电流已不只是初始的Ib1 ,而是经过BG1 、BG2 放大后的电流(β1 *β2 *Ib1 )这一电流远大于Ib1 ,足以保持BG1 的持续导通。此时触发信号即使消失,可控硅仍保持导通状态只有断开电源Ea 或降低Ea ,使BG1 、BG2 中的集电极电流小于维持导通的最小值时,可控硅方可关断。当然,如果Ea 极性反接,BG1 、BG2 由于受到反向电压作用将处于截止状态。这时,即使输入触发信号,可控硅也不能工作。反过来,Ea 接成正向,而触动发信号是负的,可控硅也不能导通。另外,如果不加触发信号,而正向阳极电压大到超过一定值时,可控硅也会导通,但已属于非正常工作情况了。
■可控硅这种通过触发信号(小的触发电流)来控制导通(可控硅中通过大电流)的可控特性,正是它区别于普通硅整流二极管的重要特征。

[编辑本段]二、可控硅的主要参数
可控硅的主要参数有:
1、 额定通态平均电流IT在一定条件下,阳极---阴极间可以连续通过的50赫兹正弦半波电流的平均值。
2、 正向阻断峰值电压VPF 在控制极开路未加触发信号,阳极正向电压还未超过导能电压时,可以重复加在可控硅两端的正向峰值电压。可控硅承受的正向电压峰值,不能超过手册给出的这个参数值。
3、 反向阴断峰值电压VPR当可控硅加反向电压,处于反向关断状态时,可以重复加在可控硅两端的反向峰值电压。使用时,不能超过手册给出的这个参数值。
4、 控制极触发电流Ig1 、触发电压VGT在规定的环境温度下,阳极---阴极间加有一定电压时,可控硅从关断状态转为导通状态所需要的最小控制极电流和电压。
5、 维持电流IH在规定温度下,控制极断路,维持可控硅导通所必需的最小阳极正向电流。
■近年来,许多新型可控硅元件相继问世,如适于高频应用的快速可控硅,可以用正或负的触发信号控制两个方向导通的双向可控硅,可以用正触发信号使其导通,用负触发信号使其关断的可控硅等等。
可控硅
可控硅是硅可控整流元件的简称,亦称为晶闸管。具有体积小、结构相对简单、功能强等特点,是比较常用的半导体器件之一。该器件被广泛应用于各种电子设备和电子产品中,多用来作可控整流、逆变、变频、调压、无触点开关等。家用电器中的调光灯、调速风扇、空调机、电视机、电冰箱、洗衣机、照相机、组合音响、声光电路、定时控制器、玩具装置、无线电遥控、摄像机及工业控制等都大量使用了可控硅器件。
可控硅的分类
按其工作特性,可控硅(THYRISTOR)可分为普通可控硅(SCR)即单向可控硅、双向可控硅(TRIAC)和其它特殊可控硅。
可控硅的触发
过零触发-一般是调功,即当正弦交流电交流电电压相位过零点触发,必须是过零点才触发,导通可控硅。
非过零触发-无论交流电电压在什么相位的时候都可触发导通可控硅,常见的是移相触发,即通过改变正弦交流电的导通角(角相位),来改变输出百分比。
可控硅的主要参数:
1. 额定通态电流(IT)即最大稳定工作电流,俗称电流。常用可控硅的IT一般为一安到几十安。
2. 反向重复峰值电压(VRRM)或断态重复峰值电压(VDRM),俗称耐压。常用可控硅的VRRM/VDRM一般为几百伏到一千伏。
3. 控制极触发电流(IGT),俗称触发电流。常用可控硅的IGT一般为几微安到几十毫安。
可控硅的常用封装形式
常用可控硅的封装形式有TO-92、TO-126、TO-202AB、TO-220、TO-220AB、TO-3P、SOT-89、TO-251、TO-252等。
可控硅的主要厂家
主要厂家品牌:ST,NXP/PHILIPS,NEC,ON/MOTOROLA,RENESAS/MITSUBISHI,LITTELFUSE/TECCOR,TOSHIBA,JX ,SANREX,SANKEN ,SEMIKRON ,EUPEC,IR迪昌科技,北京瑞田达技贸有限责任公司等。

F. 可控硅调速电路分析

R1A多大? C1的耐压值多少?原图在S2断开的时候,C1电压容易升高,C1容易坏。
老烧可控硅的原因,极可能是你的可控硅的电压值太低,一般至少选1200V的!起码不能低于600V。电流也应该选大一些!要留有充足的裕度!例如电动机额定电流是2A,那可控硅至少得5A的,最好是10A的!
可控硅在尖波时功耗比较大,发热严重。电动机等电感回路的感应电压也很高,容易造成感应电压击穿可控硅。

G. 用bt136等双向可控硅制作的交流调压电路,究竟是怎样实现电压的调整

双向可控硅制作的交流调压电路主要是控制双向可控硅导通角实现调压的。

工作原理:R、RP、C、D 组成脉冲形成网络触发双向可控硅BT, 使BT在市电正负半周均保持相应正反向导通。调节RP阻值,即可改变BT的导通角,达到调节负载RL,上电压的目的。可用于家庭台灯调光、电熨斗、电热毯的调温及电风扇调速等。

H. 有师兄用单片机控制可控硅调压的吗电压从0V到220V可调节..求助相关的程序例子 和原理,谢谢..

原理很简单,用可控硅的调光台灯电路到处都有,把上边电位器那一部分换成单片机的一个输出端,使用单片机输出PWM信号,即可得到不同的控制电压,以控制可控硅的导通情况。
复杂一点的需要做闭环系统,也就是通过ADC输入后,形成一个闭环的电压监测,依据此值来控制输出,使输出电压与预设的电压一致。

I. 8位单片机PID控制PWM的算法如何实现,C语言计算

PID控制在8位单片机中仍然有广泛的应用,比如温度控制,利用比例、积分、微分补偿来做恒温补偿控制,当然由于有这些数学处理,用C语言相对方便一些,以下是一个具体的实例。

#include<reg51.h>

#include<intrins.h>

#include<math.h>

#include<string.h>

struct PID {

unsigned int SetPoint; // 设定目标 Desired Value

unsigned int Proportion; // 比例常数 Proportional Const

unsigned int Integral; // 积分常数 Integral Const

unsigned int Derivative; // 微分常数 Derivative Const

unsigned int LastError; // Error[-1]

unsigned int PrevError; // Error[-2]

unsigned int SumError; // Sums of Errors

};

struct PID spid; // PID Control Structure

unsigned int rout; // PID Response (Output)

unsigned int rin; // PID Feedback (Input)

sbit data1=P1^0;

sbit clk=P1^1;

sbit plus=P2^0;

sbit subs=P2^1;

sbit stop=P2^2;

sbit output=P3^4;

sbit DQ=P3^3;

unsigned char flag,flag_1=0;

unsigned char high_time,low_time,count=0;//占空比调节参数

unsigned char set_temper=35;

unsigned char temper;

unsigned char i;

unsigned char j=0;

unsigned int s;

/***********************************************************

延时子程序,延时时间以12M晶振为准,延时时间为30us×time

***********************************************************/

void delay(unsigned char time)

{

unsigned char m,n;

for(n=0;n<time;n++)

for(m=0;m<2;m++){}

}

/***********************************************************

写一位数据子程序

***********************************************************/

void write_bit(unsigned char bitval)

{

EA=0;

DQ=0; /*拉低DQ以开始一个写时序*/

if(bitval==1)

{

_nop_();

DQ=1; /*如要写1,则将总线置高*/

}

delay(5); /*延时90us供DA18B20采样*/

DQ=1; /*释放DQ总线*/

_nop_();

_nop_();

EA=1;

}

/***********************************************************

写一字节数据子程序

***********************************************************/

void write_byte(unsigned char val)

{

unsigned char i;

unsigned char temp;

EA=0;

TR0=0;

for(i=0;i<8;i++) /*写一字节数据,一次写一位*/

{

temp=val>>i; /*移位操作,将本次要写的位移到最低位*/

temp=temp&1;

write_bit(temp); /*向总线写该位*/

}

delay(7); /*延时120us后*/

// TR0=1;

EA=1;

}

/***********************************************************

读一位数据子程序

***********************************************************/

unsigned char read_bit()

{

unsigned char i,value_bit;

EA=0;

DQ=0; /*拉低DQ,开始读时序*/

_nop_();

_nop_();

DQ=1; /*释放总线*/

for(i=0;i<2;i++){}

value_bit=DQ;

EA=1;

return(value_bit);

}

/***********************************************************

读一字节数据子程序

***********************************************************/

unsigned char read_byte()

{

unsigned char i,value=0;

EA=0;

for(i=0;i<8;i++)

{

if(read_bit()) /*读一字节数据,一个时序中读一次,并作移位处理*/

value|=0x01<<i;

delay(4); /*延时80us以完成此次都时序,之后再读下一数据*/

}

EA=1;

return(value);

}

/***********************************************************

复位子程序

***********************************************************/

unsigned char reset()

{

unsigned char presence;

EA=0;

DQ=0; /*拉低DQ总线开始复位*/

delay(30); /*保持低电平480us*/

DQ=1; /*释放总线*/

delay(3);

presence=DQ; /*获取应答信号*/

delay(28); /*延时以完成整个时序*/

EA=1;

return(presence); /*返回应答信号,有芯片应答返回0,无芯片则返回1*/

}

/***********************************************************

获取温度子程序

***********************************************************/

void get_temper()

{

unsigned char i,j;

do

{

i=reset(); /*复位*/

} while(i!=0); /*1为无反馈信号*/

i=0xcc; /*发送设备定位命令*/

write_byte(i);

i=0x44; /*发送开始转换命令*/

write_byte(i);

delay(180); /*延时*/

do

{

i=reset(); /*复位*/

} while(i!=0);

i=0xcc; /*设备定位*/

write_byte(i);

i=0xbe; /*读出缓冲区内容*/

write_byte(i);

j=read_byte();

i=read_byte();

i=(i<<4)&0x7f;

s=(unsigned int)(j&0x0f); //得到小数部分

s=(s*100)/16;

j=j>>4;

temper=i|j; /*获取的温度放在temper中*/

}

/*====================================================================================================

Initialize PID Structure

=====================================================================================================*/

void PIDInit (struct PID *pp)

{

memset ( pp,0,sizeof(struct PID)); //全部初始化为0

}

/*====================================================================================================

PID计算部分

=====================================================================================================*/

unsigned int PIDCalc( struct PID *pp, unsigned int NextPoint )

{

unsigned int dError,Error;

Error = pp->SetPoint - NextPoint; // 偏差

pp->SumError += Error; // 积分

dError = pp->LastError - pp->PrevError; // 当前微分

pp->PrevError = pp->LastError;

pp->LastError = Error;

return (pp->Proportion * Error // 比例项

+ pp->Integral * pp->SumError // 积分项

+ pp->Derivative * dError); // 微分项

}

/***********************************************************

温度比较处理子程序

***********************************************************/

void compare_temper()

{

unsigned char i;

if(set_temper>temper) //是否设置的温度大于实际温度

{

if(set_temper-temper>1) //设置的温度比实际的温度是否是大于1度

{

high_time=100; //如果是,则全速加热

low_time=0;

}

else //如果是在1度范围内,则运行PID计算

{

for(i=0;i<10;i++)

{

get_temper(); //获取温度

rin = s; // Read Input

rout = PIDCalc ( &spid,rin ); // Perform PID Interation

}

if (high_time<=100)

high_time=(unsigned char)(rout/800);

else

high_time=100;

low_time= (100-high_time);

}

}

else if(set_temper<=temper)

{

if(temper-set_temper>0)

{

high_time=0;

low_time=100;

}

else

{

for(i=0;i<10;i++)

{

get_temper();

rin = s; // Read Input

rout = PIDCalc ( &spid,rin ); // Perform PID Interation

}

if (high_time<100)

high_time=(unsigned char)(rout/10000);

else

high_time=0;

low_time= (100-high_time);

}

}

// else

// {}

}

/*****************************************************

T0中断服务子程序,用于控制电平的翻转 ,40us*100=4ms周期

******************************************************/

void serve_T0() interrupt 1 using 1

{

if(++count<=(high_time))

output=1;

else if(count<=100)

{

output=0;

}

else

count=0;

TH0=0x2f;

TL0=0xe0;

}

/*****************************************************

串行口中断服务程序,用于上位机通讯

******************************************************/

void serve_sio() interrupt 4 using 2

{

/* EA=0;

RI=0;

i=SBUF;

if(i==2)

{

while(RI==0){}

RI=0;

set_temper=SBUF;

SBUF=0x02;

while(TI==0){}

TI=0;

}

else if(i==3)

{

TI=0;

SBUF=temper;

while(TI==0){}

TI=0;

}

EA=1; */

}

void disp_1(unsigned char disp_num1[6])

{

unsigned char n,a,m;

for(n=0;n<6;n++)

{

// k=disp_num1[n];

for(a=0;a<8;a++)

{

clk=0;

m=(disp_num1[n]&1);

disp_num1[n]=disp_num1[n]>>1;

if(m==1)

data1=1;

else

data1=0;

_nop_();

clk=1;

_nop_();

}

}

}

/*****************************************************

显示子程序

功能:将占空比温度转化为单个字符,显示占空比和测得到的温度

******************************************************/

void display()

{

unsigned char code number[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6};

unsigned char disp_num[6];

unsigned int k,k1;


k=high_time;

k=k%1000;

k1=k/100;

if(k1==0)

disp_num[0]=0;

else

disp_num[0]=0x60;

k=k%100;

disp_num[1]=number[k/10];

disp_num[2]=number[k%10];

k=temper;

k=k%100;

disp_num[3]=number[k/10];

disp_num[4]=number[k%10]+1;

disp_num[5]=number[s/10];

disp_1(disp_num);

}

/***********************************************************

主程序

***********************************************************/

void main()

{

unsigned char z;

unsigned char a,b,flag_2=1,count1=0;

unsigned char phil[]={2,0xce,0x6e,0x60,0x1c,2};

TMOD=0x21;

TH0=0x2f;

TL0=0x40;

SCON=0x50;

PCON=0x00;

TH1=0xfd;

TL1=0xfd;

PS=1;

EA=1;

EX1=0;

ET0=1;

ES=1;

TR0=1;

TR1=1;

high_time=50;

low_time=50;

PIDInit ( &spid ); // Initialize Structure

spid.Proportion = 10; // Set PID Coefficients 比例常数 Proportional Const

spid.Integral = 8; //积分常数 Integral Const

spid.Derivative =6; //微分常数 Derivative Const

spid.SetPoint = 100; // Set PID Setpoint 设定目标 Desired Value

while(1)

{

if(plus==0)

{

EA=0;

for(a=0;a<5;a++)

for(b=0;b<102;b++){}

if(plus==0)

{

set_temper++;

flag=0;

}

}

else if(subs==0)

{

for(a=0;a<5;a++)

for(b=0;a<102;b++){}

if(subs==0)

{

set_temper--;

flag=0;

}

}

else if(stop==0)

{

for(a=0;a<5;a++)

for(b=0;b<102;b++){}

if(stop==0)

{

flag=0;

break;

}

EA=1;

}

get_temper();

b=temper;

if(flag_2==1)

a=b;

if((abs(a-b))>5)

temper=a;

else

temper=b;

a=temper;

flag_2=0;

if(++count1>30)

{

display();

count1=0;

}

compare_temper();

}

TR0=0;

z=1;

while(1)

{

EA=0;

if(stop==0)

{

for(a=0;a<5;a++)

for(b=0;b<102;b++){}

if(stop==0)

disp_1(phil);

// break;

}

EA=1;

}

}