找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5529|回复: 6
收起左侧

STM32+L298N+PID驱动4路PWM波的程序源码

[复制链接]
ID:372082 发表于 2018-7-16 14:28 | 显示全部楼层 |阅读模式
//PB4 LEFT PC4
//PB5 RIGHT PC5
//PB0 FORTH PC0
//PB1 BACK PC1

单片机源程序如下:
  1. #include "sys.h"
  2. #include "l298n.h"
  3. #include "usart.h"


  4. void l298n_TIM3_PWM_init(u16 arr,u16 psc)
  5.         //使用TIM3输出四路pwm波
  6. {
  7.         GPIO_InitTypeDef GPIO_InitStructure;//定义结构体
  8.         TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;//定义初始化结构体
  9.         TIM_OCInitTypeDef  TIM_OCInitStructure;//定义结构体
  10.         
  11.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //使能定时器3时钟        
  12.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC  | RCC_APB2Periph_AFIO, ENABLE);//使能GPIO外设和AFIO复用功能模块时钟
  13.         GPIO_PinRemapConfig(GPIO_FullRemap_TIM3, ENABLE); //选择Timer3完全重映像  
  14.         GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//禁用JTAG

  15.         

  16.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9; //使用TIM3下的TIM_CH1/TIM_CH2/TIM_CH3/TIM_CH4
  17.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //复用推挽功能
  18.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  19.         
  20.         GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化引脚
  21.         
  22.         
  23.         //初始化TIM3
  24.         TIM_TimeBaseStructure.TIM_Period = arr; //自动重装载寄存器的值
  25.         TIM_TimeBaseStructure.TIM_Prescaler =psc; //TIMX预分频的值
  26.         TIM_TimeBaseStructure.TIM_ClockDivision = 0; //时钟分割
  27.         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //向上计数
  28.         
  29.         TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据以上功能对定时器进行初始化
  30.         
  31.         
  32.         TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;//选择定时器模式,TIM脉冲宽度调制模式2
  33.         TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;//比较输出使能
  34.         TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;//输出比较极性低
  35.         
  36.         
  37.         TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);
  38.         TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);
  39.         TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);
  40.         TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable);
  41.         //使能预装载寄存器
  42.         
  43.         TIM_OC1Init(TIM3, &TIM_OCInitStructure);
  44.         TIM_OC2Init(TIM3, &TIM_OCInitStructure);
  45.         TIM_OC3Init(TIM3, &TIM_OCInitStructure);
  46.         TIM_OC4Init(TIM3, &TIM_OCInitStructure);
  47.         //根据结构体信息进行初始化
  48.         
  49.         TIM_Cmd(TIM3, ENABLE);  //使能定时器TIM3
  50. }
复制代码
  1. #include "stdio.h"
  2. #include "sys.h"
  3. #include "motor_pid.h"

  4. #define PITCH 0
  5. #define YAW 0
  6. #define ROW 0

  7. //定义结构体变量
  8. PIDTypeDef mypid;

  9. void PID_init()//结构体初始化
  10. {
  11.         //实际值
  12.         mypid.ActualPitch = 0;
  13.         mypid.ActualRow = 0;
  14.         mypid.ActualYaw = 0;
  15.         
  16.         //设定值
  17.         mypid.SetPitch = 0;
  18.         mypid.SetRow = 0;
  19.         mypid.SetYaw = 0;
  20.         
  21.         //偏差
  22.         mypid.err_pitch = 0;
  23.         mypid.err_row = 0;
  24.         mypid.err_yaw = 0;
  25.         
  26.         //最近偏差
  27.         mypid.err_last_pitch = 0;
  28.         mypid.err_last_row = 0;
  29.         mypid.err_last_yaw = 0;
  30.         
  31.         //历史偏差
  32.         mypid.integral_pitch = 0;
  33.         mypid.integral_row = 0;
  34.         mypid.integral_yaw = 0;
  35.         
  36.         //比例 微分 积分
  37.         mypid.Kp_left = 0;
  38.         mypid.Ki_left = 0;
  39.         mypid.Kd_left = 0;
  40.         
  41.         mypid.Kp_right = 0;
  42.         mypid.Ki_right = 0;
  43.         mypid.Kd_right = 0;
  44.         
  45.         mypid.Kp_forth = 0;
  46.         mypid.Ki_forth = 0;
  47.         mypid.Kd_forth = 0;
  48.         
  49.         mypid.Kp_back;
  50. }

  51. void PID_6050(int pitch,int yaw,int row)
  52.         //pitch 俯仰角
  53.         //yaw 偏航角
  54.         //row 翻滚角
  55. {
  56.         mypid.SetPitch = PITCH;
  57.         mypid.SetRow = ROW;
  58.         mypid.SetYaw = YAW;
  59.         
  60.         mypid.ActualPitch = pitch;
  61.         mypid.ActualRow = row;
  62.         mypid.ActualYaw = yaw;
  63.         
  64.         mypid.err_pitch = mypid.SetPitch - mypid.ActualPitch;
  65.         mypid.err_row = mypid.SetRow - mypid.ActualRow;
  66.         mypid.err_yaw = mypid.SetYaw - mypid.ActualYaw;
  67.         
  68.         mypid.integral_pitch += mypid.integral_pitch;
  69.         mypid.integral_row += mypid.integral_row;
  70.         mypid.integral_yaw += mypid.integral_yaw;
  71.         
  72.         mypid.inLeft =
  73.         mypid.inRight =
  74.         mypid.inForth =
  75.         mypid.inBack =
  76.         
  77.         pi
  78. }
复制代码


所有资料51hei提供下载:
比赛程序.rar (295.06 KB, 下载次数: 179)
回复

使用道具 举报

ID:277190 发表于 2018-8-20 21:43 | 显示全部楼层
缺少文件,不能编译

错误

错误
回复

使用道具 举报

ID:277190 发表于 2018-8-20 21:45 | 显示全部楼层
缺少文件,"no source": Error:  #5: cannot open source input file "..\HARDWARE\SELECT\select.c": No such file or directory
回复

使用道具 举报

ID:252331 发表于 2019-4-5 12:11 来自手机 | 显示全部楼层
厉害。
回复

使用道具 举报

ID:421308 发表于 2019-7-23 09:41 | 显示全部楼层
编译不了
回复

使用道具 举报

ID:496604 发表于 2019-7-24 22:17 | 显示全部楼层
参考一下就行了,不支持拿来主义
回复

使用道具 举报

ID:587843 发表于 2019-8-2 16:18 | 显示全部楼层
堂堂 发表于 2019-7-24 22:17
参考一下就行了,不支持拿来主义

参考也没法啊
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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