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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于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. }
復制代碼






評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:1 發表于 2018-6-4 03:23 | 只看該作者
好東東,如果可以的話,樓主能補全一下頭文件嗎?
回復

使用道具 舉報

板凳
ID:122559 發表于 2018-6-16 18:38 | 只看該作者
666666666 3Q
回復

使用道具 舉報

地板
ID:593833 發表于 2019-8-1 21:02 | 只看該作者
樓主,我這邊有Pid 控制電機轉速的問題請教,可以加下微信交流嗎?
回復

使用道具 舉報

5#
ID:594378 發表于 2019-8-4 23:45 | 只看該作者
有硬件接線圖沒?
回復

使用道具 舉報

6#
ID:687671 發表于 2020-1-21 10:11 | 只看該作者
謝謝分享
回復

使用道具 舉報

7#
ID:693716 發表于 2020-2-28 11:20 來自手機 | 只看該作者
謝謝樓主分享,下載學習下,應該有幫助
回復

使用道具 舉報

8#
ID:110278 發表于 2020-4-7 14:43 | 只看該作者
非常感謝。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久久久国产精品 | 超碰人人插| 国产精品久久久久久中文字 | 日韩有码在线播放 | 久久婷婷av | 一呦二呦三呦国产精品 | 欧美日韩1区 | caoporn免费在线视频 | 国产sm主人调教女m视频 | 日韩精品激情 | 国产精品乱码一区二区三区 | 欧美在线视频一区二区 | 亚洲一区二区三区免费在线 | 91精品国产综合久久久久久蜜臀 | 91在线精品视频 | 四虎永久免费影院 | 亚洲精品99999| 成人影院网站ww555久久精品 | 国产精品视屏 | 午夜一区 | 中文字幕成人av | 欧美xxxⅹ性欧美大片 | 亚洲第1页 | 欧美精品一二三区 | 免费在线成人网 | 国产精品伦理一区 | 天堂久| 国产一区二区三区在线 | 亚洲综合电影 | 青草青草久热精品视频在线观看 | www.亚洲一区二区 | 自拍亚洲 | 亚洲三区视频 | 成人高清在线 | 亚洲精品视频在线看 | 成人看片在线观看 | 久久久久国产精品一区 | 在线免费激情视频 | 天天操操操操操 | 国产精品美女久久久久久免费 | 久久久久久久久久影视 |