#include <reg52.h>
#include "pwm.h"
/***************************************************
pwmFactor1、pwmFactor2 PWM占空比
使用PWM前通过初始化配置此2值 请勿直接操作变量
****************************************************/
unsigned char pwmFactor1 = 0;
unsigned char pwmFactor2 = 0;
bit pwmEn1 = 0;
bit pwmEn2 = 0;
/****************************************************
void pwmInit(unsigned char fact1,unsigned char fact2,unsigned char En)
pwm初始化
fact1 PWM1占空比 范围 0 ~ 16 物理意义:0/16 ~ 16/16
fact2 PWM2占空比 范围 0 ~ 16 物理意义:0/16 ~ 16/16
12MHz晶振下 PWM周期与定时时长计算:时长 = 256 - (周期/16) * 10^6
默认产生频率为450Hz的PWM波形
//fact1 右电机 9~16 正转、fact2 左电机 9~16 正转
*****************************************************/
void pwmInit(unsigned char fact1,unsigned char fact2,unsigned char En){
TR0 = 0;
TMOD &= 0xf0; //设置T0
TMOD |= 0x02;
IE |= 0x82;
TH0 =0x80;//12MHz晶振下 此初值可产生的pwm频率约为 450Hz
TL0 =0x80;
TR0 = 1;
if(En & _PWM_EN_1_){//En 最低位为1 表示允许pwm1
pwmFactor1 = fact1;
pwmEn1 = 1;
PWM_EN_1 = pwmEn1;
}else{
PWM_EN_1 = 0;
}
if(En & _PWM_EN_2_){//En 最高位为1 表示允许pwm2
pwmFactor2 = fact2;
pwmEn2 = 1;
PWM_EN_2 = pwmEn2;
}else{
PWM_EN_2 = 0;
}
}
/****************************************************
void pwmRun()
pwm 裁决脉冲输出 使用时配置为 由T1自动调用
pwmCount PWM计数器 禁止用户使用
*****************************************************/
void pwmRun(){
static unsigned char pwmCount = 0;
if(++pwmCount == 16){ pwmCount = 0;}
if(pwmEn1){
ACC = pwmCount + pwmFactor1;//PWM1输出
PWM_1_H = ACC & 0x10;
PWM_1_L = ~ PWM_1_H;
}else{
PWM_1_L= 0;
PWM_1_H= 0;
}
if(pwmEn2){
ACC = pwmCount + pwmFactor2; //PWM2输出
PWM_2_H = ACC & 0x10;
PWM_2_L = ~ PWM_2_H;
}else{
PWM_2_H = 0;
PWM_2_L = 0;
}
}
/****************************************************
void pwmStop()
pwm停止 ,清空pwm配置,下次使用pwm必须重新配置
****************************************************/
void pwmStop(){
//清空T1的配置
TMOD &= 0xf0;
TH0 = 0;
TL0 = 0;
TR0 = 0;
TF0 = 0;
//重设IE寄存器
IE &= 0xfd;
if(IE == 0x80) IE = 0;
//清空pwm占空比设置
pwmFactor1 = 0;
pwmFactor2 = 0;
//关断pwm
pwmEn1 = 0;
pwmEn2 = 0;
PWM_EN_1 = 0;
PWM_EN_2 = 0;
//停止pwm脉冲
PWM_1_H= 0;
PWM_1_L= 0;
PWM_2_H= 0;
PWM_2_L= 0;
}
sanzhong104204
- 粉丝: 118
- 资源: 31
最新资源
- 三菱FX3U 步进电机算FB块 FB块的使用可以使程序模块化简单化,进而提高了程序的稳定性和可移植性 此例中使用FB块,可以实现步进电机的算,已知距离求得脉冲数,已知速度可以求得频率 程序中包含
- 双向隔离DCDC仿真simulink
- 基于PSO粒子群PID控制器参数整定粒子群PID psopid 基于粒子群算法整定PID控制器,实现PID控制器参数的自整定(PSO-PID) matlab编写,源码注释详细具体如图,评价指标详
- 3567954014871001-进程的概念.zip
- 伺服电机、步进电机通用的S曲线及梯形加减速控制源码,十分经典,有中文注释及实现原理说明 系前期从某高手卖家处高价购得(技术源头实为国外专业公司) 本人已经在多个自动化控制系统中采用,为摊低成本故低
- DSP28335的Svpwm处理器在环仿真(matlab simulink)
- cruise模型,增程汽车仿真模型,恒功率控制 关于模型: 1.模型是个base模型,基于cruise simulink联合仿真,主要实现恒功率控制以及电制动优先的能量回收策略,主要供学习使用
- Polarion表结构
- ssm中小型企业财务管理系统+jsp.zip
- ssm珠宝首饰交易平台开发+jsp.zip
- ssm助学贷款+jsp.zip
- ssm职工健康每日申报系统设计+vue.zip
- ssm在线作业管理系统的设计与实现+vue.zip
- ssm中国咖啡文化宣传网站的设计与实现+vue.zip
- FIFO verilogIP 包括深度为1的fifo 包括普通同步FIFO和异步FIFO,均为first word fall through模式,同步fifo三种写法,异步fifo三种写法,可参
- ssm在线医疗服务系统+jsp.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈