1.概述 这是一个基于STM32G031G8U6单片机开发的,用于控制带正交反馈编码器的直流有刷电机的控制板; 控制板外部接口是RS485,基于modbus通信协议,通过485通信接口接收外部控制指令,反馈当前位置、电流等数据; 当前工程是stm32cubeide,硬件配置代码由stm32cubeMX生成,如由硬件配置需要更改,提醒我自己在软件进行配置; 请在CODE BEGIN之后增加代码,否则会被清除; 可以创建独立的c文件和h文件,使工程看上去更加清楚; 2.外设及功能 IO_1、IO_2引脚,用于控制直流电机正反转,两个引脚都是低电平电机停止,两个引脚一高一低电机实现正转或者反转; huart2串行接口,用于RS485的通信,计划使用串口中断接收和串口DMA发送; 工程提供了modbus库文件,提供了10个寄存器供使用; DIR引脚使RS485通信方向控制引脚,芯片是SP485EEN,请帮我增加控制RS485通信的方向控制功能; LED引脚是控制板状态指示灯,用于只是运行状态,不停闪烁,电机正转的时候灯亮的时间较长,电机反转的时候灯灭的时间较长; IIM2是编码器接口,用于读取当前电机运行到的位置; ADC1_IN5是模拟量采集,准备使用模拟量中断采集的方式,读取模拟电压值,模拟电压对应的是电流通过0.1R的电阻,产生的电压,放大10倍,采集到的电压值,帮我转换成电流; TIM3_CH1是pwm输出,周期已经调好了,只需要通过设置占空比来实现对电机最大电流的控制,100%占空比对应最大电流2A; 3.需要实现的逻辑功能 上电后,电机停止,开启编码器读取,开启ADC采集,开启PWM输出 寄存器的初始默认值都是0; holdingRegisters[0]:对应IO_1的状态,0或者1 holdingRegisters[1]:对应IO_2的状态,0或者1 holdingRegisters[2]:对应编码器的数值,int16_t类型 holdingRegisters[3]:对应电机的限制电流的pwm的占空比,数值范围1-99,超出数值范围默认输出99%占空比的脉冲 holdingRegisters[4]:对应ADC采集的电机电流,数值范围0-2000,单位mA holdingRegisters[5]:数值发生变化时,设置当前的tim2的计数数值为0,相当于设置当前位置为0位 帮我在app中增加一个功能,当holdingRegisters[6]=1的时候,电机自动运行到编码器的值为holdingRegisters[7]的位置,当 holdingRegisters[6]=0的时候,该功能无效,电机还是根据holdingRegisters[0]、holdingRegisters[1]的状态控制电机 holdingRegisters[9]:自动定位容许阈值,当前位置与目标位置的偏差绝对值小于等于该值时电机停止;默认0表示无容许偏差