0
点赞
收藏
分享

微信扫一扫

PWM疑惑

小禹说财 2023-09-03 阅读 46

 

#include "STC12C5A60S2.H"
//run
sbit left_go=P2^1;
sbit left_xia=P2^2;
sbit right_go=P2^4;
sbit right_xia=P2^3;
sbit Left_motor_pwm=P2^0;     //左电机控速PWMA
sbit Right_motor_pwm=P2^5;     //右电机控速PWMB

unsigned char speed_val_left=0 ; //左电机占空比push_val_left/20  
unsigned char speed_val_right=0; //
unsigned char pwm_val_left=0 ;
unsigned char pwm_val_right=0 ;

/**************************************
//左正传
left_shang2=1;
left_xia1=0;
//左反
left_shang2=0;
left_xia1=1;
//左停止
left_shang2=0;
left_xia1=0;
//右正传
right_shang1=0;
right_xia2=1;
//右反
left_shang2=0;
left_xia1=1;
//右停止
left_shang2=0
left_xia1=0;
**************************************/
void Timer0Init(void)  ;
void run();
void Delay10ms()  //@11.0592MHz
{
	unsigned char i, j;
	i = 108;
	j = 144;
	do
	{
  while (--j);
	} while (--i);
}
void main ()
{
  P2=0XC0;    //关电机  
  speed_val_right=10;
	Timer0Init()	;
	Delay10ms()	;
  while(1)
  {
   run();
   }
}
void Timer0Init(void)  //1000微秒@11.0592MHz
{
	//AUXR |= 0x80;  //定时器时钟1T模式
	TMOD =0x01;  //定时器工作方式1
    TH0=0XFC;   //1ms定时,装入初值
    TL0=0X66;
    TR0=1;  //启动T0工作
    ET0=1;  //允许T0中断
	EA =1;     //开总中断
}
void tm0_isr() interrupt 1
{
	static unsigned char cnt=0;
      TH0=0XFC;   //1ms定时,装入初值
    TL0=0X66;
	cnt++;
	//pwm_val_left++;
	if(cnt<=speed_val_right)
	{
  Right_motor_pwm=1;
	}
	else
	{
  Right_motor_pwm=0;
	}
	if(cnt>=20)
	{
  cnt=0;
	}
  if(cnt<=speed_val_left)
	{
Left_motor_pwm=1;
	}
	else
	{
	Left_motor_pwm=0;
	}
	if(cnt>=20)
	{
  cnt=0;
	}
}
void run()
{
	left_xia=0;
	left_go=1;
  
  right_go=1;
  right_xia=0;
speed_val_left=10;
}

我的目的是想根据不同的值来实现不同的速度调节,但是没搞出来!!!

上述代码的疑问是:例如93行,不应该有关闭PWM的时刻吗?此时不应该电机不转吗?但是为什么一直在转,根本没有电机停止的时候?而且现象是速度++到一定值,以这个速度转?2分钟都不会从头开始是为什么呢?



PWM疑惑_#include

这个速度为什么会变大呢?我不理解的地方:

看PWM图还是没有搞懂为什么会调速!!!因为不同的占空比有不同的速度,这里cnt(PWM)的值在++,但是本质上图还是上面的图,并没有说cnt++到30或者++到15,都是++到20的,这样《20的占空比就应该没有改变呀!!,那么小车一开始出现的加速是怎么回事???


————————————————————————————向给位大佬请教

————————————————————————————————————一个小菜狗

举报

相关推荐

0 条评论