L298N H桥驱动电路原理
当驱动电压在7~12V时,可以不外接5V逻辑电平输入,直接由板载稳压给逻辑芯片供电。
如果12~24V时,则必须将5V供电端子拔下,使用外部电源供电。
基于野火的通信协议进行PID参数设置
学习野火的串口控制修改目标值教程。可以让PID参数整定更为方便,为蓝牙控制之类的控制通过打好串口通信协议代码实现的基础(要触类旁通,做到拿到一种新的协议之后能够快速移植并为我所用)
Frame 框架 protocol 协议 assistant 助手
移植时需要先配置好串口,在cubeMX上打开串口中断,并在生成的代码中在和编写串口中断服务函数,将怕protocol.c文件导入到工程中(或者将它们全部打包在同一个.c .h文件里,自己去取消hal的uart注释和添加hal的uart.c文件)
关键函数:
int32_t protocol_init(void); 初始化接收协议(缓冲区初始化)
void protocol_data_recv(uint8_t *data, uint16_t data_len); 在串口中断服务函数中调用(将数据存入缓冲区)
int8_t receiving_process(void); 解析数据帧并传入参数
void set_computer_value(uint8_t cmd, uint8_t ch, void *data, uint8_t num); 向上位机发送数据
receiving_process()和et_computer_value()需要在循环中不断调用来同步上位机和下位机的信息
野火的例程是直接通过操控TIM6的定时器周期(用来控制采样周期),以及经过PID控制器计算后的输出值通过串口发送到上位机通道1来进行PID 的调参试验的。
如果是用来实际操作PID 调参(PID的采样周期设定与传感器性能有关)的话,其实例程中与TIM定时器6相关那些代码都可以不要了。
(以下文件中标记为黑体的文件里的代码通用性是最高的)
所以 “bsp_basic_tim.c .h” 、”stm32f1xx.c” 、“bsp_debug_uart.c .h” “protocol.c .h” “bsp_pid.c .h” 都有需要移植的。
移植过后放在了 “tim.c .h” 、 “bsp_debug.c .h” “protocol.c .h ” “stm32f1xx.h” “bsp_pid.c .h” 这几个文件中
出现问题(无法再上位机查看PID实际值波形)
野火例程中没定义PID_ASSISTANT_EN,我自己在定义了#include "bsp_pid.h"
但即使定义之后,也还是看不见PID实际值波形的变化 (实际值一直是0)
即使直接将例程引脚修改后用正点原子的精英板,仍旧无法正常运行;
(这其实是我在移植野火的代码的时候没有在解析上位机信息的函数那里加上设置目标值的语句)
中断服务函数标志位注意事项
自行编写回调函数,让hal的类似HAL_TIM_IRQHandler()自行调用,就不用再自行清除标志位(由cubeMX生成的类似HAL_TIM_IRQHandler()已经有各种标志位的清除代码)
(下面这个HAL_TIM_IRQHandler外边编写业务代码,自行编写清除接收中断标志位)
非独立IO口注意事项
实测使用cubeMX生成的代码(默认是禁用IS62WV51216(SRAM)的片选的)(还没有禁止IS62WV51216的片选) 就无法正常使用PE0,PE1。
当PE1引脚做成按键的话(一侧下拉,另一侧连设置了上拉模式的PE1), 它会自动还是检测到低电平(可能是设置上拉失败了),导致该按键失效(默认情况下读取到的就是低电平)。)
一般这种都是不需要管得,但因为刚好这几个引脚受到外部SRAM的影响,导致无法正常设置输入上拉(实测输入上拉的电平为1V多一点,正常应该是3V多),但输出还是正常的。
PE1口按键失效原因(GPIO外设冲突)
使用cubeMX来生成的代码,默认就是禁止了外部SRAM(IS62WV51216)这些外设的片选的。如果真的需要自己去设置禁止某外设的片选,那就将相应引脚复用后再输出禁止的电平(stm32一般是高电平禁止片选)
实测即使亲自设置禁止IS62WV51216的片选后,将F1核心板PE1设置为输入上拉后,用万用表测得电平为1V,经与正点原子的技术人员交流后,确认是由于外部SRAM的影响,导致输入无法正常使用(输出正常)。
野火上位机PID调参失败原因
原因是protocol.c的receiving_process()函数中判断是设置目标值的命令后没有对PID结构体中的pid.target_val进行赋值。
增加之后,野火PID调试助手可正常运行,可以通过该上位机直接给运行中的下位机进行实时PID调参,修改目标值,实时查看PID控制器处理过后的实际值的波形。