89c51单片机c语言编写的pwm程序.docx

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
89c51 单片机 C 语言编写的 PWM程序 PWM, 单片机 , C语言 , 程序 , 编写 分享到: 新浪微博 QQ空间 开心网 人人网 说明:本程序使用 STC89C52RC单片机, 22.1184MHz 晶振,要使用本程序需要自己修改, 我是用来控制直流电机的,外接了 L298 驱动电路,有问题或意见请回复,谢谢 ^_^ #include "reg52.H" #include "MyType.h" //=============L298 端口定义 =============== sbit ENA = P3^6; // 左轮驱动使能 sbit IN1 = P0^3; // 左轮黑线( - ) sbit IN2 = P0^4; // 左轮红线( +) sbit IN3 = P0^5; // 右轮红线( - ) sbit IN4 = P0^6; // 右轮黑线( +) sbit ENB = P3^7; // 右轮驱动使能 //=============PWM================ #define PWM_COUST 100 //PWM 细分等份 uchar MOTO_speed1; // 左边电机转速 uchar MOTO_speed2; // 右边电机转速 uchar PWM_abs1; // 左边电机取绝对值后占空比 uchar PWM_abs2; // 左边电机取绝对值后占空比 uchar PWM_var1=20; // 左边电机直走速度 (不同的电机,此参数不同) uchar PWM_var2=20; // 右边电机直走速度 uchar PWMAnd = 0; //PWM 自增变量 /****************************************************************** 名称:  motor(char speed1,char speed2)  ; 功能:同时调节电机的转速 参数: speed1 :电机  1 的  PWM值; speed2 :电机  2 的  PWM值 speed>0.  正转;  speed<0.  反转(  -100~100 ) 调用:  extern int abs(int val);  取绝对值 返回: /******************************************************************/ void motor(char speed1,char speed2) { //============== 左边电机 ============= if (speed1>0) { IN1 =0;IN2 =1;// 正转 } else if (speed1<0) { IN1 =1;IN2 =0;// 反转 } //============== 右边电机 ============= if (speed2>0) { IN3 =1;IN4 =0;// 正转 } else if (speed2<0) { IN3 =0;IN4 =1;// 反转 } } /****************************************************************** 名称: motor_PWM(); 功能: PWM占空比输出 参数:无 调用:无 返回:无 /******************************************************************/ void motor_PWM () { uchar PWM_abs1; uchar PWM_abs2; PWM_abs1=MOTO_speed1; PWM_abs2=MOTO_speed2; if (PWM_abs1>PWMAnd) ENA=1; // 左边电机占空比输出 else ENA=0; if (PWM_abs2>PWMAnd) ENB=1; // 右边电机占空比输出 else ENB=0; if (PWMAnd>=PWM_COUST) PWMAnd=0; //PWM计数清零 else PWMAnd+=1; } /****************************************************************** 名称: void TIME_Init () ; 功能:定时器初始化 指令: 调用:无 返回:无 /******************************************************************/ void TIME_Init () { //========= 定时器 T2 初始化 PWM====

您可能关注的文档

文档评论(0)

明若晓溪 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档