如何利用单片机输出WM波Word下载.docx
- 文档编号:18929488
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:16
- 大小:1.03MB
如何利用单片机输出WM波Word下载.docx
《如何利用单片机输出WM波Word下载.docx》由会员分享,可在线阅读,更多相关《如何利用单片机输出WM波Word下载.docx(16页珍藏版)》请在冰豆网上搜索。
/*******************************************************************/
/*程序名:
单片机输出固定频率的PWh波*/
/*晶振:
11.00592MHzCPU型号:
STC89C52*/
/*功能:
P2A0口输出周期为1ms(1000HZ),占空比为%80的PWM&
*/
/*****************************************************************/
#include<
reg52.h>
#defineuintunsignedint
#defineucharunsignedchar
sbitPWM2=P2M;
〃接IN2控制反转uchartime;
voidmain()
{
TMOD=0x01;
〃定时器0工作方式1
TH0=0xff;
//(65536-10)/256;
〃赋初值定时
TL0=0xf7;
//(65536-10)%256;
//0.01ms
EA=1;
//开总中断
ET0=1;
//开定时器0中断
TR0=1;
//启动定时器0
while
(1)
}
voiddelay(uintz)
uintx,y;
for(x=z;
x>
0;
x__)
for(y=500;
y>
y--);
voidtim0()interrupt1
TR0=0;
//赋初值时,关闭定时器
//赋初值定时
//打开定时器
time++;
if(time>
=100)time=0;
//1khz
if(time<
=20)PWM仁0;
//点空比%80
elsePWM1=1;
PWM2=0;
程序说明:
1、关于频率的确定:
对于11.0592M晶振,PWM输出频率为1KHZ,此时设定时器0.01ms中断一次,时中断次数100次即为1KHZ(0.01ms*100=1ms,即为1000HZ)此时,定时器计数器赋初值为TH0=FF,TL0=F7。
2、关于占空比的确定:
此时我们将来time的值从0—100之间进行改变,就可以将占空比从%—%100之间进行变化,上面程序中time<
=20时pwm仁0eisePWM仁1意思就是%20的时间输出低电平,%80的时间输出高电平,即占空比为%80>
如需得到其它占空比,女口%6Q只需将time的值改为40即可。
(程序为if(time<
=40)PWM1=0;
elsePWM仁1)
当然编写程序时也可以定义一个标志位如flag,根据flag的状态决定输出
高平还是低电平,假设定义flag=1的时候输出高电平,用一个变量去记录定时器中断的次数,每次中断就让记录中断次数的变量+1,在中断程序里面判断这个变量的值是否到了n,如果到了说明高电平的时间够了,那么就改变flag为0,
输出低电平,同时记录中断变量的值清零,每次中断的时候依旧+1,根据flag=0
的情况跳去判断记录变量的值是否到了n'
如果到了,说明PWM的低电平时间
够了,那么就改flag=1,输出改高电平,同时记录次数变量清零,重新开始,如此循环便可得到你想要的PWh波形,这种方法我们这里不在举例,请自己去试着书写。
3、程序2,使用单片机I/O口输出PWM&
,并能通过按键控制正反转
在程序中我们通常需要控制电机的正反转,如通过一个按键控制正反转,此时我们也可以设置一个标志位如flag。
在主程序中当按键每次被按下时,flag相应取反。
然后在子程序中当flag为1时,进行正转程序,当flag为0时执行反转程序。
下面的程序功能为单片机I/O口P2A0、P2A1输出1000HZ,占空比为%5Q并能过P3A7按键控制正电机的正反转。
pwm直流电机调速*/
直流电机的PWh波控制,可以通过按键控制正反转*/
sbitPWM1=P2A0;
//PWM通道1,反转脉冲sbitPWM2=P2A1;
//PWM通道2,正转脉冲
sbitkey_turn=P3A7;
//电机换向
voiddelayxms(uintz);
voidMotor_turn(void);
voidtimer0_init(void);
voidmain(void)
timer0_init();
Motor_turn();
voiddelayxms(uintz)//延时xms程序
for(y=z;
for(y=110;
}voidMotor_turn(void)
if(key_turn==0)
delayxms
(2);
//此处时间不能太长,否者会的中
断产生冲突
if(key_turn==O)
flag=~flag;
}while(!
key_turn);
voidtimerO_init(void){
//定时器0工作于方式1
TH0=(65536-10)/256;
TL0=(65536-10)%256;
定日寸0断处^理******************/
voidtimer0_int(void)interrupt1{
//设置定时器初值期间,关闭定时器
if(flag==1)//电机正转
PWM仁0;
time++;
count)
PWM2=1;
else
=100)
time=0;
else//电机反转
PWM仁1;
4、程序4、使单片机输出PWM并能控制正反转和实现调速
为了使大家彻底掌握此方面,下面再给出一个复杂一点的程序,实现的功能
为通过一个按键控制正反转并通过另外两个按键使之可以在0到20级之间调速
的程序。
PWMft流电机调速*/
/*直流电机的PWM波控制,可以通过按键控制正反转并在0到20级之间调速*/
uchartime,count=50,flag=1;
〃低电平的占空比
//PWM通道1,反转脉冲
sbitPWM2=P2A1;
sbitkey_add=P3A5;
〃电机加速
sbitkey_dec=P3A6;
〃电机减速
〃电机换向
voidMotor_turn();
voidMotor_add();
voidMotor_dec();
voidtimer0_init();
/*********^主函^数********************/
voidmain()
while
(1)
Motor_add();
Motor_dec();
/****************^延时处^理**********************/
x--)
/************E电机正反向控帝**************/
voidMotor_turn()
if(key_turn==0)
delayxms
(2);
//此处时间不能太长,否者会的中断产生冲突if(key_turn==0)
while(!
voidMotor_add()〃电机加速
if(key_add==0)
//此处时间不能太长,否者会的中断产生冲突if(key_add==0)
count+=5;
if(count>
count=0;
key_add);
voidMotor_dec()〃电机加减速
if(key_dec==0)
//此处时间不能太长,否者会的中断产生冲突if(key_dec==0)
count-=5;
key_dec);
/***********定时器0初始化***********/
voidtimer0_init()
//定时器0工作于方式1TH0=(65536-10)/256;
/**************定日寸Q^中断处^理******************/
voidtimer0_int()interrupt1
电机正转
5、利用单片机输出pwM简单控制小车直行
相信通过上面的讲解,大家已经能够很好的撑握如何利用51单片机产生PWM
波下面给出一个程序,通过单片机两个I/O口输出PwMfe,让小车直行。
#defineucharunsignedcharsbitPWM仁P2P;
〃接IN1控制正转
sbitPWM2=P2A1;
//接IN2控制反转
sbitPWM3=P2A2;
〃接IN3控制正转
sbitPWM4=P2A3;
〃接IN4控制反转
sbitPWM5=P2A4;
sbitPWM6=P2A5;
sbitPWM7=P2A6;
sbitPWM8=P2A7;
uchartime;
〃赋初值时,关闭定时器
PWM4=0;
=75)PWM仁1;
elsePWM1=0;
=80)PWM3=1;
elsePWM3=0;
PWM6=0;
PWM8=0;
=50)PWM5=1;
elsePWM5=0;
=50)PWM7=1;
elsePWM7=0;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 如何 利用 单片机 输出 WM