初级会员

- 积分
- 107
- 金钱
- 107
- 注册时间
- 2019-3-22
- 在线时间
- 30 小时
|
1金钱
写了一个PWM控制L298N的程序 能正转但是不能反转 而且用了LCDshowstring这个函数电机直接无法转 求助
int main(void)
{
u8 a[400];
int i=0;
u8 key;
Motor_12_Config();
u16 pwmval=0;
HAL_Init(); //3õê¼»ˉHAL¿a
Stm32_Clock_Init(360,25,2,8); //éèÖÃê±Öó,180Mhz
delay_init(180); //3õê¼»ˉÑóê±oˉêy
uart_init(115200); //3õê¼»ˉUSART
LED_Init(); //3õê¼»ˉLED
LCD_Init();
KEY_Init(); //3õê¼»ˉ°′¼ü
TIM3_PWM_Init(500-1,90-1); //90M/90=1MμļÆêyÆμÂ꣬×Ô¶ˉÖØ×°ÔØÎa500£¬ÄÇÃ′PWMÆμÂêÎa1M/500=2kHZ
while(1)
{
key=KEY_Scan(1);
while(1)
{
if(!KEY2)
{
Motor_1_POSITIVE_Run();
Motor_2_POSITIVE_Run();
pwmval++;
a[i]=i+1;
i++;
}
if(!KEY0)
{
Motor_1_INVERSE_Run();
Motor_2_INVERSE_Run();
pwmval--;
a[i]=i+1;
i--;
}
if (!KEY1)
{
Motor_1_STOP();
Motor_2_STOP();
}
if(pwmval>400)
{
Motor_1_STOP();
Motor_2_STOP();
}a[i]=400;
if(pwmval==0)
{
Motor_1_STOP();
Motor_2_STOP();
}a[0]=0;
TIM_SetTIM3Compare4(pwmval); //DT¸Ä±è½ÏÖ죬DT¸ÄÕ¼¿Õ±è
// LCD_ShowString(10,40,240,32,32,&a[i]);
}
}
void Motor_12_Config(void)
{
// GPIO_InitTypeDef GPIO_InitStructure; //??GPIO_InitTypeDef???
// RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE); //??????
//
// GPIO_InitStructure.GPIO.Pin = GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5; //??IN??
// GPIO_InitStructure.GPIO.Mode = GPIO_Mode_Out_PP; //??????
// GPIO_InitStructure.GPIO.Speed = GPIO_Speed_50MHz; //??????
// GPIO_Init(GPIOA, &GPIO_InitStructure); //???GPIOA?????,??
//
// GPIO_ResetBits(GPIOA,GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5); //??????
GPIO_InitTypeDef GPIO_Initure;
__HAL_RCC_GPIOA_CLK_ENABLE(); //ê1ÄüGPIOAê±Öó
// __HAL_RCC_USART1_CLK_ENABLE(); //ê1ÄüUSART1ê±Öó
GPIO_Initure.Pin=GPIO_PIN_2; //PA2
GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP; //êä3ö
GPIO_Initure.Pull=GPIO_PULLDOWN; //ÏÂà-
GPIO_Initure.Speed=GPIO_SPEED_HIGH; //¸ßËù
HAL_GPIO_Init(GPIOA,&GPIO_Initure);
GPIO_Initure.Pin=GPIO_PIN_3; //PA3
GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP; //êä3ö
GPIO_Initure.Pull=GPIO_PULLDOWN; //ÏÂà-
GPIO_Initure.Speed=GPIO_SPEED_HIGH; //¸ßËù
HAL_GPIO_Init(GPIOA,&GPIO_Initure);
GPIO_Initure.Pin=GPIO_PIN_4; //PA4
GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP; //êä3ö
GPIO_Initure.Pull=GPIO_PULLDOWN; //ÏÂà-
GPIO_Initure.Speed=GPIO_SPEED_HIGH; //¸ßËù
HAL_GPIO_Init(GPIOA,&GPIO_Initure);
GPIO_Initure.Pin=GPIO_PIN_5; //PA5
GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP; //êä3ö
GPIO_Initure.Pull=GPIO_PULLDOWN; //ÏÂà-
GPIO_Initure.Speed=GPIO_SPEED_HIGH; //¸ßËù
HAL_GPIO_Init(GPIOA,&GPIO_Initure);
}
void Motor_1_STOP(void)
{
IN1 = 0;
IN2 = 0;
}
void Motor_1_INVERSE_Run(void)
{
IN1 = 0;
IN2 = 1;
}
void Motor_1_POSITIVE_Run(void)
{
IN1 = 1;
IN2 = 0;
}
void Motor_2_STOP(void)
{
IN3 = 0;
IN4 = 0;
}
void Motor_2_INVERSE_Run(void)
{
IN3 = 0;
IN4 = 1;
}
void Motor_2_POSITIVE_Run(void)
{
IN3 = 1;
IN4 = 0;
}
|
最佳答案
查看完整内容[请看2#楼]
1,仿真,看代码执行过程。
2,用万用表测量对应IO口的电平状态,是否符合设计要求。
根据这两个点,来分析问题。
|