[STM32MP1] 【STM32MP135F-DK测评】电动汽车交流充电PWM波通讯实现

[复制链接]
1688|0
 楼主| jobszheng 发表于 2024-6-26 15:26 | 显示全部楼层 |阅读模式
本帖最后由 jobszheng 于 2024-1-28 15:34 编辑

【STM32MP135F-DK测评】电动汽车交流充电PWM波通讯实现

我国新能源汽车的保有量不断再创新高。这一数字更是让我们减少化石燃料所带来的碳排放。不需要加油,那肯定就要充电了。充电桩,充电枪很好理解——肯定要与电网,与车相连接嘛!那么小功率慢充(家用)交流充电桩要如何实现车到桩的通讯,并完成充电控制的呢?

我们先简单看一下国标的GB/T 20234系列协议标准描述,如下图所示:

21ic_12.png

从上图的示意图我们可以清晰地看到CP引线连接到充电桩的PWM波发生器,其为电力传输的控制信号线。连接线有了,那它具体是如何控制的呢?我们接着往下看:

21ic_13.png
对于家庭普通随车充,即使用市电,墙插座为取电来源时,一般PWM波的占空比为15%。通过对上表数据的分析,可以计算得出来充电电流约为9A,即充电功能约为1980W。如果使用空调等16A插座,则需要调整PWM占空比为25%,以增加充电功率。

理论学习我们已经完成,动手实践的环节来了。

首先,我们看一下默认镜像系统中是否包含了PWM波驱动。
  1. cd /sys/class/pwm
  2. ls

21ic_17.png
结果有点意外,镜像里面没有PWM驱动的操作文件。这样只能自己编译驱动加载到内核中了。Let‘s Go!

我们需要先修改一下dts,打开文件stm32mp135f-dk.dts(arch/arm/boot/dts/)将其status变更为okay。如下图所示代码:
  1. &timers3 {
  2.     /delete-property/dmas;
  3.     /delete-property/dma-names;
  4.     status = "okay";
  5.     pwm1:pwm {
  6.         pinctrl-0 = <&pwm3_pins_a>;
  7.         pinctrl-1 = <&pwm3_sleep_pins_a>;
  8.         pinctrl-names = "default", "sleep";
  9.         status = "okay";
  10.     };
  11. };


然后,我们通过make menuconfig来查看一下驱动是否正确识别。
21ic_18.png

  1. make arch=ARM stm32mp135f-dk.dtb LOADADDR=0xC2000040
如上图所示,则代码驱动正常识别。因为我们仅仅修改了DTS,没有更新kernel里面的内容,所以我们在本次实验中仅编译dts即可。在shell中输入make命令
将编译完成后的dtb文件上传到开发板上,并重启
  1. scp arch/arm/boot/dts/stm32mp135f-dk.dtb root@192.168.72.1:/boot
  2. reboot
稍等片刻,待机器重启后,我们再次访问 /sys/class/pwm文件夹后,就可以看到有pwmchip0的文件夹了。

21ic_19.png

下面我们就配置一下PWM外设,让其产生我们所需要的占空比吧!
  1. echo 3 > export
  2. echo 200000 > pwm3/period
  3. echo 20000 > pwm3/duty_cycle
  4. echo 1 > pwm3/enable
  5. echo 30000 > pwm3/duty_cycle
  6. echo 50000 > pwm3/duty_cycle
21ic_20.png
我们通过示波器来观察一下STM32MP135输出的波形吧!

21ic_15.png


21ic_14.png

再来一张我的实验现场图:

21ic_16.png

总结

对于(家用)慢充交流桩的控制信号的测试我们就完成到这里了。通过本次测试,也可以明显感受到STM32MP135在充电桩的典型应用上面还是非常轻松即可胜任。将其剩余的算力用于携带多个子桩也更大发挥了其性能优势。

本次原型设计验证了STM32MP135在充电桩上的应用可行性,图形界面实现的可能性与网络负载能力。

待完善的地方也存在,比如GTK图形化编程的深入理解;对数据存储方面的测试;当然,还有其security boot功能。限于时间,又恰逢年底,在试用时间内未能完成。

附1

交流充电桩协议我已经在我的比亚迪便捷充电器上改装完成了!由2000w的充电功率提升到了3000w,减少了近9小时的充电时间。不过,额定10A的充电枪连接线略有发热。

附2

在编译dts文件前,需要安装ST官方的sdk(en.sources-stm32mp1-openstlinux-6.1-yocto-mickledore-mp1-v23.06.21.tar.gz)。安装完成后,仍然要解压linux源代码:
  1. tar xvf linux-6.1.28.tar.xz
之后还需要安装patch
  1. cd linux-6.1.28
  2. for p in `ls -1 ../*.patch`; do patch -p1 < $p; done
再部署一下fragments
  1. make ARCH=arm multi_v7_defconfig "fragment*.config"
  2. for f in `ls -1 ../fragment*.config`; do scripts/kconfig/merge_config.sh -m -r .config $f; done
  3. yes '' | make ARCH=arm oldconfig
特别提醒:在输入上述命令的时候,如果新开terminal的话,不要忘记source一下编译环境哟!













您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:嵌入式技术专家
简介:热爱开源,乐于分享。在嵌入式技术领域里面,主攻通讯协议,Modbus,TCP/IP以及虚拟化和RTOS

31

主题

743

帖子

23

粉丝
快速回复 在线客服 返回列表 返回顶部