首页 > 其他分享 >PWM疑惑

PWM疑惑

时间:2023-09-03 15:33:41浏览次数:32  
标签:疑惑 P2 cnt right val void PWM left

 

#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的占空比就应该没有改变呀!!,那么小车一开始出现的加速是怎么回事???


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

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

标签:疑惑,P2,cnt,right,val,void,PWM,left
From: https://blog.51cto.com/u_16039976/7340672

相关文章

  • 【WCH蓝牙系列芯片】-基于CH582开发板—基础外设输出PWM波形讲解
    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------在WCH官方提供的CH583的EVT资源包中,我们可以找到PWMX的例程,这是一个8位的PWM输出,占空比和周期可调的......
  • 今天练习JDBC,设置好连接语句,创建好sql,更新都弄好了,一直转圈圈,不出结果。真的是见了鬼
    2023-09-01今天练习JDBC,设置好连接语句,创建好sql,更新都弄好了,一直转圈圈,不出结果。真的是见了鬼了,之前还好好的。疑惑太大,一行一行的看,最后我发现一个问题建立连接时,用户名起的变量名必须为username,这样才能出来,不知道为啥,大冤种。 下面是正确的 packagecom.hh;import......
  • AP51656 PWM和线性调光 LED车灯电源驱动IC 兼容替代PT4115 PT4205
    产品描述AP51656是一款连续电感电流导通模式的降压恒流源用于驱动一颗或多颗串联LED输入电压范围从5V到60V,输出电流可达1.5A。根据不同的输入电压和外部器件,可以驱动高达数十瓦的LED。内置功率开关,采用高端电流采样设置LED平均电流,通过DIM引脚可以接受模拟调光和很宽范围......
  • 对于 [arr[left], arr[right]] = [arr[right--], arr[left++]]; 的疑惑
    如题,当时博主正在写leetcode,要求原地改变数组故声明双指针left和right,对数组进行交换,即 [arr[left],arr[right]]=[arr[right--],arr[left++]]; 但是未得到预期的结果,随后进行了测试:1letarr=[1,2,3,4,5];2letleft=1,right=3;3[arr[left],arr[righ......
  • Linux学习疑惑总结
    重定向问题Linuxshell中2>&1的含义首先了解下1和2在Linux中代表什么,先整理一份在Linux系统中012是一个文件描述符:名称代码操作符Java中表示Linux下文件描述符(Debian为例)标准输入(stdin)0<或<<System.in/dev/stdin->/proc/self/fd/0->/dev/pts/0......
  • [MyArch]我的Archlinux与bspwm的重生之途
    0x00前言碎语2023.8.19好久不见。这些日子一直在和bspwm和archlinux打交道。自从上次NepCTF的前几天和CuB3y0nd小师傅的bspwm配置打交道之后我一发不可收拾。中间为了恢复数据重装系统进kde,结果空手而归。收获是连续两次重装archlinux,我对这个系统的认识更加深刻了。0x01参......
  • 定时器之PWM
      voidPWM_Init(void){RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);GPIO_PinRemapConfig(GPIO_PartialRemap1_TIM2,......
  • ESP32C3 LEDC_PWM
    LEDC_PWM   LED控制器(LEDC)主要用于控制LED,也可产生PWM信号用于其他设备的控制,ESP32C3有6路通道。设置LEDC通道分三步完成。与ESP32不同,ESP32-C3仅支持设置通道为低速模式。定时器配置指定PWM信号的频率和占空比分辨率。通道配置绑定定时器和输出PWM信......
  • TMS320F28335 ePWM中断函数里不能关时钟?实际上是关时钟之后不能清中断
    最近发现一个很奇怪的现象,如标题,为此写了一个简单的程序来验证这个问题,下面是部分代码:1voidInitEPwm2Gpio(void)2{3EALLOW;4GpioCtrlRegs.GPAPUD.bit.GPIO2=0;//使能上拉5GpioCtrlRegs.GPAMUX1.bit.GPIO2=1;//将GPIO2配置为EPWM2A......
  • FP6276兼容G5177C,高效5V2A同步PWM升压DC转换器
    FP6276是一款电流模式同步升压型DC-DC转换器,pwm/psm控制。它的pwm电路,内置55mΩ高侧开关和55mΩ低侧开关使该调节器具备高节能。内部补偿网络也最大限度地减少多达6个外部元件数量。误差放大器的非反相输入端连接到一个0.6v精度参考电压和内部软启动功能可降低浪涌电流。FP6276是......