OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6297|回复: 2

直流电机pwn

[复制链接]

9

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2013-11-21
在线时间
0 小时
发表于 2013-12-6 12:02:43 | 显示全部楼层 |阅读模式
/****************************************************************************** 
*                                                                            * 
*关于频率和占空比的确定,对于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_4) //如果按了+键,增加占空比 
      { 
       Delay5Ms(); 
       if (!P1_4) 
         { 
         ZKB1++; 
         ZKB2=100-ZKB1; 
         } 
      } 

       if (!P1_5) //如果按了-键,减少占空比 
      { 
       Delay5Ms(); 
       if (!P1_5) 
         { 
         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_0=0; 
else 
  P1_0=1; 

if (click<=ZKB2)                        
  P1_1=0; 
else 
  P1_1=1; 

} 各位好友 ,你程序有点长,麻烦帮我看下哪些红色的程序部分,求解释,不理解,谢谢
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

153

帖子

0

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2013-4-4
在线时间
0 小时
发表于 2013-12-6 12:22:45 | 显示全部楼层
人家注释不是很清楚吗
第一个是max min的效果 限定输入范围
第二个是反转电平
~~~~ 欢迎讨论,拒绝谩骂 ~~~~
回复 支持 反对

使用道具 举报

2

主题

17

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2013-9-7
在线时间
0 小时
发表于 2013-12-27 14:05:56 | 显示全部楼层
看不懂,慢慢学!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 22:47

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表