OpenEdv-开源电子网

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

PWM自适应调节功能问题

[复制链接]

1

主题

15

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2013-7-29
在线时间
0 小时
发表于 2013-7-29 20:24:51 | 显示全部楼层 |阅读模式
大虾们,我有一个自动伺服的小程序,一直得不到解决,请各位指教一下.有三个传感器,分别表示三个位置,转动时,我希望用这三个传感器来进行伺服,当从A点到B点或C点任意两个点之间的时间超过设定值时,自动增加PWM占空比,当时间小于设定值时自动减小PWM占空比如何实现?
下面是我的程序
#include"stc12c5a.h"
#include<intrins.h>
#include"io_init.c"
#include"time.c"
#include"rn_out_mode.c"
void delay(uint ms)
{
   uint i,j;
   for(i=ms;i>0;i--)
   for(j=1100;j>0;j--);
}
void  main()
{
    io_init();//初始化IO//
    delay(1000);
    Timer0Init();
    PWM_init(); //PWM初始化//
    while(1)
   {
      PWM0_set(RN_dat);
   }
}
/*time.c*/
void Timer0Init(void)//100微秒@12.000MHz
{
 AUXR |= 0x80;  //定时器时钟1T模式
 TMOD &= 0xF0;  //设置定时器模式
 TL0 = 0x50;   //设置定时初值
 TH0 = 0xFB;   //设置定时初值
 TF0 = 0;     //清除TF0标志
 TR0 = 1;     //定时器0开始计时
 ET0 = 1;       //开定时器0中断//
 EA = 1;        //开总中断//
}
void time0()interrupt 1 using 1
{
 uint i,j;
    TF0=0;
 i++;
 if(i>=100)//10mS计数一次//
    {i=0;RN_PWM++;}//自调整PWM条件计数//
}
/*io_init.c*/
#define uint unsigned int
#define uchar unsigned char
uchar RN_dat=178;//PWM占空比设定值为178//
uint RN_PWM=0;
/**********工作IO口定义**********/
sbit rn_qd_out=P4^2; //揉捏驱动口定义//
sbit cd_qd_out=P1^4; //捶打驱动口定义//
sbit xz_qd_out=P1^0; //行走驱动口定义//
sbit xz_hx_out=P1^2; //行走换向口定义//
sbit jb_qd_out=P2^0; //脚部驱动口定义//
sbit jb_hx_out=P3^6; //脚部换向口定义//
sbit hb_qd_out=P3^7; //背部驱动口定义//
sbit hb_hx_out=P4^0; //背部换向口定义//
sbit xz_jisu_in=P3^4;//行走计数口定义//
sbit kuan_jc_in=P1^7;//宽检测口定义//
sbit zong_jc_in=P1^6;//中检测口定义//
sbit zai_jc_in=P1^5; //窄检测口定义//
sbit shang_in=P4^3;  //上限位检测口定义//
sbit xia_in=P3^3;    //下限位检测口定义//
sbit qibeng_out=P1^1;//气泵输出口定义//
sbit gfang_out=P1^3; //功放输出//
/*********************************/
void io_init()
{
  P0M0=0xff0M1=0;//全部设为强推挽//
  P1M0=0x1f1M1=0;//低4位高1位为强推挽高3位为弱上拉0001 1111//
  P2M0=0x012M1=0;//P2.0为强推挽其余为弱上拉//
  P3M0=0xe63M1=0;//P3.4/P3.3/P3.0为弱上拉其余为强推挽// 
  P4M0=0x334M1=0;//P4.5/P4.4/P4.1/P4.0为强推挽.其余为弱上拉0011 0010//
  P0=01=0xe02=0;  //初始化IO//
  P3=0x194=0x08;    //初始化IO//
}
/*rn_out_mode.c*/
void PWM_init()
{
 AUXR1=0x00;
 CCON=0;
  CL=0;        //设置低位初值//
  CH=0;        //设置高位初值//
 CMOD=0x0C;   //设置PCA定时器为对时钟12分频0000 0000//
 CCAP1H=0;    // PWM0初始值为0//
 CCAP1L=0;    //设置PWM0初值与CCAP0H相同//
 CCAPM1=0x42; //PWM0设置PCA工作方式为PWM方式(0100 0010)//
 CR=1;        //启动PCA计数器//
}
/*************************************
如是感应器接收到信号,就把在定时器里的自增变量
RN_PWM清0,如果超过一定时间不清除,则RN_PWM就会
超过设定值40,一但超过就视为需要增加PWM占空比来
提高电机功率,以达到自动调整的目的。
*************************************/
void PWM0_set(uchar dat)
{
   CCF1=0;           //必须清除匹配标志//
   if(kuan_jc_in==0){j=0;RN_PWM=0;}//每次到感应器就清除RN_PWM//
   if(zai_jc_in==0){RN_PWM=0;}//每次到感应器就清除RN_PWM//
   if(RN_PWM>=40){j=1;}//当超过设定的时间40,增加PWM占空比//
   if(j==1){RN_dat++;}
   else RN_dat=178;
   CCAP1L=CCAP1H=dat;
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

27

主题

774

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1473
金钱
1473
注册时间
2013-4-12
在线时间
77 小时
发表于 2013-7-29 20:29:15 | 显示全部楼层
回复 支持 反对

使用道具 举报

1

主题

15

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2013-7-29
在线时间
0 小时
 楼主| 发表于 2013-7-29 20:36:51 | 显示全部楼层
回复【2楼】LTKKS:
---------------------------------
不懂什么是PID,求详解
回复 支持 反对

使用道具 举报

27

主题

774

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1473
金钱
1473
注册时间
2013-4-12
在线时间
77 小时
发表于 2013-7-29 22:14:22 | 显示全部楼层
PID是自动调节的一种算法

PID.doc

25.5 KB, 下载次数: 290

PID2.txt

3.13 KB, 下载次数: 95

简单是多么的快乐,而快乐就因你而简单!微芯动力LTKKS
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2013-7-29 22:35:58 | 显示全部楼层
回复【楼主位】疯子:
---------------------------------
这种可以仿真跟踪代码.最好查问题了.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

126

主题

820

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1683
金钱
1683
注册时间
2012-10-28
在线时间
62 小时
发表于 2013-7-30 11:29:05 | 显示全部楼层
多谢大家
回复 支持 反对

使用道具 举报

1

主题

15

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2013-7-29
在线时间
0 小时
 楼主| 发表于 2013-7-30 18:51:34 | 显示全部楼层
先谢谢
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-22 17:18

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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