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

標題: 基于STC15單片機芯片的直流電機PID控制轉速源碼 [打印本頁]

作者: LanSeXinQing    時間: 2018-6-3 20:46
標題: 基于STC15單片機芯片的直流電機PID控制轉速源碼
STC15W4K56S4單片機PID控制直流電機轉速

下面是制作出來的實物圖:


單片機源程序如下:
  1. #include "STC15W4K56S2.h"
  2. #include "Counter1.h"
  3. #include "USART.h"
  4. #include "TIMER.h"
  5. #include "PWM_CONTR.h"
  6. #define u8 unsigned char
  7. #define u16 unsigned int

  8. u16 Speed_Temp=0;
  9. sbit Led=P5^5;
  10. struct _Pid{
  11.          u8 SetSpeed;                  //設置值
  12.         u8 ActualSpeed;         //實際值
  13.         int err;
  14.         int err_next;
  15.         int err_last;
  16.         float Kp,Kd,Ki;
  17. }pid;

  18. void Seial_Creat(void);
  19. void Timer_Creat(void);
  20. void PID_Init(void);
  21. u8 PID_Motor(u8 speed, u8 Aurespeed);

  22. void main()
  23. {
  24.         Counter1_config();        
  25.         Seial_Creat();               
  26.         Timer_Creat();
  27.         pwm_Init();
  28.         PID_Init();
  29.         Led=1;
  30.         EA=1;
  31.         while(1);
  32. }
  33. void Seial_Creat(void)
  34. {
  35.           COMx_InitDefine myComx_initdefine;
  36.          myComx_initdefine.UART_Mode=UART_8bit_BRTx;        
  37.          myComx_initdefine.UART_BRT_Use=BRT_Timer2;               
  38.          myComx_initdefine.UART_BaudRate=9600;                        
  39.          myComx_initdefine.Morecommunicate=DISABLE;               
  40.          myComx_initdefine.UART_RxEnable=ENABLE;               
  41.          myComx_initdefine.BaudRateDouble=DISABLE;               
  42.          myComx_initdefine.UART_Interrupt=DISABLE;               
  43.          myComx_initdefine.UART_P_SW=UART1_SW_P30_P31;        
  44.          myComx_initdefine.UART_RXD_TXD_Short=DISABLE;
  45.          USART_Configuration(USART1, &myComx_initdefine);
  46. }
  47. void Timer_Creat(void)
  48. {
  49.         TIM_InitTypeDef myTim_inittypedef;

  50.         myTim_inittypedef.TIM_Mode=TIM_16BitAutoReload;         
  51.         myTim_inittypedef.TIM_Polity=0;                                                
  52.         myTim_inittypedef.TIM_Interrupt=ENABLE;                                
  53.         myTim_inittypedef.TIM_ClkSource=TIM_CLOCK_12T;               
  54.         myTim_inittypedef.TIM_ClkOut=DISABLE;                                 
  55.         myTim_inittypedef.TIM_Value=63900;                                       
  56.         myTim_inittypedef.TIM_Run=ENABLE;                                         //TR0=1
  57.         Timer_Inilize(Timer0,&myTim_inittypedef);
  58. }
  59. /********************* Timer0中斷函數************************/
  60. void timer0_int (void) interrupt TIMER0_VECTOR
  61. {
  62.         static u8 Count1=0;
  63.         static u8 Count2=0;
  64.         u8 Speed_pwm;
  65.         if(Count1==10)
  66.         {
  67.                 TR1=0;
  68.                 Count1=0;
  69.                 Speed_Temp+=TL1;
  70.                 Count2++;
  71.                 if(Count2==4)
  72.                 {
  73.                          Speed_Temp>>=2;
  74.                         Speed_Temp=(Speed_Temp*50)/40;
  75.                         Speed_pwm=PID_Motor(20, Speed_Temp);
  76.                         pwm_Change(Speed_pwm, 0x80);
  77.                         //pwm_Change(0x80, 0x80);
  78.                         Send1_onedata(0xaa);        //發個字節標志位
  79.                         Send1_onedata((u8)Speed_Temp);
  80.                         Send1_onedata(Speed_pwm);
  81.                         Speed_Temp=0;
  82.                         Count2=0;
  83.                 }
  84.                 Led=~Led;
  85.                 TH1=0;
  86.                 TL1=0;
  87.                 TR1=1;
  88.         }
  89.         else
  90.         {
  91.                 Count1++;
  92.         }
  93. }
  94. void PID_Init(void)
  95. {
  96.          pid.SetSpeed=0;
  97.         pid.ActualSpeed=0;
  98.         pid.err=0;
  99.         pid.err_next=0;
  100.         pid.err_last=0;
  101.         pid.Kp=2;
  102.         pid.Kd=0.2;
  103.         pid.Ki=4;
  104. }
  105. u8 PID_Motor(u8 speed, u8 Aurespeed)
  106. {
  107.         int incrementspeed;
  108.         static u8 speed_value;
  109.         pid.SetSpeed=speed;
  110.         pid.err=pid.SetSpeed-Aurespeed;        
  111.         incrementspeed=pid.Kp*(pid.err-pid.err_next)+pid.Kd*pid.err+pid.Kd*(pid.err-2*pid.err_next+pid.err_last);
  112.         speed_value+=incrementspeed;
  113.         pid.err_last=pid.err_next;
  114.         pid.err_next=pid.err;
  115.         return (255-speed_value);
  116. }
復制代碼







作者: admin    時間: 2018-6-4 03:23
好東東,如果可以的話,樓主能補全一下頭文件嗎?
作者: 浪里個浪121    時間: 2018-6-16 18:38
666666666 3Q
作者: Coco12138    時間: 2019-8-1 21:02
樓主,我這邊有Pid 控制電機轉速的問題請教,可以加下微信交流嗎?
作者: Elcrace2019    時間: 2019-8-4 23:45
有硬件接線圖沒?
作者: huahuali    時間: 2020-1-21 10:11
謝謝分享
作者: hj08102    時間: 2020-2-28 11:20
謝謝樓主分享,下載學習下,應該有幫助
作者: linnyshow    時間: 2020-4-7 14:43
非常感謝。




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 精品91久久 | av日韩精品 | 色吧综合网 | 在线看片国产精品 | 亚洲天堂色 | 久久国产精品久久久久久 | 中文字幕视频三区 | 亚洲日本三级 | 日韩精品免费 | 日韩成人av在线 | 精品国产精品三级精品av网址 | 91精品国产91久久久久游泳池 | 国产一区二区三区久久久久久久久 | 国产91丝袜在线播放 | 日韩中文一区二区三区 | 韩日精品在线观看 | 国产探花在线精品一区二区 | 亚洲一区在线日韩在线深爱 | 国产美女黄色 | 一区二区不卡 | 91精品国产综合久久久久久首页 | 国产综合精品一区二区三区 | 一区二区三区不卡视频 | 久久免费视频观看 | 国产一区二区三区久久久久久久久 | 在线天堂免费中文字幕视频 | 国产精品一区二区在线免费观看 | 久久成人免费观看 | 欧美激情黄色 | 日韩欧美国产不卡 | 毛片免费在线 | 一区二区三区四区不卡视频 | 精品美女视频在线观看免费软件 | av在线黄 | 日韩中文字幕 | 午夜精品久久久久久 | 一区二区三区免费 | 日韩精品在线播放 | 国产精品视频久久 | 一级黄a| 日韩精品极品视频在线观看免费 |