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.
31 lines
2.7 KiB
31 lines
2.7 KiB
|
1 week ago
|
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表示无容许偏差
|