计算机控制技术实验说明

举报
zhangrelay 发表于 2021/07/15 07:02:10 2021/07/15
【摘要】 编程实验分别仿真和实验台操作两种方式。 实验1 AD转换--输入 AD转换是所有嵌入式系统或机器人获取外部信息的一种重要方式,将温度、角度和位置等转换为对应的数字量,供处理器处理。 原理图: 程序: /*************** ex1 ******************/#include <reg52.h>#define uint unsign...

编程实验分别仿真和实验台操作两种方式。

实验1 AD转换--输入

AD转换是所有嵌入式系统或机器人获取外部信息的一种重要方式,将温度、角度和位置等转换为对应的数字量,供处理器处理。

原理图:


程序:


  
  1. /*************** ex1 ******************/
  2. #include <reg52.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. uchar code LEDData[]=
  6. {
  7. 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f
  8. };
  9. sbit OE = P1^0;
  10. sbit EOC = P1^1;
  11. sbit ST = P1^2;
  12. sbit CLK = P1^3;
  13. void DelayMS(uint ms)
  14. {
  15. uchar i;
  16. while(ms--)
  17. {
  18. for(i=0;i<120;i++);
  19. }
  20. }
  21. void Display_Result(uchar d)
  22. {
  23. P2 = 0xf7;
  24. P0 = LEDData[d%10];
  25. DelayMS(5);
  26. P2 = 0xfb;
  27. P0 = LEDData[d%100/10];
  28. DelayMS(5);
  29. P2 = 0xfd;
  30. P0 = LEDData[d/100];
  31. DelayMS(5);
  32. }
  33. void main()
  34. {
  35. TMOD = 0x02;
  36. TH0 = 0x14;
  37. TL0 = 0x00;
  38. IE = 0x82;
  39. TR0 = 1;
  40. P1 = 0x3f;
  41. while(1)
  42. {
  43. ST = 0;
  44. ST = 1;
  45. ST = 0;
  46. while(EOC == 0);
  47. OE = 1;
  48. Display_Result(P3);
  49. OE = 0;
  50. }
  51. }
  52. void Timer0_INT() interrupt 1
  53. {
  54. CLK = !CLK;
  55. }


实验台,测量电压值并显示:


代码:


  
  1. //模数实验
  2. #include "reg52.h"
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. #define ulong unsigned long
  6. sbit LE1=P3^3;
  7. //定义数值显示
  8. uchar code xianshi[11]={0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xbE,0xE0,0xFE,0xF6,0x00};
  9. sbit ST=P3^0; //起始
  10. sbit OE=P3^1; //使能
  11. sbit EOC=P3^2; //转换完成标志位
  12. sbit ADD_A=P3^5; //输入端口选择A
  13. sbit ADD_B=P3^6; //输入端口选择B
  14. sbit ADD_C=P3^7; //输入端口选择C
  15. uint getdata,average,n,volt,sum; //变量
  16. void delay1_ms(uint time) //延时
  17. {
  18. uint i,j;
  19. for(i=0;i<time;i++)
  20. for(j=0;j<123;j++);
  21. }
  22. void display_num1(uint dat,uchar num1) //显示数值
  23. {
  24. // P2=0x00;
  25. // P0=0x00;
  26. P0=xianshi[dat];
  27. switch(num1)
  28. {
  29. case 1: P2=0x01;break;
  30. case 2: P2=0x02;break;
  31. case 3: P2=0x04;break;
  32. case 4: P2=0x08;break;
  33. case 5: P2=0x10;break;
  34. case 6: P2=0x20;break;
  35. case 7: P2=0x40;break;
  36. case 8: P2=0x80;break;
  37. default: break;
  38. }
  39. delay1_ms(1);
  40. //P0=0x00;
  41. }
  42. //数码管4位显示函数
  43. void display_num4(uint num)
  44. {
  45. uint wan;
  46. uint qian;
  47. uint bai;
  48. uint shi;
  49. uint ge;
  50. P2=0x00;
  51. wan=(num/10000)%10;
  52. if(wan==0) wan=10;
  53. display_num1(wan,5);
  54. qian=(num/1000)%10;
  55. if(wan==10&&qian==0) qian=10;
  56. display_num1(qian,4);
  57. bai=(num/100)%10;
  58. if(wan==10&&qian==10&&bai==0) bai=10;
  59. display_num1(bai,3);
  60. shi=(num/10)%10;
  61. if(wan==10&&qian==10&&bai==10&&shi==0) shi=10;
  62. display_num1(shi,2);
  63. ge=num%10;
  64. display_num1(ge,1);
  65. }
  66. void delay(uint N)
  67. {
  68. while(N--);
  69. }
  70. uint adconvert_date()
  71. {
  72. ST=0;
  73. ST=1;
  74. delay(2);
  75. ST=0;
  76. while(!EOC);
  77. OE=1;
  78. delay(2);
  79. getdata=P1;
  80. delay(2);
  81. OE=0;
  82. return getdata;
  83. }
  84. void main()
  85. {
  86. uint i;
  87. uint n;
  88. uint volt;
  89. ulong sum=0;
  90. uint average;
  91. P2=0x00;
  92. ADD_A=0;
  93. ADD_B=0;
  94. ADD_C=0;
  95. delay(1000);
  96. while(1)
  97. {
  98. ADD_A=0;
  99. ADD_B=0;
  100. ADD_C=0;
  101. ST=0;
  102. P2=0x00;
  103. for(n=0;n<10;n++)
  104. {
  105. volt=adconvert_date(); //测量可变电阻电压
  106. sum += volt; //累加次数50
  107. }
  108. average=sum/10; //取平均值
  109. average=average*19.4; //换算成电压值 19.4=OK
  110. sum=0; //和清零
  111. for(i=0;i<400;i++)
  112. display_num4(average); //显示平均值
  113. }
  114. }

实验2 DA转换--输出

DA转换将控制器结果转为模拟量控制外部设备。最常用的实验是波形仿真。

数字调压:


代码:


  
  1. #include <reg52.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. sbit K1 = P3^0;
  5. sbit K2 = P3^1;
  6. sbit K3 = P3^2;
  7. sbit K4 = P3^3;
  8. sbit K5 = P3^4;
  9. sbit K6 = P3^5;
  10. sbit K7 = P3^6;
  11. sbit K8 = P3^7;
  12. void DelayMS(uint ms)
  13. {
  14. uchar i;
  15. while(ms--)
  16. {
  17. for(i=0;i<120;i++);
  18. }
  19. }
  20. void main()
  21. {
  22. P2 = 0x00;
  23. while(1)
  24. {
  25. if(K1 == 0) P2 = 0;
  26. if(K2 == 0) P2 = 35;
  27. if(K3 == 0) P2 = 70;
  28. if(K4 == 0) P2 = 105;
  29. if(K5 == 0) P2 = 140;
  30. if(K6 == 0) P2 = 175;
  31. if(K7 == 0) P2 = 210;
  32. if(K8 == 0) P2 = 255;
  33. DelayMS(2);
  34. }
  35. }



代码:


  
  1. #include <reg52.h>
  2. #include <absacc.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. #define DAC0832 XBYTE[0xfffe]
  6. char code sin_data[256]={0x80,0x83,0x86,0x89,0x8c,0x8f,0x92,0x95,0x98,0x9c,0x9f,0xa2,0xa5,0xa8,
  7. 0xab,0xae,0xb0,0xb3,0xb6,0xb9,0xbc,0xbf,0xc1,0xc4,0xc7,0xc9,0xcc,0xce,0xd1,0xd3,0xd5,
  8. 0xd8,0xda,0xdc,0xde,0xe0,0xe2,0xe4,0xe6,0xe8,0xea,0xec,0xed,0xef,0xf0,0xf2,0xf3,0xf4,
  9. 0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfc,0xfd,0xfe,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,
  10. 0xff,0xff,0xff,0xff,0xff,0xfe,0xfe,0xfd,0xfc,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,
  11. 0xf3,0xf2,0xf0,0xef,0xed,0xec,0xea,0xe8,0xe6,0xe4,0xe3,0xe1,0xde,0xdc,0xda,0xd8,0xd6,
  12. 0xd3,0xd1,0xce,0xcc,0xc9,0xc7,0xc4,0xc1,0xbf,0xbc,0xb9,0xb6,0xb4,0xb1,0xae,0xab,0xa8,
  13. 0xa5,0xa2,0x9f,0x9c,0x99,0x96,0x92,0x8f,0x8c,0x89,0x86,0x83,0x80,0x7d,0x79,0x76,0x73,
  14. 0x70,0x6d,0x6a,0x67,0x64,0x61,0x5e,0x5b,0x58,0x55,0x52,0x4f,0x4c,0x49,0x46,0x43,0x41,
  15. 0x3e,0x3b,0x39,0x36,0x33,0x31,0x2e,0x2c,0x2a,0x27,0x25,0x23,0x21,0x1f,0x1d,0x1b,0x19,
  16. 0x17,0x15,0x14,0x12,0x10,0xf,0xd,0xc,0xb,0x9,0x8,0x7,0x6,0x5,0x4,0x3,0x3,0x2,0x1,0x1,
  17. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x3,0x3,0x4,0x5,0x6,0x7,0x8,
  18. 0x9,0xa,0xc,0xd,0xe,0x10,0x12,0x13,0x15,0x17,0x18,0x1a,0x1c,0x1e,0x20,0x23,0x25,0x27,
  19. 0x29,0x2c,0x2e,0x30,0x33,0x35,0x38,0x3b,0x3d,0x40,0x43,0x46,0x48,0x4b,0x4e,0x51,0x54,
  20. 0x57,0x5a,0x5d,0x60,0x63,0x66,0x69,0x6c,0x6f,0x73,0x76,0x79,0x7c};//正弦码表,可通过SIN()函数获得
  21. void DelayMS(uint ms)
  22. {
  23. uchar i;
  24. while(ms--)
  25. {
  26. for(i=0;i<120;i++);
  27. }
  28. }
  29. void delay_nus(unsigned int i)
  30. {
  31. unsigned int j;
  32. while(i--)
  33. {
  34. for(j=0;j<127;j++);
  35. }
  36. }
  37. /**********************************************/
  38. void delay(unsigned char i)
  39. {
  40. unsigned char t;
  41. for(t=0;t<i;t++);
  42. }
  43. /**********************************************
  44. 输出数据到端口(注意考虑延时)
  45. **********************************************/
  46. void conversion(unsigned char out_data)
  47. {
  48. DAC0832 =out_data; //输出数据
  49. delay(1);
  50. //delay_nus(10); //延时等待转换
  51. }
  52. /************************************************
  53. 产生正弦波函数
  54. ************************************************/
  55. void sine(void)
  56. {
  57. unsigned char i;
  58. for(i=0;i<255;i++)
  59. {
  60. conversion(sin_data[i]);
  61. }
  62. }
  63. /***********************************************
  64. 产生锯齿波(下降型)
  65. ***********************************************/
  66. void saw(void)
  67. {
  68. unsigned char j;
  69. for(j=0;j<255;j++)
  70. conversion(j);
  71. }
  72. /***********************************************
  73. 产生方波(脉冲)
  74. ***********************************************/
  75. void pulse(void)
  76. {
  77. conversion(0xff);
  78. delay_nus(1000);
  79. conversion(0x00);
  80. delay_nus(1000);
  81. }
  82. /***********************************************
  83. 产生三角波
  84. ***********************************************/
  85. void triangle(void)
  86. {
  87. unsigned char k;
  88. for(k=0;k<255;k++)
  89. conversion(k);
  90. for(;k>0;k--)
  91. conversion(k);
  92. }
  93. void main()
  94. {
  95. while(1)
  96. {
  97. // pulse();
  98. // saw();
  99. // sine();
  100. triangle();
  101. }
  102. }
实验台:



代码:


  
  1. #include"reg52.h"
  2. char code sin_data[256]={0x80,0x83,0x86,0x89,0x8c,0x8f,0x92,0x95,0x98,0x9c,0x9f,0xa2,0xa5,0xa8,
  3. 0xab,0xae,0xb0,0xb3,0xb6,0xb9,0xbc,0xbf,0xc1,0xc4,0xc7,0xc9,0xcc,0xce,0xd1,0xd3,0xd5,
  4. 0xd8,0xda,0xdc,0xde,0xe0,0xe2,0xe4,0xe6,0xe8,0xea,0xec,0xed,0xef,0xf0,0xf2,0xf3,0xf4,
  5. 0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfc,0xfd,0xfe,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,
  6. 0xff,0xff,0xff,0xff,0xff,0xfe,0xfe,0xfd,0xfc,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,
  7. 0xf3,0xf2,0xf0,0xef,0xed,0xec,0xea,0xe8,0xe6,0xe4,0xe3,0xe1,0xde,0xdc,0xda,0xd8,0xd6,
  8. 0xd3,0xd1,0xce,0xcc,0xc9,0xc7,0xc4,0xc1,0xbf,0xbc,0xb9,0xb6,0xb4,0xb1,0xae,0xab,0xa8,
  9. 0xa5,0xa2,0x9f,0x9c,0x99,0x96,0x92,0x8f,0x8c,0x89,0x86,0x83,0x80,0x7d,0x79,0x76,0x73,
  10. 0x70,0x6d,0x6a,0x67,0x64,0x61,0x5e,0x5b,0x58,0x55,0x52,0x4f,0x4c,0x49,0x46,0x43,0x41,
  11. 0x3e,0x3b,0x39,0x36,0x33,0x31,0x2e,0x2c,0x2a,0x27,0x25,0x23,0x21,0x1f,0x1d,0x1b,0x19,
  12. 0x17,0x15,0x14,0x12,0x10,0xf,0xd,0xc,0xb,0x9,0x8,0x7,0x6,0x5,0x4,0x3,0x3,0x2,0x1,0x1,
  13. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x3,0x3,0x4,0x5,0x6,0x7,0x8,
  14. 0x9,0xa,0xc,0xd,0xe,0x10,0x12,0x13,0x15,0x17,0x18,0x1a,0x1c,0x1e,0x20,0x23,0x25,0x27,
  15. 0x29,0x2c,0x2e,0x30,0x33,0x35,0x38,0x3b,0x3d,0x40,0x43,0x46,0x48,0x4b,0x4e,0x51,0x54,
  16. 0x57,0x5a,0x5d,0x60,0x63,0x66,0x69,0x6c,0x6f,0x73,0x76,0x79,0x7c};//正弦码表,可通过SIN()函数获得
  17. void delay_nus(unsigned int i)
  18. {
  19. unsigned int j;
  20. while(i--)
  21. {
  22. for(j=0;j<127;j++);
  23. }
  24. }
  25. /**********************************************/
  26. void delay(unsigned char i)
  27. {
  28. unsigned char t;
  29. for(t=0;t<i;t++);
  30. }
  31. /**********************************************
  32. 输出数据到端口(注意考虑延时)
  33. **********************************************/
  34. void conversion(unsigned char out_data)
  35. {
  36. P0=out_data; //输出数据
  37. delay(5);
  38. //delay_nus(10); //延时等待转换
  39. }
  40. /************************************************
  41. 产生正弦波函数
  42. ************************************************/
  43. void sine(void)
  44. {
  45. unsigned char i;
  46. for(i=0;i<255;i++)
  47. {
  48. conversion(sin_data[i]);
  49. }
  50. }
  51. /***********************************************
  52. 产生锯齿波(下降型)
  53. ***********************************************/
  54. void saw(void)
  55. {
  56. unsigned char j;
  57. for(j=0;j<255;j++)
  58. conversion(j);
  59. }
  60. /***********************************************
  61. 产生方波(脉冲)
  62. ***********************************************/
  63. void pulse(void)
  64. {
  65. conversion(0xff);
  66. delay_nus(1000);
  67. conversion(0x00);
  68. delay_nus(1000);
  69. }
  70. /***********************************************
  71. 产生三角波
  72. ***********************************************/
  73. void triangle(void)
  74. {
  75. unsigned char k;
  76. for(k=0;k<255;k++)
  77. conversion(k);
  78. for(;k>0;k--)
  79. conversion(k);
  80. }
  81. void main()
  82. {
  83. while(1)
  84. {
  85. pulse();
  86. //saw();
  87. //sine();
  88. //triangle();
  89. }
  90. }

实验3 电机实验--控制



实验台:


代码:


  
  1. #include"reg52.h"
  2. #include "math.h"
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. uchar code xianshi[12]={0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xbE,0xE0,0xFE,0xF6,0x9c,0x00};
  6. sbit PWM=P1^7;
  7. sbit key1=P1^0;
  8. sbit key2=P1^1;
  9. sbit key3=P1^2;
  10. uint wide=100;//脉宽计数
  11. uint t1=0; //低电平脉宽
  12. uint t2=0; //一个周期
  13. uint time_low=0;
  14. uint time_high=100;
  15. bit high_flag=0;
  16. bit low_flag=0;
  17. bit state_flag=0;
  18. uint set_count=100;//设定转速值
  19. uint run_count=0;//实际频率的读取
  20. uint stop_count=0; //电机转速存储变量
  21. uint time=0;
  22. int en=0,en_1=0,en_2=0; //定义 三个时刻的误差存储变量
  23. float a0=1.7,a1=0.30,a2 =0.002,un=0; //定义PID计算参公式的参数
  24. void delay1_ms(uint time);
  25. void delay(uint time);
  26. void display_num1(uint dat,uchar num1);
  27. void display_num4(uint num);
  28. void time01_initiat(void);
  29. void key_precess(void);
  30. void pid(void);
  31. void main()
  32. {
  33. time01_initiat(); //初始化定时器0和定时器1
  34. while(1)
  35. {
  36. key_precess(); //键盘扫描函数
  37. }
  38. }
  39. //1ms延时函数
  40. void delay1_ms(uint time)
  41. {
  42. uint i,j;
  43. for(i=0;i<time;i++)
  44. for(j=0;j<123;j++);
  45. }
  46. //指定的位上显示 指定的一位数据
  47. void display_num1(uint dat,uchar num1)
  48. {
  49. P0=xianshi[dat]; //段显
  50. switch(num1)
  51. {
  52. case 1: P2=0x01;break;
  53. case 2: P2=0x02;break;
  54. case 3: P2=0x04;break;
  55. case 4: P2=0x08;break;
  56. default: break;
  57. }
  58. delay1_ms(2);
  59. }
  60. //四位数据显示函数
  61. void display_num4(uint num)
  62. {
  63. uint qian;
  64. uint bai;
  65. uint shi;
  66. uint ge;
  67. qian=num/1000;
  68. if(qian==0)// qian=11;
  69. display_num1(11,4);
  70. bai=num%1000;
  71. bai=bai/100;
  72. if(qian==10&&bai==0) bai=10;
  73. display_num1(bai,3);
  74. shi=num%100;
  75. shi=shi/10;
  76. if(qian==10&&bai==10&&shi==0) shi=10;
  77. display_num1(shi,2);
  78. ge=num%10;
  79. display_num1(ge,1);
  80. }
  81. //四位数据显示函数
  82. void display_num4_1(uint num)
  83. {
  84. uint qian;
  85. uint bai;
  86. uint shi;
  87. uint ge;
  88. display_num1(10,4);
  89. bai=num%1000;
  90. bai=bai/100;
  91. if(qian==10&&bai==0) bai=10;
  92. display_num1(bai,3);
  93. shi=num%100;
  94. shi=shi/10;
  95. if(qian==10&&bai==10&&shi==0) shi=10;
  96. display_num1(shi,2);
  97. ge=num%10;
  98. display_num1(ge,1);
  99. }
  100. void delay(uint time)
  101. {
  102. uint i;
  103. for(i=0;i<time&&key1==1;i++)
  104. display_num4_1(stop_count);
  105. }
  106. void delay1(uint num)
  107. {
  108. uint i;
  109. for(i=0;i<num;i++)
  110. display_num4(set_count);
  111. }
  112. void time01_initiat()
  113. {
  114. TMOD=0X11; //计数器0和定时器1
  115. TL0=0X33;
  116. TH0=0XFE;//计数器0赋初值 0.5ms
  117. TH1=0X4C;
  118. TL1=0X00;//定时器1赋初值 50ms
  119. EA=1;
  120. PT0=1;
  121. ET0=1;
  122. ET1=1;
  123. TR0=0;
  124. TR1=0;
  125. IT0=1;
  126. EX0=0;
  127. }
  128. void key_precess()
  129. {
  130. if(key1==0&&key2==1&&key3==1) //判断系统的运行模式,如果KEY1键 按下
  131. //且state_flag为1则系统处于运行模式,如果state__flag为0则为设置模式
  132. {
  133. while(key1==0);
  134. state_flag=~state_flag;
  135. if(state_flag==1)
  136. {
  137. EX0=1;
  138. TR1=1;
  139. TR0=1;
  140. en =0;
  141. en_1 =0;
  142. en_2 =0;
  143. un =0;
  144. wide=150;
  145. //wide = set_count;
  146. }
  147. }
  148. if(key1==1&&key2==0&&key3==1&&state_flag==0) //KEY2为按键加
  149. {
  150. //while(key2==0);
  151. delay1(20);
  152. set_count+=1;
  153. if(set_count>300) set_count=100;
  154. }
  155. if(key1==1&&key2==1&&key3==0&&state_flag==0) //KEY3为按键减
  156. {
  157. // while(key3==0);
  158. delay1(20);
  159. if(set_count>100) set_count-=1;
  160. if(set_count==100) set_count=300;
  161. }
  162. if(state_flag==0) //如果系统处于设置模式,则关闭定时器中断和外部中断,同时初始化部分变量
  163. {
  164. PWM = 0;
  165. EX0=0;
  166. TR0=0;
  167. TR1=0;
  168. run_count=0;
  169. stop_count=0;
  170. time=0;
  171. t1=0;
  172. t2=0;
  173. display_num4(set_count);
  174. }
  175. if(state_flag==1) //如果系统处于运行模式则显示电机的实际转速值
  176. {
  177. display_num4_1(stop_count);
  178. }
  179. }
  180. void pid(void) //PID 计算输出量
  181. {
  182. en=set_count-stop_count;
  183. un=1.7*en-0.03*en_1+0.002*en_2;//计算输出量
  184. if(un > 400)un = 400;
  185. if(un <-400)un = -400;
  186. en_2=en_1; //更新误差
  187. en_1=en;
  188. wide = wide + un/4; //计算wide,用于调节PWM的占空比,计算周期为100ms
  189. if(wide>900)wide=900; //防止超限,确保计算饿wide值有效
  190. if(wide<10)wide=10;
  191. }
  192. //外部中断0用于电机转速测量
  193. void int0() interrupt 0
  194. {
  195. EX0=0;
  196. run_count++;
  197. EX0=1;
  198. }
  199. //定时器0用于产生PWM ,占空比通过PID计算获得
  200. void time0() interrupt 1
  201. {
  202. TL0=0X9c;
  203. TH0=0XFF;//计数器0赋初值 100us
  204. TR0=0;
  205. if(low_flag==0)t1++;//低电平时间计时
  206. t2++;
  207. if(t2==1000) //用于确定PWM的周期 ,t2乘以定时器的中断周期即为PWM的周期
  208. {
  209. PWM=1;
  210. t2=0;
  211. low_flag=0;
  212. }
  213. if(t1==wide)//wide的值即为低电平的时间
  214. {
  215. PWM=0;
  216. t1=0;
  217. low_flag=1;
  218. }
  219. TR0=1;
  220. }
  221. void time1() interrupt 3
  222. {
  223. TH1=0X3C;
  224. TL1=0XBD; //50ms定时
  225. TR1=0;
  226. time++;
  227. if(time==40) //定时2s到,读取到的值run_count即为电机每秒的转速值
  228. {
  229. stop_count=run_count/2;
  230. time=0;
  231. run_count=0;
  232. pid(); //调用PID算法
  233. }
  234. TR1=1;
  235. }








文章来源: zhangrelay.blog.csdn.net,作者:zhangrelay,版权归原作者所有,如需转载,请联系作者。

原文链接:zhangrelay.blog.csdn.net/article/details/53085968

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。