jiecang 推杆小板代码
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

2.7 KiB

 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表示无容许偏差