STM32
直播中

李颜

7年用户 1391经验值
私信 关注
[问答]

怎样通过PID调节来控制温箱的温度呢

怎样通过PID调节来控制温箱的温度呢?
如何对温箱的数学模型进行测试呢?

回帖(1)

许莹

2021-11-18 11:37:44
  最近进行课程设计,老师要求通过PID调节来控制温箱的温度,并且在组态软件上显示曲线来计
  最近进行自控课程设计,老师要求使用STM32系列的芯片通过ADC采集温度传感器的电压,通过pwm控制,在PID算法的加持下对温箱进行数学模型的测试及PID调节。
  原本计划使用之前学长的程序加上自己的pid程序进行调节,奈何学长配套的板子全部坏掉,无奈只能使用自己的STM32F103板子进行测试,但是发现自己移植了学长的modbus ascll通信协议之后并不能和组态软件通信,自学也无果,没有曲线的显示,课设基本就宣告失败,突然想到在之前老师讲过使用MATLAB可以和串口通信,于是想到用MATLAB和单片机相连,进行数据传输并作出曲线图;
  数据的传输使用单片机的MDA传输;
  废话不说,上图:
  cubemax 的配置:
  时钟配置:
  
  ADC配置:
  
  串口配置:
  
  DMA配置:
  
  
  注意在模式选择上选择循环模式,因为要对数据进行循环传输,在数据宽度上都选择半字,也就是16位;
  时钟频率:
  
  文件的生成:
  
  
  keil里的配置:
  这里就只列出主要的传输程序:
  
  数据传输采用帧头与帧尾,在帧头与帧尾之间放传输的数据目的是为了在MATLAB中进行识别传输,防止数据紊乱;
  MATLAB的程序:
  time=3000; %所需测量时间,只需改这一个参数;单位秒;
  chip = serial(‘COM2’, ‘BaudRate’,115200,。..
  ‘DataBits’, 8, ‘Parity’, ‘none’,‘StopBits’, 1, ‘FlowControl’, ‘none’,‘Terminator’,‘CR/LF’,‘timeout’,time);
  set(chip);
  fopen(chip);
  a=time/5;b=0;c=1;d=1;
  E=1:time/5*2;
  while a》0
  A=fread(chip,4);
  if (A(c,1)==2)&&(A(c+3,1)==255)
  E(1,d)=A(c+1,1);
  E(1,d+1)=A(c+2,1);
  d=d+2;
  end
  A=[];
  a=a-1;
  end
  fclose(chip);
  D=1:time/5;
  m=1;l=1;
  while m《time/5+1
  D(1,m)=(E(l)*255+E(l+1)-993)*100/4096;
  l=l+2;
  m=m+1;
  end
  x=5:5:time;
  y=D(1,x/5);
  plot(x,y)
  axis([0,time,0,150])
  下面是进行3000秒(50分钟)的温度测试,中间有一个小小的误差,可能是传感器问题,欢迎大佬指正,实验图如下:
  
  过几天进行pid测试,下章写关于pid测试的;
  本文主要应用于本人学习记录,同样很开心和广大同学分享;不喜别看,有问题加QQ981526906一起交流共同进步,有不足之处请不吝赐教。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分