STM32f1与MATLAB通过串口MDA进行数据传输并在MATLAB中进行ADC采集数据进行温度曲线的显示。

    最近进行课程设计,老师要求通过PID调节来控制温箱的温度,并且在组态软件上显示曲线来计

   最近进行自控课程设计,老师要求使用STM32系列的芯片通过ADC采集温度传感器的电压,通过pwm控制,在PID算法的加持下对温箱进行数学模型的测试及PID调节。

    原本计划使用之前学长的程序加上自己的pid程序进行调节,奈何学长配套的板子全部坏掉,无奈只能使用自己的STM32F103板子进行测试,但是发现自己移植了学长的modbus ascll通信协议之后并不能和组态软件通信,自学也无果,没有曲线的显示,课设基本就宣告失败,突然想到在之前老师讲过使用MATLAB可以和串口通信,于是想到用MATLAB和单片机相连,进行数据传输并作出曲线图;

     数据的传输使用单片机的DMA传输;

废话不说,上图:

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一起交流共同进步,有不足之处请不吝赐教;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值