PWM电机调速原理及51单片机PWM程序经典
51单片机pwm调速程序
51单片机pwm调速程序此程序是一个用51单片机来调直流电机转速的程序。
当然也可以用来调整led灯的亮度,用定时器2来实现. #include //包括一个52标准内核的头文件#define uchar unsigned char#define uint unsigned int#define ulong unsigned longsbit PWM = P3^3; //要控制的风扇sbit K= P3^7; //按键控制转速uchar scale;//用于保存占空比的输出0的时间份额,总共10份//延时程序void delay10ms(void){unsigned char i,j;for(i=20;i>0;i--)for(j=248;j>0;j--);}// 主程序void main(void){RCAP2H =0xF3; //赋T2的预置值,溢出1次是1/1200秒钟RCAP2L =0x98;scale=10;TR2=1; //启动定时器ET2=1; //打开定时器2中断EA=1; //打开总中断while(1) //程序循环{while(K==0){scale++;while(K==0);if(scale==11)scale=0;}}}//1/1200秒定时器2中断timer2() interrupt 5{static uchar tt=0; //tt用来保存当前时间在一秒中的比例位置TF2=0;tt++;if(tt==10) //每1/120秒整开始输出低电平{tt=0;if(scale!=0) //这里加这一句是为了消除灭灯状态产生的鬼影PWM=0;}if(scale==tt) //按照当前占空比切换输出高电平PWM=1;}。
基于51系列单片机的直流电机PWM调速系统设计
基于51系列单片机的直流电机PWM调速系统设计
随着社会的发展,直流电机作为机械设备中重要的驱动件,已经被越来越多的应用起来,而PWM(脉冲宽度调制)技术是控制直流电机转速的有效方法。
本文介绍了一种基于
51系列单片机的直流电机PWM调速系统设计,该调速系统可以实现对直流电机的转速调节。
首先,本文详细描述了该调速系统的硬件结构,包括51系列单片机控制器,PWM模块,旋转编码器,按键,LED指示灯,直流电机等构成组件。
其中,51系列单片机控制器负责
信号的采集和处理,PWM模块负责调节直流电机的转速,旋转编码器负责实时测量直流电
机的转速,按键和LED指示灯则用于进行键盘操作和系统状态指示。
接着,本文提出了该系统的主要程序流程设计。
首先,通过旋转编码器获取当前直流
电机的转速,并经过51系列单片机的实时校准,作为调节直流电机的转速的PWM信号的
参考值。
然后,通过按键输入参考值,调节PWM模块的输出比例,从而调节直流电机的转速。
最后,将调节结果通过LED指示灯反馈出来,用于系统状态的指示。
整个调速系统的设计都在51系列单片机上完成,功能完善。
51单片机控制直流电机PWM调速
51单片机控制直流电机PWM调速
实验目的
1.掌握脉宽调制(PWM) 的方法。
2.用程序实现脉宽调制,并对直流电机进行调速控制。
实验设备
PC 机一台,单片机最小系统,驱动板、直流电机,连接导线等
实验原理
1.PWM (Pulse Width Modulation) 简称脉宽调制。
即,通过改变输出脉冲
的占空比,实现对直流电机进行调压调速控制。
2.实验线路图:
实验内容:
1. 利用实验室提供的单片机应用系统及直流电机驱动电路板,编制控制程序,实现直流电机PWM调速控制。
实验思考题
本实验中是通过改变脉冲的占空比,周期T 不变的方法来改变电机转速的,还有什么办法能改变电机的转速,应该怎么实现?
附件:
L298简介:
L298N 为SGS-THOMSON Microelectronics 所出产的双全桥步进电机专用驱动芯片( Dual Full-Bridge Driver ) ,内部包含4信道逻辑驱动电路,是一种二相和四相步进电机的专用驱动器,可同时驱动2个二相或1个四相步进电机,内含二个H-Bridge 的高电压、大电流双全桥式驱动器,接收标准TTL逻辑准位信号,可驱动46V、2A以下的步进电机,且可以直接透过电源来调节输出电压;此芯片可直接由单片机的IO端口来提供模拟时序信号。
基于C51单片机的直流电机PWM调速控制(包含原理图及C源代码)
基于C51单片机的直流电机PWM调速控制--SQ这是最近一阶段自己学习所获,现分享与大家。
这里采用A T89C52单片机做主控制芯片,实现两路直流电机的PWM调速控制,另外还可以实现转向、显示运行时间、显示档位等注:考虑小直流电机自身因素,调速范围仅设有四级电路原理图:C语言程序源代码:/******************** 硬件资源分配*********************/数码管:显示电机状态(启停、正反、速度)、运行时间、是否转弯按键:K4 启动/暂停K3 正反转/转弯允许K2 加速/左转/运行时间清零K1 减速/右转/停止定时器:T0 数码管动态显示,输出PWMT1 运行时间记录********************************************************//*******主程序文件PWM.c******/#include <reg52.h>#include "Afx.h"#include "Config.c"#define CIRCLE 5 //脉冲周期//按键定义uchar key,key_tmp=0, _key_tmp=0;//显示定义uchar LedState=0xF0; //LED显示标志,0xF0不显示,Ox00显示uchar code LED_code_d[4]={0xe0,0xd0,0xb0,0x70}; //分别选通1、2、3、4位uchar dispbuf[4]={0,0,0,0}; //待显示数组uchar dispbitcnt=0; //选通、显示的位uchar mstcnt=0;uchar Centi_s=0,Sec=0,Min=0; //分、秒、1%秒//程序运行状态标志bit MotState=0; //电机启停标志bit DirState=0; //方向标志0前,1后uchar State1=-1;uchar State2=-1;uchar State3=0;uchar State4=-1;uchar LSpeed=0;uchar RSpeed=0;//其他uint RunTime=0;uint RTime_cnt=0;uint LWidth;uint RWidth; //脉宽uint Widcnt=1;uint Dispcnt;//函数声明void key_scan(void);void DisBuf(void);void K4(void);void K3(void);void K2(void);void K1(void);void disp( uchar H, uchar n );void main(void){P1|=0xF0;EA=1;ET0=1;ET1=1;TMOD=0x11;TH0=0xFC;TL0=0x66; //T0,1ms定时初值TH1=0xDB;TL1=0xFF; //T1,10ms定时初值TR0=1;Widcnt=1;while(1){key_scan();switch(key){case 0x80: K1(); break;case 0x40: K2(); break;case 0x20: K3(); break;case 0x10: K4(); break;default:break;}key=0;DisBuf();LWidth=LSpeed;RWidth=RSpeed;}}//按键扫描**模拟触发器防抖void key_scan(void){key_tmp=(~P3)&0xf0;if(key_tmp&&!_key_tmp) //有键按下{key=(~P3)&0xf0;}_key_tmp=key_tmp ;}//按键功能处理/逻辑控制void K4(void){if(State4==-1){State4=1;TR1=1;dispbuf[3]=1;LedState=0x00; //打开LEDMotState=1; //打开电机LSpeed=1;RSpeed=1; //初速设为1}else if(State4==1){State4=0;TR1=0;MotState=0; //关闭电机}else if(State4==0){MotState=1;if(State3==0){State4=1;TR1=1;}else if(State3==1){LSpeed=2;RSpeed=2;}}}void K3(void){if(State4==1)DirState=!DirState;if(State4==0){if(State3==0){State3=1; //可以转向标志1可以,0不可以TR1=1;dispbuf[3]=9;MotState=1;LSpeed=2;RSpeed=2;}else if(State3==1){State3=0;TR1=0;dispbuf[3]=0;MotState=0;}}}void K2(void){if(State4==1&&LSpeed<4&&RSpeed<4){LSpeed++;RSpeed++;}else if(State4==0){if(State3==0){//State4=-1;//LedState=0xF0;MotState=0;Sec=0;Min=0;}else if(State3==1&&LSpeed<4&&RSpeed<4){//TurnState=0;LSpeed=2;RSpeed++;}}}void K1(void){if(State4==1&&LSpeed>1&&RSpeed>1){LSpeed--;RSpeed--;}else if(State4==0){if(State3==0){State4=-1;LedState=0xF0;MotState=0;}else if(State3==1&&LSpeed<4&&RSpeed<4){//TurnState=1;LSpeed++;RSpeed=2;}}}//显示预处理void DisBuf(void){if(RTime_cnt==100){Sec++;RTime_cnt=0;}if(Sec==60){Min++;Sec=0;}if(State4==1){dispbuf[0]=Sec%10;dispbuf[1]=Sec/10;dispbuf[2]=Min;if(!DirState) //正转dispbuf[3]=LSpeed;if(DirState) //反转dispbuf[3]=LSpeed+4;}if(State4==0){if(State3==0){dispbuf[0]=Sec%10;dispbuf[1]=Sec/10;dispbuf[2]=Min;dispbuf[3]=0;}if(State3==1){dispbuf[0]=RSpeed;dispbuf[1]=LSpeed;dispbuf[2]=Min;dispbuf[3]=9;}}}//LED驱动void disp( uchar H, uchar n ){P1=n;P1|=LedState ;P1|=LED_code_d[H];}//T0中断**显示/方波输出void Time_0() interrupt 1{TH0=0xFC;TL0=0x66;Widcnt++;Dispcnt++;//电机驱动/方波输出if(Widcnt>CIRCLE){Widcnt=1;}if(Widcnt<=LWidth)LMot_P=!DirState&&MotState;elseLMot_P=DirState&&MotState;LMot_M=DirState&&MotState;if(Widcnt<=RWidth)RMot_P=!DirState&&MotState;elseRMot_P=DirState&&MotState;RMot_M=DirState&&MotState;//显示if(Dispcnt==5){disp(dispbitcnt,dispbuf[dispbitcnt]);dispbitcnt++;if(dispbitcnt==4){dispbitcnt=0;}Dispcnt=0;}}//T1中断**运行时间void Time_1() interrupt 3{TH1=0xDB;TL1=0xFF;RTime_cnt++;}/******配置文件Afx.h******/#ifndef _AFX_#define _AFX_typedef unsigned char uchar;typedef unsigned int uint;typedef unsigned long ulong;#endif/******IO配置文件Config.c******/#ifndef _Config_#define _Config_#include "Afx.h"#include <reg52.h>//显示定义sbit led=P3^2;//电机引脚定义sbit LMot_P=P2^2; sbit LMot_M=P2^3; sbit RMot_P=P2^0; sbit RMot_M=P2^1;#endif。
PWM电机调速原理及51单片机PWM程序经典
PWM电机调速原理及51单片机PWM程序经典pwm电机调速原理对于电机的转速调整,我们是采用脉宽调制(pwm)办法,控制电机的时候,电源并非连续地向电机供电,而是在一个特定的频率下以方波脉冲的形式提供电能。
不同占空比的方波信号能对电机起到调速作用,这是因为电机实际上是一个大电感,它有阻碍输入电流和电压突变的能力,因此脉冲输入信号被平均分配到作用时间上,这样,改变在始能端pe2和pd5上输入方波的占空比就能改变加在电机两端的电压大小,从而改变了转速。
此电路中用微处理机去同时实现脉宽调制,通常的方法存有两种:(1)用软件方式来实现,即通过执行软件延时循环程序交替改变端口某个二进制位输出逻辑状态去产生脉宽调制信号,设置相同的延时时间获得相同的充电电流。
(2)硬件实验自动产生pwm信号,不挤占cpu处置的时间。
这就要用到atmega8515l的在pwm模式下的计数器1,具体内容可参考相关书籍。
51单片机pwm程序产生两个pwm,要求两个pwm波形占空都为80/256,两个波形之间要错开,不能同时为高电平!高电平之间相差48/256,pwm这个功能在pic单片机上就存有,但是如果你就要用51单片机的话,也就是可以的,但是比较的麻烦.可以用定时器t0去掌控频率,定时器t1去掌控充电电流:大致的的编程思路就是这样的:t0定时器中断就是使一个i0口输入高电平,在这个定时器t0的中断当中再生制动定时器t1,而这个t1就是使io口输入低电平,这样发生改变定时器t0的初值就可以发生改变频率,发生改变定时器t1的初值就可以发生改变充电电流。
*程序思路说明:****关于频率和占空比的确定,对于12m晶振,假定pwm输出频率为1khz,这样定时中断次数**预设为c=10,即0.01ms中断一次,则th0=ff,tl0=f6;由于预设中断时间为0.01ms,这样**可以设定占空比可从1-100变化。
即0.01ms*100=1ms******************************************************************************* /#include#defineucharunsignedchar/******************************************************************************th0和tl0是计数器0的高8位和低8位计数器,计算办法:tl0=(65536-c)%6;**th0=(65536-c)/256,其中c为所要计数的次数即为多长时间产生一次中断;tmod就是计数器**工作模式挑选,0x01则表示采用模式1,它存有16十一位计数器,最小计数脉冲为65536,最久时**间为1ms*65536=65.536ms******************************************************************************* /#definev_th00xff#definev_tl00xf6#definev_tmod0x01voidinit_sys(void);/*系统初始化函数*/voiddelay5ms(void);unsignedcharzkb1,zkb2;voidmain(void){init_sys();zkb1=40;/*占空比初始值设定*/zkb2=70;/*占空比初始值设定*/while(1){if(!p1_1)//如果按了+键,减少充电电流{delay5ms();if(!p1_1){zkb1++;zkb2=100-zkb1;}}if(!p1_2)//如果按了-键,增加充电电流{delay5ms();if(!p1_2){zkb1--;zkb2=100-zkb1;/*对占空比值限定范围*/if(zkb1>99)zkb1=1;if(zkb1<1)zkb1=99;}}/*******************************************************函数功能:对系统进行初始化,包括定时器初始化和变量初始化*/voidinit_sys(void)/*系统初始化函数*/{/*定时器初始化*/tmod=\th0=v_th0;tl0=v_tl0;tr0=1;et0=1;ea=\}//延时voiddelay5ms(void){unsignedinttempcyc=1000;while(tempcyc--);}/*中断函数*/voidtimer0(void)interrupt1using2{staticucharclick=\/*中断次数计数器变量*/th0=v_th0;/*恢复定时器初始值*/tl0=v_tl0;++click;if(click>=100)click=\if(click<=zkb1)/*当小于占空比值时输出低电平,高于时是高电平,从而实现占空比的调整*/p1_3=0;elsep1_3=1;if(click<=zkb2)p1_4=0;elsep1_4=1;}<1.下面就是avr的程序,51产生pwm波麻烦,可以用avr。
51单片机定时器产生pwm波的程序
51单片机定时器产生pwm波的程序PWM(Pulse Width Modulation)是一种调节脉冲信号宽度的技术,通过改变信号的高电平时间和低电平时间的比例来控制输出电压的大小。
在很多应用中,PWM技术被广泛应用于电机控制、LED调光、音频放大器等领域。
在使用51单片机生成PWM波之前,我们首先需要了解51单片机的定时器的工作原理。
51单片机内部集成了多个定时器,其中最常用的是定时器0和定时器1。
这两个定时器都是16位的,可以通过设定定时器的计数值和工作模式来控制定时器的工作。
在使用定时器0和定时器1生成PWM波之前,我们还需要明确一些概念。
占空比是指高电平时间与一个周期的比值,通常用百分比表示。
频率是指一个周期的时间,单位是赫兹(Hz)。
接下来我们以定时器1为例,介绍如何在51单片机上生成PWM波。
我们需要设置定时器1的工作模式。
定时器1的工作模式分为两种:8位自动重装载模式和16位工作模式。
在8位自动重装载模式下,定时器1的计数器值从0到255,然后自动重装载为初始值,重复计数。
在16位工作模式下,定时器1的计数器值从0到65535,然后自动重装载为初始值,重复计数。
在生成PWM波时,我们通常使用16位工作模式。
我们需要设置定时器1的计数值。
定时器1的计数值决定了PWM波的频率。
计数值越大,频率越低;计数值越小,频率越高。
我们可以根据具体的应用需求来设定计数值。
然后,我们需要设置定时器1的占空比。
占空比决定了PWM波的高电平时间与低电平时间的比例。
占空比为50%时,高电平时间和低电平时间相等;占空比小于50%时,低电平时间多于高电平时间;占空比大于50%时,高电平时间多于低电平时间。
我们可以通过改变定时器1的占空比来控制PWM波的输出电压的大小。
我们需要启动定时器1开始工作。
定时器1开始工作后,会自动根据设定的计数值和占空比生成相应的PWM波。
使用51单片机定时器生成PWM波的步骤如下:1. 设置定时器1的工作模式为16位工作模式;2. 设定定时器1的计数值,确定PWM波的频率;3. 设定定时器1的占空比,确定PWM波的输出电压的大小;4. 启动定时器1开始工作。
pwm电机调速的原理介绍与代码实现
pwm电机调速的原理介绍与代码实现o1)设置自动重装载数值o2)设置捕获比较数值o3)设置pwm输出模式及对齐方式o4)配置信号输出极性并使能输出o5)使能计数器打开总开关ooo1)占空比o2)配置模式oo1、pwm实现调速的原理与介绍oo2、pwm信号配置流程oo3、pwm调速代码o4、为什么pwm可以调速1、pwm实现调速的原理与介绍PWM(Pulse Width Modulation)脉冲宽度调制。
1)占空比pwm占空比就是一个脉冲周期内有效电平在整个周期所占的比例。
通过调节PWM的占空比就能调节IO口上电压的持续性变化,因此也能够控制外设的功率进行持续性变化,也就能控制直流电机的转速快慢。
那么重点就在于如何调节PWM波形的输出。
如下图所示图中的ARR是我们给定时器的一个预装载值,CCRx的上下变化是产生PWM波的关键。
我们假设ARR大于CCRx的部分输出为高电平(即t1-t2、t3-t4、t5-t6),ARR小于CCRx的部分输出为低电平(即0-t1、t2-t3、t4-t5),则改变CCRx的值就能改变输出PWM的占空比。
只要弄明白了上面那幅图,那就不难理解想要控制PWM的输出波形,重要的就是如何设置ARR与CCRx这两个寄存器的值了。
(此处如何设置寄存器的值我代码里会注释得非常清楚,可以先看看原理)•PWM模式、有效电平前面我们假设ARR大于CCRx时输出为高电平,ARR小于CCRx 时输出为低电平,但在实际运用中可能并非如此,有可能是相反的情况——ARR大于CCRx时输出为低电平,ARR小于CCRx时输出为高电平,至于到底是哪种情况,还要看PWM是哪种模式、有效电平又设置的是何种极性了。
模式1:ARR小于CCRx时输出为“有效”电平,ARR大于CCRx时输出为“无效”电平。
模式2:ARR小于CCRx时输出为“无效”电平,ARR大于CCRx时输出为“有效”电平。
注意,我这里用的是“有效”和“无效”,而不是“高”和“低”,也就是说有效电平可高可低,并非一定就是高电平。
如何利用51单片机输出PWM波
如何利用51单片机输出PWM波1、理论知识2、程序及分析1、理论知识PWM这个功能在飞思卡尔、STM32等高档的单片机内部有专用的模块,用此类芯片实现PWM功能时只需要通过设置相应的寄存器就可实现周期和占空比的控制。
但是如果要用51单片机的话,也是可以的,但是比较的麻烦。
此时需要用到内部定时器来实现,可用两个定时器实现,也可以用一个定时器实现。
For personal use only in study and research; not for commercial use用两个定时器的方法是用定时器T0来控制频率,定时器T1来控制占空比。
大致的的编程思路是这样的:T0定时器中断让一个I0口输出高电平,在这个定时器T0的中断当中起动定时器T1,而这个T1是让IO口输出低电平,这样改变定时器T0的初值就可以改变频率,改变定时器T1的初值就可以改变占空比。
下面重点介绍用一个定时器的实现PWM的方法。
因为市面上的智能小车所采用的电机大多数为TT减速电机,通过复杂的实验此电机最佳的工作频率为1000HZ(太高容易发生哨叫,太低电机容易发生抖动),所以下面以周期为1ms (1000HZ)进行举例,要产生其它频率的PWM波,程序中只需作简单修改即可。
用一个定时器时(如定时器T0),首先你要确定PWM的周期T和占空比D,确定了这些以后,你可以用定时器产生一个时间基准t,比如定时器溢出n次的时间是PWM的高电平的时间,则D*T=n*t,类似的可以求出PWM低电平时间需要多少个时间基准n'。
For personal use only in study and research; not for commercial use因为这里我们是产生周期为1ms(1000HZ)的PWM,所以可设置中断的时间基准为0.01ms,,然后中断100次即为1ms。
在中断子程序内,可设置一个变量如time,在中断子程序内,有三条重要的语句:1、当time>=100时,time清零(此语句保证频率为1000HZ),2、当time>n时(n应该在0-100之间变化开),让单片相应的I/O口输出高电平,当time<n时,让单片相应的I/O口输出低电平,此时占空比就为%n。
基于51单片机的PWM直流电机调速
基于51单片机的PWM直流电机调速在现代社会,PWM直流电机已经成为各类机械设备不可或缺的动力源。
为了更好地控制电机的转速和输出功率,我们需要进行PWM调速操作。
本文将简要介绍如何基于51单片机实现PWM直流电机的调速。
一、PWM调速原理PWM调速是一种通过改变电机供电电压的占空比来调整电机转速和功率的方法。
当一个周期内高电平所占的时间比较短时,电机得到的平均电流和平均转矩也相应减小,电机的速度和功率也随之降低。
反之,当高电平所占的时间比较长时,电机得到的平均电流和平均转矩也相应增大,电机的速度和功率也随之提高。
因此,通过改变PWM信号的高电平占空比,可以实现直流电机的调速、调功等功能,极大地提高了电机的效率和可控性。
二、硬件电路搭建根据上述PWM调速原理,我们需要搭建一个控制板,将51单片机的PWM输出与直流电机相连。
具体电路如下:1、选择合适的电源供电,一般为12V/24V直流电源。
2、使用L298N模块作为直流电机驱动模块,将模块的电源接到电源供电上,将模块的IN1和IN2引脚分别接到51单片机的P1^0和P1^1引脚上,将直流电机的正负极分别接到模块的OUT1和OUT2引脚上。
3、将51单片机的P1^2引脚连接到一个脉冲宽度计波形滤波器(LCF)的输入端,并将输出端接到L298N模块的ENA引脚上。
4、调整脉冲宽度计波形滤波器的参数,以达到合理的PWM输出波形。
5、建立一个按键,将按键的一端接到51单片机的P3^2引脚上,将另一端接到单片机的地端。
6、根据需要进行其他接线。
三、软件程序设计根据上述硬件电路,我们需要进行相应的软件程序设计,以实现基于51单片机的PWM 直流电机调速。
以下是程序设计的主要步骤:1、在程序中定义需要使用的IO口。
2、调用定时器初始化程序,设置定时器的时钟频率、计数器值和工作方式等参数。
3、编写一个PWM输出函数,实现对PWM信号的输出。
4、编写一个ADC采样函数,读取ADC转换器的值,并根据采样值输出一定的PWM信号。
51单片机PWM电机调速程序
51单片机PWM电机调速程序#include#define TH0_TL0 (65536-1000)//设定中断的间隔时长unsigned char count0 = 50;//高电平的占空比unsigned char count1 = 0;//比较用的临时变量bit Flag = 1;//电机正反转标志位,1正转,0反转sbit Key_add=P2 ^ 0; //电机减速sbit Key_dec=P2 ^ 1; //电机加速sbit Key_turn=P2 ^ 2; //电机换向sbit PWM1=P2^6;//PWM 通道 1,反转脉冲sbit PWM2=P2^7;//PWM 通道 2,正转脉冲unsigned char Time_delay;void Delay(unsigned char x);void Motor_speed_high(void);void Motor_speed_low(void);void Motor_turn(void);void Timer0_init(void);void Delay(unsigned char x){Time_delay = x;while(Time_delay != 0);//等待中断,可减少PWM输出时间间隔}void Motor_speed_high(void)//{if(Key_add==0){Delay(10);if(Key_add==0){count0 += 5;if(count0 >= 100){count0 = 100;}}while(!Key_add);//等待键松开}}void Motor_speed_low(void){if(Key_dec==0){Delay(10);if(Key_dec==0){count0 -= 5;if(count0 <= 0){count0 = 0;}}while(!Key_dec );}}void Motor_turn(void) {if(Key_turn == 0) {Delay(10);if(Key_turn == 0) {Flag = ~Flag;}while(!Key_turn);}}void Timer0_init(void) {TMOD=0x01; //定时器0工作于方式1 TH0=TH0_TL0/256;TL0=TH0_TL0%6;TR0=1;ET0=1;EA=1;}void main(void){Timer0_init();while(1){Motor_turn();Motor_speed_high();Motor_speed_low();}}void Timer0_int(void) interrupt 1 using 1 {TR0 = 0;//设置定时器初值期间,关闭定时器TL0 = TH0_TL0 % 256;TH0 = TH0_TL0 / 256 ;//定时器装初值TR0 = 1;if(Time_delay != 0)//延时函数用Time_delay--;}if(Flag == 1)//电机正转{PWM1 = 0;if(++count1 < count0) {PWM2 = 1;}elsePWM2 = 0;if(count1 >= 100) {count1=0;}}else //电机反转{PWM2 = 0;if(++count1 < count0) {PWM1 = 1;}elsePWM1 = 0;if(count1 >= 100){count1=0;}}}这个程序是我转来的下载在硬件上是能通过的。
51单片机产生PWM控制小车速度的两种方法
51单片机产生PWM控制小车速度的两种方法首先你的先知道什么是PWM。
PWM是一种脉宽调制技术。
简单的说就是在一个周期内高电平所占用的时间,通过改变脉冲的周期可以调频,改变脉冲的宽度或占空比可以调节驱动上的电压。
将产生的PWM信号接到L298N的ENA和ENB端调节不同的占空比从而调节速度第一种方法用单片机的定时器模拟出PWM。
假如你用定时器延时100ms,在50ms之前某一个引脚为低电平,50ms之后该引脚为高电平,这样高电平占用的时间为1/2,此时该引脚就会产生50%的占空比信号。
程序如下:#include<reg52.h>unsigned chartimer1;sbit PWM=P1^1;void system_Ini(){TMOD|= 0x11;TH1 = 0xfe; //11.0592TL1 = 0x33;TR1 =1;IE=0x8A;}main(){ system_Ini() ;定时器初始化while(1){ if(timer1>100) timer1=0;if(timer1<=30) pwm=0;//产生30%的占空比else PWM=1;}}另一种方法就是利用简单的延时产生PWM方波信号#include<reg52.h>unsigned char count=0;sbit PWM_1=PI^1;//利用P1^1产生PWMvoid mian(){while(1)for(count=0;count<=100;count++) //让单片机记100个数{If(count<=50){ PWM_1=1;}//前一半时间为高电平elsePWM_1=0//后一半时间为低电平这样就产生了50%的占空比}PWM不仅能够控制小车速度还可以控制小灯的亮灭程度,朋友们可以去试试。
水平有限,如果觉得对您有用请您推荐您的朋友关注我们,还请大神们轻喷。
基于51单片机的PWM直流调速系统
基于51单片机的PWM直流调速系统摘要:在当今社会,自动控制系统遍及我们生活的各个领域,在工业自动化中的应用也及其普遍,如:数控设备,工业机器人,电动机农业等。
而驱动这些设备的动力系统大多为直流电机,直流电机也因其有良好的启动性能,调速性能被广泛应用。
单片机简单来说就是集CPU(运算、控制)、RAM(数据存储-内存)、ROM(程序存储)、输入输出设备(串口、并口等)和中断系统处于同一芯片的器件,是一种功能强,体积小,可靠性高的大规模集成电路器件,乘法和除法指令,也给编程也带来了便利。
PWM(脉冲宽度调制)调速技术是直流电机中最常见的一种调速技术。
该调速技术有需要的元器件少,电路构造简单,精度高,范围广和无极调速等优点,成为直流电机的主流调速技术之一,同时也促进了工业化的发展。
本文主要介绍直流电机的调速系统,该系统为用51单片机发出PWM信号,通过改变PWM信号占空比来实现直流电机的调速。
并通过L298驱动模块来驱动电机。
在直流电机调速过程中,需要采用一些按键对系统调速进行控制。
在本系统中主要采用的是按键的方式进行控制,将四个按键分别连接到单片机的四个引脚上。
同时通过转速和电流双闭环直流调速系统,采用模糊控制的PID控制器对该系统进行控制,到达一个理想的速度。
关键词:直流电机;单片机;PWM调速;L2981研究背景及意义1.1国内外研究现状电机的历史非常悠久,自从第二次工业革命-电气化时代以来,电机就开始广泛参与人类生活的各个方面。
按工作电源种类来进行划分,电机可以分为交流电机与直流电机两大种类。
电机的转速控制是电机控制的最终目标,对应于电机的控制,交流调速系统与直流调速系统是电机自动控制系统中的两个重要组成部分。
直流调速系统与交流调速系统相比,具有调速精度高、调速范围广的特点,并且其变流装置控制简单,并具有更好的启动与制动性能。
在调速性能要求比较高、大功率、大扭矩的场合,如轧钢厂,海上钻井平台,直流调速系统仍占据主导地位。
51单片机控制直流电机调速电路(含C语言源程序)
51单片机控制直流电机调速电路(含C语言源程序)在自动化控制中,许多场合需要单片机控制直流电机进行变速,这里我们介绍一种低成本的简单实现方法。
经实践证明,运行稳定可靠。
直流电机变速原理通过电机学知识,我们可知,直流电机的转速为:直流电机的变速主要有3种方式:1.控制电枢电压改变电机的转速。
2.控制电机的励磁电流改变电机的转速。
3.在电枢回路中,串联电阻改变电机的转速。
使用单片机控制直流电机的变速。
一般采用调节电枢电压的方式,如图1所示,单片机P36输出的为宽度可变的负脉冲,这样电机电枢上的电压也为宽度可变的脉冲电压,根据公式:U=aVCC其中:U-电机电枢电压。
a-脉冲的占空比,范围在0~1之间。
Vcc-直流电源电压,这里为12V。
电机的电枢电压即受单片机输出脉宽控制,实现了利用脉冲宽度调制技术(PWM)进行直流电机的变速。
直流电机变速的实例及编程图2为笔者设计的“电喷汽车喷油嘴清洗机”(一种保养汽车的设备)电路原理,根据需要,作业时可随时按下“压力+”、“压力-”键,控制直流电机M的转速,即改变了洗涤液输出的压力大小。
图3为PWM波的输出示意,为了叙述简单,我们把PWM波的周期定为1mS,占空比分10级可调(即每级级差为10%),这样定时器TO每01mS(即100μS)产生一次定时中断,每10次中断后进入下一个PWM波的周期。
图3中的脉冲占空比为60%,即输出脉冲的时间为600 μS,断开脉冲的时间为400 μS,这样电机的电枢电压为12*60%=72V。
该变速程序配合A189S51单片机,产生的PWM波载频为1KHz,电机运行时有一些声响,适用于一些对噪音不十分讲究的场合。
如将载频提升到10~15KHz以上时,则基本听不到噪音,由于A T89S51的运算速度有限,不可能实现这一目标。
这时我们可考虑使用高速8位单片机,如:C8051F020、A VR单片机等,它们不仅运行速度快,而且在片内集成了控制电机专用的PWM部件,用来对直流电机进行变速控制将会得心应手。
基于51单片机的PWM直流电机调速报告
课程名称:微机原理课程设计题目:基于51单片机的PWM直流电机调速直流电机脉冲宽度调制(Pulse Width Modulation-简称PWM)调速产生于20世纪70 年代中期,最早用于自动跟踪天文望远镜、自动记录仪表等的驱动,后来由于晶体管器件水平的提高及电路技术的发展, PWM 技术得到了高速发展,各式各样的脉宽调速控制器,脉宽调速模块也应运而生,许多单片机也都有了PWM输出功能。
而51单片机却没有PWM 输出功能,采用定时器配合软件的方法可以实现51单片机PWM的输出功能。
本设计就是由单片机STC89C52RC芯片,直流电机(搭建H桥电路驱动)和四位一体LED数码管为核心,辅以必要的电路,构成了一个基于51单片机PWM可调速的直流电机。
该可调直流电机具有良好的起动、制动性能,宜于在大范围内平滑调速,在许多需要调速或快速正反向的电力拖动领域中得到了广泛的应用。
该可调直流电机布置合理,全部器件分布在7*9cm洞洞板上,看起来小巧精简。
采用的是单片机内部定时器产生方波并且两个P口交换输出,可以方便灵活地调速度和方向。
该可调直流电机从0到最大速度1200转每分钟一共设置了60个档次的转速,采用红光四位数码管,可以直观地显示出来(显示的是每分钟的转速)。
有红光和绿光的两个二极管作为转速指示灯。
四个控制按键就可以控制电机的转速,方向与暂停。
每按一个键,该可调电机就会实现相对应的功能,操作非常简单。
关键词:直流电机,51单片机,C语言,数码管一、设计任务与要求 (4)1.1 设计任务 (4)1.2 设计要求 (4)二、方案总体设计 (5)2.1 方案一 (5)2.2 方案二 (5)2.3 系统采用方案 (5)三、硬件设计 (7)3.1 单片机最小系统 (7)3.2 数码管显示模块 (7)3.3 系统电源 (8)3.4驱动电路 (8)3.5 整体电路 (9)四、软件设计 (10)4.1 keil软件介绍 (10)4.2 系统程序流程 (10)五、仿真与实现 (13)5.1 proteus软件介绍 (13)5.2 仿真过程 (13)5.3 实物制作与调试 (15)5.4 使用说明 (17)六、总结 (18)6.1 设计总结 (18)6.2 经验总结 (18)七、参考文献 (21)一、设计任务与要求1.1 设计任务1).对更多小器件的了解2).巩固51单片机和C语言的知识,熟悉单片机和C语言的实际操作运用3).掌握仿真软件的运用和原理图的绘制4).加深焊接的技巧,提高焊接的能力5).熟悉调试方法和技巧,提高解决实际问题的能力6).熟悉设计报告的编写过程1.2 设计要求1).四个按键分别实现改变转向,加速,减速与暂停的功能2).H桥电路驱动直流电机3).一个红光和一个绿光二级管指示电机转向4).四位数码管显示转速二、方案总体设计设计一个基于51单片机的可调直流电机。
基于MC51单片机的直流电机PWM调速系统
基于MC51单片机的直流电机PWM调速系统一、本文概述随着现代电子技术的快速发展,直流电机调速系统在各种工业控制、自动化设备及智能家居等领域中得到了广泛应用。
MC51单片机作为一种功能强大、性价比高的微控制器,具有集成度高、稳定性好、控制灵活等优点,在电机控制领域具有广泛的应用前景。
本文旨在探讨基于MC51单片机的直流电机PWM(脉冲宽度调制)调速系统的设计与实现。
本文将首先介绍直流电机PWM调速的基本原理,包括PWM技术的特点及其在电机调速中的应用。
随后,将详细阐述基于MC51单片机的PWM调速系统的硬件设计,包括单片机选型、功率驱动电路、电机接口电路等关键部分的设计与搭建。
在软件设计方面,本文将介绍如何利用MC51单片机的定时器、I/O端口等资源,实现PWM信号的生成与控制,以及如何通过编程实现电机的精确调速。
本文还将对系统的调试与优化进行阐述,包括电路调试、软件调试、性能优化等方面的内容,以确保系统的稳定性和可靠性。
本文将总结基于MC51单片机的直流电机PWM调速系统的优点与应用前景,为相关领域的研究和实践提供参考和借鉴。
通过本文的研究与探讨,读者可以深入了解基于MC51单片机的直流电机PWM调速系统的设计与实现过程,掌握相关硬件与软件设计技术,为实际应用中的电机调速控制提供有效的解决方案。
二、系统总体设计在本设计中,我们将基于MC51单片机构建一个直流电机PWM(脉冲宽度调制)调速系统。
该系统的设计目标是实现直流电机的精确速度控制,以满足不同应用场景的需求。
总体设计包括硬件设计和软件设计两个部分。
硬件设计主要包括MC51单片机、直流电机、电机驱动电路、PWM 信号生成电路、电源电路以及必要的接口电路。
MC51单片机作为系统的核心控制器,负责生成PWM信号、接收用户输入以及处理相关控制逻辑。
直流电机是执行机构,通过电机驱动电路与MC51单片机相连,接收PWM信号以驱动电机转动。
PWM信号生成电路用于将MC51单片机输出的数字信号转换为模拟的PWM信号,以控制电机的转速。
51单片机的PWM直流电机调速系统分析
51单片机的PWM直流电机调速系统分析作者:杨雄来源:《数字技术与应用》2014年第04期摘要:现阶段直流电机是工业生产领域中的主要动力设备,在工业生产各环节都可以看到以直流电机为主要设备构成的动力系统,所以直流电机性能的优劣对工业生产效率与质量有着直接影响。
直流电机调速系统主要由PWM调速技术最为常用,其技术优势使直流电机具有调速精准度相对较高、控制范围相对较广、调速反映相对较快以及节省电力资源等,所以PWM 调速技术对直流电机发展有着重要作用。
本文就51单片机的直流电机进行分析,探讨PWM 调速技术对直流电机调速系统产生的影响。
关键词:51单片机 PWM调速技术直流电机调速系统中图分类号:TM33 文献标识码:A 文章编号:1007-9416(2014)04-0026-01近年来,直流电机被广泛应用于工业生产领域中的自动化设备动力系统,由于早起直流电机受到其线路复杂因素影响,使其在整体功能性与使用性都受到很大限制。
PWM调速技术的出现及应用使直流电机这一问题有效解决,不仅使直流电机整体功能性得到很大提升,同时也使直流电机在各生产领域中的应用范围不断增加。
随着电子技术与电子控制技术不断发展与创新,以单片机控制的PWM直流电机调速系统使直流电机整体功能更加优越,同时可以有效减少直流电机运行中对电力能源的消耗,因此基于PWM调速技术的直流电机广受工业生产领域亲睐。
1 PWM直流电机调速技术原理分析PWM调速技术主要通过应用半导体开关控制直流电压,半导体开关通过自身通断处理卡已改变电压状态,从而使直流电机调速系统可以实现调速处理工作。
当半导体开关在运行中处于导通状态时,可以将直流电压转变成高电平状态对直流电机提供电力;当半导体开关在运行中处于断开状态时,可以将直流电压转变成低电平状态对直流电机提供电力,而直流电压在高电平与低电平两者之间转换时会产生脉冲信号,而PWN调速技术就是通过半导体控制直流电压产生脉冲信号这一特性,使脉冲信号频率与宽度通过有效调整实现直流电机调速控制。
基于MC51单片机的直流电机PWM调速系统
基于MC51单片机的直流电机PWM调速系统一、概述随着现代工业技术的不断发展,直流电机因其良好的调速性能和控制精度,在工业自动化、机器人、航空航天等领域得到了广泛的应用。
PWM(脉宽调制)技术作为一种高效的电机调速方法,能够有效地控制直流电机的速度和方向。
本文旨在介绍一种基于MC51单片机的直流电机PWM调速系统,通过单片机实现对直流电机的精确控制。
该系统以MC51单片机为核心控制器,利用其强大的运算能力和丰富的外设接口,实现对直流电机的PWM调速控制。
系统通过采集电机的实时转速信息,结合用户设定的目标转速,利用PWM信号调整电机的输入电压,从而实现对电机转速的精确控制。
系统还具备过流、过压等保护功能,确保电机在安全可靠的环境下运行。
基于MC51单片机的直流电机PWM调速系统具有结构简单、控制精度高、响应速度快等优点,适用于各种需要精确控制直流电机转速的场合。
通过本系统的研究与应用,可以进一步提高工业自动化水平,推动相关产业的发展。
1. 直流电机PWM调速系统的研究背景与意义直流电动机作为最早出现的电动机类型,长期以来在调速控制领域占据着统治地位。
其良好的线性调速特性、简单的控制性能、高效的能量转换效率以及优异的动态特性,使得直流电动机在各种应用场景中得到了广泛的应用。
特别是在对调速性能要求较高的场合,如电力牵引、轧钢机、起重设备等,直流电动机更是发挥了不可替代的作用。
随着科学技术的不断进步和工业应用需求的日益复杂,传统的直流电机调速方式已经难以满足现代工业生产的需求。
传统的调速方法往往存在调速精度不高、调速范围有限、能耗较大等问题,严重制约了直流电动机在更多领域的应用。
为了解决这些问题,PWM(脉冲宽度调制)调速技术应运而生。
PWM技术利用微处理器的数字输出来对模拟电路进行控制,具有控制简单、灵活和动态响应好的优点。
通过将PWM技术应用于直流电机调速系统,可以实现对电机转速的精确控制,提高调速精度和调速范围,同时降低能耗,提高系统的稳定性和可靠性。
基于51单片机的直流电机PWM调速系统
2 软件 设计
2 . 1 主 程 序 部 分
本 序 的 功 能 是 通 过 埘 测 量 的 转 速 ,并 用 1 , 2 9 3 D 器 件 求控 制 电机 的转速 ,与电机 转动 的方 向。 然后 用 4
电压 。用 软件 模 拟 P 州 可 以何 延时 和 定时 两 种方 法 , 延 时 方法 ^用大 量 的 C P U , 所 以这 里采 月 j 定 时方 法 。 个 典型 的 直流 电机 控 制 电路 ,电路得 名 于 “ I 1 桥 驱 动 电路 ” 。4个 j极 管 组 成 I { 的 4条 垂 直 J 腿 ,而 电机 就 是 H中 的横 杠 。H桥 式 电机 驱动 电路 包括 4个 三极 管 和 一个 电机 ,要使 电机 运 转 ,必须 导 通对 角 线 卜的 …对 三 极 管 。根据 不 同 j极 管 对的 导通 情 , 电流 可 能 会从 左 至 右或 从 右至 左 流过 电机 ,从而 控 制 电机 的转 向 。本 系统 直接 用 L 2 9 3 D芯 片来 实现 。
一
位 数码 管显 乐 出来 当前 的转速 与转 动方 向 。 2 . 2 数 码 管 显 示 设 计
数 码 管 要 显 示 当 前各 种 状 态 , 前转 速 当 前转 动 方 向 。当 电机转 速 发生 改变 的时 候 ,数码 管 显示 内容
示 前转速 。 程序 设 计注 意 事项 : 1 ) 消 除 各个 数 码 管 之 间 的显 示 阴影 部 分 ; 2 ) 由
』 硬件 没 有锁 存器 ,需要 延 长数码 管 的点亮 时 间 , 从 而
使 数 码 管 显示 的更 加 清 晰 ;3 )合 理 运用 程 序 空 间 ,避 免 数 码 管显 示 清 晰 ;4 )动 态 扫 描可 以实 现 各 个数 码
基于51单片机的PWM直流电机调速系统
基于51单片机的PWM直流电机调速系统一、本文概述随着现代工业技术的飞速发展,直流电机调速系统在众多领域如工业自动化、智能家居、航空航天等得到了广泛应用。
在众多调速方案中,基于脉冲宽度调制(PWM)的调速方式以其高效、稳定、易于实现等优点脱颖而出。
本文旨在探讨基于51单片机的PWM直流电机调速系统的设计与实现,以期为相关领域的技术人员提供一种可靠且实用的电机调速方案。
本文将简要介绍PWM调速的基本原理及其在直流电机控制中的应用。
随后,将详细介绍基于51单片机的PWM直流电机调速系统的硬件设计,包括电机选型、驱动电路设计、单片机选型及外围电路设计等。
在软件设计部分,本文将阐述PWM信号的生成方法、电机转速的检测与控制算法的实现。
还将对系统的性能进行测试与分析,以验证其调速效果及稳定性。
本文将总结基于51单片机的PWM直流电机调速系统的优点与不足,并提出改进建议。
希望通过本文的阐述,能为相关领域的研究与应用提供有益参考。
二、51单片机基础知识51单片机,也被称为8051微控制器,是Intel公司在1980年代初推出的一种8位CISC(复杂指令集计算机)单片机。
尽管Intel公司已经停止生产这种芯片,但由于其架构的通用性和广泛的应用,许多其他公司如Atmel、STC等仍然在生产与8051兼容的单片机。
51单片机的核心部分包括一个8位的CPU,以及4KB的ROM、低128B 的RAM和高位的SFR(特殊功能寄存器)等。
它还包括两个16位的定时/计数器,四个8位的I/O端口,一个全双工的串行通信口,以及一个中断系统。
这些功能使得51单片机在多种嵌入式系统中得到了广泛的应用。
在PWM(脉冲宽度调制)直流电机调速系统中,51单片机的主要作用是生成PWM信号以控制电机的速度。
这通常是通过定时/计数器来实现的。
定时/计数器可以设置一定的时间间隔,然后在这个时间间隔内,CPU可以控制I/O端口产生高电平或低电平,从而形成PWM信号。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Pwm电机调速原理
对于电机的转速调整,我们是采用脉宽调制(PWM)办法,控制电机的时候,电源并非连续地向电机供电,而是在一个特定的频率下以方波脉冲的形式提供电能。
不同占空比的方波信号能对电机起到调速作用,这是因为电机实际上是一个大电感,它有阻碍输入电流和电压突变的能力,因此脉冲输入信号被平均分配到作用时间上,这样,改变在始能端PE2 和PD5 上输入方波的占空比就能改变加在电机两端的电压大小,从而改变了转速。
此电路中用微处理机来实现脉宽调制,通常的方法有两种:
(1)用软件方式来实现,即通过执行软件延时循环程序交替改变端口某个二进制位输出逻
辑状态来产生脉宽调制信号,设置不同的延时时间得到不同的占空比。
(2)硬件实验自动产生PWM 信号,不占用CPU 处理的时间。
这就要用到ATMEGA8515L 的在PWM 模式下的计数器1,具体内容可参考相关书籍。
51单片机PWM程序
产生两个PWM,要求两个PWM波形占空都为80/256,两个波形之间要错开,不能同时为高电平!高电平之间相差48/256,
PWM这个功能在PIC单片机上就有,但是如果你就要用51单片机的话,也是可以的,但是比较的麻烦.可以用定时器T0来控制频率,定时器T1来控制占空比:大致的的编程思路是这样的:T0定时器中断是让一个I0口输出高电平,在这个定时器T0的中断当中起动定时器T1,而这个T1是让IO口输出低电平,这样改变定时器T0的初值就可以改变频率,改变定时器T1的初值就可以改变占空比。
*程序思路说明:
*
*
*
*关于频率和占空比的确定,对于12M晶振,假定PWM输出频率为1KHZ,这样定时中断次数*
*设定为C=10,即0.01MS中断一次,则TH0=FF,TL0=F6;由于设定中断时间为0.01ms,这样*
*可以设定占空比可从1-100变化。
即0.01ms*100=1ms
*
******************************************************************************/
#include <REGX51.H>
#define uchar unsigned char
/*****************************************************************************
* TH0和TL0是计数器0的高8位和低8位计数器,计算办
法:TL0=(65536-C)%256; *
* TH0=(65536-C)/256,其中C为所要计数的次数即多长时间产生一次中断;TMOD是计数器*
* 工作模式选择,0X01表示选用模式1,它有16位计数器,最大计数脉冲为65536,最长时*
* 间为1ms*65536=65.536ms
*
******************************************************************************/
#define V_TH0 0XFF
#define V_TL0 0XF6
#define V_TMOD 0X01
void init_sys(void); /*系统初始化函数*/
void Delay5Ms(void);
unsigned char ZKB1,ZKB2;
void main (void)
{
init_sys();
ZKB1=40; /*占空比初始值设定*/
ZKB2=70; /*占空比初始值设定*/
while(1)
{
if (!P1_1) //如果按了+键,增加占空比
{
Delay5Ms();
if (!P1_1)
{
ZKB1++;
ZKB2=100-ZKB1;
}
}
if (!P1_2) //如果按了-键,减少占空比
{
Delay5Ms();
if (!P1_2)
{
ZKB1--;
ZKB2=100-ZKB1;
}
}
/*对占空比值限定范围*/
if (ZKB1>99) ZKB1=1;
if (ZKB1<1) ZKB1=99;
}
}
/******************************************************
*函数功能:对系统进行初始化,包括定时器初始化和变量初始化*/
void init_sys(void) /*系统初始化函数*/
{
/*定时器初始化*/
TMOD="V"_TMOD;
TH0=V_TH0;
TL0=V_TL0;
TR0=1;
ET0=1;
EA="1";
}
//延时
void Delay5Ms(void)
{
unsigned int TempCyc = 1000;
while(TempCyc--);
}
/*中断函数*/
void timer0(void) interrupt 1 using 2
{
static uchar click="0"; /*中断次数计数器变量*/
TH0=V_TH0; /*恢复定时器初始值*/ TL0=V_TL0;
++click;
if (click>=100) click="0";
if (click<=ZKB1) /*当小于占空比值时输出低电平,高于时是高电平,从而实现占空比的调整*/
P1_3=0;
else
P1_3=1;
if (click<=ZKB2)
P1_4=0;
else
P1_4=1;
} <
1.下面是AVR的程序,51产生PWM波麻烦,可以用AVR。
主要是设置存放的TOP值(OCR1A的值),然后你要多大的占空比再设置OCR1B的值,至于持续时间就更简单了,你要产生多久,就调用此函数就可以了哈
2.产生方波的频率计算公式(KHZ)
f=fclk(晶振)/{*N(1+OCRNA)}
N:代表分频因子
根据你要的产生方波的频率,就能算出OCRNA的值,就可以了!
/***************在OCR1B(PD4)上可测到100HZ的PWM波***********************/ /***************在OCR1A(PD5)上可测到50HZ的方波************************/
#include <iom16v.h>
#include <macros.h>
void PWM()
{
DDRD=0X30;//设置OC1B(PD4)和OC1A(PD5)为输出
TCCR1A=0X63;
TCCR1B=0X1B;
OCR1A=7;//得到10KHZ的PWM波
OCR1B=5;//得到2ms(1810/5)的高电平时间
}。