![第14讲自己动手学习单片机-PWM_第1页](http://file4.renrendoc.com/view/1aa4e03a81c01140122598df58e8fa3c/1aa4e03a81c01140122598df58e8fa3c1.gif)
![第14讲自己动手学习单片机-PWM_第2页](http://file4.renrendoc.com/view/1aa4e03a81c01140122598df58e8fa3c/1aa4e03a81c01140122598df58e8fa3c2.gif)
![第14讲自己动手学习单片机-PWM_第3页](http://file4.renrendoc.com/view/1aa4e03a81c01140122598df58e8fa3c/1aa4e03a81c01140122598df58e8fa3c3.gif)
![第14讲自己动手学习单片机-PWM_第4页](http://file4.renrendoc.com/view/1aa4e03a81c01140122598df58e8fa3c/1aa4e03a81c01140122598df58e8fa3c4.gif)
![第14讲自己动手学习单片机-PWM_第5页](http://file4.renrendoc.com/view/1aa4e03a81c01140122598df58e8fa3c/1aa4e03a81c01140122598df58e8fa3c5.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第14讲PWM青岛科技大学王泽料清单+5v电源最小系统板面包板插线若干本章重点掌握PWM的作用掌握快速PWM编程方法掌握相位修正的PWM编程方法PWMPWM(PulseWidthModulation)脉冲宽度调制 简称脉宽调制技术,是一种利用微处理器的数字技术进行模拟电路的控制得一种有效技术,广泛应用于测量、通讯、功率控制和变换等领域。ATMega16的PWM产生方式(三种)
快速PWM(T/C0,T/C1,T/C2)
相位修正的PWM(T/C0,T/C1,T/C2)
相位与频率修正的PWM(T/C1)ATMega16的PWM输出引脚(共4个)
OC0(T/C0)
OC1A,OC1B(T/C1)
OC2(T/C2)
T/C0的PWM快速PWM模式 用来产生高频的PWM波形,适合于功率调节,整流和DAC应用。快速PWM模式是单斜坡工作。计数器从BOTTOM计到MAX,然后立即回到BOTTOM重新开始。
普通比较输出模式:输出比较引脚OC0在TCNT0与OCR0匹配时清零,在BOTTOM时置位。
反向比较输出模式:
OC0的动作正好相反。 计时器数值达到MAX时T/C溢出标志TOV0置位。如果中断使能,在中断服务程序可以更新比较值(OCR0中的值)。T/C0寄存器T/C控制寄存器TCCR0
WGM01:0:bit6,bit3。PWM模式选择,如下表所示
COM01:0:bit5:4比较匹配输出模式
CS02:0:分频选择T/C寄存器-TCNT0和输出比较寄存器-OCR0
PWM模式下,TCNT0在T/C时钟作用下不断进行+1或-1运算,OCR0存放一个确定的比较值。一旦TCNT0的数据与OCR0中的值相等,将在OC0引脚上产生PWM波形。
PWM模式下,OCR0是双缓冲的。使用双缓冲时,CPU访问的是OCR0缓冲寄存器,T/C0使用的是OCR0本身。双缓冲可以将更新OCR0寄存器与top或bottom时刻同步起来,从而防止产生不对称的PWM脉冲,消除了干扰脉冲。T/C中断屏蔽寄存器-TIMSK
当TOIE0和状态寄存器SREG的全局中断使能位I都为”1”时,T/C0的溢出中断使能。当T/C0发生溢出,即TIFR中的TOV0位置位时,中断服务程序得以执行。可以在中断服务程序中更改OCR0中的数据。T/C中断标志寄存器-TIFR
TOV0在TCNT0达到MAX时,置位。当SREG的I位,TIMSK的TOIE0位,TOV0位都为1,中断发生。在相位修正PWM模式中,当T/C0在0x00改变记数方向时,TOV0置位。快速PWM波的频率和占空比计算
PWM波占空比计算 占空比=高电平时间/PWM周期 =(255-OCR0)/256
5、采用1024分频(CS02:0=101),故方波周期为32768us,方波频率为31Hz。
总之:在8MHz时钟下,PWM波的频率可以是31Hz到31KHz之间变化快速PWM模式下,产生基本的PWM波任务描述:
产生3906Hz的PWM波,要求占空比为30%。采用反向比较输出模式。
3906Hz对应8分频。 根据占空比计算公式,由 (255-OCR0)/256=30%,得
OCR0的值为178。#defineF_CPU8000000UL#include<avr/io.h>#definepwmDDRDDRB //pwm方向寄存器#definepwmPORTPORTB //pwm数据寄存器#defineoPwm3 //pwm针脚3#define_NOP()__asm____volatile__("nop"::)/********** 端口初始化*****************************/voidinitPin(){PORTA=0xFF; //A口上拉电阻使能
DDRA=0x00;PORTB=0xFF; //B口上拉电阻使能
DDRB=0x00;PORTC=0xFF; //C口上拉电阻使能
DDRC=0x00;PORTD=0xFF; //D口上拉电阻使能
DDRD=0x00;_NOP();}/***********************pwm寄存器及输出针脚初始化**********************/voidinitPwm() { TCCR0|=(1<<WGM01)|(1<<WGM00); //快速PWM模式
TCCR0|=(1<<COM01)|(1<<COM00); //反向比较输出
pwmPORT&=~(1<<oPwm); //pwm针脚输出0 pwmDDR|=(1<<oPwm); //pwm针脚定义为输出
TCCR0|=(1<<CS01); //8分频,启动pwm}intmain(void){ initPin(); initPwm(); OCR0=178; while(1); return(0);}快速PWM模式下,产生可变占空比的PWM波任务描述:
产生3906Hz的PWM波,要求占空比在30%和50%之间跳变,跳变由PA0的按键来控制。采用反向比较输出模式。
3906Hz对应8分频。 根据占空比计算公式,由(255-OCR0)/256=30%,得OCR0的值为178。 由(255-OCR0)/256=50%,得OCR0的值为127。#defineF_CPU8,000,000UL#include<avr/io.h>#include<avr/interrupt.h>//定义键盘使用的端口PA0#definekey_DDRDDRA#definekey_PORTPORTA#definekey_PINPINA//键盘状态机#defineState_NoKey 0 //无键按下状态#defineState_KeyPress 1 //有键按下状态#defineState_ValidKey 2 //有效按键状态#defineState_KeyRelease 3 //键盘释放状态intState_Key=State_NoKey; //键状态,初始为无键按下状态volatilecharvalue_keyscan=0;#definepwmDDRDDRB //pwm方向寄存器#definepwmPORTPORTB //pwm数据寄存器#defineoPwm3 //pwm针脚3(PB3)#define_NOP()__asm____volatile__("nop"::)charflagPWM=0;//偶数时为占空比为30%,否则50%/********** 端口初始化*****************************/voidinitPin(){PORTA=0xFF; //A口上拉电阻使能
DDRA=0x00;PORTB=0xFF; //B口上拉电阻使能
DDRB=0x00;PORTC=0xFF; //C口上拉电阻使能
DDRC=0x00;PORTD=0xFF; //D口上拉电阻使能
DDRD=0x00;_NOP();}/******************键盘扫描**********************************/charkey_scan(){ key_DDR&=0xFE;
key_PORT|=0x01;//PA0输入,内部上拉,这样PA0引脚高电平,一旦按键按下,PA变为低电平
_NOP(); if(key_PIN&0x01) //无键按下
return(0); //返回PA0端口值
else //有键按下
return(1);}charFsm_KeyDither(charevent_trig){ staticcharf_key_release; staticcharkey_value; switch(State_Key) { caseState_NoKey: if(event_trig)//key_scan!=0,转到有键按下状态
State_Key=State_KeyPress;
else //key_scan=0,在无键状态下循环
State_Key=State_NoKey; f_key_release=0; key_value=0; break; caseState_KeyPress: if(event_trig)//key_scan!=0,转到有效按键状态
State_Key=State_ValidKey; else //key_scan=0,无效按键,转无键状态
State_Key=State_NoKey; f_key_release=0; key_value=0; break;
caseState_ValidKey: if(event_trig)//key_scan!=0,在状态中循环,存储键值
{ State_Key=State_ValidKey; key_value=event_trig; } else //key_scan=0,转键释放状态
State_Key=State_KeyRelease; f_key
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 现场管理承包协议书
- 生活指南版权使用合同(2篇)
- (湘教版)七年级数学下册:2.1.1《同底数幂的乘法》听评课记录
- 湘教版数学九年级下册2.2《圆心角、圆周角》听评课记录3
- 八年级上册历史人教版同步听课评课记录第11课《北洋政府的黑暗统治》
- 同股不同权创始股东协议书范本
- 委托代建及项目回购协议书范本
- 超高层房屋租赁合同范本
- 个人临街门面房出租协议书范本
- 五年级上册数学听评课记录《4.3 探索活动:平行四边形的面积》(16)-北师大版
- 小学六年级数学上册《简便计算》练习题(310题-附答案)
- 2024年河南省《辅警招聘考试必刷500题》考试题库及答案【全优】
- -情景交际-中考英语复习考点
- 安全隐患报告和举报奖励制度
- 地理标志培训课件
- 2023行政主管年终工作报告五篇
- 2024年中国养老产业商学研究报告-银发经济专题
- 公园卫生保洁考核表
- 高教版2023年中职教科书《语文》(基础模块)下册教案全册
- 人教版英语七年级上册阅读理解专项训练16篇(含答案)
- 在全县生猪生产统计监测工作会议的讲话范文(通用3篇)
评论
0/150
提交评论