文章首页 | 基础入门 | 电路原理图 | 婵⿴鍨伴懜浼村炊閹呮澖濞撴熬鎷� | PLC闁糕晞娅i、锟�   闁靛棗锕ら々褔寮稿⿰鍐╃仒婵炲棎鍨哄﹢鎵博濞嗘瑧绀夐悹鍥敱鐎碉拷 Ctrl+D 闁归潧顑呮慨鈺呭绩閹増顥戦柨娑楃劍閸斿懐鎷姀鈥充憾闁汇劌瀚弫顕€骞愭担纰樺亾閿燂拷濞戞挴鍋撻悹褍鍢查鐔哥▕閻樿京顏遍悹褏鏌夌换妯侯潰閵夘垳绀夐柣銏ゆ涧閻℃瑥顕i埀顒勫矗閹寸姴绔炬繛鍡愬灱缁诲骞冮…鎺旂<.

电子开发网

电子开发网电子设计 | 电子开发网Rss 2.0 会员中心 会员注册

閳藉懐鏁哥捄顖氬彆瀵繑澧滈崘宀嬬礉閺堚偓閺傛壆澧楅妴濠勬暩鐎涙劗鏁哥捄顖氬彆瀵繗顓哥粻妤€娅掗妴瀣剁礉閻絻鐭鹃崗顒€绱¢弻銉嚄閹靛鍞� 閻絻鐭鹃崗顒€绱$拋锛勭暬閸c劊鈧劗鏁哥€涙劒绮犳稉姘眽閸涙ê绻€婢跺洦澧滈崘灞烩偓锟�
閳藉棗宕勬径鈺侇劅娴兼艾宕熼悧鍥ㄦ簚鐎圭偘绶�100 c鐠囶叀鈻� chm閺嶇厧绱¢妴鍌濈カ閺傛瑥鍞寸€圭顕涚紒鍡礉鐟曞棛娲婃笟瀣摍婢舵熬绱濋崘鍛啇楠炶¥鈧劗鏁哥€涙劒绮犳稉姘眽閸涙ê绻€婢跺洦澧滈崘灞烩偓锟�
搜索: 您现在的位置: 电子开发网 >> 电子开发 >> 单片机 >> 正文

51单片机双极型PWM 的软件实现

作者:佚名    文章来源:本站原创    点击数:3162    更新时间:2011-7-23
Keil C是基于标准C内核的第三方语言,利用它可以很方便高效地实现对C51系列单片机的高级编程。C51是目前使用最普遍的8位单片机,价格低廉。它与软件编程结合,可以比较方便地满足众多功能要求,甚至取代一些复杂的硬件电路,简化硬件设计,并提高系统的可靠性和降低成本。基于这个思想,本文提出了一种在C51单片机上软件实现相对复杂的双极型PWM 的新方法。

1 PWM 控制原理
    PWM(Pulse Width Modulation)即脉冲宽度调制,它通过控制信号去调制方波脉冲的宽度,从而获得控制的实现。
    产生PWM 信号可以由硬件方法和软件方法实现。传统的硬件模拟方法是把调制信号和载波(一般是三角波)同时接入运算放大器的两个输入端作比较而得到。而软件的实现,特别是基于单片机的软件实现方法,主要是利用其内部提供的定时器,通过改变定时器的定时初值获得不同的脉冲持续时间,如果把系统的控制信号和定时器的定时初值线性对应起来,就可获得控制信号对脉宽调制的PWM 信号。所以这样线性的对应过程就成为这个实现过程的关键。控制信号的种类不同,采用不同的计算方法,又可以获得不同的PWM,见文献[3]。

2 在AT89C51中实现双极型PWM的方法
    51系列单片机提供了非常丰富的资源,它除了拥有4个通用并口和1个串口外,还有外部中断和内部定时器等。而且,不同的型号还集成有不同的功能,比如AT89C51就在片内集成了4 K 的ROM,这样存储空间可以满足一般的编程需要,而不必去构建程序存储器,既提高了工作效率和系统的稳定性,又降低了生产成本。
    基于AT89C51单片机的PWM 软件实现的重要硬件支撑是该单片机内部的定时器。在AT89C51内实现PWM 的基本过程:首先选定脉冲的频率T,然后根据控制信号的变化范围,这里假设是(0~V),则可以求出t时刻通过控制信号V(t)的对应脉冲的正、负脉冲持续时间。这两个时间长度在单片机里是通过给定时器赋相应的初值而得,即定时器获得这样的定时初值后就在机器周期的同步下,从这个初值加1计数,定时器满时则产生相应时间长度的溢出中断,再利用这个中断所响应的服务程序去控制单片机某一引脚相应的正、负电平极性的持续时间。如果上述过程连续进行,就可在这个引脚获得宽度随控制信号V(t)大小变化的PWM方波信号。
    AT89C51单片机每个机器周期由6个状态组成,每个状态又有两个时钟周期,这样一个机器周期就等于12个时钟周期,即机器频率为时钟频率的12分频。通过对工作模式寄存器TMOD的赋值操作,把定时器设为内部定时状态并选择不同的定时方式。然后假设PWM 的周期T小于定时器一次溢出时间,即T<2Nus,这里的N为定时器的位数。这样就可以得到脉宽(脉冲持续时间)twx定时初值Twx的关系:
twx=(2N-Twx)×12/f us   (1)
    如果所用晶振为12 MHz,定时器为方式1,即为16位定时(这时定时有比较大的计数范围,用途更为广泛),这样上式变为:
twx=(216 - Twx )us   (2)
    之后再根据功率器件的时间特性和工作的平均功率值,确定一个合适的PWM 信号周期T,很显然这个周期T就是由高电平脉宽twh和低电平脉宽twl组成,即:
T=twh+ twl    (3)
    当调制PWM 脉宽的误差信号V(f)(这个信号一般是由传感器采集后经过相关处理后得到的误差信号)的变化范围是(0~V)或(-V~V)时,PWM脉宽与误差信号为线性关系(实际可能不是线性的,但一般可以忽略或者可以通过前级进行软件补偿),可以从单片机的1个引脚得到PWM 信号,具体的过程在相关文献已有叙述,见文献[4]。
    然而,单片机一般是单极型的,它的逻辑0对应的实际电平是0 V,逻辑1对应的实际电平是+5 V。严格地说,在这种单片机上只能够输出单极型的PWM 信号。采用AT89C51结合软件编程实现双极型PWM 控制的设计思想是这样的:从AT89C51的一个引脚得到正的单极型PWM 信号输出,对另一个引脚做相应的设计和定义,让它承担对应的“负”极型PWM 信号的输出。即当调制PWM 脉宽的误差信号为正时,对应的PWM 就从AT89C51单片机的一个引脚输出;当误差信号为负时,对应的PWM 就从另外一个引脚输出,尽管这个输出信号的模拟电平也是正的,但它对应的是负值的误差信号所产生的PWM 输出,又是驱动负极型功率器件,和负极型PWM 功能一样,于是可以把它等效为负极型PWM;当误差信号为零时,相应的两个引脚都没有输出,然后再把这两个引脚接入PWM 功率驱动电路的输入端。通过对误差信号正负的判别,再利用AT89C51的两个引脚就实现了双极型的PWM。具体电路如图1所示。
双极型的PWM 
    下面计算产生双极型PWM 所需的定时初值。实际上稳定工作时,只有一个引脚有输出,即一般两个引脚不会同时输出,所以可看作是两个相对独立的过程,可假设脉宽和误差信号的线性对应关系:

据此可求出定时初值与误差信号的关系:
 
由(1)式有
 
把式(5)代入式(6)得:
 
    当晶振频率取12 MHz时,f=12。采用定时方式1,则可以得到即时的控制信号V(t)和定时初值在PWM 信号的一个周期内的关系:
 
    因为V和V(t)通过对误差计算都可以得到,所以根据式(8)可以求出t时刻对应的PWM 一个周期高低脉宽的定时初值(注意这里的T的单位是us,频率f的单位为MHz)。

3 Keil C下的程序实现
    Keil C是基于标准C的C51专用高级编程语言,它具备标准C的强大灵活的编程能力,同时又相对增加了对C51单片机硬件资源的直接操作,故在Keil C下对C51的程序设计几乎使人们可摆脱对C51底层寄存器等硬件的烦琐操作,编程效率显著提高,并且程序运行速度和所占空间和汇编差别不大。这里利用定时器T0的方式1,采用其时间溢出中断,中断号为1,具体程序流程如图2所示。
Keil C下的程序实现 
图2 PWM信号实现的软件流程
E -误差控制器;TH0-T0定时器高位;TL0-T0定时器低位;Twh、Twl-定时器初值

4 结语
    单片机硬件发展很快,出现了16位、32位等多位机,但今后一段时期C51系列的8位机将仍占主流。通过适当的软件开发,可以挖掘其内在价值,这样既降低了生产成本,又锻炼了个人的软件开发能力。
参考文献:
[1] 李朝青.原理及接口技术[M].北京:北京航空航天大学出版社,1999.
[2] 孙传友.测控系统原理与设计[M].北京:北京航空航天大学出版社,2002.
[32 张运波.PWM 信号的软件实现方法[J].微型计算机信息,2002,8(10)


Tags:51单片机,单片机,pwm  
责任编辑:admin
请文明参与讨论,禁止漫骂攻击,不要恶意评论、违禁词语。 昵称:
1分 2分 3分 4分 5分

还可以输入 200 个字
[ 查看全部 ] 网友评论
    没有任何评论
鐢靛瓙寮€鍙戠綉锛氭眹闆嗙患鍚堝悇绫荤數瀛愬埗浣滀笌鐢佃矾鍥剧殑缃戠珯锛宲lc宸ユ帶鎶€鏈�,妯$數鏁扮數鐭ヨ瘑,鍗曠墖鏈篍DA绛夌瓑锛佽崯钀冪數璺浘缃戠珯绮惧崕锛屼负宸ョ▼甯堝垱閫犱环鍊笺€傛杩庡叧娉ㄥ井淇″叕浼楀彿锛氱數瀛愬紑鍙戠綉锛�
最新推荐
璧勬枡鍖呬笅杞�
 [闂佸憡顨嗗ú婊勬櫠閺嶎厼瀚夊Δ锕佹硶閵堫偊鏌¢崒锔藉]闂佸憡銇炵粈渚€濡垫径灞稿亾濞戝磭绱扮紒鍙樺嵆瀹曪繝寮撮悩宸毈闂佸搫鐗嗛幖顐︽偪閸曨剛鐟归柨鐕傛嫹100 c闁荤姴娴勯幏锟�
 [闁哄鍎愰崹顖氣枎閵忋垻灏甸柨鐕傛嫹]婵炴垶鎸搁ˇ瀹犮亹缁€鐑睠闁诲孩鍐荤紓姘卞姬閸曨剛顩烽悹鎭掑妽閸╁倿寮堕悜鍡楃仧婵炲棭鏁-TR
 [闂佹椿婢€缁插鎯岄悙顒傤浄閻犳亽鍔嶉崺鍌炴偣娴g懓绀冩い鎿勬嫹]LM324闁哄鏅滈崝鏍棘閿燂拷4~20mA闁哄鍎戦幏锟�1~5V闂佹眹鍨归悘姘辩矈閿燂拷
 [闂佹椿婢€缁插鎯岄悙顒傤浄閻犳亽鍔嶉崺鍌炴偣娴g懓绀冩い鎿勬嫹]LM386婵$偛婀辩划顖炴倵椤掍焦濯撮柟鎹愵嚙椤斿﹪鏌涜箛鎿冨剶妞ゃ儲鎹囧銊╁箚瑜嬫禍锝夋煕閿濆啫濡奸悽顖ゆ嫹
 [闂佹椿婢€缁插鎯岄悙顒傤浄閻犳亽鍔嶉崺鍌炴偣娴g懓绀冩い鎿勬嫹]936闂佺粯甯掗敃銈堛亹閹绢喗鍋ㄥù锝呭暟閻斿懘鏌涘Ο鐓庢灁闁诡喖锕畷鍫曟晸閿燂拷
 [闂佸憡顨嗗ú婊勬櫠閺嶎厼瀚夊Δ锕佹硶閵堫偊鏌¢崒锔藉]闁烩剝甯掗幊搴ㄦ晬閹邦兘鏋栭柕蹇ョ磿閵堟挳鎮归悮瀛樺+濠电偞鎸撮弲娑氣偓鐧告嫹+闂佺缈伴崕鎾敆閻斿吋鍎嶉柛鏇ㄥ亜缁€锟�
 [闂備緡鍋呭銊╁极閵堝鍋ㄩ梻鍫熺〒閹藉秹鎮规担鐟扮妞ゆ挸鎲″ḿ顏堫敍濞嗘劦鍋�]S7-200PLC闂佹眹鍔岀€氼亞鎸掗姀銈嗗剳闁绘梹妲掗幏顐⒚归悪鍛 S7_2
 [闁哄鍎愰崹顖氣枎閵忋垻灏甸柨鐕傛嫹]S7-200闁圭厧鐡ㄩ幐濠氬几閸愨晝顩烽悹浣告贡缁€鍕煕韫囷絿鍘滅紒鎲嬫嫹,STEP7
 [闁哄鍎愰崹顖氣枎閵忋垻灏甸柨鐕傛嫹]ModbusPoll闂佸憡绮岄鐖媎busSalve闂佺ǹ楠忛幏锟�
 [闁哄鍎愰崹顖氣枎閵忋垻灏甸柨鐕傛嫹]STEP7濠碘槅鍨崜婵堚偓姘懇閺屽矁绠涢弬璺ㄦ▌婵炲濮伴崐鏇犺姳閿燂拷 Smart_
 [闁哄鍎愰崹顖氣枎閵忋垻灏甸柨鐕傛嫹]Modbus闁荤姴顑呴崯鎶芥儊椤栨粌鍨濋柛鎾楀倻瑙� v1.024 缂傚倷绶ら幏锟�
 [闁哄鍎愰崹顖氣枎閵忋垻灏甸柨鐕傛嫹]Modscan32闂佸憡绮岄鐖媎sim32,modb
 [闂佹椿婢€缁插鎯岄悙顒傤浄閻犳亽鍔嶉崺鍌炴偣娴g懓绀冩い鎿勬嫹]89c51闂佺ǹ绻愰ˇ閬嶆偟濞戙垹妫橀梺顐g闂嗗綊鏌i鍡楁珢缂佽鲸鐛otues
 [闂佹椿婢€缁插鎯岄悙顒傤浄閻犳亽鍔嶉崺鍌炴偣娴g懓绀冩い鎿勬嫹]婵炴垶鎸稿ú銈夊礋妤e啫鍌ㄩ柛鐐村Оotues婵炲濮惧▔鏇烇耿閿涘嫮鐭欓悗锝庝簽绾板秵绻濊閸旀鎮ラ敓锟�
 [闂佹椿婢€缁插鎯岄悙顒傤浄閻犳亽鍔嶉崺鍌炴偣娴g懓绀冩い鎿勬嫹]51闂佸憡顨嗗ú婊勬櫠閺嶎厼瀚夐柛婵嗗閸у﹦绱掔€h埖瀚� protues婵炲濮惧▔鏇烇耿閿燂拷
鏈€鏂版枃绔�
关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 在线帮助 - 文章列表
返回顶部
刷新页面
下到页底
晶体管查询