找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 6479|回復(fù): 6
打印 上一主題 下一主題
收起左側(cè)

STM32+L298N+PID驅(qū)動(dòng)4路PWM波的程序源碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
//PB4 LEFT PC4
//PB5 RIGHT PC5
//PB0 FORTH PC0
//PB1 BACK PC1

單片機(jī)源程序如下:
  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;//定義結(jié)構(gòu)體
  8.         TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;//定義初始化結(jié)構(gòu)體
  9.         TIM_OCInitTypeDef  TIM_OCInitStructure;//定義結(jié)構(gòu)體
  10.         
  11.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //使能定時(shí)器3時(shí)鐘        
  12.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC  | RCC_APB2Periph_AFIO, ENABLE);//使能GPIO外設(shè)和AFIO復(fù)用功能模塊時(shí)鐘
  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;  //復(fù)用推挽功能
  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; //自動(dòng)重裝載寄存器的值
  25.         TIM_TimeBaseStructure.TIM_Prescaler =psc; //TIMX預(yù)分頻的值
  26.         TIM_TimeBaseStructure.TIM_ClockDivision = 0; //時(shí)鐘分割
  27.         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //向上計(jì)數(shù)
  28.         
  29.         TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根據(jù)以上功能對(duì)定時(shí)器進(jìn)行初始化
  30.         
  31.         
  32.         TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;//選擇定時(shí)器模式,TIM脈沖寬度調(diào)制模式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.         //使能預(yù)裝載寄存器
  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.         //根據(jù)結(jié)構(gòu)體信息進(jìn)行初始化
  48.         
  49.         TIM_Cmd(TIM3, ENABLE);  //使能定時(shí)器TIM3
  50. }
復(fù)制代碼
  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. //定義結(jié)構(gòu)體變量
  8. PIDTypeDef mypid;

  9. void PID_init()//結(jié)構(gòu)體初始化
  10. {
  11.         //實(shí)際值
  12.         mypid.ActualPitch = 0;
  13.         mypid.ActualRow = 0;
  14.         mypid.ActualYaw = 0;
  15.         
  16.         //設(shè)定值
  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. }
復(fù)制代碼


所有資料51hei提供下載:
比賽程序.rar (295.06 KB, 下載次數(shù): 179)




分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:277190 發(fā)表于 2018-8-20 21:43 | 只看該作者
缺少文件,不能編譯

stm.png (186.5 KB, 下載次數(shù): 74)

錯(cuò)誤

錯(cuò)誤
回復(fù)

使用道具 舉報(bào)

板凳
ID:277190 發(fā)表于 2018-8-20 21:45 | 只看該作者
缺少文件,"no source": Error:  #5: cannot open source input file "..\HARDWARE\SELECT\select.c": No such file or directory
回復(fù)

使用道具 舉報(bào)

地板
ID:252331 發(fā)表于 2019-4-5 12:11 來(lái)自觸屏版 | 只看該作者
厲害。
回復(fù)

使用道具 舉報(bào)

5#
ID:421308 發(fā)表于 2019-7-23 09:41 | 只看該作者
編譯不了
回復(fù)

使用道具 舉報(bào)

6#
ID:496604 發(fā)表于 2019-7-24 22:17 | 只看該作者
參考一下就行了,不支持拿來(lái)主義
回復(fù)

使用道具 舉報(bào)

7#
ID:587843 發(fā)表于 2019-8-2 16:18 | 只看該作者
堂堂 發(fā)表于 2019-7-24 22:17
參考一下就行了,不支持拿來(lái)主義

參考也沒(méi)法啊
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表