久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 13478|回復: 14
打印 上一主題 下一主題
收起左側

STM32直流電機電流、速度雙閉環控制系統源程序

  [復制鏈接]
跳轉到指定樓層
樓主
ID:257716 發表于 2017-12-5 15:10 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
我的課程設計——實現直流電機電流、速度雙閉環控

stm32單片機源程序如下:
  1. #include "stm32f10x.h"
  2. #include "PID_Current.h"
  3. #include "UserConfiguration.h"
  4. //定義一個位置式PID算法
  5. void PID_LocationMode1(PID_LocationMode* PID)
  6. {
  7.         if(PID->kp<0)  PID->kp = -PID->kp;
  8.         if(PID->ki<0)  PID->ki = -PID->ki;
  9.         if(PID->kd<0)  PID->kd = -PID->kd;
  10.         PID->errP   =   PID->errNow;
  11.         PID->errI   +=   PID->errNow;
  12.         if(PID->errILim!=0)
  13.         {
  14.                 if(PID->errI  >   PID->errILim) PID->errI  =  PID->errILim;
  15.                 if(PID->errI   <   -PID->errILim) PID->errI   =  -PID->errILim;
  16.                
  17.         }
  18.         PID->errD  =  PID->errNow   -  PID->errOld;
  19.         PID->errOld  =   PID->errNow;
  20.         PID->out  =   PID->kp*PID->errP +  PID->ki*PID->errI +  PID->kd*PID->kd;
  21.         
  22. }


  23. s32 adc_Tag, adcNow,adcControl;    //設定adc電壓值,通過電流傳感器獲取到adc電壓值,pwm控制
  24. PID_LocationMode PID_Current;   //定義PID算法的結構體
  25. extern u32 adcx;                 //得到adc的值
  26. void UserPIDCurrentControl(s32 adc)  
  27. {
  28.         adc_Tag=adc;          //設定adc電壓值         
  29.         adcNow=adcx;  
  30.         //通過電流傳感器得到adc電壓值
  31.         PID_Current.errNow  = adc_Tag  -  adcNow;   //實際電壓和設定電壓差值
  32.         PID_Current.errILim  =   49999;                 //積分上限
  33.         PID_Current.kp  =  0;                        //寫入比例系數
  34.         PID_Current.ki  =  0.15;                                                                                                                //寫入積分系數
  35.         PID_Current.kd  =  0;                           //寫入微分系數
  36.         
  37.         PID_LocationMode1(&PID_Current);           
  38.         adcControl =  PID_Current.out;             //得到PID的值
  39.         UserMotorSpeedSetOne(adcControl);        //放入PWM,用于收斂速度的控制中
  40. }
復制代碼

主程序:
  1. #include "led.h"
  2. #include "delay.h"
  3. #include "key.h"
  4. #include "sys.h"
  5. #include "usart.h"
  6. #include "timer.h"
  7. #include "UserConfiguration.h"
  8. #include "UserFunction.h"
  9. #include "lcd.h"
  10. #include "exti.h"
  11. #include "adc.h"
  12. #include "PID_Current.h"
  13. //PWM輸出實驗  

  14.         
  15. u32 spd_now=0;
  16. u32 set_spd=3300,set_vol=300,PwmOne_Set;


  17. enum {flag_add,flag_minus,flag}FLAG_SPEED;
  18. enum {flag_zheng,flag_fan,flag_stop}FLAG_DIR;

  19. extern char s;

  20.         u32 adcx;
  21.         float av;
  22. int main(void)
  23. {               
  24. //        u8 i=0,key;
  25.          
  26.         delay_init();                     //延時函數初始化         
  27.         KEY_Init();
  28.         NVIC_Configuration();          //設置NVIC中斷分組2:2位搶占優先級,2位響應優先級
  29.         uart_init(9600);         //串口初始化為9600
  30.          LED_Init();                             //LED端口初始化
  31.          Adc_Init();                                  //ADC初始化            
  32.          TIM1_PWM_Init(4999,71);         
  33.         
  34.         EXTIX_Init();
  35.         LCD_Init();
  36.          
  37.         POINT_COLOR=RED;
  38.         TIM3_Int_Init(9999,719);
  39.                         
  40.         FLAG_DIR=flag_zheng;   //開始是正轉
  41.         FLAG_SPEED=flag;
  42.          while(1)
  43.    {   
  44.                  Motor_A=PWM_A;
  45.         
  46.         
  47.                        
  48.           //  UserPIDCurrentControl(set_vol) ;
  49.                   av=adcx*3.3/4096;
  50.                   LCD_ShowxNum(130,100,spd_now,8,16,0);    //nowspd;時時速度
  51.                   LCD_ShowxNum(130,130,set_spd,8,16,0);    //設定速度
  52.                  
  53.                   LCD_ShowxNum(130,160,3600,8,16,0);    //電機最大速度
  54.                   LCD_ShowxNum(130,190,adcx,8,16,0);           
  55.                   LCD_ShowxNum(130,230,av*1000,8,16,0);
  56.                   LCD_ShowxNum(130,250,PwmOne_Set,8,16,0);
  57.                   LCD_ShowString(50,160,100,12,16,"Max_Speed:");         
  58.                 LCD_ShowString(50,100,100,12,16,"Now_Speed:");
  59.                 LCD_ShowString(50,130,100,12,16,"Set_Speed:");        
  60.                 LCD_ShowString(50,190,100,12,16,"ADC:");        
  61.                  LCD_ShowString(50,230,100,12,16,"Voltage:");        
  62.                  adcx=Get_Adc_Average(ADC_Channel_2,10000);
  63.                  //按鍵設置標量速度
  64.                  
  65.                  if(FLAG_SPEED==flag_add)
  66.                         {
  67.                                 FLAG_SPEED=flag;
  68.                                 set_spd+=10;    //加速
  69.                         }
  70.                         else if(FLAG_SPEED==flag_minus)
  71.                         {
  72.                                 FLAG_SPEED=flag;
  73.                                 set_spd-=10;    //減速
  74.                         }
  75.                         if(set_spd>=3600)
  76.                         {
  77.                                 set_spd=3600;
  78.                         }
  79.                         if(set_spd<=0)
  80.                         {
  81.                                 set_spd=0;
  82.                         }
  83.                         //按鍵設置跟隨電流的大小
  84.                         switch(KEY_Scan(1))
  85.                         {
  86.                                 case KEY0_PRES: set_vol+=10; break;
  87.                                 case KEY1_PRES: set_vol-=10; break;
  88.                                 default: break;
  89.                         }
  90.                         if(set_vol>=1000)
  91.                         {
  92.                                 set_vol=1000;
  93.                         }
  94.                         else if(set_vol<=0)
  95.                         {
  96.                                 set_vol=0;
  97.                         }
  98.                
  99.                         
  100.                         
  101.                
  102.                 // delay_ms(10);

  103.          }

  104. }

復制代碼

所有資料51hei提供下載:
直流電機電流、速度雙閉環控制系統.rar (362.84 KB, 下載次數: 304)


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:324643 發表于 2018-5-8 13:05 | 只看該作者
請問樓主有硬件資料么?
回復

使用道具 舉報

板凳
ID:324643 發表于 2018-5-8 13:06 | 只看該作者
請問樓主有硬件資料么
回復

使用道具 舉報

地板
ID:328112 發表于 2018-5-12 10:58 | 只看該作者
好東西,感謝!
回復

使用道具 舉報

5#
ID:328712 發表于 2018-5-13 10:53 | 只看該作者
一直在找這資料,謝謝了
回復

使用道具 舉報

6#
ID:278417 發表于 2018-7-10 13:02 | 只看該作者
謝謝樓主分享
回復

使用道具 舉報

7#
ID:369656 發表于 2018-7-11 18:14 | 只看該作者
請問樓主使用什么軟件寫的代碼
回復

使用道具 舉報

8#
ID:347110 發表于 2018-7-11 20:54 | 只看該作者
感謝樓主分享
回復

使用道具 舉報

9#
ID:105206 發表于 2019-1-30 18:34 | 只看該作者
謝謝分享,學習了
回復

使用道具 舉報

10#
ID:536282 發表于 2019-5-12 17:23 | 只看該作者
感謝分享!
回復

使用道具 舉報

11#
ID:69260 發表于 2019-11-13 14:28 | 只看該作者
不是說的電流和速度雙閉環嗎,咋變成了電流和位置了
回復

使用道具 舉報

12#
ID:600919 發表于 2019-11-16 09:10 | 只看該作者
請問樓主使用的是無刷直流電機嗎
回復

使用道具 舉報

13#
ID:674455 發表于 2019-12-26 13:01 | 只看該作者
超有用
回復

使用道具 舉報

14#
ID:583110 發表于 2020-11-16 15:32 | 只看該作者
看看有沒有幫助。。。。
回復

使用道具 舉報

15#
ID:228452 發表于 2022-4-5 05:16 | 只看該作者
This is Keil project
can you post schematic for motor board ?
Thank you
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲精品在线免费播放 | 天天综合网永久 | 欧洲尺码日本国产精品 | 91久久精品国产91久久 | 久产久精国产品 | 国产精品一区二区三区四区 | 午夜三级在线观看 | 精品久久久久久亚洲综合网 | 羞羞视频网页 | xxxcom在线观看 | 一区二区精品电影 | 国产h视频 | 国产伦精品一区二区三区高清 | 国产精品视频在线播放 | 国产视频2021 | 久久伊人在 | 国产欧美日韩在线一区 | 嫩草懂你的影院入口 | 久久99精品国产麻豆婷婷 | 亚洲在线中文字幕 | 在线观看特色大片免费网站 | 51ⅴ精品国产91久久久久久 | 最新中文字幕在线 | 欧美区在线 | 九九在线精品视频 | 黄色毛片在线播放 | 成人黄色电影免费 | 色男人天堂av | 久久精品中文 | 久久精品国产一区二区电影 | 日韩精品在线播放 | 狠狠躁躁夜夜躁波多野结依 | 久久精品99国产精品日本 | 日韩综合色 | 成人一区二区三区在线观看 | 国产三级一区二区 | 亚洲区在线 | av一二三区| a级片播放 | 日韩三区在线 | 日韩欧美一区二区三区 |